Beispiel #1
0
        private async void FileDownloadSuccessful(object sender, FileDownloadResultEventArgs e)
        {
            CurrentShownFiles[e.ID].progress_Download.Visible = false;
            CurrentShownFiles[e.ID].panel_CheckMark.Visible   = true;
            CurrentShownFiles[e.ID].panel_CheckMark.Invalidate();
            CurrentShownFiles[e.ID].CurrentState = FileStatus.Finished;

            if (check_DeleteAfterDownload.Checked)
            {
                if (CurrentShownFiles[e.ID].CurrentState != FileStatus.Deleted)
                {
                    bool success = await ApiCommunication.DeleteFileRequest(CurrentShownFiles[e.ID].FileStructOnline.FullName, UserSettings.UserAccessToken, e.ID);
                }
            }

            DownloadNextFile();
        }
        public async static Task <bool> DownloadFile(string fileName, int id, string authToken)
        {
            string tempfile = Path.Combine(Constants.API_FILE_DOWNLOAD_FOLDER, fileName);

            var request = new HttpRequestMessage(HttpMethod.Get, Constants.API_FILEHOST_GET_FILE);

            request.Headers.Add("File-Name", fileName);
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authToken);


            HttpResponseMessage response = await ApiClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);


            if (response.StatusCode != HttpStatusCode.OK)
            {
                // Something wrong
                FileDownloadResultEventArgs result_args = new FileDownloadResultEventArgs();
                result_args.Successful = false;
                result_args.FileName   = fileName;
                result_args.Reason     = response.ReasonPhrase;
                FileDownloadFailure?.Invoke(null, result_args);
                return(false);
            }

            var totalBytes = 0L;

            if (response.Headers.Contains("File-Size"))
            {
                totalBytes = Convert.ToInt64(response.Headers.GetValues("File-Size").FirstOrDefault());
            }

            Stream contentStream = await response.Content.ReadAsStreamAsync();

            FileStream fileStream = new FileStream(tempfile, FileMode.Create, FileAccess.Write, FileShare.None, 8192, true);


            var totalRead    = 0L;
            var totalReads   = 0L;
            var buffer       = new byte[8192];
            var isMoreToRead = true;

            do
            {
                var read = await contentStream.ReadAsync(buffer, 0, buffer.Length);

                if (read == 0)
                {
                    isMoreToRead = false;
                }
                else
                {
                    await fileStream.WriteAsync(buffer, 0, read);

                    totalRead  += read;
                    totalReads += 1;

                    if (totalReads % 2000 == 0)
                    {
                        FileTransferProgressEventArgs progress_args = new FileTransferProgressEventArgs();
                        progress_args.FileName = fileName;
                        progress_args.ID       = id;
                        decimal pp = (decimal)totalRead / (decimal)totalBytes;

                        progress_args.PercentProgress = (int)Math.Round(pp * 100);

                        FileDownloadProgress?.Invoke(null, progress_args);


                        //Console.WriteLine(string.Format("total bytes downloaded so far: {0:n0}", totalRead));
                    }
                }
            }while (isMoreToRead);



            FileDownloadResultEventArgs args = new FileDownloadResultEventArgs();

            args.Successful = true;
            args.FileName   = fileName;
            args.ID         = id;

            FileDownloadSuccessful?.Invoke(null, args);

            return(true);
        }