Adjust htsclient interface slightly to match showtime updates
This commit is contained in:
parent
c2adc6bde7
commit
52ca361649
3 changed files with 88 additions and 57 deletions
103
htsclient.c
103
htsclient.c
|
@ -36,6 +36,7 @@
|
|||
#include "teletext.h"
|
||||
#include "dispatch.h"
|
||||
#include "dvb.h"
|
||||
#include "strtab.h"
|
||||
|
||||
struct client_list all_clients;
|
||||
|
||||
|
@ -303,24 +304,6 @@ cr_show(client_t *c, char **argv, int argc)
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
static int
|
||||
cr_channel_reftag(client_t *c, char **argv, int argc)
|
||||
{
|
||||
th_channel_t *ch;
|
||||
|
||||
if(argc != 1 || (ch = channel_by_index(atoi(argv[0]))) == NULL)
|
||||
return 1;
|
||||
|
||||
cprintf(c, "%u\n", ch->ch_tag);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
@ -412,6 +395,23 @@ cr_channel_subscribe(client_t *c, char **argv, int argc)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
int
|
||||
cr_channels_list(client_t *c, char **argv, int argc)
|
||||
{
|
||||
th_channel_t *ch;
|
||||
|
||||
TAILQ_FOREACH(ch, &channels, ch_global_link)
|
||||
cprintf(c, "channel = %d\n", ch->ch_index);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
@ -441,15 +441,23 @@ cr_streamport(client_t *c, char **argv, int argc)
|
|||
static int
|
||||
cr_event_info(client_t *c, char **argv, int argc)
|
||||
{
|
||||
event_t *e, *x;
|
||||
event_t *e = NULL, *x;
|
||||
uint32_t tag, prev, next;
|
||||
th_channel_t *ch;
|
||||
|
||||
if(argc < 1)
|
||||
if(argc < 2)
|
||||
return 1;
|
||||
|
||||
epg_lock();
|
||||
|
||||
e = epg_event_find_by_tag(atoi(argv[0]));
|
||||
if(!strcasecmp(argv[0], "tag"))
|
||||
e = epg_event_find_by_tag(atoi(argv[1]));
|
||||
if(!strcasecmp(argv[0], "now"))
|
||||
if((ch = channel_by_index(atoi(argv[1]))) != NULL)
|
||||
e = epg_event_get_current(ch);
|
||||
if(!strcasecmp(argv[0], "at") && argc == 3)
|
||||
if((ch = channel_by_index(atoi(argv[1]))) != NULL)
|
||||
e = epg_event_find_by_time(ch, atoi(argv[2]));
|
||||
|
||||
if(e == NULL) {
|
||||
epg_unlock();
|
||||
|
@ -493,53 +501,38 @@ cr_event_info(client_t *c, char **argv, int argc)
|
|||
*
|
||||
*/
|
||||
|
||||
static int
|
||||
cr_event_bytime(client_t *c, char **argv, int argc)
|
||||
{
|
||||
th_channel_t *ch;
|
||||
event_t *e;
|
||||
|
||||
if(argc < 2)
|
||||
return 1;
|
||||
|
||||
if((ch = channel_by_index(atoi(argv[0]))) == NULL)
|
||||
return 1;
|
||||
|
||||
epg_lock();
|
||||
|
||||
e = epg_event_find_by_time(ch, atoi(argv[1]));
|
||||
|
||||
if(e == NULL) {
|
||||
epg_unlock();
|
||||
return 1;
|
||||
}
|
||||
|
||||
cprintf(c, "%u\n", e->e_tag);
|
||||
epg_unlock();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
static struct strtab recoptab[] = {
|
||||
{ "once", RECOP_ONCE },
|
||||
{ "daily", RECOP_DAILY },
|
||||
{ "weekly", RECOP_WEEKLY },
|
||||
{ "cancel", RECOP_CANCEL },
|
||||
{ "toggle", RECOP_TOGGLE }
|
||||
};
|
||||
|
||||
static int
|
||||
cr_event_record(client_t *c, char **argv, int argc)
|
||||
{
|
||||
event_t *e;
|
||||
recop_t op;
|
||||
|
||||
if(argc < 1)
|
||||
if(argc < 2)
|
||||
return 1;
|
||||
|
||||
op = str2val(argv[1], recoptab);
|
||||
printf("op = %d\n", op);
|
||||
if(op == -1)
|
||||
return 1;
|
||||
|
||||
epg_lock();
|
||||
|
||||
e = epg_event_find_by_tag(atoi(argv[0]));
|
||||
printf("e[%d] = %p\n", atoi(argv[0]), e);
|
||||
if(e == NULL) {
|
||||
epg_unlock();
|
||||
return 1;
|
||||
}
|
||||
|
||||
pvr_add_recording_by_event(e->e_ch, e);
|
||||
pvr_event_record_op(e->e_ch, e, op);
|
||||
|
||||
epg_unlock();
|
||||
return 0;
|
||||
|
@ -626,12 +619,11 @@ const struct {
|
|||
} cr_cmds[] = {
|
||||
{ "show", cr_show },
|
||||
{ "streamport", cr_streamport },
|
||||
{ "channel.reftag", cr_channel_reftag },
|
||||
{ "channels.list", cr_channels_list },
|
||||
{ "channel.info", cr_channel_info },
|
||||
{ "channel.subscribe", cr_channel_subscribe },
|
||||
{ "channel.unsubscribe", cr_channel_unsubscribe },
|
||||
{ "event.info", cr_event_info },
|
||||
{ "event.bytime", cr_event_bytime },
|
||||
{ "event.record", cr_event_record },
|
||||
{ "pvr.getlog", cr_pvr_getlog },
|
||||
{ "pvr.gettag", cr_pvr_gettag },
|
||||
|
@ -809,6 +801,9 @@ client_connect_callback(int events, void *opaque, int fd)
|
|||
val = 5;
|
||||
setsockopt(newfd, SOL_TCP, TCP_KEEPCNT, &val, sizeof(val));
|
||||
|
||||
val = 1;
|
||||
setsockopt(newfd, SOL_TCP, TCP_NODELAY, &val, sizeof(val));
|
||||
|
||||
c = calloc(1, sizeof(client_t));
|
||||
c->c_fd = newfd;
|
||||
c->c_pkt_maxsiz = 188 * 7;
|
||||
|
|
32
pvr.c
32
pvr.c
|
@ -258,15 +258,21 @@ pvr_link_pvrr(pvr_rec_t *pvrr)
|
|||
|
||||
|
||||
void
|
||||
pvr_add_recording_by_event(th_channel_t *ch, event_t *e)
|
||||
pvr_event_record_op(th_channel_t *ch, event_t *e, recop_t op)
|
||||
{
|
||||
time_t start = e->e_start;
|
||||
time_t stop = e->e_start + e->e_duration;
|
||||
time_t now;
|
||||
pvr_rec_t *pvrr;
|
||||
char buf[100];
|
||||
|
||||
time(&now);
|
||||
|
||||
event_time_txt(start, e->e_duration, buf, sizeof(buf));
|
||||
|
||||
syslog(LOG_NOTICE, "Got recording command %d for %s", op, buf);
|
||||
|
||||
|
||||
if(stop < now)
|
||||
return;
|
||||
|
||||
|
@ -274,10 +280,32 @@ pvr_add_recording_by_event(th_channel_t *ch, event_t *e)
|
|||
|
||||
LIST_FOREACH(pvrr, &pvrr_global_list, pvrr_global_link) {
|
||||
if(pvrr->pvrr_channel == ch && pvrr->pvrr_start == start &&
|
||||
pvrr->pvrr_stop == stop) {
|
||||
pvrr->pvrr_stop == stop)
|
||||
break;
|
||||
}
|
||||
|
||||
switch(op) {
|
||||
case RECOP_TOGGLE:
|
||||
if(pvrr != NULL) {
|
||||
pvr_unrecord(pvrr);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
case RECOP_CANCEL:
|
||||
if(pvrr != NULL)
|
||||
pvr_unrecord(pvrr);
|
||||
return;
|
||||
|
||||
case RECOP_ONCE:
|
||||
if(pvrr != NULL)
|
||||
return;
|
||||
break;
|
||||
|
||||
case RECOP_DAILY:
|
||||
case RECOP_WEEKLY:
|
||||
syslog(LOG_ERR,"Recording type not supported yet");
|
||||
return;
|
||||
}
|
||||
|
||||
pvrr = calloc(1, sizeof(pvr_rec_t));
|
||||
|
|
10
pvr.h
10
pvr.h
|
@ -24,9 +24,17 @@ extern pthread_mutex_t pvr_mutex;
|
|||
extern struct pvr_rec_list pvrr_work_list[PVRR_WORK_MAX];
|
||||
extern struct pvr_rec_list pvrr_global_list;
|
||||
|
||||
typedef enum {
|
||||
RECOP_TOGGLE,
|
||||
RECOP_ONCE,
|
||||
RECOP_DAILY,
|
||||
RECOP_WEEKLY,
|
||||
RECOP_CANCEL,
|
||||
} recop_t;
|
||||
|
||||
void pvr_init(void);
|
||||
|
||||
void pvr_add_recording_by_event(th_channel_t *ch, event_t *e);
|
||||
void pvr_event_record_op(th_channel_t *ch, event_t *e, recop_t op);
|
||||
|
||||
char pvr_prog_status(event_t *e);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue