private static ListViewItem TFTPLogEntryToListViewItem(TFTPLogEntry entry) { ListViewItem item = new ListViewItem( new string[] { entry.StartTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), entry.IsUpload ? "Up" : "Dn", entry.Filename, entry.Server, string.Format("{0} / {1}", entry.Transferred, entry.FileLength < 0 ? "?" : entry.FileLength.ToString()), entry.State.ToString(), entry.ErrorMessage } ); return(item); }
private static double GetProgressFraction(TFTPLogEntry entry) { double result; if (entry.State == TFTPLogState.Completed) { result = 1.0; } else if (entry.FileLength >= 0.0) { result = (1.0 * Math.Min(entry.Transferred, entry.FileLength)) / entry.FileLength; } else { result = -1.0; } return(result); }
private static string GetProgressPercentageAsString(TFTPLogEntry entry) { double progress = GetProgressFraction(entry); return(progress >= 0.0 ? string.Format("{0:0.0} %", progress) : "... %"); }
private void OnUpdateTransfers(object sender, TFTPLogEventArgs data) { if (InvokeRequired) { Invoke(new EventHandler <TFTPLogEventArgs>(OnUpdateTransfers), sender, data); } else { try { var lv = this.listViewTransfers; int nrOfColumns = lv.Columns.Count; //lv.BeginUpdate(); // append new items at the front while (lv.Items.Count < data.Entries.Count) { lv.Items.Insert(0, new ListViewItem(new string[nrOfColumns])); } // remove items from the back while (lv.Items.Count > data.Entries.Count) { lv.Items.RemoveAt(lv.Items.Count - 1); } for (int t = 0; t < lv.Items.Count; t++) { ListViewItem lvItem = lv.Items[t]; TFTPLogEntry entry = data.Entries[t]; switch (entry.State) { case TFTPLogState.Busy: lvItem.ForeColor = Color.DarkBlue; break; case TFTPLogState.Completed: lvItem.ForeColor = Color.DarkGreen; break; case TFTPLogState.Stopped: lvItem.ForeColor = Color.DarkRed; break; } string[] rowAsStrings = new string[] { entry.StartTime.ToString("yyyy-MM-dd HH:mm:ss.fff"), entry.IsUpload ? "▲" : "▼", entry.Filename, entry.Server, string.Format("{0}", entry.Transferred), string.Format("{0}", entry.FileLength < 0 ? "?" : entry.FileLength.ToString()), ConvertSpeed(entry.Speed), entry.State.ToString(), entry.ErrorMessage, "" }; for (int c = 0; c < rowAsStrings.Length; c++) { ListViewItem.ListViewSubItem subItem = lvItem.SubItems[c]; if (subItem.Text != rowAsStrings[c]) { subItem.Text = rowAsStrings[c]; } } var sub = lvItem.SubItems[rowAsStrings.Length - 1]; if (sub.Tag == null || ((ProgressTag)sub.Tag).Id != entry.Id) { sub.Tag = new ProgressTag() { Id = entry.Id, PreviousBytesTransferred = entry.Transferred }; } ProgressTag tag = (ProgressTag)sub.Tag; double fraction = GetProgressFraction(entry); if (fraction >= 0.0) { tag.Fraction = fraction; tag.Mode = ProgressTag.ViewMode.Percentage; } else { if (entry.State == TFTPLogState.Stopped) { tag.Mode = ProgressTag.ViewMode.None; } else { tag.Mode = ProgressTag.ViewMode.ProgressWalker; if (tag.PreviousBytesTransferred != entry.Transferred) { tag.Fraction = (tag.Fraction + 0.25) % 1.0; tag.PreviousBytesTransferred = entry.Transferred; } } } } //lv.EndUpdate(); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e); } } }