示例#1
0
        //Long operation
        public static void DeleteSubitems(object parentId, IFolderDao folderDao, IFileDao fileDao)
        {
            var folders = folderDao.GetFolders(parentId);

            foreach (var folder in folders)
            {
                DeleteSubitems(folder.ID, folderDao, fileDao);
                folderDao.DeleteFolder(folder.ID);
            }

            var files = fileDao.GetFiles(parentId, null, FilterType.None, Guid.Empty, string.Empty);

            foreach (var file in files)
            {
                fileDao.DeleteFile(file.ID);
            }
        }
        //Long operation
        public static void DeleteSubitems(object parentId, IFolderDao folderDao, IFileDao fileDao)
        {
            var folders = folderDao.GetFolders(parentId);

            foreach (var folder in folders)
            {
                DeleteSubitems(folder.ID, folderDao, fileDao);

                Global.Logger.InfoFormat("Delete folder {0} in {1}", folder.ID, parentId);
                folderDao.DeleteFolder(folder.ID);
            }

            var files = fileDao.GetFiles(parentId, null, FilterType.None, false, Guid.Empty, string.Empty, true);

            foreach (var file in files)
            {
                Global.Logger.InfoFormat("Delete file {0} in {1}", file.ID, parentId);
                fileDao.DeleteFile(file.ID);
            }
        }
示例#3
0
        public Folder <TTo> PerformCrossDaoFolderCopy <TFrom, TTo>
            (TFrom fromFolderId, IFolderDao <TFrom> fromFolderDao, IFileDao <TFrom> fromFileDao, Func <TFrom, TFrom> fromConverter,
            TTo toRootFolderId, IFolderDao <TTo> toFolderDao, IFileDao <TTo> toFileDao, Func <TTo, TTo> toConverter,
            bool deleteSourceFolder, CancellationToken?cancellationToken)
        {
            var fromFolder = fromFolderDao.GetFolder(fromConverter(fromFolderId));

            var toFolder1 = ServiceProvider.GetService <Folder <TTo> >();

            toFolder1.Title          = fromFolder.Title;
            toFolder1.ParentFolderID = toConverter(toRootFolderId);

            var toFolder   = toFolderDao.GetFolder(fromFolder.Title, toConverter(toRootFolderId));
            var toFolderId = toFolder != null
                                 ? toFolder.ID
                                 : toFolderDao.SaveFolder(toFolder1);

            var       foldersToCopy = fromFolderDao.GetFolders(fromConverter(fromFolderId));
            var       fileIdsToCopy = fromFileDao.GetFiles(fromConverter(fromFolderId));
            Exception copyException = null;

            //Copy files first
            foreach (var fileId in fileIdsToCopy)
            {
                if (cancellationToken.HasValue)
                {
                    cancellationToken.Value.ThrowIfCancellationRequested();
                }
                try
                {
                    PerformCrossDaoFileCopy(fileId, fromFileDao, fromConverter,
                                            toFolderId, toFileDao, toConverter,
                                            deleteSourceFolder);
                }
                catch (Exception ex)
                {
                    copyException = ex;
                }
            }
            foreach (var folder in foldersToCopy)
            {
                if (cancellationToken.HasValue)
                {
                    cancellationToken.Value.ThrowIfCancellationRequested();
                }
                try
                {
                    PerformCrossDaoFolderCopy(folder.ID, fromFolderDao, fromFileDao, fromConverter,
                                              toFolderId, toFolderDao, toFileDao, toConverter,
                                              deleteSourceFolder, cancellationToken);
                }
                catch (Exception ex)
                {
                    copyException = ex;
                }
            }

            if (deleteSourceFolder)
            {
                var securityDao          = ServiceProvider.GetService <SecurityDao <TFrom> >();
                var fromFileShareRecords = securityDao.GetPureShareRecords(fromFolder)
                                           .Where(x => x.EntryType == FileEntryType.Folder);

                if (fromFileShareRecords.Any())
                {
                    fromFileShareRecords.ToList().ForEach(x =>
                    {
                        x.EntryId = toFolderId;
                        securityDao.SetShare(x);
                    });
                }

                var tagDao          = ServiceProvider.GetService <TagDao <TFrom> >();
                var fromFileNewTags = tagDao.GetNewTags(Guid.Empty, fromFolder).ToList();

                if (fromFileNewTags.Any())
                {
                    fromFileNewTags.ForEach(x => x.EntryId = toFolderId);

                    tagDao.SaveTags(fromFileNewTags);
                }

                if (copyException == null)
                {
                    fromFolderDao.DeleteFolder(fromConverter(fromFolderId));
                }
            }

            if (copyException != null)
            {
                throw copyException;
            }

            return(toFolderDao.GetFolder(toConverter(toFolderId)));
        }