///<summary> Открытие папки через путь. Имеет проверку на наличие файла каталога и диалог его открытия. </summary> public void OpenFolder(DirectoryInfo path) { if (!CloseCatalog()) { return; // отменили закрытие } var vidCat = SearchForVidCatFile(path); if (vidCat != null) { var result = MessageBox.Show($"In folder found catalog file <{vidCat.Name}>. Open?", "Open catalog", MessageBoxButton.YesNoCancel, MessageBoxImage.Question); switch (result) { case MessageBoxResult.Yes: CatEng = new CatalogEngine(); CatEng.LoadCatalogXML(vidCat.FullName); break; case MessageBoxResult.No: CatEng = new CatalogEngine(); CatEng.LoadCatalogRoot(path.FullName); break; case MessageBoxResult.Cancel: break; } } else { CatEng = new CatalogEngine(); CatEng.LoadCatalogRoot(path.FullName); } SaveRecent(path.FullName); }
/// <summary> Загрузка каталога из файла сохранения. </summary> public void LoadCatalog(object sender, EventArgs e) { var ofd = new Microsoft.Win32.OpenFileDialog(); //ofd.InitialDirectory = CatEng.CatDir.FullName; ofd.Filter = $"vcat files (*{catFileExt})|*{catFileExt}|All files (*.*)|*.*"; ofd.FilterIndex = 2; ofd.RestoreDirectory = true; if (ofd.ShowDialog() == true) { CatEng = new CatalogEngine(); CatEng.LoadCatalogXML(ofd.FileName); SaveRecent(new FileInfo(ofd.FileName).Directory.FullName); } }
///<summary> Сравнение текущего состояния каталога с каталогом в файле. Выводит диалог при наличии разницы. Возвращает false при отмене действий.</summary> private bool CheckDiff() { if (CatEng == null) { return(true); } if (!CatalogRoot.useCatFile) { return(true); } // сравниваем текщее состояние с файлом каталога var vidCat = SearchForVidCatFile(CatalogRoot.CatDir); if (vidCat == null) { return(true); } var curRootXml = Normalize(CatalogEngine.Serialize_YAX(CatEng.CatRoot)).ToString(); var oldRootXML = Normalize(XDocument.Load(vidCat.FullName).Root).ToString(); bool isDiff = curRootXml != oldRootXML; if (!isDiff) { return(true); // нет отличий } var diffCount = curRootXml.Length - oldRootXML.Length; // спрашиваем про сохранение MessageBoxResult result = MessageBox.Show($"Catalog was changed!\nSave to <{vidCat.Name}>?", $"Diff = {diffCount}", MessageBoxButton.YesNoCancel, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { CatEng.SaveCatalogXML(vidCat.FullName); return(true); } // отменяем действия if (result == MessageBoxResult.Cancel) { return(false); } return(true); // выбрали нет, успешно закрываемся }
/// <summary> Закрытие каталога (с проверкой изменений) и очистка ресурсов. </summary> public bool CloseCatalog() { if (!CheckDiff()) { return(false); // отменили закрытие несохраненного каталога } CatEng?.CatRoot?.StopLoadAlbumesCoversThread(); var albList = CatEng?.CatRoot?.AlbumsList; ForceLinkDestroy(); CatEng?.CatRoot?.AlbumsList?.Clear(); CatEng = null; if (MainPanel != null) { CloseAllTab(); MainPanel = null; } GC_Forcer(); return(true); }
public CatalogManager() { catalogEngine = new CatalogEngine(); updateEngine = new UpdateEngine(); }