예제 #1
0
            public bool TryParseTransferStatus(string rawLine, out FileTransferStatus status)
            {
                bool success = false;

                status = new FileTransferStatus();

                if (!String.IsNullOrEmpty(rawLine))
                {
                    string line  = rawLine.TrimEnd();
                    Match  match = this.regExStatus.Match(line);
                    if (match.Success)
                    {
                        string[] update = line.Split('|');

                        status.Filename         = update[0].Trim();
                        status.BytesTransferred = int.Parse(update[1].Replace("kB", "").Trim());
                        status.TransferRate     = float.Parse(update[2].Replace("kB/s", "").Trim());
                        status.TimeLeft         = update[3].Replace("ETA:", "").Trim();
                        status.PercentComplete  = int.Parse(update[4].Replace("%", "").Trim());
                        success = true;
                    }
                    else
                    {
                        Log.WarnFormat("Unable to parse OutputData: {0}", line);
                    }
                }
                return(success);
            }
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string _file = "/Resources/Images/";

            FileTransferType   _transferType = (FileTransferType)values[0];
            FileTransferStatus _status       = (FileTransferStatus)values[1];
            PausedBy           _pausedBy     = (PausedBy)values[2];

            switch (_transferType)
            {
            case FileTransferType.Download:
                _file += "Download";
                break;

            case FileTransferType.Upload:
                _file += "Upload";
                break;
            }

            switch (_status)
            {
            case FileTransferStatus.Cancelled:
                _file += "Cancelled";
                break;

            case FileTransferStatus.Error:
                _file += "Error";
                break;

            case FileTransferStatus.Finished:
                _file += "Finished";
                break;

            case FileTransferStatus.Paused:
                _file += "Paused";

                switch (_pausedBy)
                {
                case PausedBy.User:
                    _file += "ByUser";
                    break;

                case PausedBy.OtherPeer:
                    _file += "ByOtherPeer";
                    break;

                case PausedBy.Both:
                    _file += "ByBoth";
                    break;
                }
                break;

            case FileTransferStatus.Running:
                _file += "Running";
                break;
            }

            _file += ".png";
            return((new System.Windows.Media.ImageSourceConverter()).ConvertFromString("pack://application:,,," + _file));
        }
예제 #3
0
            public FileTransferOut(NetworkConnection recipient, FileTransferType fileType, string filePath)
            {
                connection = recipient;

                FileType = fileType;
                FilePath = filePath;
                FileName = Path.GetFileName(filePath);

                Acknowledged        = false;
                SentOffset          = 0;
                KnownReceivedOffset = 0;

                Status = FileTransferStatus.NotStarted;

                startingTime = DateTime.Now;

                int maxRetries = 4;

                for (int i = 0; i <= maxRetries; i++)
                {
                    try
                    {
                        data = File.ReadAllBytes(filePath);
                    }
                    catch (System.IO.IOException e)
                    {
                        if (i >= maxRetries)
                        {
                            throw;
                        }
                        DebugConsole.NewMessage("Failed to initiate a file transfer {" + e.Message + "}, retrying in 250 ms...", Color.Red);
                        Thread.Sleep(250);
                    }
                }
            }
        public static string Name(this FileTransferStatus status)
        {
            switch (status)
            {
            case FileTransferStatus.Pending:
                return("PENDING");

            case FileTransferStatus.InProgress:
                return("In Progress");

            case FileTransferStatus.TransferComplete:
                return("Transfer Complete");

            case FileTransferStatus.RetryLimitExceeded:
                return("Retry Limit Exceeded");

            case FileTransferStatus.ConfirmedComplete:
                return("Complete");

            case FileTransferStatus.Accepted:
            case FileTransferStatus.Rejected:
            case FileTransferStatus.Stalled:
            case FileTransferStatus.Cancelled:
            case FileTransferStatus.Error:
                return(status.ToString());

            default:
                return("N/A");
            }
        }
        /// <summary>
        /// Update the progress bars and associated text labels with transfer progress
        /// </summary>
        /// <param name="currentFile">Object containing the current file being transferred</param>
        /// <param name="sofar">The bytes transferred sofar</param>
        /// <param name="total">The total number of bytes we're expecting</param>
        /// <param name="fileNum">The current file number being transferred.</param>
        /// <param name="totalFiles">The total number of files we're expecting to be transferred</param>
        public void UpdateProgress(FileTransferStatus currentFile, int sofar, int total, int fileNum, int totalFiles)
        {
            if (InvokeRequired)
            {
                BeginInvoke((MethodInvoker) delegate
                {
                    UpdateProgress(currentFile, sofar, total, fileNum, totalFiles);
                });
            }
            else
            {
                labelCurrentFile.Text = String.Format(
                    LocalizedText.frmTransferStatus_labelCurrentFile,
                    currentFile.Filename, currentFile.BytesTransferred, currentFile.TransferRate, currentFile.TimeLeft);
                progressBarCurrentFile.Value = currentFile.PercentComplete;
                labelCurrentPercent.Text     = string.Format(LocalizedText.frmTransferStatus_UpdateProgress_Percent, currentFile.PercentComplete);

                labelOverall.Visible = progressBarOverall.Visible = labelOverallPct.Visible = totalFiles > 1;

                if (fileNum >= totalFiles)
                {
                    progressBarOverall.Value = 100;
                    labelOverallPct.Text     = LocalizedText.frmTransferStatus_UpdateProgress__100_percent;
                    button1.Text             = LocalizedText.frmTransferStatus_UpdateProgress_Close;
                }
                else if (totalFiles > 1)
                {
                    progressBarOverall.Value = (int)((float)sofar / total * 100);
                    labelOverallPct.Text     = String.Format(LocalizedText.frmTransferStatus_UpdateProgress_Percent, progressBarOverall.Value);

                    labelOverall.Text = String.Format(LocalizedText.frmTransferStatus_labelOverall,
                                                      sofar, total, fileNum, totalFiles);
                }
            }
        }
예제 #6
0
 public static LogEntry CreateLogEntry(FileTransferStatus fileTransferStatus)
 {
     return(new LogEntry
     {
         TransferStatus = fileTransferStatus,
         UTCdate = DateTime.UtcNow
     });
 }
        public void ChangeProgress(long bytes, FileTransferStatus status)
        {
            var oldStatus = TransferStatus;
            TransferStatus = status;
            BytesReceived = bytes;
            if (oldStatus != status)
                TransferStatusChanged(this, new TransferEventArgs(this));

            TransferProgressChanged(this, new TransferEventArgs(this));
        }
        public static bool TransfercompletedSucessfully(this FileTransferStatus status)
        {
            switch (status)
            {
            case FileTransferStatus.TransferComplete:
            case FileTransferStatus.ConfirmedComplete:
                return(true);

            default:
                return(false);
            }
        }
        public static bool TransferStartedButDidNotComplete(this FileTransferStatus status)
        {
            switch (status)
            {
            case FileTransferStatus.InProgress:
            case FileTransferStatus.Stalled:
            case FileTransferStatus.Cancelled:
                return(true);

            default:
                return(false);
            }
        }
예제 #10
0
        public void ChangeProgress(long bytes, FileTransferStatus status)
        {
            var oldStatus = TransferStatus;

            TransferStatus = status;
            BytesReceived  = bytes;
            if (oldStatus != status)
            {
                TransferStatusChanged(this, new TransferEventArgs(this));
            }

            TransferProgressChanged(this, new TransferEventArgs(this));
        }
예제 #11
0
            public FileTransferOut(NetConnection recipient, FileTransferType fileType, string filePath)
            {
                connection = recipient;

                FileType = fileType;
                FilePath = filePath;
                FileName = Path.GetFileName(filePath);

                Status = FileTransferStatus.NotStarted;

                startingTime = DateTime.Now;

                data = File.ReadAllBytes(filePath);
            }
예제 #12
0
        public static bool TransferNeverStarted(this FileTransferStatus status)
        {
            switch (status)
            {
            case FileTransferStatus.Pending:
            case FileTransferStatus.Accepted:
            case FileTransferStatus.Rejected:
            case FileTransferStatus.RetryLimitExceeded:
            case FileTransferStatus.Error:
                return(true);

            default:
                return(false);
            }
        }
예제 #13
0
        private async Task <ResponseInfo> QueueSong(LocalSongViewModel song)
        {
            var file = Locator.Current.GetService <IFile>();

            byte[] data = file.ReadAllBytes(song.Path);

            FileTransferStatus status = await NetworkMessenger.Instance.QueueRemoteSong(song.Model, data);

            if (status.ResponseInfo.Status == ResponseStatus.Success)
            {
                song.IsTransfering = true;

                status.TransferProgress.ObserveOn(RxApp.MainThreadScheduler)
                .Subscribe(x =>
                {
                    song.TransferProgress = x;
                },
                           () => song.IsTransfering = false);
            }

            return(status.ResponseInfo);
        }
예제 #14
0
파일: KfsTransfers.cs 프로젝트: tmbx/kwm
        public void UpdateInfos(KfsFileTransfer xfer)
        {
            // Update persistant data

            OrderID = xfer.OrderID;
            Direction = xfer is KfsFileUpload;
            Status = xfer.Status;
            File = xfer.LastFullPath;
            BytesTransfered = xfer.BytesTransferred;

            if (xfer is KfsFileUpload)
            {
                BytesToTransfer = ((KfsFileUpload)xfer).Size;
            }
            else
            {
                BytesToTransfer = ((KfsFileDownload)xfer).Version.Size;
            }

            Error = xfer.Error;

            // Update subitems
            this.Name = OrderID.ToString();
            this.Text = this.Name;

            if (InError)
            {
                this.SubItems[ColumnKey.Status.ToString()].Text = "Failed";
                this.SubItems[ColumnKey.Progress.ToString()].Text = Error.Reason;
                this.ForeColor = Color.Red;
            }
            else
            {
                this.SubItems[ColumnKey.Status.ToString()].Text = Base.GetEnumDescription(Status);
                this.SubItems[ColumnKey.Progress.ToString()].Text = Base.GetHumanFileSize(BytesTransfered) + "/" + Base.GetHumanFileSize(BytesToTransfer);
                this.ForeColor = Color.Black;
            }
            this.SubItems[ColumnKey.Direction.ToString()].Text = Direction ? "U" : "D";
            this.SubItems[ColumnKey.File.ToString()].Text = File;
        }
예제 #15
0
 public FileTransferJobStatusChangeEventArgs(FileTransferStatus oldStatus, FileTransferStatus newStatus)
 {
     this.oldStatus = oldStatus;
     this.newStatus = newStatus;
 }
예제 #16
0
 void _wc_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)
 {
     _progress = 100;
     _status = FileTransferStatus.Completed;
 }
예제 #17
0
            public bool TryParseTransferStatus(string rawLine, out FileTransferStatus status)
            {
                bool success = false;
                status = new FileTransferStatus();

                if (!String.IsNullOrEmpty(rawLine))
                {
                    string line = rawLine.TrimEnd();
                    Match match = this.regExStatus.Match(line);
                    if (match.Success)
                    {
                        string[] update = line.Split('|');

                        status.Filename = update[0].Trim();
                        status.BytesTransferred = int.Parse(update[1].Replace("kB", "").Trim());
                        status.TransferRate = float.Parse(update[2].Replace("kB/s", "").Trim());
                        status.TimeLeft = update[3].Replace("ETA:", "").Trim();
                        status.PercentComplete = int.Parse(update[4].Replace("%", "").Trim());
                        success = true;
                    }
                    else
                    {
                        Log.WarnFormat("Unable to parse OutputData: {0}", line);
                    }
                }
                return success;
            }
 private void UpdateInstallationStep(FileTransferStatus status)
 {
     switch (status)
     {
         case FileTransferStatus.Paused:
         case FileTransferStatus.Waiting:
         case FileTransferStatus.WaitingForNonVoiceBlockingNetwork:
             InstallationStep = AppResources.waiting;
             break;
         case FileTransferStatus.WaitingForExternalPower:
         case FileTransferStatus.WaitingForExternalPowerDueToBatterySaverMode:
             InstallationStep = AppResources.waiting_for_power;
             break;
         case FileTransferStatus.WaitingForWiFi:
             InstallationStep = AppResources.waiting_for_wifi;
             break;
         case FileTransferStatus.Completed:
         case FileTransferStatus.Transferring:
             InstallationStep = Description ?? AppResources.loading_message;
             break;
     }
 }
예제 #19
0
 partial void ProcessEachFileTransferStatus(FileTransferStatus notifies);
 private void UpdateDownloadStatus(FileTransferStatus status)
 {
     DownloadStatus = status;
     switch (status)
     {
         case FileTransferStatus.Paused:
         case FileTransferStatus.Transferring:
         case FileTransferStatus.Waiting:
         case FileTransferStatus.WaitingForExternalPower:
         case FileTransferStatus.WaitingForExternalPowerDueToBatterySaverMode:
         case FileTransferStatus.WaitingForNonVoiceBlockingNetwork:
         case FileTransferStatus.WaitingForWiFi:
             IsDownloading = true;
             break;
         default:
             IsDownloading = false;
             break;
     }
     UpdateInstallationStep(status);
 }
예제 #21
0
 void _wc_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
 {
     _progress = (int)(e.BytesSent / e.TotalBytesToSend);
     _status = FileTransferStatus.InProgress;
 }