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); } }
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); } }
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); } } } }