コード例 #1
0
        private async Task ProcessAll(Webber.GetDirRet subDirRet)
        {
            if (subDirRet.SubDirectory.Keys.Any(c => c.ToLower().Contains("кварт")))
            {
                subDirRet.MainSaveDirPath = subDirRet.DevSaveDirPath;

                //значит сразу попали и можно обработать
                await ProcessOne(subDirRet);
            }
            //else
            //{
            //начинаем шерстить директории
            var subDirTask = new List <Task>();

            var arr = new ArrayList();

            foreach (var item in subDirRet.SubDirectory)
            {
                arr.Add(item);
            }
            var index = 0;

            while (index < arr.Count)
            {
                var key  = ((KeyValuePair <string, string>)arr[index]).Key;
                var refd = ((KeyValuePair <string, string>)arr[index]).Value;
                index++;
                var res = await _webber.LoadSubRef(refd, key, "\\");

                if (res == null)
                {
                    continue;
                }
                if (res.SubDictionary.Keys.Any(c => c.ToLower().Contains("кварт")))
                {
                    //если есть директория с кварт, то отдаем на обработку, иначе, добавляем в список директорий
                    var newDirRet = new Webber.GetDirRet
                    {
                        MainSaveDirPath  = subDirRet.DevSaveDirPath,
                        DevSaveDirPath   = subDirRet.DevSaveDirPath + "\\" + key,
                        KvartSaveDirPath = subDirRet.KvartSaveDirPath,
                        ObjName          = subDirRet.ObjName + "_" + key,
                        SubDirectory     = res.SubDictionary
                    };
                    subDirTask.Add(ProcessOne(newDirRet));
                }
                else
                {
                    //еще есть каталоги
                    foreach (var dir in res.SubDictionary)
                    {
                        arr.Add(new KeyValuePair <string, string>(dir.Key, dir.Value));
                    }
                }
            }
            await Task.WhenAll(subDirTask);

            //}
        }
コード例 #2
0
        private async Task ProcessOne(Webber.GetDirRet subDirRet)
        {
            var kvartkeys = subDirRet.SubDirectory.Keys.Where(c => c.ToLower().Contains("квартирогр")).ToList();

            if (kvartkeys.Any() && IsKvartDownl)
            {
                //нашли сразу, достаем все файлы, отдаем на обработку квартир
                var refd = subDirRet.SubDirectory[kvartkeys.First()];

                //здесь у нас должна быть ассинхронная загрузка
                var res = await _webber.LoadSubRef(refd, "", "");

                if (res != null && res.SubDictionary.Count == 0)
                {
                    _downloadList.Add(res.SubDictionary.Count == 0
                    ? _webber.DownloadFile(res.Document, subDirRet.KvartSaveDirPath + "\\" + subDirRet.ObjName)
                    : GetAllKvart(res.SubDictionary, subDirRet.KvartSaveDirPath + "\\" + subDirRet.ObjName));
                }
            }

            if (IsAllDownl)
            {
                foreach (var subdir in subDirRet.SubDirectory.Keys)
                {
                    var subdirval = subdir;
                    if (!subdirval.ToLower().Contains("квартирогр"))
                    {
                        subdirval = Regex.Replace(subdirval, "[<>\"*:/?\\|]", "");
                        if (!Directory.Exists(subDirRet.MainSaveDirPath))
                        {
                            Directory.CreateDirectory(subDirRet.MainSaveDirPath);
                        }
                        var tempsavePlan = subDirRet.MainSaveDirPath + "\\" + subdirval;
                        if (!Directory.Exists(tempsavePlan))
                        {
                            Directory.CreateDirectory(tempsavePlan);
                        }
                        var refd = subDirRet.SubDirectory[subdir];
                        var res  = await _webber.LoadSubRef(refd, "", "");

                        if (res != null)
                        {
                            _downloadList.Add(_webber.DownloadFile(res.Document, tempsavePlan));
                            if (res.SubDictionary.Count != 0)
                            {
                                _downloadList.Add(GetAllPlan(res.SubDictionary, tempsavePlan));
                            }
                            //_downloadList.Add(res.SubDictionary.Count == 0
                            //    ? _webber.DownloadFile(res.Document, tempsavePlan)
                            //    : GetAllPlan(res.SubDictionary, tempsavePlan));
                        }
                    }
                }
            }
            else
            {
                var kartkeys =
                    subDirRet.SubDirectory.Keys.Where(
                        c =>
                        c.ToLower().Contains("карта") || c.ToLower().Contains("ген") ||
                        c.ToLower().Contains("место")).ToList();
                if (kartkeys.Any() && IsPlanDownl)
                {
                    //нашли сразу, достаем все файлы
                    if (!Directory.Exists(subDirRet.DevSaveDirPath))
                    {
                        Directory.CreateDirectory(subDirRet.DevSaveDirPath);
                    }
                    var tempsavePlan = subDirRet.DevSaveDirPath + "\\Карта";
                    if (!Directory.Exists(tempsavePlan))
                    {
                        Directory.CreateDirectory(tempsavePlan);
                    }
                    var refd = subDirRet.SubDirectory[kartkeys.First()];
                    var res  = await _webber.LoadSubRef(refd, "", "");

                    if (res != null)
                    {
                        _downloadList.Add(_webber.DownloadFile(res.Document, tempsavePlan));
                        if (res.SubDictionary.Count != 0)
                        {
                            _downloadList.Add(GetAllPlan(res.SubDictionary, tempsavePlan));
                        }

                        //_downloadList.Add(res.SubDictionary.Count == 0
                        //    ? _webber.DownloadFile(res.Document, tempsavePlan)
                        //    : GetAllPlan(res.SubDictionary, tempsavePlan));
                    }
                }
                var plankeys = subDirRet.SubDirectory.Keys.Where(c => c.ToLower().Contains("планиров")).ToList();
                if (plankeys.Any() && IsPlanDownl)
                {
                    //нашли сразу, достаем все файлы
                    if (!Directory.Exists(subDirRet.DevSaveDirPath))
                    {
                        Directory.CreateDirectory(subDirRet.DevSaveDirPath);
                    }
                    var tempsavePlan = subDirRet.DevSaveDirPath + "\\Планировка";
                    if (!Directory.Exists(tempsavePlan))
                    {
                        Directory.CreateDirectory(tempsavePlan);
                    }
                    var refd = subDirRet.SubDirectory[plankeys.First()];
                    var res  = await _webber.LoadSubRef(refd, "", "");

                    if (res != null)
                    {
                        _downloadList.Add(_webber.DownloadFile(res.Document, tempsavePlan));
                        if (res.SubDictionary.Count != 0)
                        {
                            _downloadList.Add(GetAllPlan(res.SubDictionary, tempsavePlan));
                        }

                        //_downloadList.Add(res.SubDictionary.Count == 0
                        //    ? _webber.DownloadFile(res.Document, tempsavePlan)
                        //    : GetAllPlan(res.SubDictionary, tempsavePlan));
                    }
                }
                var fasadkeys = subDirRet.SubDirectory.Keys.Where(c => c.ToLower().Contains("фасад")).ToList();
                if (fasadkeys.Any() && IsFasadDownl)
                {
                    //нашли сразу, достаем все файлы
                    if (!Directory.Exists(subDirRet.DevSaveDirPath))
                    {
                        Directory.CreateDirectory(subDirRet.DevSaveDirPath);
                    }
                    var tempsavePlan = subDirRet.DevSaveDirPath + "\\Фасады_и_виды";
                    if (!Directory.Exists(tempsavePlan))
                    {
                        Directory.CreateDirectory(tempsavePlan);
                    }
                    var refd = subDirRet.SubDirectory[fasadkeys.First()];
                    var res  = await _webber.LoadSubRef(refd, "", "");

                    if (res != null)
                    {
                        _downloadList.Add(_webber.DownloadFile(res.Document, tempsavePlan));
                        if (res.SubDictionary.Count != 0)
                        {
                            _downloadList.Add(GetAllPlan(res.SubDictionary, tempsavePlan));
                        }

                        //_downloadList.Add(res.SubDictionary.Count == 0
                        //    ? _webber.DownloadFile(res.Document, tempsavePlan)
                        //    : GetAllPlan(res.SubDictionary, tempsavePlan));
                    }
                }

                var otdelkakeys = subDirRet.SubDirectory.Keys.Where(c => c.ToLower().Contains("отделка")).ToList();
                if (otdelkakeys.Any() && IsOtdelDownl)
                {
                    //нашли сразу, достаем все файлы
                    if (!Directory.Exists(subDirRet.DevSaveDirPath))
                    {
                        Directory.CreateDirectory(subDirRet.DevSaveDirPath);
                    }
                    var tempsavePlan = subDirRet.DevSaveDirPath + "\\Отделка";
                    if (!Directory.Exists(tempsavePlan))
                    {
                        Directory.CreateDirectory(tempsavePlan);
                    }
                    var refd = subDirRet.SubDirectory[otdelkakeys.First()];
                    var res  = await _webber.LoadSubRef(refd, "", "");

                    if (res != null)
                    {
                        _downloadList.Add(_webber.DownloadFile(res.Document, tempsavePlan));
                        if (res.SubDictionary.Count != 0)
                        {
                            _downloadList.Add(GetAllPlan(res.SubDictionary, tempsavePlan));
                        }

                        //_downloadList.Add(res.SubDictionary.Count == 0
                        //    ? _webber.DownloadFile(res.Document, tempsavePlan)
                        //    : GetAllPlan(res.SubDictionary, tempsavePlan));
                    }
                }
            }
            await Task.WhenAll(_downloadList);
        }
コード例 #3
0
        private async Task LoadAll(IEnumerable <string> sub)
        {
            var fileAcQuery = new List <Task <Webber.SearchRet> >();

            foreach (var subDir1 in sub)
            {
                //в цикле проверим всех застройщиков
                //вот здесь можно применять ассинхронность... наверно
                //надо проверять на недопустимые знаки
                var subDir          = Regex.Replace(subDir1, "[<>\"*:/?\\|]", "");
                var tempsaveDirPath = _saveDirPath + "\\" + subDir;
                if (!Directory.Exists(tempsaveDirPath))
                {
                    Directory.CreateDirectory(tempsaveDirPath); //папка для объекта
                }
                _pathforkvart = tempsaveDirPath + "\\" + "квартирограммы_" + _currentDate;
                if (!Directory.Exists(_pathforkvart))
                {
                    Directory.CreateDirectory(_pathforkvart);
                }
                //получим список объектов
                var dir = subDir;
                fileAcQuery.Add(_webber.WebSearch((string)_objectHash[dir], tempsaveDirPath, _pathforkvart));
            }
            while (fileAcQuery.Count > 0)
            {
                var first = await Task.WhenAny(fileAcQuery);

                fileAcQuery.Remove(first);
                await first;
                var   srh = first.Result;
                //каждую задачу можно отправить на дальнейшую обработку, т.е. надо
                if (srh == null)
                {
                    continue;
                }
                var temp1          = srh.SubDirectory.Keys.Where(c => c.ToLower().Contains("квартирогр"));
                var allProcessTask = new List <Task>();

                if (!temp1.Any())
                {
                    //есть несколько объектов
                    //получим список подпапок для каждого подобъекта
                    var objDir         = srh.SubDirectory;
                    var getSubDirQuery = new List <Task <Webber.GetDirRet> >();

                    foreach (var objName in objDir.Keys)
                    {
                        //теперь надо завести асинхронность для получения папок объекта, прежде чем перейти к ProcessAll, она кстати тоже должна быть ассинхронная
                        var tempsaveDirPath2 = srh.DevSaveDirPath + "\\" + objName;
                        if (IsPlanDownl && !Directory.Exists(tempsaveDirPath2))
                        {
                            Directory.CreateDirectory(tempsaveDirPath2);
                        }
                        var name = objName;
                        getSubDirQuery.Add(_webber.GetSubDir(name, srh));
                    }

                    while (getSubDirQuery.Count > 0)
                    {
                        var firstSubDir = await Task.WhenAny(getSubDirQuery);

                        getSubDirQuery.Remove(firstSubDir);
                        await firstSubDir;
                        var   subDirRet = firstSubDir.Result;
                        if (subDirRet == null)
                        {
                            continue;
                        }
                        //получим список папок объекта, можно начать разбор
                        subDirRet.DevSaveDirPath += "\\" + subDirRet.ObjName;
                        allProcessTask.Add(ProcessAll(subDirRet));
                    }
                }
                else
                {
                    var newSubDirRet = new Webber.GetDirRet
                    {
                        SubDirectory     = srh.SubDirectory,
                        ObjName          = "",
                        DevSaveDirPath   = srh.DevSaveDirPath,
                        KvartSaveDirPath = srh.KvartSaveDirPath
                    };
                    allProcessTask.Add(ProcessOne(newSubDirRet));
                }
                await Task.WhenAll(allProcessTask);
            }
        }