private static async Task UploadFile(FileTransferTask task)
 {
     if (await QiniuService.UploadFile(task))
     {
         RemoveTaskById(task.TaskId);
     }
 }
Ejemplo n.º 2
0
        public static Task <bool> DownloadFile(FileTransferTask task)
        {
            IProgress <double> progress = new Progress <double>(percent =>
            {
                DispatcherHelper.ExecuteOnUIThreadAsync(() =>
                {
                    task.Progress = percent;
                });
            });

#if MOCK
            return(Task.FromResult(true));
#else
            return(Task.Factory.StartNew(async() =>
            {
                var result = DownloadManager.Download(task.FileObject.PublicUrl, progress);
                if (result.Code != 200)
                {
                    return false;
                }

                var folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(AppSettingService.GetSetting()
                                                                                                 .StorageToken);

                var newFile = await folder.CreateFileAsync(task.FileObject.FileName, CreationCollisionOption.ReplaceExisting);
                using (var stream = await newFile.OpenStreamForWriteAsync())
                    using (BinaryWriter writer = new BinaryWriter(stream))
                        writer.Write(result.Data);

                return result.Code == 200;
            }).Unwrap());
#endif
        }
        public static FileTransferTask AddTransferTask(FileTransferTask task)
        {
            lock (LockObject)
            {
                AllFileTransferTask.Add(task);
                AllTask.Enqueue(task);
            }

            return(task);
        }
Ejemplo n.º 4
0
 private void DeleteTaskCommandExecute(FileTransferTask fileTransferTask)
 {
     fileTransferTask.TransferState = TransferState.Aborted;
 }
Ejemplo n.º 5
0
 private void SuspendTaskCommandExecute(FileTransferTask fileTransferTasks)
 {
     fileTransferTasks.TransferState = TransferState.Suspended;
 }
        private static async Task DownloadFile(FileTransferTask task)
        {
            await QiniuService.DownloadFile(task);

            RemoveTaskById(task.TaskId);
        }
Ejemplo n.º 7
0
        public static async Task <bool> UploadFile(FileTransferTask task)
        {
            var resumeDirectory = Path.Combine(ApplicationData.Current.TemporaryFolder.Path, "upload", "resume");

            if (!Directory.Exists(resumeDirectory))
            {
                Directory.CreateDirectory(resumeDirectory);
            }

            var resumeRecordFilePath = Path.Combine(resumeDirectory, task.FileObject.FileName);
            var tempFolder           = await StorageFolder.GetFolderFromPathAsync(resumeDirectory);

            var resumeRecordFile = await tempFolder.TryGetItemAsync(task.FileObject.FileName);

            if (resumeRecordFile == null)
            {
                await tempFolder.CreateFileAsync(task.FileObject.FileName, CreationCollisionOption.ReplaceExisting);
            }

            return(await Task.Factory.StartNew(async() =>
            {
                void ProgressHandler(long uploadBytes, long totalBytes)
                {
                    var percent = uploadBytes * 1.0 / totalBytes;

                    DispatcherHelper.ExecuteOnUIThreadAsync(() =>
                    {
                        task.Progress = percent;
                    });
                }

#if MOCK
                int total = 100;
                for (int i = 0; i < 100; i++)
                {
                    ProgressHandler(i, total);
                    await Task.Delay(2000);
                }

                return true;
#else
                var uploadManager = new UploadManager(_config);
                var putExtra = new PutExtra
                {
                    ResumeRecordFile = resumeRecordFilePath,
                    BlockUploadThreads = 1,
                    ProgressHandler = ProgressHandler,
                    UploadController = delegate
                    {
                        if (task.TransferState == TransferState.Aborted)
                        {
                            return UploadControllerAction.Aborted;
                        }

                        return task.TransferState == TransferState.Suspended
                            ? UploadControllerAction.Suspended
                            : UploadControllerAction.Activated;
                    }
                };

                var putPolicy = new PutPolicy
                {
                    Scope = task.BucketObject.Name
                };
                putPolicy.SetExpires(24 * 30 * 3600);

                var auth = new Auth(_currentMac);
                var uptoken = auth.CreateUploadToken(putPolicy.ToJsonString());

                var fileStorage = await StorageApplicationPermissions.FutureAccessList.GetFileAsync(task.FileObject.FileName);
                var currentFileStream = await fileStorage.OpenStreamForReadAsync();
                var uploadResult = uploadManager.UploadStream(
                    currentFileStream,
                    task.FileObject.FileName,
                    uptoken,
                    putExtra);

                return uploadResult.Code == 200;
#endif
            }).Unwrap());
        }