private void ClearThumbnailCacheTapped(object sender, TappedRoutedEventArgs e) { ThumbnailDAO.DeletePastPeriodThumbnail(0); ThumbnailRetentionSize = ThumbnailDAO.GetThumbnailRetentionSize(); }
private async void LoadFoldersAsync(StorageItemInfo fi) { var groupName = ResourceLoader.GetForCurrentView().GetString("List/Folder/Text"); var mru = StorageApplicationPermissions.MostRecentlyUsedList; //키에 해당되는 모든 데이터 삭제 var removeList = mru.Entries.Where(x => x.Metadata.StartsWith(LastestMediaServerFolder)).ToArray(); foreach (var entry in removeList) { mru.Remove(entry.Token); } if (fi != null) { var folder = await fi.GetStorageFolderAsync(); if (folder != null && !_FolderStack.Contains(folder)) { _FolderStack.Push(folder); } //탭된 폴더 저장 var fullPath = _FolderStack.Select(x => x.DisplayName).Aggregate((x, y) => y + "/" + x); mru.Add(folder, LastestMediaServerFolder + fullPath); } CurrentFolderInfo = fi; _CurrentSubtitleFileList = null; IsLoadingFolders = true; var isOrderByName = _Sort == SortType.Name || _Sort == SortType.NameDescending; //모든 자식 요소 삭제 StorageItemGroupSource.Clear(); _ThumbnailListInCurrentFolder.Clear(); //기간 지난 썸네일 캐시 삭제 ThumbnailDAO.DeletePastPeriodThumbnail(Settings.Thumbnail.RetentionPeriod); if (fi == null) { await ThreadPool.RunAsync(async handler => { var dlna = KnownFolders.MediaServerDevices; var dlnaFolders = await dlna.GetFoldersAsync(); //DLNA 루트 폴더 로딩 var rootFolderList = dlnaFolders.Select(s => new StorageItemInfo(s) { DateCreated = s.DateCreated, Tapped = FolderTapped, RightTapped = FolderRightTapped, Holding = FolderHolding, IsOrderByName = isOrderByName, SubType = SubType.RootFolder }).TakeWhile(s => { s.SetDisplayName(); return(true); });; await LoadItemsAsync(rootFolderList, rootFolderList.Count(), groupName, false, 2); await DispatcherHelper.RunAsync(() => { //폴더 로딩 표시기 정지 IsLoadingFolders = false; //정렬 옵션 표시 ShowOrderBy = rootFolderList.Count() > 0; }); }); //뒤로버튼 상태 변경 Frame rootFrame = Window.Current.Content as Frame; if (rootFrame != null && !rootFrame.CanGoBack) { SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed; } //위로 버튼 비활성화 VisibleToUpper = false; } else { //위로버튼 활성화 VisibleToUpper = true; await ThreadPool.RunAsync(async handler => { if (Settings.General.UseHardwareBackButtonWithinVideo) { await DispatcherHelper.RunAsync(() => SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible); } var lastStorageFolder = await fi.GetStorageFolderAsync(); if (lastStorageFolder != null) { IReadOnlyList <StorageFolder> folderList = null; try { //부모에 접근 권한이 있는 경우이므로 해당 부모의 자식 폴더 및 파일 로드 folderList = await lastStorageFolder.GetFoldersAsync(); if (folderList.Count > 0) { await LoadItemsAsync(folderList.Select(x => new StorageItemInfo(x) { Tapped = FolderTapped, RightTapped = FolderRightTapped, Holding = FolderHolding, RootPath = fi.RootPath, IsOrderByName = isOrderByName }), folderList.Count, groupName, false, 2); } DispatcherHelper.CheckBeginInvokeOnUI(() => { //파일 리스트업 LoadFilesAsync(fi); }); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("폴더 로드 실패 : " + e.Message); if (e is OperationCanceledException) { //폴더 로딩이 취소됨 System.Diagnostics.Debug.WriteLine(fi.Path + " 폴더내의 자식 폴더 로딩이 취소됨"); } } } else { DispatcherHelper.CheckBeginInvokeOnUI(() => { LoadFoldersAsync(null); }); } }); } }
private async void LoadExtraInfoAsync(PlayListFile playListFile) { //썸네일 및 사이즈 등 추가 데이터 로드 await Task.Factory.StartNew(async() => { var storageItem = await playListFile.GetStorageFileAsync(); if (storageItem != null) { if (playListFile.Name != storageItem.Name) { //이름 변경 playListFile.Name = storageItem.Name; //표시 이름 갱신 playListFile.SetDisplayName(); } playListFile.DateCreated = storageItem.DateCreated; System.Diagnostics.Debug.WriteLine(storageItem.Path); var basicProperties = await storageItem.GetBasicPropertiesAsync(); playListFile.Size = basicProperties.Size; List <Thumbnail> thumbnailList = new List <Thumbnail>(); //기간 지난 썸네일 캐시 삭제 ThumbnailDAO.DeletePastPeriodThumbnail(Settings.Thumbnail.RetentionPeriod); //썸네일 데이터 로드 Thumbnail thumbnail = ThumbnailDAO.GetThumnail(playListFile.ParentFolderPath, playListFile.Name); if (thumbnail != null) { thumbnailList.Add(thumbnail); } //썸네일 로드 LoadThumbnailAsync(playListFile as StorageItemInfo, thumbnailList, Settings.Thumbnail.UseUnsupportedLocalFile); //자막 여부 표시 try { List <string> tmp = new List <string>(); //DB에서 로드된 자막리스트를 다시 추가 if (playListFile.SubtitleList != null) { tmp.AddRange(playListFile.SubtitleList); } if (_SubtitlesList.ContainsKey(playListFile.ParentFolderPath)) { List <string> subtitles = _SubtitlesList[playListFile.ParentFolderPath]; //현재 폴더내에서 검색가능한 경우, 발견된 자막리스트를 추가 if (subtitles != null && subtitles.Count > 0) { tmp.AddRange(subtitles.Where(x => x.ToUpper().Contains(PathHelper.GetFullPathWithoutExtension(playListFile.Path).ToUpper())).ToList()); } } //모든 추가된 자막리스트로 교체 playListFile.SubtitleList = tmp.Distinct().ToList(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } } }); //System.Diagnostics.Debug.WriteLine("재생목록 ExtraInfo 로드완료"); }
private async Task LoadOneDriveFoldersAsync() { if (_CancellationTokenSource != null) { //썸네일 로드 실행전 이전 요청을 취소시킴 _CancellationTokenSource.Cancel(); } if (_CancellationTokenSource == null || _CancellationTokenSource.IsCancellationRequested) { _CancellationTokenSource = new CancellationTokenSource(); } _CurrentSubtitleFileList = null; //모든 자식 요소 삭제 NetworkItemGroupSource.Clear(); //로딩 표시 IsLoadingFolders = true; IsLoadingFiles = true; var folderGroupName = ResourceLoader.GetForCurrentView().GetString("List/Folder/Text"); var fileGroupName = ResourceLoader.GetForCurrentView().GetString("List/File/Text"); var isOrderByName = _Sort == SortType.Name || _Sort == SortType.NameDescending; string path = string.Join("/", pathStack.Select(x => x.Name).Reverse()); //경로를 타이틀 영역에 표시 DisplayCurrentPath = path; await ThreadPool.RunAsync(async handler => { try { IItemChildrenCollectionPage page = null; //var suffixed = MediaFileSuffixes.VIDEO_SUFFIX.Union(MediaFileSuffixes.CLOSED_CAPTION_SUFFIX); //var endswithFilter = string.Join(" or ", suffixed.Select(s => $"endswith(name, '{s}')")); var filterString = "folder ne null or (file ne null and image eq null and audio eq null)"; var sortString = _Sort == SortType.Name ? "name" : _Sort == SortType.NameDescending ? "name desc" : _Sort == SortType.CreatedDate ? "lastModifiedDateTime" : "lastModifiedDateTime desc"; if (pathStack.Any()) { //var itemRequest = OneDriveClient.Drive.Items[networkItem.Id].Children.Request();// new List<Option> { new QueryOption("filter", "folder ne null or video ne null or (file ne null and image eq null and audio eq null)") }); var itemRequest = OneDriveClient.Drive.Root.ItemWithPath(path).Children.Request(); page = await itemRequest.Filter(filterString) .Expand("thumbnails(select=medium)") .OrderBy(sortString) .GetAsync(); } else { var itemRequest = OneDriveClient.Drive.Root.Children.Request();//.Expand("thumbnails,children(expand=thumbnails)"); page = await itemRequest.Filter(filterString) .Expand("thumbnails(select=medium)") .OrderBy(sortString) .GetAsync(); } //상위 버튼 및 하드웨어 백버튼 변경 처리 ChangeToUpperAndBackButton(); _ThumbnailListInCurrentFolder.Clear(); //기간 지난 썸네일 캐시 삭제 ThumbnailDAO.DeletePastPeriodThumbnail(Settings.Thumbnail.RetentionPeriod); //썸네일 캐시 (이미지 바이트 데이터 제외)를 로드 LoadThumbnailMetadataInFolder(page.CurrentPage); var ffList = page.CurrentPage.Select(x => x.ToNetworkItemInfo(NetworkItemTapped, NetworkItemRightTapped, NetworkItemHolding, isOrderByName)); var folderList = ffList.Where(x => !x.IsFile).ToList(); await LoadBatchOneDriveFolderAsync(folderList, folderGroupName); await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(() => IsLoadingFolders = false); var fileList = ffList.Where(x => x.IsFile).ToList(); await LoadBatchOneDriveFilesAsync(fileList, fileGroupName); await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(() => IsLoadingFiles = false); //페이징 처리 await Task.Factory.StartNew(async() => { //폴더 로딩 표시기 시작 await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(() => { IsLoadingFolders = true; IsLoadingFiles = true; }); while (page.NextPageRequest != null) { //다음 페이지 패치 page = await page.NextPageRequest.GetAsync(); //썸네일 캐시 (이미지 바이트 데이터 제외)를 로드 LoadThumbnailMetadataInFolder(page.CurrentPage); ffList = page.CurrentPage.Select(x => x.ToNetworkItemInfo(NetworkItemTapped, NetworkItemRightTapped, NetworkItemHolding, isOrderByName)); folderList = ffList.Where(x => !x.IsFile).ToList(); await LoadBatchOneDriveFolderAsync(folderList, folderGroupName); fileList = ffList.Where(x => x.IsFile).ToList(); await LoadBatchOneDriveFilesAsync(fileList, fileGroupName); } //폴더 로딩 표시기 정지 await GalaSoft.MvvmLight.Threading.DispatcherHelper.RunAsync(() => { IsLoadingFolders = false; IsLoadingFiles = false; }); }); } catch (Exception) { GalaSoft.MvvmLight.Threading.DispatcherHelper.CheckBeginInvokeOnUI(async() => { await DisconnectOneDriveServer(true); }); } }); }