private void HandleFileChange(FileSystemEventArgs e) { RepositoryItemBase item = null; switch (e.ChangeType) { case WatcherChangeTypes.Changed: WaitforFileIsReadable(e.FullPath); // reLoad the object to mem updating fields item = GetItemFromCacheByFileName(e.FullPath); NewRepositorySerializer.ReloadObjectFromFile(item); //Trigger so source control item can update if needed item.OnPropertyChanged(nameof(RepositoryItemBase.SourceControlStatus)); break; case WatcherChangeTypes.Deleted: //remove from cache and list item = GetItemFromCacheByFileName(e.FullPath); RemoveItemFromLists((RepositoryItemBase)item); break; case WatcherChangeTypes.Created: WaitforFileIsReadable(e.FullPath); // add item to cache and list T newItem = LoadItemfromFile <T>(e.FullPath, Path.GetDirectoryName(e.FullPath)); AddItemtoCache(e.FullPath, newItem); mFolderItemsList.Add(newItem); break; } }
private void UpdateFolderItemsCacheFilePath() { ObservableList <T> cacheItems = new ObservableList <T>(); foreach (T item in mFolderItemsCache.Items <T>()) { cacheItems.Add(item); } foreach (T cacheitem in cacheItems) { RepositoryItemBase item = (RepositoryItemBase)(object)cacheitem; mFolderItemsCache.DeleteItem(item.FilePath); item.FilePath = Path.Combine(FolderFullPath, Path.GetFileName(PathHelper.GetLongPath(((RepositoryItemBase)item).FilePath))); item.ContainingFolder = FolderRelativePath; item.ContainingFolderFullPath = FolderFullPath; mFolderItemsCache[item.FilePath] = item; item.OnPropertyChanged(nameof(RepositoryItemBase.FilePath)); item.OnPropertyChanged(nameof(RepositoryItemBase.ContainingFolder)); item.OnPropertyChanged(nameof(RepositoryItemBase.ContainingFolderFullPath)); item.OnPropertyChanged(nameof(RepositoryItemBase.RelativeFilePath)); } }
/// <summary> /// Save changes of exsiting Repository Item to file system /// </summary> /// <param name="repositoryItem"></param> public void SaveRepositoryItem(RepositoryItemBase repositoryItem) { if (String.IsNullOrEmpty(repositoryItem.ContainingFolder)) { throw new Exception("Cannot save item, there is no containing folder defined - " + repositoryItem.GetType().FullName + ", " + repositoryItem.GetNameForFileName()); } repositoryItem.UpdateBeforeSave(); string txt = RepositorySerializer.SerializeToString(repositoryItem); string filePath = CreateRepositoryItemFileName(repositoryItem); RepositoryFolderBase rf = GetItemRepositoryFolder(repositoryItem); rf.SaveRepositoryItem(filePath, txt); repositoryItem.FileName = filePath; repositoryItem.FilePath = filePath; //RI.isDirty = false; //TODO: make is dirty to work if (repositoryItem.DirtyStatus == Common.Enums.eDirtyStatus.Modified) { repositoryItem.DirtyStatus = Common.Enums.eDirtyStatus.NoChange; } repositoryItem.OnPropertyChanged(nameof(RepositoryItemBase.SourceControlStatus)); }