public async Task <CloudFile> UploadFileAsync(Windows.Storage.StorageFile file) { try { var fileSize = (await file.GetBasicPropertiesAsync()).Size; if (fileSize == 0) { var uploadedFile = await CreateEmptyFileAsync(file.Name); MyLogger.Log($"File upload succeeded!\r\nName: {uploadedFile.Name}\r\nParent: {this.FullName}\r\nID: {uploadedFile.Id}\r\nSize: {fileSize} bytes"); MyLogger.Assert(uploadedFile.Name == file.Name); return(uploadedFile); } MyLogger.Assert(this.IsFolder); var uploader = new Uploaders.FileUploader(this, file, file.Name); indexRetry :; await uploader.StartAsync(); switch (uploader.Status) { case Networker.NetworkStatus.Completed: { MyLogger.Log($"File upload succeeded!\r\nName: {file.Name}\r\nParent: {this.FullName}\r\nID: {uploader.UploadedCloudFile.Id}\r\nSize: {fileSize} bytes"); var ans = new CloudFile(uploader.UploadedCloudFile.Id, file.Name, false, this); return(ans); } case Networker.NetworkStatus.Paused: { MyLogger.Log("Upload paused"); return(null); } default: { if (await MyLogger.Ask("Upload failed, try again?")) { await uploader.StartAsync(); goto indexRetry; } else { MyLogger.Log("Upload canceled"); return(null); } } } } catch (Exception error) { MyLogger.Log(error.ToString()); await MyLogger.Alert(error.ToString()); return(null); } }
public async Task <CloudFile> UploadFolderOnWindowsAsync(Windows.Storage.StorageFolder folder) { MyLogger.Assert(this.IsFolder); if (await this.GetFolderAsync(folder.Name) != null) { if (!await MyLogger.Ask($"Folder, \"{folder.Name}\", already existed in \"{this.FullName}\"!\r\nStill want to upload?")) { return(null); } } var t = new CloudFile.Uploaders.FolderUploader(this, folder); await t.StartAsync(); return(t.UploadedCloudFolder); /*old code * { * MyLogger.Log("Counting total size, files and folders..."); * var statistic = await CountFilesAndFoldersRecursivelyOnWindowsAsync(folder); * MyLogger.Log($"{statistic.Item1} bytes, {statistic.Item2} files, {statistic.Item3} folders to upload"); * CloudFile cloudFolderToUpload; * { * ulong cnt = 0; * MyLogger.SetStatus1("Creating folders"); * MyLogger.SetProgress1(0.0); * var folderCreatedEvent = new FolderCreatedEventHandler((lambda_folder) => * { * cnt++; * double progress = (double)cnt / statistic.Item3; * MyLogger.SetStatus1($"Creating folders...{(progress * 100).ToString("F3")}% ({cnt}/{statistic.Item3})"); * MyLogger.SetProgress1(progress); * }); * FolderCreated += folderCreatedEvent; * try * { * cloudFolderToUpload = await CreateFolderRecursivelyOnWindowsAsync(folder); * } * catch (Exception error) * { * MyLogger.Log($"Error when creating folders:\r\n{error}"); * return null; * } * FolderCreated -= folderCreatedEvent; * } * { * ulong cntWeight = 1024; * var setTotalProgress = new Action<ulong, ulong>((lambda_fileCount, lambda_uploadedSize) => * { * double progress = (double)(lambda_uploadedSize + cntWeight * lambda_fileCount) / (statistic.Item1 + cntWeight * statistic.Item2); * MyLogger.SetStatus1($"Uploading files...{(progress * 100).ToString("F3")}% ({lambda_fileCount}/{statistic.Item2} files) ({lambda_uploadedSize}/{statistic.Item1} bytes)"); * MyLogger.SetProgress1(progress); * }); * ulong fileCount = 0, uploadedSize = 0; * MyLogger.SetStatus1("Uploading files"); * MyLogger.SetProgress1(0.0); * var fileUploadedEvent = new FileUploadedEventHandler((lambda_file, lambda_fileSize) => * { * fileCount++; * uploadedSize += lambda_fileSize; * setTotalProgress(fileCount, uploadedSize); * }); * var fileUploadProgressChangedEvent = new FileUploadProgressChangedEventHandler((lambda_fileName, lambda_bytesSent, lambda_totalLength) => * { * setTotalProgress(fileCount, uploadedSize + (ulong)lambda_bytesSent); * }); * FileUploaded += fileUploadedEvent; * FileUploadProgressChanged += fileUploadProgressChangedEvent; * try * { * await cloudFolderToUpload.UploadFileRecursivelyOnWindowsAsync(folder); * MyLogger.Log($"Folder upload succeeded! {uploadedSize}/{statistic.Item1} bytes, {fileCount}/{statistic.Item2} files, {statistic.Item3} folders"); * } * catch (Exception error) * { * MyLogger.Log($"Error when uploading files:\r\n{error}"); * } * FileUploadProgressChanged -= fileUploadProgressChangedEvent; * FileUploaded -= fileUploadedEvent; * } * return cloudFolderToUpload; * } */ }