Example #1
0
        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);
        }
Example #2
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);
        }