Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        private static string GetProgressPercentageAsString(TFTPLogEntry entry)
        {
            double progress = GetProgressFraction(entry);

            return(progress >= 0.0 ? string.Format("{0:0.0} %", progress) : "... %");
        }
Beispiel #4
0
        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);
                }
            }
        }