/*
* tvheadend, channel functions
- * Copyright (C) 2007 Andreas Öman
+ * Copyright (C) 2007 Andreas Öman
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
return blank;
}
+int
+channel_set_name ( channel_t *ch, const char *name )
+{
+ int save = 0;
+ if (!ch || !name) return 0;
+ if (!ch->ch_name || strcmp(ch->ch_name, name) ) {
+ if (ch->ch_name) free(ch->ch_name);
+ ch->ch_name = strdup(name);
+ save = 1;
+ }
+ return save;
+}
+
int64_t
channel_get_number ( channel_t *ch )
{
return 0;
}
+int
+channel_set_number ( channel_t *ch, uint32_t major, uint32_t minor )
+{
+ int save = 0;
+ int64_t chnum = (uint64_t)major * CHANNEL_SPLIT + (uint64_t)minor;
+ if (!ch || !chnum) return 0;
+ if (!ch->ch_number || ch->ch_number != chnum) {
+ ch->ch_number = chnum;
+ save = 1;
+ }
+ return save;
+}
+
static int
check_file( const char *url )
{
return buf;
}
+int channel_set_icon ( channel_t *ch, const char *icon )
+{
+ int save = 0;
+ if (!ch || !icon) return 0;
+ if (!ch->ch_icon || strcmp(ch->ch_icon, icon) ) {
+ if (ch->ch_icon) free(ch->ch_icon);
+ ch->ch_icon = strdup(icon);
+ save = 1;
+ }
+ return save;
+}
+
/* **************************************************************************
* Creation/Deletion
* *************************************************************************/
/*
* tvheadend, channel functions
- * Copyright (C) 2007 Andreas Öman
+ * Copyright (C) 2007 Andreas Öman
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
void channel_save(channel_t *ch);
const char *channel_get_name ( channel_t *ch );
-int channel_set_name ( channel_t *ch, const char *s );
+int channel_set_name ( channel_t *ch, const char *name );
#define CHANNEL_SPLIT 1000000
static inline uint32_t channel_get_minor ( int64_t chnum ) { return chnum % CHANNEL_SPLIT; }
int64_t channel_get_number ( channel_t *ch );
+int channel_set_number ( channel_t *ch, uint32_t major, uint32_t minor );
const char *channel_get_icon ( channel_t *ch );
int channel_set_icon ( channel_t *ch, const char *icon );
char *name; ///< Channel name
char *icon; ///< Channel icon
- int number; ///< Channel number
-
+ int major; ///< Channel major number
+ int minor; ///< Channel minor number
+
LIST_HEAD(,epggrab_channel_link) channels; ///< Mapped channels
} epggrab_channel_t;
*/
int epggrab_channel_set_name ( epggrab_channel_t *ch, const char *name );
int epggrab_channel_set_icon ( epggrab_channel_t *ch, const char *icon );
-int epggrab_channel_set_number ( epggrab_channel_t *ch, int number );
+int epggrab_channel_set_number ( epggrab_channel_t *ch, int major, int minor );
/*
* Updated/link
int
epggrab_channel_link ( epggrab_channel_t *ec, channel_t *ch )
{
+ int save = 0;
epggrab_channel_link_t *ecl;
/* No change */
ecl->ecl_epggrab = ec;
LIST_INSERT_HEAD(&ec->channels, ecl, ecl_epg_link);
LIST_INSERT_HEAD(&ch->ch_epggrab, ecl, ecl_chn_link);
-#if TODO_CHAN_UPDATE
if (ec->name && epggrab_channel_rename)
- channel_rename(ch, ec->name);
- if (ec->number>0 && epggrab_channel_renumber)
- channel_set_number(ch, ec->number);
+ save |= channel_set_name(ch, ec->name);
+ if ((ec->major > 0 || ec->minor > 0) && epggrab_channel_renumber)
+ save |= channel_set_number(ch, ec->major, ec->minor);
if (ec->icon && epggrab_channel_reicon)
- channel_set_icon(ch, ec->icon);
-#endif
+ save |= channel_set_icon(ch, ec->icon);
+ if (save)
+ channel_save(ch);
/* Save */
if (ec->mod->ch_save) ec->mod->ch_save(ec->mod, ec);
if (!ec->name || strcmp(ec->name, name)) {
if (ec->name) free(ec->name);
ec->name = strdup(name);
-#if TODO_CHAN_UPDATE
if (epggrab_channel_rename) {
epggrab_channel_link_t *ecl;
- LIST_FOREACH(ecl, &ec->channels, link)
- channel_rename(ecl->channel, name);
+ LIST_FOREACH(ecl, &ec->channels, ecl_epg_link) {
+ if (channel_set_name(ecl->ecl_channel, name))
+ channel_save(ecl->ecl_channel);
+ }
}
-#endif
save = 1;
}
return save;
if (!ec->icon || strcmp(ec->icon, icon) ) {
if (ec->icon) free(ec->icon);
ec->icon = strdup(icon);
-#if TODO_CHAN_UPDATE
if (epggrab_channel_reicon) {
epggrab_channel_link_t *ecl;
- LIST_FOREACH(ecl, &ec->channels, link)
- channel_set_icon(ecl->channel, icon);
+ LIST_FOREACH(ecl, &ec->channels, ecl_epg_link) {
+ if (channel_set_icon(ecl->ecl_channel, icon))
+ channel_save(ecl->ecl_channel);
+ }
}
-#endif
save = 1;
}
return save;
}
/* Set channel number */
-int epggrab_channel_set_number ( epggrab_channel_t *ec, int number )
+int epggrab_channel_set_number ( epggrab_channel_t *ec, int major, int minor )
{
int save = 0;
- if (!ec || (number <= 0)) return 0;
- if (ec->number != number) {
- ec->number = number;
-#if TODO_CHAN_UPDATE
+ if (!ec || (major <= 0 && minor <= 0)) return 0;
+ if (ec->major != major || ec->minor != minor) {
+ ec->major = major;
+ ec->minor = minor;
if (epggrab_channel_renumber) {
epggrab_channel_link_t *ecl;
- LIST_FOREACH(ecl, &ec->channels, link)
- channel_set_number(ecl->channel, number);
+ LIST_FOREACH(ecl, &ec->channels, ecl_epg_link) {
+ if (channel_set_number(ecl->ecl_channel, major, minor))
+ channel_save(ecl->ecl_channel);
+ }
}
-#endif
save = 1;
}
return save;
htsmsg_add_str(a, NULL, channel_get_uuid(ecl->ecl_channel));
}
if (a) htsmsg_add_msg(m, "channels", a);
- if (ch->number)
- htsmsg_add_u32(m, "number", ch->number);
+ if (ch->major)
+ htsmsg_add_u32(m, "major", ch->major);
+ if (ch->minor)
+ htsmsg_add_u32(m, "major", ch->minor);
hts_settings_save(m, "epggrab/%s/channels/%s", mod->id, ch->id);
htsmsg_destroy(m);
egc->name = strdup(str);
if ((str = htsmsg_get_str(m, "icon")))
egc->icon = strdup(str);
- if(!htsmsg_get_u32(m, "number", &u32))
- egc->number = u32;
+ if(!htsmsg_get_u32(m, "major", &u32))
+ egc->major = u32;
+ if(!htsmsg_get_u32(m, "minor", &u32))
+ egc->minor = u32;
if ((a = htsmsg_get_list(m, "channels"))) {
HTSMSG_FOREACH(f, a) {
if ((str = htsmsg_field_get_str(f))) {
if (!ecl)
epggrab_channel_link(ec, ch);
- save |= epggrab_channel_set_number(ec, cnum);
+ save |= epggrab_channel_set_number(ec, cnum, 0);
}
i += 9;
}
if ((str = htsmsg_xml_get_cdata_str(tags, "image")))
save |= epggrab_channel_set_icon(ch, str);
if ((!htsmsg_xml_get_cdata_u32(tags, "number", &u32)))
- save |= epggrab_channel_set_number(ch, u32);
+ save |= epggrab_channel_set_number(ch, u32, 0);
/* Update */
if (save) {