Changeset 8309


Ignore:
Timestamp:
Apr 29, 2009, 11:59:29 AM (12 years ago)
Author:
charles
Message:

(trunk clutch) only update the file list's html elements when the model's contents actually require it.

File:
1 edited

Legend:

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

    r8280 r8309  
    179179        uploadSpeed: function() { return this._upload_speed; },
    180180        uploadTotal: function() { return this._upload_total; },
    181         showFileList: function() { if (this.fileList()) return this.fileList().show(); },
    182         hideFileList: function() { if (this.fileList()) return this.fileList().hide(); },
     181        showFileList: function() { this.refreshFiles(); this.fileList().show(); },
     182        hideFileList: function() { this.fileList().hide(); },
    183183       
    184184        /*--------------------------------------------
     
    459459               
    460460                setInnerHTML( root._peer_details_container[0], peer_details );
    461                
    462                 // Update individual files within a torrent
     461       
     462                this.refreshFiles( );   
     463        },
     464
     465        refreshFiles: function() {
    463466                jQuery.each(this._files, function () {
    464467                        this.refreshHTML();
    465468                } );
    466 
    467469        },
    468470
     
    633635TorrentFile.prototype = {
    634636        initialize: function(file_data) {
     637                this._dirty = true;
    635638                this._torrent = file_data.torrent;
    636639                var pos = file_data.name.indexOf('/');
     
    659662       
    660663        readAttributes: function(file_data) {
    661                 if (undefined != file_data.index)          this._index  = file_data.index;
    662                 if (undefined != file_data.bytesCompleted) this._done   = file_data.bytesCompleted;
    663                 if (undefined != file_data.length)         this._size   = file_data.length;
    664                 if (undefined != file_data.priority)       this._prio   = file_data.priority;
    665                 if (undefined != file_data.wanted)         this._wanted = file_data.wanted;
     664                if( file_data.index != undefined && file_data.index != this._index ) {
     665                        this._index = file_data.index;
     666                        this._dirty = true;
     667                }
     668                if( file_data.bytesCompleted != undefined && file_data.bytesCompleted != this._done ) {
     669                        this._done   = file_data.bytesCompleted;
     670                        this._dirty = true;
     671                }
     672                if( file_data.length != undefined && file_data.length != this._size ) {
     673                        this._size   = file_data.length;
     674                        this._dirty = true;
     675                }
     676                if( file_data.priority != undefined && file_data.priority != this._prio ) {
     677                        this._prio   = file_data.priority;
     678                        this._dirty = true;
     679                }
     680                if( file_data.wanted != undefined && file_data.wanted != this._wanted ) {
     681                        this._wanted = file_data.wanted;
     682                        this._dirty = true;
     683                }
    666684        },
    667685       
     
    677695                this._prio = priority_level;
    678696                this._torrent._controller.changeFileCommand("priority-" + priority, this._torrent, this);
    679                 this.refreshPriorityHTML();
     697                this._dirty = true;
    680698        },
    681699       
    682700        setWanted: function(wanted) {
     701                this._dirty = true;
    683702                this._wanted = wanted;
    684                 var command;
    685                
    686                 if (wanted) {
    687                         this.element().removeClass('skip');
    688                         command = 'files-wanted'
    689                 } else {
    690                         this.element().addClass('skip');
    691                         command = 'files-unwanted';
    692                 }
     703                this.element().toggleClass( 'skip', !wanted );
     704                var command = wanted ? 'files-wanted' : 'files-unwanted';
    693705                this._torrent._controller.changeFileCommand(command, this._torrent, this);
    694706        },
     
    701713       
    702714        refreshHTML: function() {
    703                 this.refreshProgressHTML();
    704                 this.refreshWantedHTML();
    705                 this.refreshPriorityHTML();
     715                if( this._dirty ) {
     716                        this._dirty = false;
     717                        this.refreshProgressHTML();
     718                        this.refreshWantedHTML();
     719                        this.refreshPriorityHTML();
     720                } else {
     721                        console.log( "skipping because not dirty" );
     722                }
    706723        },
    707724       
     
    715732        refreshWantedHTML: function() {
    716733                var element = this.element();
    717                 if (this._wanted && element.hasClass('skip'))
    718                         this.element().removeClass('skip');
    719                 else if (!this._wanted && !element.hasClass('skip'))
    720                         this.element().addClass('skip');
    721                
    722                 if (this._done < this._size && this.element().hasClass('complete'))
    723                         this.element().removeClass('complete');
    724                 else if (!this.element().hasClass('complete'))
    725                         this.element().addClass('complete');
     734                this.element().toggleClass('skip', !this._wanted);
     735                this.element().toggleClass('complete', this._done>=this._size );
    726736        },
    727737       
    728738        refreshPriorityHTML: function() {
    729                 if (this['_last_refreshed_prio'] == this._prio) { return; }
    730739                var priority = { '1': 'high', '0': 'normal', '-1': 'low' }[new String(this._prio)];
    731740                var off_priorities = [ 'high', 'normal', 'low' ].sort(function(a,b) { return (a == priority) ? 1 : -1; } );
     
    733742                        removeClass(off_priorities[0]).
    734743                        removeClass(off_priorities[1]);
    735                 this._last_refreshed_prio = this._prio;
    736744        },
    737745       
     
    752760                else { file.setPriority('high'); }
    753761        }
    754        
    755 };
     762};
Note: See TracChangeset for help on using the changeset viewer.