Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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));
        }