return api_idnode_handler(perm, args, resp, api_dvr_cancel, "cancel");
}
+static void
+api_dvr_move_finished(access_t *perm, idnode_t *self)
+{
+ dvr_entry_move((dvr_entry_t *)self, 0);
+}
+
+static int
+api_dvr_entry_move_finished
+ ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
+{
+ return api_idnode_handler(perm, args, resp, api_dvr_move_finished, "move finished");
+}
+
+static void
+api_dvr_move_failed(access_t *perm, idnode_t *self)
+{
+ dvr_entry_move((dvr_entry_t *)self, 1);
+}
+
+static int
+api_dvr_entry_move_failed
+ ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
+{
+ return api_idnode_handler(perm, args, resp, api_dvr_move_failed, "move failed");
+}
+
static void
api_dvr_autorec_grid
( access_t *perm, idnode_set_t *ins, api_idnode_grid_conf_t *conf, htsmsg_t *args )
{ "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 },
+ { "dvr/entry/move/finished", ACCESS_RECORDER, api_dvr_entry_move_finished, NULL },
+ { "dvr/entry/move/failed", ACCESS_RECORDER, api_dvr_entry_move_failed, NULL },
{ "dvr/autorec/class", ACCESS_RECORDER, api_idnode_class, (void*)&dvr_autorec_entry_class },
{ "dvr/autorec/grid", ACCESS_RECORDER, api_idnode_grid, api_dvr_autorec_grid },
void dvr_entry_set_rerecord(dvr_entry_t *de, int cmd);
+void dvr_entry_move(dvr_entry_t *de, int failed);
+
dvr_entry_t *dvr_entry_stop(dvr_entry_t *de);
dvr_entry_t *dvr_entry_cancel(dvr_entry_t *de, int rerecord);
}
}
+/**
+ *
+ */
+void
+dvr_entry_move(dvr_entry_t *de, int failed)
+{
+ if(de->de_sched_state == DVR_COMPLETED)
+ dvr_entry_completed(de, failed ? SM_CODE_USER_REQUEST : SM_CODE_OK);
+}
+
/**
*
*/
return N_("User limit reached");
case SM_CODE_WEAK_STREAM:
return N_("Weak stream");
+ case SM_CODE_USER_REQUEST:
+ return N_("User request");
case SM_CODE_NO_FREE_ADAPTER:
return N_("No free adapter");
#define SM_CODE_USER_ACCESS 105
#define SM_CODE_USER_LIMIT 106
#define SM_CODE_WEAK_STREAM 107
+#define SM_CODE_USER_REQUEST 108
#define SM_CODE_NO_FREE_ADAPTER 200
#define SM_CODE_MUX_NOT_ENABLED 201
}
};
+ var moveButton = {
+ name: 'move',
+ builder: function() {
+ return new Ext.Toolbar.Button({
+ tooltip: _('Mark the selected recording as failed'),
+ iconCls: 'movetofailed',
+ text: _('Move to failed'),
+ 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/move/failed',
+ 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);
+ abuttons.move.setDisabled(!b);
}
tvheadend.idnode_grid(panel, {
'?title=' + encodeURIComponent(title) + '">' + _('Play') + '</a>';
}
}],
- tbar: [downloadButton, rerecordButton],
+ tbar: [downloadButton, rerecordButton, moveButton],
selected: selected,
help: function() {
new tvheadend.help(_('DVR - Finished Recordings'), 'dvr_finished.html');
}
};
+ var moveButton = {
+ name: 'move',
+ builder: function() {
+ return new Ext.Toolbar.Button({
+ tooltip: _('Mark the selected recording as finished'),
+ iconCls: 'movetofinished',
+ text: _('Move to finished'),
+ 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/move/finished',
+ 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);
+ abuttons.move.setDisabled(r.length <= 0);
}
tvheadend.idnode_grid(panel, {
'?title=' + encodeURIComponent(title) + '">' + _('Play') + '</a>';
}
}],
- tbar: [downloadButton, rerecordButton],
+ tbar: [downloadButton, rerecordButton, moveButton],
selected: selected,
help: function() {
new tvheadend.help(_('DVR - Failed Recordings'), 'dvr_failed.html');
background-image: url(../icons/accept.png) !important;
}
+.movetofinished {
+ background-image: url(../icons/accept.png) !important;
+}
+
+.movetofailed {
+ background-image: url(../icons/exclamation.png) !important;
+}
+
.x-linked {
display: inline-block;
background-image: url(../icons/linked.gif) !important;