コード例 #1
0
ファイル: CloudFile.cs プロジェクト: fsps60312/GoogleDrive
        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);
            }
        }
コード例 #2
0
ファイル: CloudFile.cs プロジェクト: fsps60312/GoogleDrive
        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;
             * }
             */
        }