]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Updated configuration to include epggrab channel update settings, also added sensible...
authorAdam Sutton <dev@adamsutton.me.uk>
Tue, 26 Jun 2012 16:27:02 +0000 (17:27 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Mon, 30 Jul 2012 14:50:42 +0000 (15:50 +0100)
src/epggrab.c
src/epggrab.h
src/webui/extjs.c
src/webui/static/app/epggrab.js

index 51c4fb5c4ed305e220e8d31ecbf0b694db9562f8..fb8816e09cebd554ef497360e3519976a9e1753e 100644 (file)
@@ -32,6 +32,9 @@ pthread_cond_t        epggrab_cond;
 uint32_t              epggrab_interval;
 epggrab_module_t*     epggrab_module;
 epggrab_module_list_t epggrab_modules;
+uint32_t              epggrab_channel_rename;
+uint32_t              epggrab_channel_renumber;
+uint32_t              epggrab_channel_reicon;
 
 /* **************************************************************************
  * Helpers
@@ -234,9 +237,12 @@ static int _ch_link ( epggrab_channel_t *ec, channel_t *ch )
     tvhlog(LOG_INFO, ec->mod->id, "linking %s to %s",
            ec->id, ch->ch_name);
     ec->channel = ch;
-    if (ec->name)     channel_rename(ch, ec->name);
-    if (ec->icon)     channel_set_icon(ch, ec->icon);
-    if (ec->number>0) channel_set_number(ch, ec->number);
+    if (ec->name && epggrab_channel_rename)
+      channel_rename(ch, ec->name);
+    if (ec->icon && epggrab_channel_reicon)
+      channel_set_icon(ch, ec->icon);
+    if (ec->number>0 && epggrab_channel_renumber)
+      channel_set_number(ch, ec->number);
   }
 
   return match;
@@ -651,6 +657,9 @@ static void _epggrab_load ( void )
 
   /* Process */
   if (m) {
+    htsmsg_get_u32(m, "channel_rename",   &epggrab_channel_rename);
+    htsmsg_get_u32(m, "channel_renumber", &epggrab_channel_renumber);
+    htsmsg_get_u32(m, "channel_reicon",   &epggrab_channel_reicon);
     if (!htsmsg_get_u32(m, old ? "grab-interval" : "interval", &epggrab_interval))
       if (old) epggrab_interval *= 3600;
     htsmsg_get_u32(m, "grab-enabled", &enabled);
@@ -666,35 +675,44 @@ static void _epggrab_load ( void )
       }
     }
     htsmsg_destroy(m);
-  }
   
-  /* Finish up migration */
-  if (old) {
-    htsmsg_field_t *f;
-    htsmsg_t *xc, *ch;
-    htsmsg_t *xchs = hts_settings_load("xmltv/channels");
-    htsmsg_t *chs  = hts_settings_load("channels");
-    if (xchs) {
-      HTSMSG_FOREACH(f, chs) {
-        if ((ch = htsmsg_get_map_by_field(f))) {
-          if ((str = htsmsg_get_str(ch, "xmltv-channel"))) {
-            if ((xc = htsmsg_get_map(xchs, str))) {
-              htsmsg_add_u32(xc, "channel", atoi(f->hmf_name));
+    /* Finish up migration */
+    if (old) {
+      htsmsg_field_t *f;
+      htsmsg_t *xc, *ch;
+      htsmsg_t *xchs = hts_settings_load("xmltv/channels");
+      htsmsg_t *chs  = hts_settings_load("channels");
+      if (xchs) {
+        HTSMSG_FOREACH(f, chs) {
+          if ((ch = htsmsg_get_map_by_field(f))) {
+            if ((str = htsmsg_get_str(ch, "xmltv-channel"))) {
+              if ((xc = htsmsg_get_map(xchs, str))) {
+                htsmsg_add_u32(xc, "channel", atoi(f->hmf_name));
+              }
             }
           }
         }
-      }
-      HTSMSG_FOREACH(f, xchs) {
-        if ((xc = htsmsg_get_map_by_field(f))) {
-          hts_settings_save(xc, "epggrab/xmltv/channels/%s", f->hmf_name);
+        HTSMSG_FOREACH(f, xchs) {
+          if ((xc = htsmsg_get_map_by_field(f))) {
+            hts_settings_save(xc, "epggrab/xmltv/channels/%s", f->hmf_name);
+          }
         }
       }
-    }
 
-    /* Save epggrab config */
-    epggrab_save();
-  }
+      /* Save epggrab config */
+      epggrab_save();
+    }
 
+  /* Defaults */
+  } else {
+    epggrab_module_t *m;
+    epggrab_interval   = 12 * 3600;         // hours
+    epggrab_module     = NULL;              // disabled
+    LIST_FOREACH(m, &epggrab_modules, link) // enable all OTA by default
+      if (m->flags & EPGGRAB_MODULE_OTA)
+        epggrab_enable_module(m, 1);
+  }
   /* Load module config (channels) */
   eit_load();
   xmltv_load();
@@ -713,6 +731,9 @@ void epggrab_save ( void )
 
   /* Save */
   m = htsmsg_create_map();
+  htsmsg_add_u32(m, "channel_rename", epggrab_channel_rename);
+  htsmsg_add_u32(m, "channel_renumber", epggrab_channel_renumber);
+  htsmsg_add_u32(m, "channel_reicon", epggrab_channel_reicon);
   htsmsg_add_u32(m, "interval",   epggrab_interval);
   if ( epggrab_module )
     htsmsg_add_str(m, "module", epggrab_module->id);
@@ -760,6 +781,36 @@ int epggrab_set_module_by_id ( const char *id )
   return epggrab_set_module(epggrab_module_find_by_id(id));
 }
 
+int epggrab_set_channel_rename ( uint32_t e )
+{
+  int save = 0;
+  if ( e != epggrab_channel_rename ) {
+    epggrab_channel_rename = e;
+    save = 1;
+  }
+  return save;
+}
+
+int epggrab_set_channel_renumber ( uint32_t e )
+{
+  int save = 0;
+  if ( e != epggrab_channel_renumber ) {
+    epggrab_channel_renumber = e;
+    save = 1;
+  }
+  return save;
+}
+
+int epggrab_set_channel_reicon ( uint32_t e )
+{
+  int save = 0;
+  if ( e != epggrab_channel_reicon ) {
+    epggrab_channel_reicon = e;
+    save = 1;
+  }
+  return save;
+}
+
 int epggrab_enable_module ( epggrab_module_t *mod, uint8_t e )
 {
   int save = 0;
@@ -786,10 +837,6 @@ int epggrab_enable_module_by_id ( const char *id, uint8_t e )
  */
 void epggrab_init ( void )
 {
-  /* Defaults */
-  epggrab_interval   = 12 * 3600; // hours
-  epggrab_module     = NULL;      // disabled
-
   /* Initialise modules */
   eit_init(&epggrab_modules);
   xmltv_init(&epggrab_modules);
index 8eebf02954b616d8e4b557a0abeb40485b6b21be..7a6cdbb6903be32052f2a4bc8eaefb64588bf6a0 100644 (file)
@@ -163,19 +163,25 @@ htsmsg_t*         epggrab_module_list       ( void );
 /*
  * Configuration
  */
-extern pthread_mutex_t      epggrab_mutex;
-extern uint32_t             epggrab_interval;
-extern epggrab_module_t*    epggrab_module;
+extern pthread_mutex_t   epggrab_mutex;
+extern uint32_t          epggrab_interval;
+extern epggrab_module_t* epggrab_module;
+extern uint32_t          epggrab_channel_rename;
+extern uint32_t          epggrab_channel_renumber;
+extern uint32_t          epggrab_channel_reicon;
 
 /*
  * Update
  */
-int  epggrab_set_interval        ( uint32_t interval );
-int  epggrab_set_module          ( epggrab_module_t *module );
-int  epggrab_set_module_by_id    ( const char *id );
-int  epggrab_enable_module       ( epggrab_module_t *module, uint8_t e );
-int  epggrab_enable_module_by_id ( const char *id, uint8_t e );
-void epggrab_save                ( void );
+int  epggrab_set_interval         ( uint32_t interval );
+int  epggrab_set_module           ( epggrab_module_t *module );
+int  epggrab_set_module_by_id     ( const char *id );
+int  epggrab_set_channel_rename   ( uint32_t e );
+int  epggrab_set_channel_renumber ( uint32_t e );
+int  epggrab_set_channel_reicon   ( uint32_t e );
+int  epggrab_enable_module        ( epggrab_module_t *module, uint8_t e );
+int  epggrab_enable_module_by_id  ( const char *id, uint8_t e );
+void epggrab_save                 ( void );
 
 /* **************************************************************************
  * Global Functions
index d0dcdfbe5ebbc9d421ba09e1001a778a9679651b..a143ac69cd3fef7baf53a0f63604f78d0ec71209 100644 (file)
@@ -489,6 +489,9 @@ extjs_epggrab(http_connection_t *hc, const char *remain, void *opaque)
     if (epggrab_module)
       htsmsg_add_str(r, "module", epggrab_module->id);
     htsmsg_add_u32(r, "interval", epggrab_interval);
+    htsmsg_add_u32(r, "channel_rename", epggrab_channel_rename);
+    htsmsg_add_u32(r, "channel_renumber", epggrab_channel_renumber);
+    htsmsg_add_u32(r, "channel_reicon", epggrab_channel_reicon);
     pthread_mutex_unlock(&epggrab_mutex);
 
     out = json_single_record(r, "epggrabSettings");
@@ -513,6 +516,12 @@ extjs_epggrab(http_connection_t *hc, const char *remain, void *opaque)
   } else if (!strcmp(op, "saveSettings") ) {
     int save = 0;
     pthread_mutex_lock(&epggrab_mutex);
+    str = http_arg_get(&hc->hc_req_args, "channel_rename");
+    save |= epggrab_set_channel_rename(str ? 1 : 0);
+    str = http_arg_get(&hc->hc_req_args, "channel_renumber");
+    save |= epggrab_set_channel_renumber(str ? 1 : 0);
+    str = http_arg_get(&hc->hc_req_args, "channel_reicon");
+    save |= epggrab_set_channel_reicon(str ? 1 : 0);
     if ( (str = http_arg_get(&hc->hc_req_args, "interval")) )
       save |= epggrab_set_interval(atoi(str));
     if ( (str = http_arg_get(&hc->hc_req_args, "module")) )
index 5dd90804f9a110a212b0a59a4463ce33074708e2..cc7f399e8b5b46c95ebf46564db3c0b472f00edf 100644 (file)
@@ -48,15 +48,29 @@ tvheadend.epggrab = function() {
     moduleStore.each(function(r) {
       otaModuleStore.add(r.copy());
     });
+    moduleStore.filterBy(function(r) {
+      return r.get('flags') & (EPGGRAB_MODULE_OTA | EPGGRAB_MODULE_EXTERNAL);
+    });
   });
 
+  /* Enable module in one of the stores (will auto update primary) */
+  function moduleSelect ( r, e )
+  {
+    r.set('enabled', e);
+    t = moduleStore.getById(r.id);
+    if (t) t.set('enabled', e);
+  }
+
   /*
    * Basic Config
    */
 
   var confreader = new Ext.data.JsonReader(
     { root: 'epggrabSettings' },
-    [ 'module', 'interval' ]
+    [ 
+      'module', 'interval',
+      'channel_rename', 'channel_renumber', 'channel_reicon',
+    ]
   );
 
   /* ****************************************************************
@@ -145,10 +159,49 @@ tvheadend.epggrab = function() {
     }
   });
 
+  /*
+   * Channel handling
+   */
+  var channelRename = new Ext.form.Checkbox({
+    name       : 'channel_rename',
+    fieldLabel : 'Update channel name',
+  });
+
+  var channelRenumber = new Ext.form.Checkbox({
+    name       : 'channel_renumber',
+    fieldLabel : 'Update channel number',
+  });
+
+  var channelReicon = new Ext.form.Checkbox({
+    name       : 'channel_reicon',
+    fieldLabel : 'Update channel icon'
+  });
+
+  /*
+   * Simple fieldet
+   */
+  var simplePanel = new Ext.form.FieldSet({
+    title       : 'Basic Config',
+    width       : 800,
+    autoHeight  : true,
+    collapsible : true,
+    items       : [
+      interval,
+      internalModule,
+      intervalValue,
+      intervalUnit,
+      channelRename,
+      channelRenumber,
+      channelReicon,
+    ]
+  });
+  
+
   /* ****************************************************************
    * Advanced Fields
    * ***************************************************************/
 
+
   /*
    * External modules
    */
@@ -156,13 +209,14 @@ tvheadend.epggrab = function() {
     singleSelect : false,
     listeners : {
       'rowselect' : function (s, ri, r) {
-        r.set('enabled', 1);
+        moduleSelect(r, 1);
       },
       'rowdeselect' : function (s, ri, r) {
-        r.set('enabled', 0);
+        moduleSelect(r, 0);
       }
     }
   });
+
   var externalColumnModel = new Ext.grid.ColumnModel([
     externalSelectionModel,
     {
@@ -192,6 +246,17 @@ tvheadend.epggrab = function() {
     iconCls        : 'icon-grid',
   });
 
+  var externalPanel = new Ext.form.FieldSet({
+    title       : 'External Interfaces',
+    width       : 800,
+    autoHeight  : true,
+    collapsible : true,
+    collapsed   : true,
+    items       : [
+      externalGrid
+    ]
+  });
+
   /*
    * OTA modules
    */
@@ -200,17 +265,27 @@ tvheadend.epggrab = function() {
     singleSelect : false,
     listeners : {
       'rowselect' : function (s, ri, r) {
-        r.set('enabled', 1);
+        moduleSelect(r, 1);
       },
       'rowdeselect' : function (s, ri, r) {
-        r.set('enabled', 0);
+        moduleSelect(r, 0);
       }
     }
   });
 
+  var otaColumnModel = new Ext.grid.ColumnModel([
+    otaSelectionModel,
+    {
+      header    : 'Module',
+      dataIndex : 'name',
+      width     : 200,
+      sortable  : false,
+    }
+  ]);
+
   var otaGrid = new Ext.grid.EditorGridPanel({
     store          : otaModuleStore,
-    cm             : externalColumnModel,
+    cm             : otaColumnModel,
     sm             : otaSelectionModel,
     width          : 600,
     height         : 150,
@@ -221,26 +296,15 @@ tvheadend.epggrab = function() {
     iconCls        : 'icon-grid',
   });
 
-  /* HACK: get display working */
-  externalGrid.on('render', function(){
-    delay = new Ext.util.DelayedTask(function(){
-    rows = [];
-    externalModuleStore.each(function(r){
-      if (r.get('enabled')) rows.push(r);
-    });
-    externalSelectionModel.selectRecords(rows);
-    });
-    delay.delay(100);
-  });
-  otaGrid.on('render', function(){
-    delay = new Ext.util.DelayedTask(function(){
-    rows = [];
-    otaModuleStore.each(function(r){
-      if (r.get('enabled')) rows.push(r);
-    });
-    otaSelectionModel.selectRecords(rows);
-    });
-    delay.delay(100);
+  var otaPanel = new Ext.form.FieldSet({
+    title       : 'OTA Interfaces',
+    width       : 800,
+    autoHeight  : true,
+    collapsible : true,
+    collapsed   : true,
+    items       : [
+      otaGrid
+    ],
   });
 
   /* ****************************************************************
@@ -273,15 +337,11 @@ tvheadend.epggrab = function() {
     reader        : confreader,
     layout        : 'form',
     defaultType   : 'textfield',
+    autoHeight    : true,
     items         : [
-      interval,
-      internalModule,
-      intervalValue,
-      intervalUnit,
-      new Ext.form.Label({text: 'External Interfaces'}),
-      externalGrid,
-      new Ext.form.Label({text: 'OTA Modules'}),
-      otaGrid,
+      simplePanel,
+      externalPanel,
+      otaPanel,
     ],
     tbar: [
       saveButton,
@@ -294,7 +354,38 @@ tvheadend.epggrab = function() {
    * Load/Save
    * ***************************************************************/
 
+  /* HACK: get display working */
+  externalGrid.on('render', function(){
+    delay = new Ext.util.DelayedTask(function(){
+    rows = [];
+    externalModuleStore.each(function(r){
+      if (r.get('enabled')) rows.push(r);
+    });
+    externalSelectionModel.selectRecords(rows);
+    });
+    delay.delay(100);
+  });
+  otaGrid.on('render', function(){
+    delay = new Ext.util.DelayedTask(function(){
+    rows = [];
+    otaModuleStore.each(function(r){
+      if (r.get('enabled')) rows.push(r);
+    });
+    otaSelectionModel.selectRecords(rows);
+    });
+    delay.delay(100);
+  });
+
   confpanel.on('render', function() {
+
+    /* Hack to get display working */
+    delay = new Ext.util.DelayedTask(function(){
+      simplePanel.doLayout(false);
+      externalPanel.doLayout(false);
+      otaPanel.doLayout(false);
+    });
+    delay.delay(100);
+
     confpanel.getForm().load({
       url     : 'epggrab',
       params  : { op : 'loadSettings' },
@@ -306,10 +397,7 @@ tvheadend.epggrab = function() {
 
   function saveChanges() {
     mods = [];
-    externalModuleStore.each(function(r) {
-      mods.push({id: r.get('id'), enabled: r.get('enabled') ? 1 : 0});
-    });  
-    otaModuleStore.each(function(r) {
+    moduleStore.each(function(r) {
       mods.push({id: r.get('id'), enabled: r.get('enabled') ? 1 : 0});
     });  
     mods = Ext.util.JSON.encode(mods);