static private void scanRemoteFolder(OneDriveClient odc, Item dirItem, string relRemoteFolder) { FileHistory fh; if (!testFilePattern(relRemoteFolder, false)) { return; } fh = setRemoteFileEntry(relRemoteFolder, dirItem); addLog(!fh.remoteChanged, string.Format("r\tVerzeichnis \"{0}\" ({1}, {2})", relRemoteFolder.Substring(config.Options.RemoteBaseDir.Length - 1), fh.remoteChanged ? "1" : "0", fh.remoteWriteTime.ToString())); IItemChildrenCollectionPage childs = odc.Drive.Items[dirItem.Id].Children.Request().GetAsync().Result; while (true) { foreach (Item remoteItem in childs) { string relFullItemName = relRemoteFolder + remoteItem.Name; if (remoteItem.Folder != null) { relFullItemName += "/"; scanRemoteFolder(odc, remoteItem, relFullItemName); } else if (remoteItem.File != null) { if (!testFilePattern(relFullItemName, false)) { continue; } fh = setRemoteFileEntry(relFullItemName, remoteItem); addLog(!fh.remoteChanged, string.Format("r\tDatei: \"{0}\" ({1}, {2}, {3})", remoteItem.Name, fh.remoteChanged ? "1" : "0", fh.remoteWriteTime.ToString(), fh.remote_cTag)); } else { if (!testFilePattern(relFullItemName, false)) { continue; } bool isOneNote = remoteItem.AdditionalData != null && remoteItem.AdditionalData["package"] != null && remoteItem.AdditionalData["package"] is Newtonsoft.Json.Linq.JObject && ((Newtonsoft.Json.Linq.JObject)remoteItem.AdditionalData["package"]).GetValue("type").ToString() == "oneNote"; addLog(false, "HINWEIS: Datei wird übersprungen: " + relRemoteFolder + remoteItem.Name + (isOneNote ? " (OneNote Datei kann nicht gesichert werden)" : " (Inhaltstyp unbekannt)")); } } if (childs.NextPageRequest != null) { childs = childs.NextPageRequest.GetAsync().Result; continue; } break; } }
private IEnumerable <T> ProcessResult(IItemChildrenCollectionPage oneDriveItems) { List <T> items = new List <T>(oneDriveItems.Count); foreach (var oneDriveItem in oneDriveItems) { T item = (T)CreateItem(oneDriveItem); items.Add(item); } return(items); }
/// <inheritdoc/> public async Task <CloudFolder> GetAppFolderAsync() { ThrowIfNotConnected(); var folder = await GetAppFolderItem().Request().GetAsync(); var folderPath = "/drive/root:/Applications"; if (folder.ParentReference != null) { folderPath = folder.ParentReference.Path; } IItemChildrenCollectionPage listFolder = null; var files = new List <CloudFile>(); do { if (listFolder == null) { listFolder = await _client.Drive.Items[folder.Id].Children.Request().GetAsync(); } else { listFolder = await listFolder.NextPageRequest.GetAsync(); } foreach (var file in listFolder.CurrentPage.Where(entry => entry.File != null)) { files.Add(new CloudFile { Name = file.Name, FullPath = $"{file.ParentReference.Path}/{file.Name}", LastModificationUtcDate = file.LastModifiedDateTime.GetValueOrDefault().DateTime }); } } while (listFolder.NextPageRequest != null); return(new CloudFolder { Name = folder.Name, Size = folder.Size, FullPath = $"{folderPath}/{folder.Name}/", Files = files }); }
/// <summary> /// Filter files /// </summary> /// <param name="itemFiles">Collection of DriveItem</param> /// <returns>A list of DriveItem</returns> private List <Item> QueryFiles(IItemChildrenCollectionPage itemFiles) { var query = from f in itemFiles.CurrentPage where f.File != null select f; return(query.ToList <Item>()); }
/// <summary> /// Filter folder /// </summary> /// <param name="itemFolders">Collection of DriveItem </param> /// <returns>Only the DriveItems folders </returns> private List <Item> QueryFolders(IItemChildrenCollectionPage itemFolders) { var query = from f in itemFolders.CurrentPage where f.Folder != null || f.SpecialFolder != null select f; return(query.ToList <Item>()); }
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); }); } }); }