Push DVR entries over HTSP (if in async mode)
This commit is contained in:
parent
9b97ca2991
commit
72bbedd13e
4 changed files with 89 additions and 0 deletions
|
@ -32,6 +32,7 @@ extern int dvr_flags;
|
|||
extern char *dvr_postproc;
|
||||
extern int dvr_extra_time_pre;
|
||||
extern int dvr_extra_time_post;
|
||||
extern struct dvr_entry_list dvrentries;
|
||||
|
||||
#define DVR_DIR_PER_DAY 0x1
|
||||
#define DVR_DIR_PER_CHANNEL 0x2
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "tvhead.h"
|
||||
#include "dvr.h"
|
||||
#include "notify.h"
|
||||
#include "htsp.h"
|
||||
|
||||
char *dvr_storage;
|
||||
char *dvr_format;
|
||||
|
@ -126,6 +127,7 @@ dvr_entry_link(dvr_entry_t *de)
|
|||
|
||||
gtimer_arm_abs(&de->de_timer, dvr_timer_start_recording, de, preamble);
|
||||
}
|
||||
htsp_dvr_entry_add(de);
|
||||
}
|
||||
|
||||
|
||||
|
@ -210,6 +212,8 @@ dvr_entry_remove(dvr_entry_t *de)
|
|||
{
|
||||
hts_settings_remove("dvr/log/%d", de->de_id);
|
||||
|
||||
htsp_dvr_entry_delete(de);
|
||||
|
||||
gtimer_disarm(&de->de_timer);
|
||||
|
||||
LIST_REMOVE(de, de_channel_link);
|
||||
|
@ -372,6 +376,7 @@ dvr_stop_recording(dvr_entry_t *de, const char *errmsg)
|
|||
|
||||
dvrdb_changed();
|
||||
dvr_entry_save(de);
|
||||
htsp_dvr_entry_update(de);
|
||||
|
||||
gtimer_arm_abs(&de->de_timer, dvr_timer_expire, de,
|
||||
de->de_stop + dvr_retention_days * 86400);
|
||||
|
@ -405,6 +410,7 @@ dvr_timer_start_recording(void *aux)
|
|||
de->de_title, de->de_channel->ch_name);
|
||||
|
||||
dvrdb_changed();
|
||||
htsp_dvr_entry_update(de);
|
||||
|
||||
dvr_rec_subscribe(de);
|
||||
|
||||
|
|
77
src/htsp.c
77
src/htsp.c
|
@ -347,6 +347,45 @@ htsp_build_tag(channel_tag_t *ct, const char *method, int include_channels)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
static htsmsg_t *
|
||||
htsp_build_dvrentry(dvr_entry_t *de, const char *method)
|
||||
{
|
||||
htsmsg_t *out = htsmsg_create_map();
|
||||
const char *s = NULL;
|
||||
|
||||
htsmsg_add_u32(out, "id", de->de_id);
|
||||
htsmsg_add_u32(out, "channel", de->de_channel->ch_id);
|
||||
|
||||
htsmsg_add_s32(out, "start", de->de_start);
|
||||
htsmsg_add_s32(out, "stop", de->de_stop);
|
||||
|
||||
htsmsg_add_str(out, "title", de->de_title);
|
||||
htsmsg_add_str(out, "description", de->de_desc);
|
||||
|
||||
switch(de->de_sched_state) {
|
||||
case DVR_SCHEDULED:
|
||||
s = "scheduled";
|
||||
break;
|
||||
case DVR_RECORDING:
|
||||
s = "recording";
|
||||
break;
|
||||
case DVR_COMPLETED:
|
||||
s = "completed";
|
||||
break;
|
||||
case DVR_NOSTATE:
|
||||
s = "invalid";
|
||||
break;
|
||||
}
|
||||
|
||||
htsmsg_add_str(out, "state", s);
|
||||
htsmsg_add_str(out, "method", method);
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Simple function to respond with an error
|
||||
*/
|
||||
|
@ -382,6 +421,7 @@ htsp_method_async(htsp_connection_t *htsp, htsmsg_t *in)
|
|||
{
|
||||
channel_t *ch;
|
||||
channel_tag_t *ct;
|
||||
dvr_entry_t *de;
|
||||
htsmsg_t *m;
|
||||
|
||||
/* First, just OK the async request */
|
||||
|
@ -406,6 +446,10 @@ htsp_method_async(htsp_connection_t *htsp, htsmsg_t *in)
|
|||
if(ct->ct_enabled && !ct->ct_internal)
|
||||
htsp_send_message(htsp, htsp_build_tag(ct, "tagUpdate", 1), NULL);
|
||||
|
||||
/* Send all DVR entries */
|
||||
LIST_FOREACH(de, &dvrentries, de_global_link)
|
||||
htsp_send_message(htsp, htsp_build_dvrentry(de, "dvrEntryAdd"), NULL);
|
||||
|
||||
/* Notify that initial sync has been completed */
|
||||
m = htsmsg_create_map();
|
||||
htsmsg_add_str(m, "method", "initialSyncCompleted");
|
||||
|
@ -1059,6 +1103,39 @@ htsp_tag_delete(channel_tag_t *ct)
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called from dvr_db.c when a DVR entry is created
|
||||
*/
|
||||
void
|
||||
htsp_dvr_entry_add(dvr_entry_t *de)
|
||||
{
|
||||
htsp_async_send(htsp_build_dvrentry(de, "dvrEntryAdd"));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called from dvr_db.c when a DVR entry is updated
|
||||
*/
|
||||
void
|
||||
htsp_dvr_entry_update(dvr_entry_t *de)
|
||||
{
|
||||
htsp_async_send(htsp_build_dvrentry(de, "dvrEntryUpdate"));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called from dvr_db.c when a DVR entry is deleted
|
||||
*/
|
||||
void
|
||||
htsp_dvr_entry_delete(dvr_entry_t *de)
|
||||
{
|
||||
htsmsg_t *m = htsmsg_create_map();
|
||||
htsmsg_add_u32(m, "id", de->de_id);
|
||||
htsmsg_add_str(m, "method", "dvrEntryDelete");
|
||||
htsp_async_send(m);
|
||||
}
|
||||
|
||||
|
||||
const static char frametypearray[PKT_NTYPES] = {
|
||||
[PKT_I_FRAME] = 'I',
|
||||
[PKT_P_FRAME] = 'P',
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#define HTSP_H_
|
||||
|
||||
#include "epg.h"
|
||||
#include "dvr/dvr.h"
|
||||
|
||||
void htsp_init(void);
|
||||
|
||||
|
@ -33,4 +34,8 @@ void htsp_tag_add(channel_tag_t *ct);
|
|||
void htsp_tag_update(channel_tag_t *ct);
|
||||
void htsp_tag_delete(channel_tag_t *ct);
|
||||
|
||||
void htsp_dvr_entry_add(dvr_entry_t *de);
|
||||
void htsp_dvr_entry_update(dvr_entry_t *de);
|
||||
void htsp_dvr_entry_delete(dvr_entry_t *de);
|
||||
|
||||
#endif /* HTSP_H_ */
|
||||
|
|
Loading…
Add table
Reference in a new issue