1 (function() { 2 Ext.deluge.Statusbar = Ext.extend(Ext.StatusBar, { 3 constructor: function(config) { 4 config = Ext.apply({ 5 id: 'deluge-statusbar', 6 defaultIconCls: 'x-not-connected', 7 defaultText: _('Not Connected') 8 }, config); 9 Ext.deluge.Statusbar.superclass.constructor.call(this, config); 10 }, 11 12 initComponent: function() { 13 Ext.deluge.Statusbar.superclass.initComponent.call(this); 14 15 Deluge.Events.on('connect', this.onConnect, this); 16 Deluge.Events.on('disconnect', this.onDisconnect, this); 17 }, 18 19 createButtons: function() { 20 this.add({ 21 id: 'statusbar-connections', 22 text: ' ', 23 cls: 'x-btn-text-icon', 24 iconCls: 'x-deluge-connections', 25 menu: Deluge.Menus.Connections 26 }, '-', { 27 id: 'statusbar-downspeed', 28 text: ' ', 29 cls: 'x-btn-text-icon', 30 iconCls: 'x-deluge-downloading', 31 menu: Deluge.Menus.Download 32 }, '-', { 33 id: 'statusbar-upspeed', 34 text: ' ', 35 cls: 'x-btn-text-icon', 36 iconCls: 'x-deluge-seeding', 37 menu: Deluge.Menus.Upload 38 }, '-', { 39 id: 'statusbar-traffic', 40 text: ' ', 41 cls: 'x-btn-text-icon', 42 iconCls: 'x-deluge-traffic' 43 }, '-', { 44 id: 'statusbar-dht', 45 text: ' ', 46 cls: 'x-btn-text-icon', 47 iconCls: 'x-deluge-dht' 48 }); 49 this.created = true; 50 }, 51 52 onConnect: function() { 53 this.setStatus({ 54 iconCls: 'x-connected', 55 text: '' 56 }); 57 if (!this.created) this.createButtons(); 58 else { 59 this.items.each(function(item) { 60 item.show(); 61 item.enable(); 62 }); 63 } 64 }, 65 66 onDisconnect: function() { 67 this.clearStatus({useDefaults:true}); 68 this.items.each(function(item) { 69 item.hide(); 70 item.disable(); 71 }); 72 }, 73 74 update: function(stats) { 75 function addSpeed(val) {return val + ' KiB/s'} 76 77 var updateStat = function(name, config) { 78 var item = this.items.get('statusbar-' + name); 79 if (config.limit.value == -1) { 80 var str = (config.value.formatter) ? config.value.formatter(config.value.value) : config.value.value; 81 } else { 82 var value = (config.value.formatter) ? config.value.formatter(config.value.value) : config.value.value; 83 var limit = (config.limit.formatter) ? config.limit.formatter(config.limit.value) : config.limit.value; 84 var str = String.format(config.format, value, limit); 85 } 86 item.setText(str); 87 }.bind(this); 88 89 updateStat('connections', { 90 value: {value: stats.num_connections}, 91 limit: {value: stats.max_num_connections}, 92 format: '{0} ({1})' 93 }); 94 95 updateStat('downspeed', { 96 value: { 97 value: stats.download_rate, 98 formatter: Deluge.Formatters.speed 99 }, 100 limit: { 101 value: stats.max_download, 102 formatter: addSpeed 103 }, 104 format: '{0} ({1})' 105 }); 106 107 updateStat('upspeed', { 108 value: { 109 value: stats.upload_rate, 110 formatter: Deluge.Formatters.speed 111 }, 112 limit: { 113 value: stats.max_upload, 114 formatter: addSpeed 115 }, 116 format: '{0} ({1})' 117 }); 118 119 updateStat('traffic', { 120 value: { 121 value: stats.payload_download_rate, 122 formatter: Deluge.Formatters.speed 123 }, 124 limit: { 125 value: stats.payload_upload_rate, 126 formatter: Deluge.Formatters.speed 127 }, 128 format: '{0}/{1}' 129 }); 130 131 this.items.get('statusbar-dht').setText(stats.dht_nodes); 132 133 function updateMenu(menu, stat) { 134 var item = menu.items.get(stat) 135 if (!item) { 136 item = menu.items.get('other') 137 } 138 item.setChecked(true); 139 } 140 141 updateMenu(Deluge.Menus.Connections, stats.max_num_connections); 142 updateMenu(Deluge.Menus.Download, stats.max_download); 143 updateMenu(Deluge.Menus.Upload, stats.max_upload); 144 } 145 }); 146 Deluge.Statusbar = new Ext.deluge.Statusbar(); 147 })();