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); //} }
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); }
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); } }