]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Add channel number management functions 338/head
authorBtbN <btbn@btbn.de>
Thu, 6 Mar 2014 17:45:28 +0000 (18:45 +0100)
committerBtbN <btbn@btbn.de>
Fri, 7 Mar 2014 20:19:59 +0000 (21:19 +0100)
src/webui/static/app/chconf.js

index 482b085b8943b57d1b7534f7fb7a1ab73c077a0b..539a03e785d7091700745cce5ac29407439279e3 100644 (file)
@@ -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',