diff --git a/channels.c b/channels.c index 1023fc89..9e07f99d 100644 --- a/channels.c +++ b/channels.c @@ -50,6 +50,78 @@ static int dontwritesettings; void scanner_init(void); +/** + * + */ +#if 0 +static int +dictcmp(const char *s1, const char *s2) +{ + long int da, db; + int n1, n2; + + while(1) { + n1 = *s1 >= '0' && *s1 <= '9' ? 1 : 0; + n2 = *s2 >= '0' && *s2 <= '9' ? 2 : 0; + + switch(n1 | n2) { + case 0: + if(*s1 != *s2) + return *(const unsigned char *)s1 - *(const unsigned char *)s2; + if(*s1 == 0) + return 0; + s1++; + s2++; + break; + case 1 ... 2: + return *(const unsigned char *)s1 - *(const unsigned char *)s2; + case 3: + da = strtol(s1, (char **)&s1, 10); + db = strtol(s2, (char **)&s2, 10); + if(da != db) + return da - db; + break; + } + } +} +#endif + +static int +ch_number(const char *s1) +{ + while(*s1) { + if(*s1 >= '0' && *s1 <= '9') { + return strtol(s1, NULL, 10); + } + s1++; + } + return INT32_MAX; +} + +static int +chcmp(const char *s1, const char *s2) +{ + int n1, n2; + + n1 = ch_number(s1); + n2 = ch_number(s2); + + if(n1 != n2) { + return n1 - n2; + } + return strcmp(s1, s2); +} + +/** + * + */ +static int +channelcmp(th_channel_t *a, th_channel_t *b) +{ + return chcmp(a->ch_name, b->ch_name); +} + + /** * */ @@ -92,7 +164,7 @@ channel_set_group(th_channel_t *ch, th_channel_group_t *tcg) TAILQ_REMOVE(&ch->ch_group->tcg_channels, ch, ch_group_link); ch->ch_group = tcg; - TAILQ_INSERT_TAIL(&tcg->tcg_channels, ch, ch_group_link); + TAILQ_INSERT_SORTED(&tcg->tcg_channels, ch, ch_group_link, channelcmp); if(!dontwritesettings) channel_settings_write(); } @@ -157,7 +229,7 @@ channel_find(const char *name, int create, th_channel_group_t *tcg) ch->ch_index = nchannels; TAILQ_INIT(&ch->ch_epg_events); - LIST_INSERT_HEAD(&channels, ch, ch_global_link); + LIST_INSERT_SORTED(&channels, ch, ch_global_link, channelcmp); channel_set_group(ch, tcg ?: defgroup); @@ -309,6 +381,10 @@ channels_load(void) } } + tcg = channel_group_find("-disabled-", 1); + tcg->tcg_cant_delete_me = 1; + tcg->tcg_hidden = 1; + defgroup = channel_group_find("Uncategorized", 1); defgroup->tcg_cant_delete_me = 1; diff --git a/channels.h b/channels.h index 2ec3bc56..fbb1b77d 100644 --- a/channels.h +++ b/channels.h @@ -46,4 +46,6 @@ void channel_group_move_next(th_channel_group_t *tcg); void channel_settings_write(void); +void channel_set_group(th_channel_t *ch, th_channel_group_t *tcg); + #endif /* CHANNELS_H */ diff --git a/htmlui.c b/htmlui.c index a58cc3bb..b5580b6d 100644 --- a/htmlui.c +++ b/htmlui.c @@ -94,37 +94,16 @@ pvrstatus_to_html(tv_pvr_status_t pvrstatus, const char **text, return 0; } - - - - -static void -html_header(tcp_queue_t *tq, const char *title, int javascript, int width, - int autorefresh) +/* + * Root page + */ +static int +page_css(http_connection_t *hc, const char *remain, void *opaque) { - char w[30]; + tcp_queue_t tq; + tcp_init_queue(&tq, -1); - if(width > 0) - snprintf(w, sizeof(w), "width: %dpx; ", width); - else - w[0] = 0; - - tcp_qprintf(tq, - "\r\n" - "
\r\n" - "