private async Task <List <Project> > CheckOtherProjects() { return(await Task.Run(async() => { var projects = new List <Project>(); var dir = new DirectoryInfo(MainVm.ShortcutFolder); foreach (var projDir in dir.EnumerateDirectories()) { if (Project.GetProject(projDir, false) == null) { var proj = Project.GetProject(projDir, true); var itemFiles = await MainVM.GetShortcutFiles(projDir.FullName); proj.Shortcuts = await MainVM.GetShortcutItems(itemFiles); foreach (var i in proj.Shortcuts) { Checks.CheckElement(i); } projects.Add(proj); } } return projects; })); }
private async void UpdateExecute() { try { projectWatcher?.Watcher?.Dispose(); if (inUpdate || !Directory.Exists(ShortcutFolder)) { return; } // projectWatcher = new FileWatcherRx(ShortcutFolder, "", (NotifyFilters) 19, WatcherChangeTypes.All); // projectWatcher.Watcher.IncludeSubdirectories = true; // projectWatcher.Created.ObserveOn(dispatcher).Subscribe(s => OnCreatedProject(s.EventArgs)); // projectWatcher.Deleted.ObserveOn(dispatcher).Subscribe(s => OnDeletedProject(s.EventArgs)); // projectWatcher.Renamed.ObserveOn(dispatcher).Subscribe(s => OnRenamedProject(s.EventArgs)); // projectWatcher.Changed.ObserveOn(dispatcher).Subscribe(s => OnChangedProject(s.EventArgs)); inUpdate = true; var files = new List <FileInfo>(); AllElements.Clear(); AllProjects.Clear(); await ShowProgressDialog(c => { c.SetIndeterminate(); if (ShortcutFolder == null || !Directory.Exists(ShortcutFolder)) { return; } files = GetShortcutFiles(ShortcutFolder).Result; }, "Загрузка элементов...", "", false); if (!files.Any()) { ShowMessage("Не найдены файлы быстрых ссылок (xml)"); return; } foreach (var xmls in files.ChunkBy(50)) { var items = await GetShortcutItems(xmls); foreach (var i in items) { Checks.CheckElement(i); i.Project.Shortcuts.Add(i); AllElements.Add(i); } } var projects = Project.GetProjects(); AllProjects.AddRange(projects); ProjectsVM.UpdateProjects(); } catch (Exception ex) { ShowMessage(ex.ToString()); } finally { inUpdate = false; } }
private async void Update() { // Обновление элементов быстрых ссылок var filesXml = await MainVM.GetShortcutFiles(shortcutsDir); var items = await MainVM.GetShortcutItems(filesXml); foreach (var shortcut in Shortcuts.ToList()) { if (!System.IO.File.Exists(shortcut.XmlFile) && !shortcut.IsDeleted) { shortcut.IsDeleted = true; shortcut.Background = MainVM.eventDeleteBackground; shortcut.Events.Add($"Удалено {DateTime.Now}."); Shortcuts.Remove(shortcut); MainVM.Notify.ShowError($"Удалена быстрая ссылка {shortcut.Name}, {Name}."); } } foreach (var item in items) { Checks.CheckElement(item); var shortcut = Shortcuts.FirstOrDefault(i => i.XmlFile == item.XmlFile); if (shortcut == null) { shortcut = Shortcuts.FirstOrDefault(i => i.Name == item.Name); if (shortcut != null) { // Переименовался файл shortcut.Background = MainVM.eventBackground; var msg = $"Переименован файл xml {shortcut.XmlFileName} -> {item.XmlFileName}."; shortcut.Events.Add($"{msg} {Name}."); MainVM.Notify.ShowWarning($"{msg} {Name}."); continue; } item.Background = MainVM.eventNewBackground; item.Events.Add($"Создан {DateTime.Now}."); MainVM.AllElements.Insert(0, item); MainVM.Notify.ShowSuccess($"Создан элемент {item.ElementName}. {Name}"); item.Project.Shortcuts.Add(item); Shortcuts.Insert(0, item); } else { if (item.Name != shortcut.Name) { // Изменилось ключевое имя быстрой ссылки var msg = $"Переименован ключ быстрой ссылки {shortcut.Name} -> {item.Name}."; shortcut.Events.Add(msg); MainVM.Notify.ShowWarning($"{msg} {Name}."); shortcut.Name = item.Name; } if (item.ElementName != shortcut.ElementName) { // Изменилось имя объекта быстрой ссылки var msg = $"Переименован объект быстрой ссылки {shortcut.ElementName} -> {item.ElementName}."; shortcut.Events.Add(msg); MainVM.Notify.ShowWarning($"{msg} {Name}."); shortcut.ElementName = item.ElementName; } } } }