public CassettesUpdateSerevice(CassettesFogsLoadService cassettesFogsLoadService, CassettesConfig config)
        {
            _cassettesFogsLoadService = cassettesFogsLoadService;
            string databaseConnectionString = config.Database?.ConnectionString;

            putlogFileName = databaseConnectionString?.Substring(databaseConnectionString.IndexOf(':') + 1) + "logfile_put.txt";
        }
Exemple #2
0
        public CassettesFogsLoadService(CassettesConfig xconfig)
        {
            // Кассеты перечислены через элементы LoadCassette. Имена кассе в файловой системе должны сравниваться по lower case
            cassettes = xconfig?.LoadCassettes
                        .Select(lc =>
            {
                if (string.IsNullOrWhiteSpace(lc.Name))
                {
                    lc.Name = lc.Path.Split('/', '\\').Last();
                }
                return(lc);
            })
                        .ToArray();

            // Формирую список фог-документов
            var fogsList = new List <FogInfo>();

            // Прямое попадание в список фогов из строчек конфигуратора
            xconfig.LoadFog?.Select(lf =>
            {
                lf.Writable &= lf.Prefix != null && lf.Counter >= 0;

                return(lf);
            });
            // Сбор фогов из кассет
            foreach (var cass in cassettes)
            {
                // В каждой кассете есть фог-элемент meta/имякассеты_current.fog, в нем есть владелец и может быть запрет на запись в виде
                // отсутствия атрибутов prefix или counter. Также там есть uri кассеты, надо проверить.
                string pth  = cass.Path + "/meta/" + cass.Name + "_current.fog";
                var    atts = ReadFogAttributes(pth);
                // запишем владельца, уточним признак записи
                cass.Owner = atts.owner;
                if (atts.prefix == null || atts.counter == null)
                {
                    cass.Writable = false;
                }
                fogsList.Add(new FogInfo()
                {
                    //cassette = cass,
                    Pth      = pth,
                    Fogx     = null,
                    Owner    = atts.owner,
                    Writable = true //cass.writable,
                                    //prefix = atts.prefix,
                                    //counter = atts.counter
                });
                // А еще в кассете могут быть другие фог-документы. Они размещаются в originals
                IEnumerable <FileInfo> fgs = (new DirectoryInfo(cass.Path + "/originals"))
                                             .GetDirectories().SelectMany(di => di.GetFiles("*.fog"));
                // Быстро проглядим документы и поместим информацию в список фогов
                foreach (FileInfo fi in fgs)
                {
                    var attts = ReadFogAttributes(fi.FullName);

                    // запишем владельца, уточним признак записи
                    cass.Owner = attts.owner;
                    fogsList.Add(new FogInfo()
                    {
                        //cassette = cass,
                        Pth   = fi.FullName,
                        Fogx  = null,
                        Owner = attts.owner,
                        //writable = cass.writable,
                        //prefix = attts.prefix,
                        //counter = attts.counter
                        Writable = cass.Writable && attts.prefix != null && attts.counter != null
                    });;
                }
            }
            // На выходе я определил, что будет массив
            Fogs     = fogsList.ToArray();
            fogsList = null;
        }