예제 #1
0
        private DirTreeViewItemModel SearchDirParent(Uri dirUri, IEnumerable <DirTreeViewItemModel> items, ref Boolean isSelf)
        {
            if (items == null || !items.Any())
            {
                return(null);
            }
            DirTreeViewItemModel parent = null;

            foreach (var item in items)
            {
                if (!item.IsDir)
                {
                    continue;
                }
                var dirOtherUri = CreateFolderUri(item.DistancePath);
                //- если это мы и есть
                if (dirOtherUri.Equals(dirUri))
                {
                    parent = item;
                    isSelf = true; //- нашли сами себя - ставим флаг, что не надо добавляться
                    break;
                }
                //- часть этого
                if (dirOtherUri.IsBaseOf(dirUri))
                {
                    parent = item;
                    var innerParent = SearchDirParent(dirUri, item.Items, ref isSelf);
                    if (innerParent != null)
                    {
                        parent = innerParent;
                    }
                    break;
                }
            }
            return(parent);
        }
예제 #2
0
        public void AddFile(String fileFrom, String filePath, bool isNew, DirTreeViewItemModelStatus statusFile, String messageView)
        {
            if (statusFile != DirTreeViewItemModelStatus.Error) //? но теперь мы умеем копировать и с ошибками файлы - значит, неверный счетчик будет? подумать
            {
                if (isNew)
                {
                    NewFilesFrom++;
                }
                else
                {
                    ReplaceFilesFrom++;
                }
            }
            //+ dir
            var dirName = Path.GetDirectoryName(filePath);
            var dirItem = new DirTreeViewItemModel()
            {
                SourcePath        = fileFrom,
                DistancePath      = dirName, // важно, у директории тут путь к папке, а не файлу
                Title             = dirName,
                IsDir             = true,
                IsExcludeFromWork = false,
                Status            = DirTreeViewItemModelStatus.Normal, // директории при подготовке всегда без ошибок (мы пока их не пытались создавать и не знаем их фактических ошибок)
                MessageView       = String.Empty,
                IsNew             = false                              // не нагружаем в этот момент - не проверяем наличие директории в дистанции
            };
            //- в своего родителя
            bool isFoundSelf;
            var  dirParent = SearchItemDirParent(dirName, out isFoundSelf);

            if (dirParent == null)
            {
                Items.Add(dirItem);
            }
            else
            {
                if (!isFoundSelf)
                {
                    dirParent.Items.Add(dirItem);
                }
                else
                {
                    dirItem = dirParent;
                }
            }

            //+ file
            var fileName = Path.GetFileName(filePath);
            var fileItem = new DirTreeViewItemModel()
            {
                SourcePath        = fileFrom,
                DistancePath      = filePath,
                Title             = fileName,
                IsDir             = false,
                IsExcludeFromWork = false,
                Status            = statusFile,
                MessageView       = messageView,
                IsNew             = isNew
            };

            dirItem.Items.Add(fileItem);
        }