コード例 #1
0
        public bool Update(JsonObject info, bool first)
        {
            HaveValid    = Toolbox.ToLong(info[ProtocolConstants.FIELD_HAVEVALID]);
            HaveTotal    = HaveValid + Toolbox.ToLong(info[ProtocolConstants.FIELD_HAVEUNCHECKED]);
            SizeWhenDone = Toolbox.ToLong(info[ProtocolConstants.FIELD_SIZEWHENDONE]);

            if (info.Contains(ProtocolConstants.FIELD_TRACKERSTATS))
            {
                TrackerStats = (JsonArray)info[ProtocolConstants.FIELD_TRACKERSTATS];
            }

            Eta = Toolbox.ToDouble(info[ProtocolConstants.FIELD_ETA]);

            DownloadDir        = (string)info[ProtocolConstants.FIELD_DOWNLOADDIR];
            Trackers           = (JsonArray)info[ProtocolConstants.FIELD_TRACKERS];
            Seeders            = GetSeeders(info);
            Leechers           = GetLeechers(info);
            PeersSendingToUs   = Toolbox.ToInt(info[ProtocolConstants.FIELD_PEERSSENDINGTOUS]);
            PeersGettingFromUs = Toolbox.ToInt(info[ProtocolConstants.FIELD_PEERSGETTINGFROMUS]);

            if (Program.DaemonDescriptor.Trunk && Program.DaemonDescriptor.Revision >= 10937 && Program.DaemonDescriptor.Revision < 11194)
            {
                DownloadRate = (long)(Toolbox.ToDouble(info[ProtocolConstants.FIELD_RATEDOWNLOAD]) * 1024);
                UploadRate   = (long)(Toolbox.ToDouble(info[ProtocolConstants.FIELD_RATEUPLOAD]) * 1024);
            }
            else
            {
                DownloadRate = Toolbox.ToLong(info[ProtocolConstants.FIELD_RATEDOWNLOAD]);
                UploadRate   = Toolbox.ToLong(info[ProtocolConstants.FIELD_RATEUPLOAD]);
            }
            BandwidthPriority = Toolbox.ToInt(info[ProtocolConstants.FIELD_BANDWIDTHPRIORITY]);
            Downloaded        = Toolbox.ToLong(info[ProtocolConstants.FIELD_DOWNLOADEDEVER]);
            Uploaded          = Toolbox.ToLong(info[ProtocolConstants.FIELD_UPLOADEDEVER]);
            long downloadedForRatio = Downloaded > 0 ? Downloaded : HaveValid;

            LocalRatio = Toolbox.CalcRatio(Uploaded, downloadedForRatio);

            if (info.Contains(ProtocolConstants.FIELD_SECONDSDOWNLOADING))
            {
                SecondsDownloading = Toolbox.ToInt(info[ProtocolConstants.FIELD_SECONDSDOWNLOADING]);
            }
            else
            {
                SecondsDownloading = -1;
            }
            if (info.Contains(ProtocolConstants.FIELD_SECONDSSEEDING))
            {
                SecondsSeeding = Toolbox.ToInt(info[ProtocolConstants.FIELD_SECONDSSEEDING]);
            }
            else
            {
                SecondsSeeding = -1;
            }

            if (info.Contains(ProtocolConstants.FIELD_DONEDATE))
            {
                DateTime dateTime = Toolbox.DateFromEpoch(Toolbox.ToDouble(info[ProtocolConstants.FIELD_DONEDATE]));
                if (!dateTime.Year.Equals(1970))
                {
                    DoneDate = dateTime.ToLocalTime();
                }
            }

            PieceCount = Toolbox.ToInt(info[ProtocolConstants.FIELD_PIECECOUNT]);

            long   leftUntilDone = Toolbox.ToLong(info[ProtocolConstants.FIELD_LEFTUNTILDONE]);
            short  statusCode    = Toolbox.ToShort(info[ProtocolConstants.FIELD_STATUS]);
            string errorString   = (string)info[ProtocolConstants.FIELD_ERRORSTRING];

            bool statusChange = StatusCode != statusCode || HasError != IsErrorString(errorString);

            if (StatusCode == ProtocolConstants.STATUS_DOWNLOAD &&
                LeftUntilDone > 0 && leftUntilDone == 0)
            {
                CompletionPopupPending = !first && Program.Settings.CompletedBaloon;
            }

            LeftUntilDone = leftUntilDone;
            StatusCode    = statusCode;
            ErrorString   = errorString;

            if (StatusCode == ProtocolConstants.STATUS_CHECK)
            {
                Percentage = Toolbox.ToProgress(info[ProtocolConstants.FIELD_RECHECKPROGRESS]);
            }
            else
            {
                Percentage = Toolbox.CalcPercentage(HaveTotal, SizeWhenDone);
            }

            _updateSerial = Program.DaemonDescriptor.UpdateSerial;
            Peers         = (JsonArray)info[ProtocolConstants.FIELD_PEERS];
            PieceSize     = Toolbox.ToInt(info[ProtocolConstants.FIELD_PIECESIZE]);

            if (info.Contains(ProtocolConstants.FIELD_PIECES))
            {
                string pieces = (string)info[ProtocolConstants.FIELD_PIECES];
                Pieces = pieces.Length > 0 ? Convert.FromBase64CharArray(pieces.ToCharArray(), 0, pieces.Length) : new byte[0];
            }

            SeedRatioLimit = Toolbox.ToDouble(info[ProtocolConstants.FIELD_SEEDRATIOLIMIT]);
            SeedRatioMode  = Toolbox.ToInt(info[ProtocolConstants.FIELD_SEEDRATIOMODE]);
            SeedIdleLimit  = Toolbox.ToDouble(info[ProtocolConstants.FIELD_SEEDIDLELIMIT]);
            SeedIdleMode   = Toolbox.ToInt(info[ProtocolConstants.FIELD_SEEDIDLEMODE]);

            HonorsSessionLimits = Toolbox.ToBool(info[ProtocolConstants.FIELD_HONORSSESSIONLIMITS]);
            MaxConnectedPeers   = Toolbox.ToInt(info[ProtocolConstants.FIELD_MAXCONNECTEDPEERS]);
            SwarmSpeed          = Toolbox.GetSpeed(info[ProtocolConstants.FIELD_SWARMSPEED]);
            SetSpeedLimits(info);

            return(statusChange);
        }
コード例 #2
0
        public void UpdateUi(bool first)
        {
            MainWindow form = Program.Form;

            if (form.InvokeRequired)
            {
                form.Invoke(new UpdateUIDelegate(UpdateUi), new object[] { first });
                return;
            }
            SetText(1, Id.ToString());
            SubItems[1].Tag = Id;
            SetText(2, Toolbox.GetFileSize(SizeWhenDone));
            SubItems[2].Tag = SizeWhenDone;
            SetText(3, Percentage + "%");
            SubItems[3].Tag = Percentage;
            SetText(4, Status);
            SetText(5, string.Format(_seedersColumnFormat, Seeders < 0 ? "?" : Seeders.ToString(), PeersSendingToUs));
            SubItems[5].Tag = Seeders;
            SetText(6, string.Format(_seedersColumnFormat, Leechers < 0 ? "?" : Leechers.ToString(), PeersGettingFromUs));
            SubItems[6].Tag = Leechers;
            SetText(7, DownloadRate > 0 ? Toolbox.GetSpeed(DownloadRate) : "");
            SubItems[7].Tag = DownloadRate;
            SetText(8, UploadRate > 0 ? Toolbox.GetSpeed(UploadRate) : "");
            SubItems[8].Tag = UploadRate;
            SetText(9, Eta > 0 ? TimeSpan.FromSeconds(Eta).ToString() : "");
            SubItems[9].Tag = Eta;
            SetText(10, Toolbox.GetFileSize(Uploaded));
            SubItems[10].Tag = Uploaded;
            SetText(11, LocalRatio < 0 ? "∞" : LocalRatio.ToString());
            SubItems[11].Tag       = LocalRatio;
            SubItems[11].ForeColor = GetRatioColor();
            SetText(12, Added.ToString());
            SubItems[12].Tag = Added;
            if (DoneDate != null)
            {
                SubItems[13].Tag = DoneDate;
                SetText(13, DoneDate.ToString());
            }
            SetText(14, FirstTrackerTrimmed);

            if (first)
            {
                lock (form.stateListBox)
                {
                    if (FirstTrackerTrimmed.Length > 0 && form.stateListBox.FindItem(FirstTrackerTrimmed) == null)
                    {
                        form.stateListBox.Items.Add(new GListBoxItem(FirstTrackerTrimmed, 9));
                    }
                }
                if (Program.Settings.MinToTray && Program.Settings.StartedBalloon && _updateSerial > 2)
                {
                    form.ShowTrayTip(LocalSettingsSingleton.BALLOON_TIMEOUT, TorrentName, String.Format(OtherStrings.NewTorrentIs, Status.ToLower()), ToolTipIcon.Info);
                }
                LogError();
            }
            else if (Program.Settings.MinToTray && CompletionPopupPending)
            {
                CompletionPopupPending = false;
                form.ShowTrayTip(LocalSettingsSingleton.BALLOON_TIMEOUT, TorrentName, OtherStrings.TorrentFinished, ToolTipIcon.Info);
            }
            ForeColor = HasError ? Color.Red : SystemColors.WindowText;
            UpdateIcon();
        }