Changeset 6341


Ignore:
Timestamp:
Jul 16, 2008, 2:35:58 PM (13 years ago)
Author:
charles
Message:

(clutch) better support for displaying `percent done' on torrents w/file selection

Location:
trunk/web/javascript
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/web/javascript/torrent.js

    r6318 r6341  
    1818Torrent._StatusPaused          = 16;
    1919Torrent._InfiniteTimeRemaining = 215784000; // 999 Hours - may as well be infinite
    20 Torrent._MaxProgressBarWidth   = 100; // reduce this to make the progress bar shorter (%)
    2120
    2221Torrent.prototype =
     
    130129        peersDownloading: function() { return this._peers_downloading; },
    131130        peersUploading: function() { return this._peers_uploading; },
     131        getPercentDone: function() {
     132                if( !this._sizeWhenDone ) return 1.0;
     133                return ( this._sizeWhenDone - this._leftUntilDone )
     134                       / this._sizeWhenDone;
     135        },
     136        getPercentDoneStr: function() {
     137                return Math.ratio( 100 * ( this._sizeWhenDone - this._leftUntilDone ),
     138                                           this._sizeWhenDone );
     139        },
    132140        size: function() { return this._size; },
    133141        state: function() { return this._state; },
     
    247255        {
    248256                // These variables never change after the inital load
    249                 if (data.isPrivate)    this._is_private   = data.isPrivate;
    250                 if (data.hashString)   this._hashString   = data.hashString;
    251                 if (data.addedDate)    this._date         = data.addedDate;
    252                 if (data.totalSize)    this._size         = data.totalSize;
    253                 if (data.announceURL)  this._tracker      = data.announceURL;
    254                 if (data.comment)      this._comment      = data.comment;
    255                 if (data.creator)      this._creator      = data.creator;
    256                 if (data.dateCreated)  this._creator_date = data.dateCreated;
    257                 if (data.path)         this._torrent_file = data.path;//FIXME
     257                if (data.isPrivate)     this._is_private    = data.isPrivate;
     258                if (data.hashString)    this._hashString    = data.hashString;
     259                if (data.addedDate)     this._date          = data.addedDate;
     260                if (data.totalSize)     this._size          = data.totalSize;
     261                if (data.announceURL)   this._tracker       = data.announceURL;
     262                if (data.comment)       this._comment       = data.comment;
     263                if (data.creator)       this._creator       = data.creator;
     264                if (data.dateCreated)   this._creator_date  = data.dateCreated;
     265                if (data.leftUntilDone) this._leftUntilDone = data.leftUntilDone;
     266                if (data.sizeWhenDone)  this._sizeWhenDone  = data.sizeWhenDone;
     267                if (data.path)          this._torrent_file  = data.path;//FIXME
    258268                if (data.name) {
    259269                        this._name = data.name;
     
    276286                this._eta               = data.eta;
    277287                this._swarm_speed       = data.swarmSpeed;
    278                 this._total_leechers    = data.leechers;
    279                 this._total_seeders     = data.seeders;
     288                this._total_leechers    = Math.max( 0, data.leechers );
     289                this._total_seeders     = Math.max( 0, data.seeders );
    280290                this._state             = data.status;
    281                
    282                 // Get -1 returned sometimes (maybe torrents with errors?)
    283                 if( this._total_leechers < 0 )
    284                     this._total_leechers = 0;
    285                 if( this._total_seeders < 0 )
    286                     this._total_seeders = 0;
    287291        },
    288292
     
    292296                var peer_details;
    293297                var root = this._element;
     298                var MaxBarWidth = 100; // reduce this to make the progress bar shorter (%)
    294299               
    295300                setInnerHTML( root._name_container[0], this._name );
    296301               
    297                 // Figure out the percent completed
    298                 var percent = Math.min( 1.0, ( this._completed / this._size ) );
    299                 var css_completed_width = Math.floor( percent * Torrent._MaxProgressBarWidth );
    300                
    301302                // Add the progress bar
    302                 var notDone = this._completed < this._size;
     303                var notDone = this._leftUntilDone > 0;
    303304                if( notDone )
    304305                {
     
    316317                        // Create the 'progress details' label
    317318                        // Eg: '101 MB of 631 MB (16.02%) - 2 hr remaining'
    318                         progress_details = Math.formatBytes( this._completed )
     319                        progress_details = Math.formatBytes( this._sizeWhenDone - this._leftUntilDone )
    319320                                         + ' of '
    320                                          + Math.formatBytes( this._size )
     321                                         + Math.formatBytes( this._sizeWhenDone )
    321322                                         + ' ('
    322                                          + Math.ratio( this._completed, this._size )
     323                                         + this.getPercentDoneStr()
    323324                                         + '%)'
    324325                                         + eta;
     326               
     327                        // Figure out the percent completed
     328                        var css_completed_width = Math.floor( this.getPercentDone() * MaxBarWidth );
    325329                       
    326330                        // Update the 'in progress' bar
    327                         var class_name = (this.isActive()) ? 'in_progress' : 'incomplete_stopped';
     331                        var class_name = this.isActive() ? 'in_progress' : 'incomplete_stopped';
    328332                        var e = root._progress_complete_container;
    329                         e.removeClass();
    330                         e.addClass('torrent_progress_bar');
    331                         e.addClass(class_name);
    332                         e.css('width', css_completed_width + '%');
     333                        e.removeClass( );
     334                        e.addClass( 'torrent_progress_bar' );
     335                        e.addClass( class_name );
     336                        e.css( 'width', css_completed_width + '%' );
    333337                       
    334338                        // Update the 'incomplete' bar
     
    338342                                e.addClass('torrent_progress_bar in_progress');
    339343                        }
    340                         e.css('width', (Torrent._MaxProgressBarWidth - css_completed_width) + '%');
     344                        e.css('width', (MaxBarWidth - css_completed_width) + '%');
    341345                        e.show();
    342346                       
     
    379383                       
    380384                        // Set progress to maximum
    381                         root._progress_complete_container.css('width', Torrent._MaxProgressBarWidth + '%');
     385                        root._progress_complete_container.css('width', MaxBarWidth + '%');
    382386                       
    383387                        // Create the 'peer details' label
     
    494498/** Helper function for sortTorrents(). */
    495499Torrent.compareByProgress = function( a, b ) {
    496         var a_prog = Math.ratio( a._completed, a._size );
    497         var b_prog = Math.ratio( b._completed, b._size );
    498         if( a_prog !== b_prog )
    499                 return a_prog - b_prog;
     500        if( a._leftUntilDone !== b._leftUntilDone )
     501                return a._leftUntilDone - b._leftUntilDone;
    500502        var a_ratio = Math.ratio( a._upload_total, a._download_total );
    501503        var b_ratio = Math.ratio( b._upload_total, b._download_total );
  • trunk/web/javascript/transmission.js

    r6318 r6341  
    817817                var have_private = false;
    818818                var name;
     819                var sizeWhenDone = 0;
     820                var sizeDone = 0;
    819821                var total_completed = 0;
    820822                var total_download = 0;
     
    851853                for( i=0; i<torrents.length; ++i ) {
    852854                        var t = torrents[i];
     855                        sizeWhenDone         += t._sizeWhenDone;
     856                        sizeDone             += t._sizeWhenDone - t._leftUntilDone;
    853857                        total_completed      += t.completed();
    854858                        total_verified       += t._verified;
     
    900904                $(ti+'secure')[0].innerHTML          = private_string;
    901905                $(ti+'creator_date')[0].innerHTML    = date_created;
    902                 $(ti+'progress')[0].innerHTML        = Math.ratio( total_completed * 100, total_size ) + '% (' +
    903                                                        Math.ratio( total_completed * 100, total_size ) + '% Selected)';
     906                $(ti+'progress')[0].innerHTML        = Math.ratio( sizeDone*100, sizeWhenDone ) + '%';
    904907        },
    905908   
  • trunk/web/javascript/transmission.remote.js

    r6318 r6341  
    2121RPC._UpSpeedLimited         = 'speed-limit-up-enabled';
    2222RPC._DownSpeedLimited       = 'speed-limit-down-enabled';
     23
     24RPC._TorrentActivity        = (1<<0);
     25RPC._TorrentAnnounce        = (1<<1);
     26RPC._TorrentError           = (1<<2);
     27RPC._TorrentFiles           = (1<<3);
     28RPC._TorrentHistory         = (1<<4);
     29RPC._TorrentId              = (1<<5);
     30RPC._TorrentInfo            = (1<<6);
     31RPC._TorrentLimits          = (1<<7);
     32RPC._TorrentPeers           = (1<<8);
     33RPC._TorrentPriorities      = (1<<9);
     34RPC._TorrentScrape          = (1<<10);
     35RPC._TorrentSize            = (1<<11);
     36RPC._TorrentTrackerStats    = (1<<12);
     37RPC._TorrentTrackers        = (1<<13);
     38RPC._TorrentWebseeds        = (1<<14);
    2339
    2440function TransmissionRemote( controller )
     
    87103                o.method = 'torrent-get'
    88104                o.arguments = { };
    89                 o.arguments.fields = 1+2+4+16+32+64+128+1024+2048+4096;
     105                o.arguments.fields = RPC._TorrentActivity
     106                                   + RPC._TorrentAnnounce
     107                                   + RPC._TorrentError
     108                                   + RPC._TorrentHistory
     109                                   + RPC._TorrentId
     110                                   + RPC._TorrentInfo
     111                                   + RPC._TorrentLimits
     112                                   + RPC._TorrentScrape
     113                                   + RPC._TorrentSize
     114                                   + RPC._TorrentTrackerStats;
    90115                this.sendRequest( RPC._Root, $.toJSON(o), function(data) {
    91116                        tr.updateTorrents( data.arguments.torrents );
Note: See TracChangeset for help on using the changeset viewer.