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); }
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(); }