コード例 #1
0
        private ICollection <IFolderContent> GetSubs(IFolderContent folderContent)
        {
            void GetAllSubs(IFolderContent fc, ICollection <IFolderContent> subs)
            {
                subs.Add(fc);
                if (fc.Type != FolderContentType.Folder)
                {
                    return;
                }

                var folder = _folderContentFolderService.GetFolder(fc.Name, fc.Path);

                for (var i = 1; (folder != null && i <= folder.NumOfPhysicalPages); i++)
                {
                    var page = _folderContentPageService.GetPhysicalFolderPage(folder, i);
                    foreach (var content in page.Content)
                    {
                        GetAllSubs(content, subs);
                    }
                }
            }

            var allSubs = new List <IFolderContent>();

            GetAllSubs(folderContent, allSubs);
            return(allSubs);
        }
コード例 #2
0
        public string ImportItem(string eclOrTcmUri, string folderUri, string schemaUri)
        {
            _folderUri = folderUri;
            _schemaUri = schemaUri;
            _username  = ServiceSecurityContext.Current.WindowsIdentity.Name;

            // create new tcm session for current user, so we can create an ecl session to get the ecl item and read its content
            using (Session tcmSession = new Session(_username))
                using (IEclSession eclSession = SessionFactory.CreateEclSession(tcmSession))
                {
                    IEclUri eclUri = eclOrTcmUri.StartsWith("tcm:") ? eclSession.TryGetEclUriFromTcmUri(eclOrTcmUri) : eclSession.HostServices.CreateEclUri(eclOrTcmUri);
                    if (eclUri != null)
                    {
                        using (_eclContentLibraryContext = eclSession.GetContentLibrary(eclUri))
                        {
                            if (eclUri.ItemType == EclItemTypes.Folder)
                            {
                                // loop over all ECL items in this folder
                                IFolderContent items = _eclContentLibraryContext.GetFolderContent(eclUri, 0, EclItemTypes.File);
                                IList <string> ids   = items.ChildItems.Select(item => ImportSingleItem(item.Id)).ToList();
                                return(string.Join(",", ids.ToArray()));
                            }

                            return(ImportSingleItem(eclUri));
                        }
                    }
                }

            throw new FaultException(string.Format("{0} does not exist.", eclOrTcmUri));
        }
コード例 #3
0
        public void RemoveFolderContentFromPage(IFolder folder, IFolderContent folderContentToRemove, int page)
        {
            var possiblePhysicalPage = GetPossiblePhysicalPageFromLogicalPage(folder, page);

            foreach (var physicalPage in possiblePhysicalPage)
            {
                var folderPage = GetPhysicalFolderPage(folder, physicalPage);

                if (folderPage.Content == null)
                {
                    continue;
                }
                if (!folderPage.Content.Any(fc => fc.Name == folderContentToRemove.Name &&
                                            fc.Path == folderContentToRemove.Path &&
                                            fc.Type == folderContentToRemove.Type))
                {
                    continue;
                }

                var contentList = folderPage.Content.ToList();
                contentList.RemoveAll(fc => fc.Name == folderContentToRemove.Name &&
                                      fc.Path == folderContentToRemove.Path &&
                                      fc.Type == folderContentToRemove.Type);

                folderPage.Content = contentList.ToArray();
                _folderContentPageRepository.CreateOrUpdateFolderPage(folder.Name, folder.Path, physicalPage, folderPage);
                break;
            }

            PerformPhysicalPageCompression(folder);
        }
コード例 #4
0
        public void UpdateFolderChildrenPath(IFolderContent folderContent, string newPathPrefix, string oldPathPrefix)
        {
            if (folderContent.Type != FolderContentType.Folder)
            {
                return;
            }
            var folder = _folderContentFolderRepository.GetFolder(folderContent.Name, folderContent.Path);

            if (folder.Path.StartsWith(oldPathPrefix))
            {
                folder.Path = folder.Path.ReplacePrefixInString(oldPathPrefix, newPathPrefix);
            }

            _folderContentFolderRepository.CreateOrUpdateFolder(folder.Name, folder.Path, folder);

            for (var i = 1; i <= folder.NumOfPhysicalPages; i++)
            {
                _folderContentPageService.UpdatePathOnPage(folder, i, oldPathPrefix, newPathPrefix);
                var page = _folderContentPageService.GetPhysicalFolderPage(folder, i);

                foreach (var fc in page.Content)
                {
                    if (fc.Type == FolderContentType.File)
                    {
                        _folderContentFileService.UpdateFilePrefixPath(fc.Name, fc.Path, newPathPrefix, oldPathPrefix);
                    }
                    UpdateFolderChildrenPath(fc, newPathPrefix, oldPathPrefix);
                }
            }
        }
コード例 #5
0
        public void AddToFolderPage(IFolder folder, int pageNum, IFolderContent folderContent)
        {
            var page        = _folderContentPageRepository.GetFolderPage(folder.Name, folder.Path, pageNum);
            var contentList = page.Content.ToList();

            contentList.Add(folderContent);
            page.Content = contentList.ToArray();
            _folderContentPageRepository.CreateOrUpdateFolderPage(folder.Name, folder.Path, pageNum, page);
        }
コード例 #6
0
        private void ValidateFolderNewNameInParentData(IFolderContent folder, string newName)
        {
            var parent  = GetParentFolder(folder);
            var oldName = folder.Name;

            folder.Name = newName;
            _folderContentPageService.ValidateUniquenessOnAllFolderPages(parent, folder);
            folder.Name = oldName;
        }
コード例 #7
0
        private void ValidateFileNameInParentData(IFolderContent file, string newName)
        {
            var parent  = _folderContentFolderService.GetParentFolder(file);
            var oldName = file.Name;

            file.Name = newName;
            _folderContentPageService.ValidateUniquenessOnAllFolderPages(parent, file);
            file.Name = oldName;
        }
コード例 #8
0
        public IFolderPage Map()
        {
            var content = new IFolderContent[Content.Length];

            for (var i = 0; i < Content.Length; i++)
            {
                content[i] = Content[i].Map();
            }
            return(new FolderPage(Name, Path, content));
        }
コード例 #9
0
        private void UpdateNewFolderInParentData(IFolderContent folder)
        {
            var parent = GetParentFolder(folder);

            if (parent == null)
            {
                return;
            }
            UpdateNextPageToWrite(parent);
            _folderContentPageService.AddToFolderPage(parent, parent.NextPhysicalPageToWrite, folder);
        }
コード例 #10
0
        public IFolder GetParentFolder(IFolderContent folder)
        {
            if (folder.Name == _constance.HomeFolderName && folder.Path == _constance.HomeFolderPath)
            {
                return(null);
            }

            var parentName = GetParentName(folder);
            var parentPath = GetParentPath(folder);

            return(_folderContentFolderRepository.GetFolder(parentName, parentPath));
        }
コード例 #11
0
        private string GetParentName(IFolderContent folder)
        {
            var path = folder.Path;

            if (string.IsNullOrEmpty(path))
            {
                return(_constance.HomeFolderName);
            }

            var spittedPathArr = path.Split('/').ToList();

            return(spittedPathArr.Last());
        }
コード例 #12
0
        public void ValidateUniquenessOnAllFolderPages(IFolder folderToValidateIn, IFolderContent folderContentToValidate)
        {
            if (folderToValidateIn == null)
            {
                return;
            }

            for (var i = 1; i <= folderToValidateIn.NumOfPhysicalPages; i++)
            {
                var page = _folderContentPageRepository.GetFolderPage(folderToValidateIn.Name, folderToValidateIn.Path, i);
                if (page.Content.Any(f => f.Name == folderContentToValidate.Name && f.Type == folderContentToValidate.Type))
                {
                    throw new Exception("The name already exists in this folder!");
                }
            }
        }
コード例 #13
0
        private string GetParentPath(IFolderContent folder)
        {
            var path = folder.Path;

            if (string.IsNullOrEmpty(path))
            {
                return(string.Empty);
            }

            var spittedPathArr = path.Split('/').ToList();

            if (spittedPathArr.Count == 1)
            {
                return(string.Empty);
            }

            spittedPathArr.RemoveAt(spittedPathArr.Count - 1);
            return(spittedPathArr.Aggregate((i, j) => i + '/' + j));
        }
コード例 #14
0
        private int CompareFolderContent(IFolderContent folderContent1, IFolderContent folderContent2, SortType sortType)
        {
            switch (sortType)
            {
            case SortType.Name:
                return(string.Compare(folderContent1.Name, folderContent2.Name, StringComparison.Ordinal));

            case SortType.Type:
                return(folderContent1.Type.CompareTo(folderContent2.Type));

            case SortType.DateCreated:
                return(string.Compare(folderContent1.CreationTime, folderContent2.CreationTime, StringComparison.Ordinal));

            case SortType.DateModified:
                return(string.Compare(folderContent1.ModificationTime, folderContent2.ModificationTime, StringComparison.Ordinal));

            default:
                throw new ArgumentOutOfRangeException(nameof(sortType), sortType, null);
            }
        }
コード例 #15
0
 async Task IFolderContent.MoveGfysAsync(IFolderContent folderToMoveTo, IEnumerable <Gfy> gfysToMove, RequestOptions options)
 => await MoveGfysAsync(folderToMoveTo as Folder ?? throw new ArgumentException($"Can't move gfys from a folder into {folderToMoveTo.GetType()}"), gfysToMove, options).ConfigureAwait(false);
コード例 #16
0
 Task IFolderContent.MoveGfysAsync(IFolderContent folderToMoveTo, IEnumerable <Gfy> gfysToMove, RequestOptions options)
 => MoveGfysAsync(folderToMoveTo as BookmarkFolder ?? throw new ArgumentException($"Parent folder isn't a bookmark folder", nameof(folderToMoveTo)), gfysToMove, options);
コード例 #17
0
        public void RenameFolderContentInFolderPages(IFolder folder, string oldName, string newName, IFolderContent renamedObject)
        {
            for (var i = 1; i <= folder.NumOfPhysicalPages; i++)
            {
                var page = GetPhysicalFolderPage(folder, i);
                if (page.Content == null)
                {
                    continue;
                }

                var contentList  = page.Content.ToList();
                var childContent = contentList.FirstOrDefault(fc => fc.Name == oldName &&
                                                              fc.Path == renamedObject.Path &&
                                                              fc.Type == renamedObject.Type);
                if (childContent == null)
                {
                    continue;
                }

                childContent.Name             = newName;
                childContent.ModificationTime = $"{DateTime.Now:G}";
                page.Content = contentList.ToArray();
                _folderContentPageRepository.CreateOrUpdateFolderPage(folder.Name, folder.Path, i, page);
            }
        }
コード例 #18
0
 public FolderPage()
 {
     Type    = FolderContentType.FolderPage;
     Content = new IFolderContent[0];
 }
コード例 #19
0
ファイル: Album.cs プロジェクト: ObsidianMinor/Gfycat.Net
 async Task IFolderContent.MoveGfysAsync(IFolderContent folderToMoveTo, IEnumerable <Gfy> gfysToMove, RequestOptions options)
 => await MoveGfysAsync(folderToMoveTo as Album ?? throw new ArgumentException($"{nameof(folderToMoveTo)} must be an Album"), gfysToMove, options).ConfigureAwait(false);