Keep recordings when channel is deleted
When a channel is deleted, don't delete all existing recordings.
This commit is contained in:
parent
a9584156a3
commit
f6ee30c3c6
7 changed files with 23 additions and 16 deletions
|
@ -114,7 +114,6 @@ chidcmp(const channel_t *a, const channel_t *b)
|
|||
return a->ch_id - b->ch_id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue