Keep recordings when channel is deleted

When a channel is deleted, don't delete all existing recordings.
This commit is contained in:
Kristofer Karlsson 2013-01-25 09:00:28 +01:00
parent a9584156a3
commit f6ee30c3c6
7 changed files with 23 additions and 16 deletions

View file

@ -114,7 +114,6 @@ chidcmp(const channel_t *a, const channel_t *b)
return a->ch_id - b->ch_id;
}
/**
*
*/

View file

@ -114,6 +114,8 @@ typedef struct dvr_entry {
channel_t *de_channel;
LIST_ENTRY(dvr_entry) de_channel_link;
char *de_channel_name;
gtimer_t de_timer;
/**
@ -198,6 +200,8 @@ 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)
/**
* Autorec entry

View file

@ -174,7 +174,7 @@ dvr_make_title(char *output, size_t outlen, dvr_entry_t *de)
dvr_config_t *cfg = dvr_config_find_by_name_default(de->de_config_name);
if(cfg->dvr_flags & DVR_CHANNEL_IN_TITLE)
snprintf(output, outlen, "%s-", de->de_channel->ch_name);
snprintf(output, outlen, "%s-", DVR_CH_NAME(de));
else
output[0] = 0;
@ -335,7 +335,7 @@ static dvr_entry_t *_dvr_entry_create (
tvhlog(LOG_INFO, "dvr", "\"%s\" on \"%s\" starting at %s, "
"scheduled for recording by \"%s\"",
lang_str_get(de->de_title, NULL), de->de_channel->ch_name, tbuf, creator);
lang_str_get(de->de_title, NULL), DVR_CH_NAME(de), tbuf, creator);
dvrdb_changed();
dvr_entry_save(de);
@ -458,6 +458,7 @@ dvr_entry_remove(dvr_entry_t *de)
LIST_REMOVE(de, de_channel_link);
LIST_REMOVE(de, de_global_link);
de->de_channel = NULL;
free(de->de_channel_name);
dvrdb_changed();
@ -486,7 +487,7 @@ dvr_db_load_one(htsmsg_t *c, int id)
if((s = htsmsg_get_str(c, "channel")) == NULL)
return;
if((ch = channel_find_by_name(s, 0, 0)) == NULL)
if((ch = channel_find_by_name(s, 0, 1)) == NULL)
return;
s = htsmsg_get_str(c, "config_name");
@ -596,7 +597,7 @@ dvr_entry_save(dvr_entry_t *de)
lock_assert(&global_lock);
htsmsg_add_str(m, "channel", de->de_channel->ch_name);
htsmsg_add_str(m, "channel", DVR_CH_NAME(de));
htsmsg_add_u32(m, "start", de->de_start);
htsmsg_add_u32(m, "stop", de->de_stop);
@ -715,7 +716,7 @@ static dvr_entry_t *_dvr_entry_update
htsp_dvr_entry_update(de);
dvr_entry_notify(de);
tvhlog(LOG_INFO, "dvr", "\"%s\" on \"%s\": Updated Timer",
lang_str_get(de->de_title, NULL), de->de_channel->ch_name);
lang_str_get(de->de_title, NULL), DVR_CH_NAME(de));
}
return de;
@ -781,7 +782,7 @@ dvr_stop_recording(dvr_entry_t *de, int stopcode)
tvhlog(LOG_INFO, "dvr", "\"%s\" on \"%s\": "
"End of program: %s",
lang_str_get(de->de_title, NULL), de->de_channel->ch_name,
lang_str_get(de->de_title, NULL), DVR_CH_NAME(de),
dvr_entry_status(de));
dvr_entry_save(de);
@ -816,7 +817,7 @@ dvr_timer_start_recording(void *aux)
de->de_rec_state = DVR_RS_PENDING;
tvhlog(LOG_INFO, "dvr", "\"%s\" on \"%s\" recorder starting",
lang_str_get(de->de_title, NULL), de->de_channel->ch_name);
lang_str_get(de->de_title, NULL), DVR_CH_NAME(de));
dvr_entry_notify(de);
htsp_dvr_entry_update(de);
@ -929,8 +930,6 @@ dvr_entry_purge(dvr_entry_t *de)
{
if(de->de_sched_state == DVR_RECORDING)
dvr_stop_recording(de, SM_CODE_SOURCE_DELETED);
dvr_entry_remove(de);
}
/**
@ -941,8 +940,12 @@ dvr_destroy_by_channel(channel_t *ch)
{
dvr_entry_t *de;
while((de = LIST_FIRST(&ch->ch_dvrs)) != NULL)
while((de = LIST_FIRST(&ch->ch_dvrs)) != NULL) {
LIST_REMOVE(de, de_channel_link);
de->de_channel = NULL;
de->de_channel_name = strdup(ch->ch_name);
dvr_entry_purge(de);
}
}
/**

View file

@ -176,7 +176,7 @@ pvr_generate_filename(dvr_entry_t *de, const streaming_start_t *ss)
if(cfg->dvr_flags & DVR_DIR_PER_CHANNEL) {
char *chname = strdup(de->de_channel->ch_name);
char *chname = strdup(DVR_CH_NAME(de));
cleanupfilename(chname,cfg->dvr_flags);
snprintf(path + strlen(path), sizeof(path) - strlen(path),
"/%s", chname);
@ -588,7 +588,7 @@ dvr_spawn_postproc(dvr_entry_t *de, const char *dvr_postproc)
memset(fmap, 0, sizeof(fmap));
fmap['f'] = de->de_filename; /* full path to recoding */
fmap['b'] = basename(fbasename); /* basename of recoding */
fmap['c'] = de->de_channel->ch_name; /* channel name */
fmap['c'] = DVR_CH_NAME(de); /* channel name */
fmap['C'] = de->de_creator; /* user who created this recording */
fmap['t'] = lang_str_get(de->de_title, NULL); /* program title */
fmap['d'] = lang_str_get(de->de_desc, NULL); /* program description */

View file

@ -557,7 +557,8 @@ htsp_build_dvrentry(dvr_entry_t *de, const char *method)
dvr_config_t *cfg;
htsmsg_add_u32(out, "id", de->de_id);
htsmsg_add_u32(out, "channel", de->de_channel->ch_id);
if (de->de_channel)
htsmsg_add_u32(out, "channel", de->de_channel->ch_id);
htsmsg_add_s64(out, "start", de->de_start);
htsmsg_add_s64(out, "stop", de->de_stop);

View file

@ -1389,8 +1389,8 @@ extjs_dvrlist(http_connection_t *hc, const char *remain, void *opaque,
m = htsmsg_create_map();
htsmsg_add_str(m, "channel", DVR_CH_NAME(de));
if(de->de_channel != NULL) {
htsmsg_add_str(m, "channel", de->de_channel->ch_name);
if (de->de_channel->ch_icon)
htsmsg_add_imageurl(m, "chicon", "imagecache/%d",
de->de_channel->ch_icon);

View file

@ -322,7 +322,7 @@ page_pvrinfo(http_connection_t *hc, const char *remain, void *opaque)
a.tm_hour, a.tm_min, b.tm_hour, b.tm_min);
htsbuf_qprintf(hq, "<hr><b>\"%s\": \"%s\"</b><br><br>",
de->de_channel->ch_name, lang_str_get(de->de_title, NULL));
DVR_CH_NAME(de), lang_str_get(de->de_title, NULL));
if((rstatus = val2str(de->de_sched_state, recstatustxt)) != NULL)
htsbuf_qprintf(hq, "Recording status: %s<br>", rstatus);