From 67a8cbfac8b03c997121c8db5262516044ebf088 Mon Sep 17 00:00:00 2001 From: BtbN Date: Fri, 7 Mar 2014 19:31:23 +0100 Subject: [PATCH 1/2] Fix crash on startup --- src/input/mpegts/linuxdvb/linuxdvb_adapter.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/input/mpegts/linuxdvb/linuxdvb_adapter.c b/src/input/mpegts/linuxdvb/linuxdvb_adapter.c index df8c0e36..406095a5 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_adapter.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_adapter.c @@ -298,6 +298,7 @@ linuxdvb_adapter_add ( const char *path ) #endif pthread_mutex_unlock(&global_lock); htsmsg_destroy(conf); + conf = feconf = NULL; } /* Relock before exit */ From fbad5312c57b6ebde4409a14be26186006f44c91 Mon Sep 17 00:00:00 2001 From: BtbN Date: Thu, 6 Mar 2014 18:45:28 +0100 Subject: [PATCH 2/2] Add channel number management functions --- src/webui/static/app/chconf.js | 144 ++++++++++++++++++++++++++++++++- 1 file changed, 142 insertions(+), 2 deletions(-) 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',