diff --git a/src/webui/static/app/chconf.js b/src/webui/static/app/chconf.js index 482b085b..539a03e7 100644 --- a/src/webui/static/app/chconf.js +++ b/src/webui/static/app/chconf.js @@ -43,12 +43,152 @@ tvheadend.comet.on('channels', function(m) { tvheadend.channel_tab = function(panel) { + function assign_low_number() { + var tab = panel.getActiveTab() + var sm = tab.getSelectionModel() + var store = tab.getStore() + + if (sm.getCount() != 1) + return + + var nums = [] + store.each(function() { + if(this.data.number > 0) + nums.push(this.data.number) + }) + + if(nums.length == 0) + { + sm.getSelected().set('number', 1) + return + } + + nums.sort(function(a,b) { return (a - b) }) + + var max = nums[nums.length - 1] + var low = max + 1 + + for(var i = 1; i <= max; ++i) + { + var ct = false + for(var j = 0; j < nums.length; ++j) + if(nums[j] == i) + { + ct = true + break + } + + if(!ct) + { + low = i + break; + } + } + + sm.getSelected().set('number', low) + sm.selectNext() + } + + function move_number_up() { + var tab = panel.getActiveTab() + var sm = tab.getSelectionModel() + var store = tab.getStore() + + if (sm.getCount() != 1) + return + + var sel = sm.getSelected() + var num = sel.data.number + + if(!num) + num = 0 + + store.each(function() { + if(this.data.number == num + 1) + this.set('number', num) + }) + + sel.set('number', num + 1) + } + + function move_number_down() { + var tab = panel.getActiveTab() + var sm = tab.getSelectionModel() + var store = tab.getStore() + + if(sm.getCount() != 1) + return + + var sel = sm.getSelected() + var num = sel.data.number + + if(!num) + num = 0 + + if(num <= 1) + return + + store.each(function() { + if(this.data.number == num - 1) + this.set('number', num) + }) + + sel.set('number', num - 1) + } + + function swap_numbers() { + var tab = panel.getActiveTab() + var sm = tab.getSelectionModel() + var store = tab.getStore() + + if(sm.getCount() != 2) + return + + var sel = sm.getSelections() + var tmp = sel[0].data.number + + sel[0].set('number', sel[1].data.number) + sel[1].set('number', tmp) + } + var mapButton = new Ext.Toolbar.Button({ tooltip : 'Map services to channels', iconCls : '', text : 'Map Services', handler : tvheadend.service_mapper, - disabled : false, + disabled : false + }); + + var lowNoButton = new Ext.Toolbar.Button({ + tooltip : 'Assign lowest free channel number', + iconCls : '', + text : 'Assign Number', + handler : assign_low_number, + disabled : false + }); + + var noUpButton = new Ext.Toolbar.Button({ + tooltip : 'Move channel one number up', + iconCls : '', + text : 'Number Up', + handler : move_number_up, + disabled : false + }); + + var noDownButton = new Ext.Toolbar.Button({ + tooltip : 'Move channel one number down', + iconCls : '', + text : 'Number Down', + handler : move_number_down, + disabled : false + }); + + var noSwapButton = new Ext.Toolbar.Button({ + tooltip : 'Swap the two selected channels numbers', + iconCls : '', + text : 'Swap Numbers', + handler : swap_numbers, + disabled : false }); tvheadend.idnode_grid(panel, { @@ -62,7 +202,7 @@ tvheadend.channel_tab = function(panel) create : {} }, del : true, - tbar : [ mapButton ], + tbar : [ mapButton, lowNoButton, noUpButton, noDownButton, noSwapButton ], lcol : [ { header : 'Play',