]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Fix #1521 - dvr: some minor corrections to PR code
authorAdam Sutton <dev@adamsutton.me.uk>
Thu, 31 Jan 2013 10:48:15 +0000 (10:48 +0000)
committerAdam Sutton <dev@adamsutton.me.uk>
Thu, 31 Jan 2013 11:30:02 +0000 (11:30 +0000)
ensure that recordings are properly loaded in the event no channel
exists and that the internal channel name is preferred not the DE
on.

src/channels.c
src/dvr/dvr.h
src/dvr/dvr_db.c

index 92b9b4344b28745ec720c93d5829954cab676946..3640436841f22ff9b8ebb5700cb16542586f292c 100644 (file)
@@ -346,6 +346,7 @@ channel_save(channel_t *ch)
 int
 channel_rename(channel_t *ch, const char *newname)
 {
+  dvr_entry_t *de;
   service_t *t;
 
   lock_assert(&global_lock);
@@ -364,6 +365,11 @@ channel_rename(channel_t *ch, const char *newname)
 
   LIST_FOREACH(t, &ch->ch_services, s_ch_link)
     t->s_config_save(t);
+  
+  LIST_FOREACH(de, &ch->ch_dvrs, de_channel_link) {
+    dvr_entry_save(de);
+    dvr_entry_notify(de);
+  }
 
   channel_save(ch);
   htsp_channel_update(ch);
index 03d1d9ce318197edc4bfb9dc8081b344a89a85b4..4bc56aa754b483a7ab48f855afe419c7349f3008 100644 (file)
@@ -200,8 +200,7 @@ typedef struct dvr_entry {
 
 } dvr_entry_t;
 
-#define DVR_CH_NAME(e) ((e)->de_channel_name == NULL ? (e)-> de_channel->ch_name : (e)->de_channel_name)
-
+#define DVR_CH_NAME(e) ((e)->de_channel == NULL ? (e)->de_channel_name : (e)-> de_channel->ch_name)
 
 /**
  * Autorec entry
index 2ffc4ae327bb4320d8c467a91e47cc0d812738df..ee020d2eba2cd2dd36d687ae8be6be0113c156e5 100644 (file)
@@ -240,10 +240,12 @@ dvr_entry_link(dvr_entry_t *de)
     gtimer_arm_abs(&de->de_timer, dvr_timer_expire, de, 
               de->de_stop + cfg->dvr_retention_days * 86400);
 
-  } else {
+  } else if (de->de_channel) {
     de->de_sched_state = DVR_SCHEDULED;
 
     gtimer_arm_abs(&de->de_timer, dvr_timer_start_recording, de, preamble);
+  } else {
+    de->de_sched_state = DVR_NOSTATE;
   }
   htsp_dvr_entry_add(de);
 }
@@ -473,7 +475,7 @@ static void
 dvr_db_load_one(htsmsg_t *c, int id)
 {
   dvr_entry_t *de;
-  const char *s, *creator;
+  const char *chname, *s, *creator;
   channel_t *ch;
   uint32_t start, stop, bcid;
   int d;
@@ -485,11 +487,10 @@ dvr_db_load_one(htsmsg_t *c, int id)
   if(htsmsg_get_u32(c, "stop", &stop))
     return;
 
-  if((s = htsmsg_get_str(c, "channel")) == NULL)
+  if((chname = htsmsg_get_str(c, "channel")) == NULL)
     return;
-  if((ch = channel_find_by_name(s, 0, 1)) == NULL)
-    return;
-
+  ch = channel_find_by_name(chname, 0, 0);
+    
   s = htsmsg_get_str(c, "config_name");
   cfg = dvr_config_find_by_name_default(s);
 
@@ -504,8 +505,12 @@ dvr_db_load_one(htsmsg_t *c, int id)
 
   de_tally = MAX(id, de_tally);
 
-  de->de_channel = ch;
-  LIST_INSERT_HEAD(&de->de_channel->ch_dvrs, de, de_channel_link);
+  if (ch) {
+    de->de_channel = ch;
+    LIST_INSERT_HEAD(&de->de_channel->ch_dvrs, de, de_channel_link);
+  } else {
+    de->de_channel_name = strdup(chname);
+  }
 
   de->de_start   = start;
   de->de_stop    = stop;
@@ -515,7 +520,7 @@ dvr_db_load_one(htsmsg_t *c, int id)
   de->de_pri     = dvr_pri2val(htsmsg_get_str(c, "pri"));
   
   if(htsmsg_get_s32(c, "start_extra", &d))
-    if (ch->ch_dvr_extra_time_pre)
+    if (ch && ch->ch_dvr_extra_time_pre)
       de->de_start_extra = ch->ch_dvr_extra_time_pre;
     else
       de->de_start_extra = cfg->dvr_extra_time_pre;
@@ -523,7 +528,7 @@ dvr_db_load_one(htsmsg_t *c, int id)
     de->de_start_extra = d;
 
   if(htsmsg_get_s32(c, "stop_extra", &d))
-    if (ch->ch_dvr_extra_time_post)
+    if (ch && ch->ch_dvr_extra_time_post)
       de->de_stop_extra = ch->ch_dvr_extra_time_post;
     else
       de->de_stop_extra = cfg->dvr_extra_time_post;