From a8b59db7320fceceb9eb1db7ebc6e61b1f61a4d2 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Thu, 14 Jun 2012 11:42:24 +0100 Subject: [PATCH] Forgot to finish of the episode number checking in series link. --- src/dvr/dvr_autorec.c | 13 +++++++++++-- src/epg.c | 12 +++++++++++- src/epg.h | 2 ++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/dvr/dvr_autorec.c b/src/dvr/dvr_autorec.c index b026ab3b..8c0593f2 100644 --- a/src/dvr/dvr_autorec.c +++ b/src/dvr/dvr_autorec.c @@ -65,6 +65,7 @@ static int autorec_cmp(dvr_autorec_entry_t *dae, epg_broadcast_t *e) { channel_tag_mapping_t *ctm; + epg_episode_num_t epnum; if (!e->channel) return 0; if (!e->episode) return 0; @@ -103,10 +104,12 @@ autorec_cmp(dvr_autorec_entry_t *dae, epg_broadcast_t *e) if (!ok) return 0; } - if(dae->dae_brand) - if (!e->episode->brand || dae->dae_brand != e->episode->brand) return 0; + // Note: we always test season first, though it will only be set + // if configured if(dae->dae_season) if (!e->episode->season || dae->dae_season != e->episode->season) return 0; + if(dae->dae_brand) + if (!e->episode->brand || dae->dae_brand != e->episode->brand) return 0; if(dae->dae_title != NULL && dae->dae_title[0] != '\0') { if(e->episode->title == NULL || @@ -125,6 +128,12 @@ autorec_cmp(dvr_autorec_entry_t *dae, epg_broadcast_t *e) return 0; } + // Note: dae_epnum is unset then all values are 0 and this will + // always return 1 + epg_episode_number_full(e->episode, &epnum); + if(epg_episode_number_cmp(&dae->dae_epnum, &epnum) < 0) + return 0; + if(dae->dae_weekdays != 0x7f) { struct tm tm; localtime_r(&e->start, &tm); diff --git a/src/epg.c b/src/epg.c index d51ab3ed..c6adeab7 100644 --- a/src/epg.c +++ b/src/epg.c @@ -958,7 +958,6 @@ size_t epg_episode_number_format void epg_episode_number_full ( epg_episode_t *ee, epg_episode_num_t *num ) { - if (!ee || !num) return; num->e_num = ee->number; num->p_num = ee->part_number; num->p_cnt = ee->part_count; @@ -971,6 +970,17 @@ void epg_episode_number_full ( epg_episode_t *ee, epg_episode_num_t *num ) } } +int epg_episode_number_cmp ( epg_episode_num_t *a, epg_episode_num_t *b ) +{ + if (a->s_num != b->s_num) { + return a->s_num - b->s_num; + } else if (a->e_num != b->e_num) { + return a->e_num - b->e_num; + } else { + return a->p_num - b->p_num; + } +} + int epg_episode_fuzzy_match ( epg_episode_t *episode, const char *uri, const char *title, const char *summary, const char *description ) diff --git a/src/epg.h b/src/epg.h index d2613a32..a5ea1367 100644 --- a/src/epg.h +++ b/src/epg.h @@ -262,6 +262,8 @@ size_t epg_episode_number_format const char *cfmt ); void epg_episode_number_full ( epg_episode_t *e, epg_episode_num_t *epnum ); +int epg_episode_number_cmp + ( epg_episode_num_t *a, epg_episode_num_t *b ); /* Matching */ int epg_episode_fuzzy_match