Changeset 13308


Ignore:
Timestamp:
May 19, 2012, 9:37:29 PM (9 years ago)
Author:
livings124
Message:

#4739 Webkit notifications for downloading/seeding complete events

Location:
trunk/web
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/web/index.html

    r13222 r13308  
    3434                <script type="text/javascript" src="./javascript/dialog.js"></script>
    3535                <script type="text/javascript" src="./javascript/formatter.js"></script>
     36                <script type="text/javascript" src="./javascript/notifications.js"></script>
    3637                <title>Transmission Web Interface</title>
    3738        </head>
     
    314315                                                <li class="separator"></li>
    315316                                                <li id="statistics">Statistics</li>
     317                                                <li id="toggle_notifications" style="display: none">Notifcations</li>
    316318                                                <li class="separator"></li>
    317319                                                <li>Total Download Rate
  • trunk/web/javascript/torrent.js

    r13101 r13308  
    120120        {
    121121                this.fields = {};
     122                this.fieldObservers = {};
    122123                this.refresh (data);
    123124        },
    124125
     126        notifyOnFieldChange: function(field, callback) {
     127                this.fieldObservers[field] = this.fieldObservers[field] || [];
     128                this.fieldObservers[field].push(callback);
     129        },
     130
    125131        setField: function(o, name, value)
    126132        {
     133                var i, observer;
     134               
    127135                if (o[name] === value)
    128136                        return false;
     137                if (o == this.fields && this.fieldObservers[name] && this.fieldObservers[name].length) {
     138                        for (i=0; observer=this.fieldObservers[name][i]; ++i) {
     139                                observer.call(this, value, o[name], name);
     140                        }
     141                }
    129142                o[name] = value;
    130143                return true;
  • trunk/web/javascript/transmission.js

    r13271 r13308  
    681681                                break;
    682682
     683                        case 'toggle_notifications':
     684                                Notifications && Notifications.toggle();
     685                                break;
     686
    683687                        default:
    684688                                console.log('unhandled: ' + id);
     
    724728                                if(!('name' in t.fields) || !('status' in t.fields))
    725729                                        needinfo.push(id);
     730
     731                                t.notifyOnFieldChange('status', $.proxy(function (newValue, oldValue) {
     732                                        if (oldValue === Torrent._StatusDownload && (newValue == Torrent._StatusSeed || newValue == Torrent._StatusSeedWait)) {
     733                                                $(this).trigger('downloadComplete', [t]);
     734                                        } else if (oldValue === Torrent._StatusSeed && newValue === Torrent._StatusStopped && t.isFinished()) {
     735                                                $(this).trigger('seedingComplete', [t]);
     736                                        } else {
     737                                                $(this).trigger('statusChange', [t]);
     738                                        }
     739                                }, this));
    726740                        }
    727741                }
Note: See TracChangeset for help on using the changeset viewer.