예제 #1
0
        private async Task LoadBatchOneDriveFolderAsync(IEnumerable <NetworkItemInfo> folderList, string folderGroupName)
        {
            if ((bool)folderList?.Any())
            {
                //신규 그룹 생성
                NetworkItemGroup group = null;
                group = NetworkItemGroupSource.FirstOrDefault(x => x.Type == StorageItemTypes.Folder);
                if (group == null)
                {
                    group = new NetworkItemGroup(StorageItemTypes.Folder, folderGroupName);
                    await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(() => NetworkItemGroupSource.Insert(0, group));
                }
                foreach (var folderItem in folderList)
                {
                    await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(() => group.Items.Add(folderItem));
                }

                //폴더 썸네일 로드
                LoadOneDriveFoldersThumbnail(folderList, _CancellationTokenSource.Token);
            }
        }
예제 #2
0
        private async Task LoadBatchOneDriveFilesAsync(IEnumerable <NetworkItemInfo> fileList, string fileGroupName)
        {
            if (fileList != null)
            {
                var videoList = fileList.Where(x => MediaFileSuffixes.VIDEO_SUFFIX.Any(y => x.Name.ToUpper().EndsWith(y)));
                //자막 리스트 생성
                _CurrentSubtitleFileList = fileList.Where(x => MediaFileSuffixes.CLOSED_CAPTION_SUFFIX.Any(y => x.Name.ToUpper().EndsWith(y))).Select(x => x.Name).ToList();

                int itemCount      = videoList.Count();
                int itemTotalCount = itemCount;
                await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(() => itemTotalCount += NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.File).SelectMany(x => x.Items).Count());

                NetworkItemGroup group = null;
                var    isOrderByName   = _Sort == SortType.Name || _Sort == SortType.NameDescending;
                var    isMultiGroup    = isOrderByName && itemTotalCount > GROUP_MAX_ITME_COUNT;
                string groupName       = isMultiGroup ? null : fileGroupName;

                foreach (var videoItem in videoList)
                {
                    if (isMultiGroup)
                    {
                        groupName = _CharacterGroupings.Lookup(videoItem.Name);
                        var tmp = NetworkItemGroupSource.FirstOrDefault(x => x.Name == fileGroupName);
                        if (tmp != null)
                        {
                            //페이징으로 인해 파일이 계속적으로 추가되어 그룹이 변경되는 경우에 다시 그룹에 추가
                            await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(() =>
                            {
                                NetworkItemGroupSource.Remove(tmp);
                                var items = tmp.Items;

                                foreach (var old in tmp.Items)
                                {
                                    var tmpGroupName = _CharacterGroupings.Lookup(old.Name);
                                    var tmpGroup     = NetworkItemGroupSource.FirstOrDefault(x => x.Name == tmpGroupName);

                                    if (tmpGroup == null)
                                    {
                                        tmpGroup = new NetworkItemGroup(StorageItemTypes.File, tmpGroupName);
                                        NetworkItemGroupSource.Add(tmpGroup);
                                    }

                                    tmpGroup.Items.Add(old);
                                }
                            });
                        }
                    }
                    //그룹이 변경되는 경우
                    if (group == null || group.Name != groupName)
                    {
                        //신규 그룹 생성
                        await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(() =>
                        {
                            group = NetworkItemGroupSource.FirstOrDefault(x => x.Name == groupName);
                            if (group == null)
                            {
                                group = new NetworkItemGroup(StorageItemTypes.File, groupName);
                                NetworkItemGroupSource.Add(group);
                            }
                        });
                    }

                    await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(() => group.Items.Add(videoItem));
                }

                LoadOneDriveFilesThumbnail(videoList, _CancellationTokenSource.Token);
            }
        }
예제 #3
0
        protected override void OrderByChanged()
        {
            string nonGroupFileName   = ResourceLoader.GetForCurrentView().GetString("List/File/Text");
            string nonGroupFolderName = ResourceLoader.GetForCurrentView().GetString("List/Folder/Text");

            var isOrderByName = _Sort == SortType.Name || _Sort == SortType.NameDescending;
            List <NetworkItemInfo> folderItems = null;
            List <NetworkItemInfo> fileItems   = null;

            switch (_Sort)
            {
            case SortType.Name:
                folderItems = NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.Folder).SelectMany(x => x.Items).OrderBy(x => x.Name).ToList();
                fileItems   = NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.File).SelectMany(x => x.Items).OrderBy(x => x.Name).ToList();
                break;

            case SortType.NameDescending:
                folderItems = NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.Folder).SelectMany(x => x.Items).OrderByDescending(x => x.Name).ToList();
                fileItems   = NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.File).SelectMany(x => x.Items).OrderByDescending(x => x.Name).ToList();
                break;

            case SortType.CreatedDate:
                folderItems = NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.Folder).SelectMany(x => x.Items).OrderBy(x => x.Modified).ToList();
                fileItems   = NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.File).SelectMany(x => x.Items).OrderBy(x => x.Modified).ToList();
                break;

            case SortType.CreatedDateDescending:
                folderItems = NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.Folder).SelectMany(x => x.Items).OrderByDescending(x => x.Modified).ToList();
                fileItems   = NetworkItemGroupSource.Where(x => x.Type == StorageItemTypes.File).SelectMany(x => x.Items).OrderByDescending(x => x.Modified).ToList();
                break;
            }

            //리스트 전체 초기화
            NetworkItemGroupSource.Clear();
            //폴더 재추가
            if (folderItems != null && folderItems.Count > 0)
            {
                NetworkItemGroup folderGroup = new NetworkItemGroup(StorageItemTypes.Folder, nonGroupFolderName);
                NetworkItemGroupSource.Add(folderGroup);

                foreach (var item in folderItems)
                {
                    item.IsOrderByName = isOrderByName;
                    folderGroup.Items.Add(item);
                }
            }
            //파일 재추가
            if (fileItems != null && fileItems.Count > 0)
            {
                NetworkItemGroup fileGroup = null;
                var fileStartIndex         = NetworkItemGroupSource.Any(x => x.Type == StorageItemTypes.Folder) ? 1 : 0;

                if (isOrderByName && fileItems.Count > GROUP_MAX_ITME_COUNT)
                {
                    foreach (var item in fileItems)
                    {
                        var groupName = _CharacterGroupings.Lookup(item.Name);
                        fileGroup = NetworkItemGroupSource.FirstOrDefault(x => x.Name == groupName);

                        if (fileGroup == null)
                        {
                            fileGroup = new NetworkItemGroup(StorageItemTypes.File, groupName);
                            NetworkItemGroupSource.Add(fileGroup);
                        }

                        item.IsOrderByName = isOrderByName;
                        fileGroup.Items.Add(item);
                    }
                }
                else
                {
                    fileGroup = new NetworkItemGroup(StorageItemTypes.File, nonGroupFileName);
                    NetworkItemGroupSource.Add(fileGroup);

                    foreach (var item in fileItems)
                    {
                        item.IsOrderByName = isOrderByName;
                        fileGroup.Items.Add(item);
                    }
                }
            }
        }