Esempio n. 1
0
        public void AddFile(string source, string dest, HistoryTypeEnum historyType)
        {
            switch (historyType)
            {
            case HistoryTypeEnum.Added:
            case HistoryTypeEnum.Changed:
            case HistoryTypeEnum.Deleted:
                var relativePath = ExtractRelativePath(HistoryData.TargetPath, dest);
                var hItem        = new HistoryItem()
                {
                    SourcePath = source, TargetPath = relativePath, HistoryType = historyType
                };
                HistoryData.HistoryItemList.Add(hItem);

                break;

            case HistoryTypeEnum.NoChange:

            default:

                break;
            }
        }
        protected override void AddFilesToFolderMenuItem(FolderMenuItem item, string itemPath, BackupSessionHistory history)
        {
            var profile = ProjectData.CurrentBackupProfile;

            if ((profile.BackupType != BackupTypeEnum.Differential) || (RestoreActionType == RestoreActionTypeEnum.LatestVersion))
            {
                var fileList = m_IStorage.GetFiles(itemPath);
                foreach (var file in fileList.Where(f => !IsPathExistsInPathList(f, item.ChildFolderMenuItems)))
                {
                    //var filePath = m_IStorage.Combine(item.Path, file);
                    var            fileName = m_IStorage.GetFileName(file);
                    FileAttributes attr     = File.GetAttributes(file);
                    if (!IsHidden(attr))
                    {
                        bool bSelected = false;
                        var  rp        = m_IStorage.Combine(item.RelativePath, fileName);
                        item.ChildFolderMenuItems.Add(CreateMenuItem(m_IStorage.IsFolder(file), bSelected, file, rp, fileName, item, attr));
                    }
                }
            }
            else
            {
                ////History Items
                if (history != null)
                {
                    foreach (var historyItem in history.HistoryData?.HistoryItemList)
                    {
                        //var filePath = m_IStorage.Combine(item.Path, file);

                        if ((m_IStorage.GetDirectoryName(historyItem.TargetPath) == itemPath) ||
                            (historyItem.HistoryType == HistoryTypeEnum.Deleted && (m_IStorage.GetDirectoryName(historyItem.SourcePath) == itemPath)))
                        {
                            var fileName = m_IStorage.GetFileName(historyItem.TargetPath);
                            {
                                bool bSelected = false;
                                var  rp        = m_IStorage.Combine(item.RelativePath, fileName);

                                var             foundItem   = item.ChildFolderMenuItems.Where(i => i.Name == fileName).FirstOrDefault();
                                var             timeDate    = history?.HistoryData?.TimeStamp;
                                HistoryTypeEnum historyType = historyItem.HistoryType;

                                if (foundItem == null)
                                {
                                    var newItem = CreateMenuItem(historyItem.HistoryItemType == HistoryItemTypeEnum.Directory, bSelected, historyItem.TargetPath, rp, fileName, item, 0, historyType);
                                    Application.Current.Dispatcher.Invoke(new Action(() =>
                                    {
                                        item.ChildFolderMenuItems.Add(newItem);
                                    }));

                                    foundItem = newItem;
                                }

                                var newMenuItem = CreateMenuItem(historyItem.HistoryItemType == HistoryItemTypeEnum.Directory, bSelected, historyItem.TargetPath, rp, timeDate.ToString(), foundItem, 0, historyType);

                                Application.Current.Dispatcher.Invoke(new Action(() =>
                                {
                                    foundItem.ChildFolderMenuItems.Add(newMenuItem);
                                }));
                            }
                        }
                    }
                }

                //Latest items
                if (m_IStorage.DirectoryExists(itemPath))
                {
                    var fileList = m_IStorage.GetFiles(itemPath);
                    foreach (var file in fileList)
                    {
                        //var filePath = m_IStorage.Combine(item.Path, file);
                        var            fileName = m_IStorage.GetFileName(file);
                        FileAttributes attr     = File.GetAttributes(file);
                        if (!IsHidden(attr))
                        {
                            bool bSelected = false;
                            var  rp        = m_IStorage.Combine(item.RelativePath, fileName);

                            var             foundItem    = item.ChildFolderMenuItems.Where(i => i.Name == fileName).FirstOrDefault();
                            bool            bDeletedItem = false;
                            HistoryTypeEnum historyType  = HistoryTypeEnum.NoChange;
                            bool            bCreatedNew  = false;
                            if (foundItem == null)
                            {
                                if (history?.HistoryData?.SessionHistoryIndex > 1)
                                {
                                    bDeletedItem = true;
                                    historyType  = HistoryTypeEnum.Deleted;
                                }

                                var newItem = CreateMenuItem(m_IStorage.IsFolder(file), bSelected, file, rp, fileName, item, attr, historyType);
                                Application.Current.Dispatcher.Invoke(new Action(() =>
                                {
                                    item.ChildFolderMenuItems.Add(newItem);
                                }));

                                foundItem   = newItem;
                                bCreatedNew = true;
                            }

                            if (bCreatedNew || foundItem.ChildFolderMenuItems.Where(i => i.Path == file).FirstOrDefault() == null)
                            {
                                if (bDeletedItem)
                                {
                                    historyType = HistoryTypeEnum.Deleted;
                                }
                                else
                                {
                                    historyType = HistoryTypeEnum.Changed;
                                }

                                var timeDate    = history?.HistoryData?.TimeStamp;
                                var newMenuItem = CreateMenuItem(m_IStorage.IsFolder(file), bSelected, file, rp, timeDate.ToString(), foundItem, attr, historyType);

                                Application.Current.Dispatcher.Invoke(new Action(() =>
                                {
                                    foundItem.ChildFolderMenuItems.Add(newMenuItem);
                                }));
                            }
                        }
                    }
                }
            }
        }