Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
DVR: added re-record button to webui, fixes #3203
  • Loading branch information
perexg committed Oct 26, 2015
1 parent f61e259 commit c3681f1
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 6 deletions.
42 changes: 42 additions & 0 deletions src/api/api_dvr.c
Expand Up @@ -254,6 +254,45 @@ api_dvr_entry_create_by_event
return !count ? EINVAL : 0;
}

static void
api_dvr_rerecord_toggle(access_t *perm, idnode_t *self)
{
dvr_entry_set_rerecord((dvr_entry_t *)self, -1);
}

static int
api_dvr_entry_rerecord_toggle
( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
{
return api_idnode_handler(perm, args, resp, api_dvr_rerecord_toggle, "rerecord");
}

static void
api_dvr_rerecord_deny(access_t *perm, idnode_t *self)
{
dvr_entry_set_rerecord((dvr_entry_t *)self, 0);
}

static int
api_dvr_entry_rerecord_deny
( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
{
return api_idnode_handler(perm, args, resp, api_dvr_rerecord_deny, "rerecord");
}

static void
api_dvr_rerecord_allow(access_t *perm, idnode_t *self)
{
dvr_entry_set_rerecord((dvr_entry_t *)self, 1);
}

static int
api_dvr_entry_rerecord_allow
( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
{
return api_idnode_handler(perm, args, resp, api_dvr_rerecord_allow, "rerecord");
}

static void
api_dvr_stop(access_t *perm, idnode_t *self)
{
Expand Down Expand Up @@ -424,6 +463,9 @@ void api_dvr_init ( void )
{ "dvr/entry/grid_failed", ACCESS_RECORDER, api_idnode_grid, api_dvr_entry_grid_failed },
{ "dvr/entry/create", ACCESS_RECORDER, api_dvr_entry_create, NULL },
{ "dvr/entry/create_by_event", ACCESS_RECORDER, api_dvr_entry_create_by_event, NULL },
{ "dvr/entry/rerecord/toggle", ACCESS_RECORDER, api_dvr_entry_rerecord_toggle, NULL },
{ "dvr/entry/rerecord/deny", ACCESS_RECORDER, api_dvr_entry_rerecord_deny, NULL },
{ "dvr/entry/rerecord/allow", ACCESS_RECORDER, api_dvr_entry_rerecord_allow, NULL },
{ "dvr/entry/stop", ACCESS_RECORDER, api_dvr_entry_stop, NULL },
{ "dvr/entry/cancel", ACCESS_RECORDER, api_dvr_entry_cancel, NULL },

Expand Down
2 changes: 2 additions & 0 deletions src/dvr/dvr.h
Expand Up @@ -514,6 +514,8 @@ const char *dvr_get_filename(dvr_entry_t *de);

int64_t dvr_get_filesize(dvr_entry_t *de);

void dvr_entry_set_rerecord(dvr_entry_t *de, int cmd);

dvr_entry_t *dvr_entry_stop(dvr_entry_t *de);

dvr_entry_t *dvr_entry_cancel(dvr_entry_t *de, int rerecord);
Expand Down
35 changes: 31 additions & 4 deletions src/dvr/dvr_db.c
Expand Up @@ -476,8 +476,12 @@ dvr_entry_schedstatus(dvr_entry_t *de)
s = "completedRerecord";
break;
case DVR_MISSED_TIME:
s = de->de_last_error == SM_CODE_SVC_NOT_ENABLED ?
"completedWarning" : "completedError";
s = "completedError";
if (de->de_last_error == SM_CODE_SVC_NOT_ENABLED)
s = "completedWarning";
rerecord = de->de_dont_rerecord ? 0 : dvr_entry_get_rerecord_errors(de);
if(rerecord)
s = "completedRerecord";
break;
default:
s = "unknown";
Expand Down Expand Up @@ -2935,6 +2939,26 @@ dvr_entry_delete(dvr_entry_t *de, int no_missed_time_resched)
dvr_entry_missed_time(de, de->de_last_error);
}

/**
*
*/
void
dvr_entry_set_rerecord(dvr_entry_t *de, int cmd)
{
if (cmd < 0) { /* toggle */
if (de->de_parent) return;
cmd = de->de_dont_rerecord ? 1 : 0;
}
if (cmd == 0 && !de->de_dont_rerecord) {
de->de_dont_rerecord = 1;
if (de->de_child)
dvr_entry_cancel_delete(de->de_child, 0);
} else {
de->de_dont_rerecord = 0;
dvr_entry_rerecord(de);
}
}

/**
*
*/
Expand Down Expand Up @@ -2962,14 +2986,15 @@ dvr_entry_cancel(dvr_entry_t *de, int rerecord)
case DVR_RECORDING:
de->de_dont_reschedule = 1;
dvr_stop_recording(de, SM_CODE_ABORTED, 1, 0);
return de;
break;

case DVR_SCHEDULED:
case DVR_COMPLETED:
case DVR_MISSED_TIME:
case DVR_NOSTATE:
dvr_entry_destroy(de, 1);
return NULL;
de = NULL;
break;

default:
abort();
Expand All @@ -2981,6 +3006,8 @@ dvr_entry_cancel(dvr_entry_t *de, int rerecord)
else
dvr_entry_rerecord(parent);
}

return de;
}

/**
Expand Down
64 changes: 62 additions & 2 deletions src/webui/static/app/dvr.js
Expand Up @@ -314,10 +314,40 @@ tvheadend.dvr_finished = function(panel, index) {
}
};

var rerecordButton = {
name: 'rerecord',
builder: function() {
return new Ext.Toolbar.Button({
tooltip: _('Toggle re-record functionality'),
iconCls: 'rerecord',
text: _('Re-record'),
disabled: true
});
},
callback: function(conf, e, store, select) {
var r = select.getSelections();
if (r && r.length > 0) {
var uuids = [];
for (var i = 0; i < r.length; i++)
uuids.push(r[i].id);
tvheadend.Ajax({
url: 'api/dvr/entry/rerecord/toggle',
params: {
uuid: Ext.encode(uuids)
},
success: function(d) {
store.reload();
}
});
}
}
};

function selected(s, abuttons) {
var r = s.getSelections();
var b = r.length > 0 && r[0].data.filesize > 0;
abuttons.download.setDisabled(!b);
abuttons.rerecord.setDisabled(!b);
}

tvheadend.idnode_grid(panel, {
Expand Down Expand Up @@ -359,7 +389,7 @@ tvheadend.dvr_finished = function(panel, index) {
'?title=' + encodeURIComponent(title) + '">' + _('Play') + '</a>';
}
}],
tbar: [downloadButton],
tbar: [downloadButton, rerecordButton],
selected: selected,
help: function() {
new tvheadend.help(_('DVR - Finished Recordings'), 'dvr_finished.html');
Expand Down Expand Up @@ -395,10 +425,40 @@ tvheadend.dvr_failed = function(panel, index) {
}
};

var rerecordButton = {
name: 'rerecord',
builder: function() {
return new Ext.Toolbar.Button({
tooltip: _('Toggle re-record functionality'),
iconCls: 'rerecord',
text: _('Re-record'),
disabled: true
});
},
callback: function(conf, e, store, select) {
var r = select.getSelections();
if (r && r.length > 0) {
var uuids = [];
for (var i = 0; i < r.length; i++)
uuids.push(r[i].id);
tvheadend.Ajax({
url: 'api/dvr/entry/rerecord/toggle',
params: {
uuid: Ext.encode(uuids)
},
success: function(d) {
store.reload();
}
});
}
}
};

function selected(s, abuttons) {
var r = s.getSelections();
var b = r.length > 0 && r[0].data.filesize > 0;
abuttons.download.setDisabled(!b);
abuttons.rerecord.setDisabled(r.length <= 0);
}

tvheadend.idnode_grid(panel, {
Expand Down Expand Up @@ -440,7 +500,7 @@ tvheadend.dvr_failed = function(panel, index) {
'?title=' + encodeURIComponent(title) + '">' + _('Play') + '</a>';
}
}],
tbar: [downloadButton],
tbar: [downloadButton, rerecordButton],
selected: selected,
help: function() {
new tvheadend.help(_('DVR - Failed Recordings'), 'dvr_failed.html');
Expand Down
4 changes: 4 additions & 0 deletions src/webui/static/app/ext.css
Expand Up @@ -348,6 +348,10 @@
background-image: url(../icons/rec.png) !important;
}

.rerecord {
background-image: url(../icons/arrow_branch.png) !important;
}

.bullet_add {
background-image: url(../icons/bullet_add.png) !important;
}
Expand Down

0 comments on commit c3681f1

Please sign in to comment.