static void
dvr_entry_missed_time(dvr_entry_t *de, int error_code)
{
+ dvr_autorec_entry_t *dae = de->de_autorec;
+
dvr_entry_set_state(de, DVR_MISSED_TIME, DVR_RS_PENDING, error_code);
dvr_entry_retention_timer(de);
+
+ // Trigger autorec update in case of max schedules limit
+ if (dae && dae->dae_max_sched_count > 0)
+ dvr_autorec_changed(dae, 0);
}
/*
{
char buf[512];
char ubuf[UUID_HEX_SIZE];
+ dvr_entry_t *de;
+ uint32_t count = 0;
/* Identical duplicate detection
NOTE: Semantic duplicate detection is deferred to the start time of recording and then done using _dvr_duplicate_event by dvr_timer_start_recording. */
- dvr_entry_t* de;
LIST_FOREACH(de, &dvrentries, de_global_link) {
if (de->de_bcast == e || (de->de_bcast && de->de_bcast->episode == e->episode))
return;
}
+ /* Handle max schedules limit for autorrecord */
+ if (dae->dae_max_sched_count > 0){
+ count = 0;
+ LIST_FOREACH(de, &dae->dae_spawns, de_autorec_link)
+ if ((de->de_sched_state == DVR_SCHEDULED) ||
+ (de->de_sched_state == DVR_RECORDING)) count++;
+
+ if (count >= dae->dae_max_sched_count) {
+ tvhlog(LOG_DEBUG, "dvr", "Autorecord \"%s\": Not scheduling \"%s\" because of autorecord max schedules limit reached",
+ dae->dae_name, lang_str_get(e->episode->title, NULL));
+ return;
+ }
+ }
+
snprintf(buf, sizeof(buf), _("Auto recording%s%s"),
dae->dae_comment ? ": " : "",
dae->dae_comment ?: "");
dvr_stop_recording(dvr_entry_t *de, int stopcode, int saveconf, int clone)
{
dvr_rs_state_t rec_state = de->de_rec_state;
+ dvr_autorec_entry_t *dae = de->de_autorec;
if (!clone)
dvr_rec_unsubscribe(de);
dvr_entry_save(de);
dvr_entry_retention_timer(de);
+
+ // Trigger autorecord update in case of schedules limit
+ if (dae && dae->dae_max_sched_count > 0)
+ dvr_autorec_changed(de->de_autorec, 0);
}
dvr_entry_cancel_delete(dvr_entry_t *de, int rerecord)
{
dvr_entry_t *parent = de->de_parent;
+ dvr_autorec_entry_t *dae = de->de_autorec;
switch(de->de_sched_state) {
case DVR_RECORDING:
else
dvr_entry_rerecord(parent);
}
+
+ // Trigger autorec update in case of max sched count limit
+ if (dae && dae->dae_max_sched_count > 0)
+ dvr_autorec_changed(dae, 0);
+
}
/**
retention: { width: 80 },
removal: { width: 80 },
maxcount: { width: 80 },
+ maxsched: { width: 80 },
config_name: { width: 120 },
owner: { width: 100 },
creator: { width: 200 },
params: {
list: 'enabled,name,directory,title,fulltext,channel,tag,content_type,minduration,' +
'maxduration,weekdays,start,start_window,pri,dedup,retention,removal,' +
- 'maxcount,config_name,comment'
+ 'maxcount,maxsched,config_name,comment'
},
create: { }
},