public Torrent(JsonObject info) : base((string)info[ProtocolConstants.FIELD_NAME]) { Id = Toolbox.ToInt(info[ProtocolConstants.FIELD_ID]); for (int i = 0; i < 14; i++) { SubItems.Add(""); } UseItemStyleForSubItems = false; _seedersColumnFormat = "{0} ({1})"; ToolTipText = Text; Created = Toolbox.DateFromEpoch(Toolbox.ToDouble(info[ProtocolConstants.FIELD_DATECREATED])).ToLocalTime().ToString(); Creator = (string)info[ProtocolConstants.FIELD_CREATOR]; Added = Toolbox.DateFromEpoch(Toolbox.ToDouble(info[ProtocolConstants.FIELD_ADDEDDATE])).ToLocalTime(); Name = Hash = (string)info[ProtocolConstants.FIELD_HASHSTRING]; TotalSize = Toolbox.ToLong(info[ProtocolConstants.FIELD_TOTALSIZE]); Comment = (string)info[ProtocolConstants.FIELD_COMMENT]; Update(info, true); UpdateUi(true); MainWindow form = Program.Form; lock (Program.TorrentIndex) Program.TorrentIndex.Add(Hash, this); }
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); }