HTSMSG_FOREACH(f, a) {
mod = epggrab_module_find_by_id(f->hmf_name);
map = htsmsg_field_get_map(f);
- if (mod && map)
+ if (mod && map) {
idnode_load(&mod->idnode, map);
+ epggrab_activate_module(mod, mod->enabled);
+ }
}
}
htsmsg_destroy(m);
epggrab_conf.cron = strdup("# Default config (00:04 and 12:04 everyday)\n4 */12 * * *");
LIST_FOREACH(mod, &epggrab_modules, link) // enable all OTA by default
if (mod->type == EPGGRAB_OTA)
- epggrab_enable_module(mod, 1);
+ epggrab_activate_module(mod, 1);
}
+
+ idnode_notify_changed(&epggrab_conf.idnode);
/* Load module config (channels) */
#if 0
* Initialisation
* *************************************************************************/
-int epggrab_enable_module ( epggrab_module_t *mod, int e )
+int epggrab_activate_module ( epggrab_module_t *mod, int a )
{
int save = 0;
if (!mod) return 0;
- if (mod->enable) {
- save = mod->enable(mod, e);
- } else if (e != mod->enabled) {
- mod->enabled = e;
+ if (mod->activate) {
+ save = mod->activate(mod, a);
+ } else if (a != mod->active) {
+ mod->active = a;
save = 1;
}
return save;
const char *id; ///< Module identifier
const char *name; ///< Module name (for display)
int enabled; ///< Whether the module is enabled
+ int active; ///< Whether the module is active
int priority; ///< Priority of the module
epggrab_channel_tree_t *channels; ///< Channel list
- /* Enable/Disable */
- int (*enable) ( void *m, uint8_t e );
+ /* Activate */
+ int (*activate) ( void *m, int activate );
/* Free */
void (*done) ( void *m );
/*
* Set configuration
*/
-int epggrab_enable_module ( epggrab_module_t *mod, int e );
+int epggrab_activate_module ( epggrab_module_t *mod, int activate );
void epggrab_ota_set_cron ( void );
void epggrab_ota_trigger ( int secs );
static void epggrab_mod_class_save(idnode_t *self)
{
epggrab_module_t *mod = (epggrab_module_t *)self;
- epggrab_enable_module(mod, mod->enabled);
+ epggrab_activate_module(mod, mod->enabled);
epggrab_save();
}
epggrab_module_int_done( void *m )
{
epggrab_module_int_t *mod = m;
+ mod->active = 0;
free((char *)mod->path);
mod->path = NULL;
}
int sock;
assert(mod->type == EPGGRAB_EXT);
- mod->enabled = 0;
+ mod->active = 0;
sock = mod->sock;
mod->sock = 0;
shutdown(sock, SHUT_RDWR);
}
/*
- * Enable socket module
+ * Activate socket module
*/
static int
-epggrab_module_enable_socket ( void *m, uint8_t e )
+epggrab_module_activate_socket ( void *m, int a )
{
pthread_attr_t tattr;
struct sockaddr_un addr;
epggrab_module_ext_t *mod = (epggrab_module_ext_t*)m;
+ const char *path;
assert(mod->type == EPGGRAB_EXT);
-
+
/* Ignore */
- if ( mod->enabled == e ) return 0;
+ if ( mod->active == a ) return 0;
/* Disable */
- if (!e) {
+ if (!a) {
+ path = strdup(mod->path);
epggrab_module_done_socket(m);
-
+ mod->path = path;
/* Enable */
} else {
unlink(mod->path); // just in case!
tvhlog(LOG_DEBUG, mod->id, "starting socket thread");
pthread_attr_init(&tattr);
- mod->enabled = 1;
+ mod->active = 1;
tvhthread_create(&mod->tid, &tattr, _epggrab_socket_thread, mod);
}
return 1;
channels);
/* Local */
- skel->type = EPGGRAB_EXT;
- skel->enable = epggrab_module_enable_socket;
- skel->done = epggrab_module_done_socket;
+ skel->type = EPGGRAB_EXT;
+ skel->activate = epggrab_module_activate_socket;
+ skel->done = epggrab_module_done_socket;
return skel;
}
id, name, priority, channels);
/* Setup */
- skel->type = EPGGRAB_OTA;
- skel->enable = ops->enable;
- skel->start = ops->start;
- skel->done = ops->done;
- skel->tune = ops->tune;
+ skel->type = EPGGRAB_OTA;
+ skel->activate = ops->activate;
+ skel->start = ops->start;
+ skel->done = ops->done;
+ skel->tune = ops->tune;
//TAILQ_INIT(&skel->muxes);
return skel;
* *************************************************************************/
typedef struct epggrab_ota_module_ops {
- int (*start) (epggrab_ota_map_t *map, struct mpegts_mux *mm);
- int (*enable) (void *m, uint8_t e );
- void (*done) (void *m);
- int (*tune) (epggrab_ota_map_t *map, epggrab_ota_mux_t *om,
- struct mpegts_mux *mm);
+ int (*start) (epggrab_ota_map_t *map, struct mpegts_mux *mm);
+ int (*activate) (void *m, int e);
+ void (*done) (void *m);
+ int (*tune) (epggrab_ota_map_t *map, epggrab_ota_mux_t *om,
+ struct mpegts_mux *mm);
} epggrab_ota_module_ops_t;
epggrab_module_ota_t *epggrab_module_ota_create