///<summary> Проверка состояния актуальности альбома. </summary> public void ChkAlbState() { isBroken = false; AlbAbsDir.Refresh(); if (!AlbAbsDir.Exists) { isBroken = true; Console.WriteLine($"Albume {Name} path {AlbAbsDir} not exist !"); } else { try { if (WithSubDir) { if (!AlbAbsDir.EnumerateFiles("*.*", SearchOption.AllDirectories).Any(f => CatalogEngine.vidExt.ContainsIC(f.Extension))) { isBroken = true; Console.WriteLine($"Albume {Name} folder {AlbAbsDir} and subfolders not contain video !"); } } else { if (!AlbAbsDir.EnumerateFiles("*.*", SearchOption.TopDirectoryOnly).Any(f => CatalogEngine.vidExt.ContainsIC(f.Extension))) { isBroken = true; Console.WriteLine($"Albume {Name} folder {AlbAbsDir} not contain video !"); } } } catch (UnauthorizedAccessException) { Console.WriteLine("No access to folder " + AlbAbsDir.FullName); isBroken = true; } } foreach (var ent in EntryList) { ent.ChkEntState(); if (ent.isBroken) { isBroken = true; } } UpdateIconBrokenState(); }
///<summary> Формирование элементов альбома по путям. </summary> public void LoadDir() { AlbAbsDir.Refresh(); if (!AlbAbsDir.Exists) { return; } List <FileInfo> vidList = null; try { if (WithSubDir) { vidList = AlbAbsDir.EnumerateFiles("*.*", SearchOption.AllDirectories).Where(f => CatalogEngine.vidExt.ContainsIC(f.Extension)).ToList(); } else { vidList = AlbAbsDir.EnumerateFiles("*.*", SearchOption.TopDirectoryOnly).Where(f => CatalogEngine.vidExt.ContainsIC(f.Extension)).ToList(); } } catch (UnauthorizedAccessException) { Console.WriteLine("No access to folder " + AlbAbsDir.FullName); return; } // удаляем файлы с пустым расширением, почему то они проходят проверку на расширения vidList.RemoveAll(vid => string.IsNullOrWhiteSpace(vid.Extension)); Parallel.ForEach(vidList, new ParallelOptions { MaxDegreeOfParallelism = CatalogEngine.maxThreads }, file => { // не формируем, если такое было lock (locker) if (EntryList.Any(ent2 => ent2.EntAbsFile.FullName == file.FullName)) { return; } CatalogEntry newEnt = new CatalogEntry(file, this); lock (locker) EntryList.Add(newEnt); } ); // сортируем, т.к. потоки закончились в разнобой EntryList = EntryList.OrderBy(x => x.Name, new AlphanumComparatorFast()).ToList(); }
//--- ///<summary> Получение пути к первой директории или папке альбома (например для перехода в проводнике). </summary> public string GetFirstEntPath() { AlbAbsDir.Refresh(); if (!AlbAbsDir.Exists) { return(null); } var dirs = AlbAbsDir.GetDirectories(); if (dirs.Count() > 0) { return(dirs.FirstOrDefault().FullName); } else { var files = AlbAbsDir.GetFiles(); if (files.Count() > 0) { return(files.FirstOrDefault().FullName); } } return(null); }