/* Find/Create channel in the list */
epggrab_channel_t *epggrab_channel_find
- ( epggrab_channel_tree_t *tree, const char *id, int create, int *save )
+ ( epggrab_channel_tree_t *tree, const char *id, int create, int *save,
+ epggrab_module_t *owner )
{
epggrab_channel_t *ec;
static epggrab_channel_t *skel = NULL;
+ assert(owner);
if (!skel) skel = calloc(1, sizeof(epggrab_channel_t));
skel->id = (char*)id;
} else {
ec = RB_INSERT_SORTED(tree, skel, link, _ch_id_cmp);
if (!ec) {
- ec = skel;
- skel = NULL;
- ec->id = strdup(id);
- *save = 1;
+ ec = skel;
+ skel = NULL;
+ ec->id = strdup(id);
+ ec->mod = owner;
+ *save = 1;
}
}
return ec;
htsmsg_t *a;
htsmsg_field_t *f;
- epggrab_channel_t *ch = epggrab_channel_find(mod->channels, id, 1, &save);
+ epggrab_channel_t *ch = epggrab_channel_find(mod->channels, id, 1, &save, mod);
if ((str = htsmsg_get_str(m, "name")))
ch->name = strdup(str);
{
char chid[32];
sprintf(chid, "%s-%d", mod->id, cid);
- return epggrab_channel_find(&_opentv_channels, chid, create, save);
+ return epggrab_channel_find(&_opentv_channels, chid, create, save,
+ (epggrab_module_t*)mod);
}
static epg_season_t *_opentv_find_season
#include "epggrab/private.h"
static epggrab_channel_tree_t _pyepg_channels;
+static epggrab_module_t *_pyepg_module; // primary module
static epggrab_channel_t *_pyepg_channel_find
( const char *id, int create, int *save )
{
- return epggrab_channel_find(&_pyepg_channels, id, create, save);
+ return epggrab_channel_find(&_pyepg_channels, id, create, save,
+ _pyepg_module);
}
/* **************************************************************************
NULL, _pyepg_parse, NULL, NULL);
/* External module */
- epggrab_module_ext_create(NULL, "pyepg", "PyEPG", "pyepg",
- _pyepg_parse, NULL,
- &_pyepg_channels);
+ _pyepg_module = (epggrab_module_t*)
+ epggrab_module_ext_create(NULL, "pyepg", "PyEPG", "pyepg",
+ _pyepg_parse, NULL,
+ &_pyepg_channels);
}
void pyepg_load ( void )
#define XMLTV_FIND_GRABBERS "/usr/bin/tv_find_grabbers"
static epggrab_channel_tree_t _xmltv_channels;
+static epggrab_module_t *_xmltv_module;
static epggrab_channel_t *_xmltv_channel_find
( const char *id, int create, int *save )
{
- return epggrab_channel_find(&_xmltv_channels, id, create, save);
+
+ return epggrab_channel_find(&_xmltv_channels, id, create, save,
+ _xmltv_module);
}
/* **************************************************************************
void xmltv_init ( void )
{
/* External module */
- epggrab_module_ext_create(NULL, "xmltv", "XMLTV", "xmltv",
- _xmltv_parse, NULL,
- &_xmltv_channels);
+ _xmltv_module = (epggrab_module_t*)
+ epggrab_module_ext_create(NULL, "xmltv", "XMLTV", "xmltv",
+ _xmltv_parse, NULL,
+ &_xmltv_channels);
/* Standard modules */
_xmltv_load_grabbers();
int epggrab_channel_link ( epggrab_channel_t *ec, struct channel *ch );
epggrab_channel_t *epggrab_channel_find
- ( epggrab_channel_tree_t *chs, const char *id, int create, int *save );
+ ( epggrab_channel_tree_t *chs, const char *id, int create, int *save,
+ epggrab_module_t *owner );
/* **************************************************************************
* Internal module routines