Push DVR entries over HTSP (if in async mode)

This commit is contained in:
Andreas Öman 2009-09-09 21:37:40 +00:00
parent 9b97ca2991
commit 72bbedd13e
4 changed files with 89 additions and 0 deletions

View file

@ -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

View file

@ -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);

View file

@ -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',

View file

@ -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_ */