-The DVR entry is used by Tvheadend to keep track of the upcoming,
-finished and failed recordings.
+DVR entries are used by Tvheadend to keep track of upcoming, finished and failed recordings.
-* Upcoming and currently recording entries remain in the 'Upcoming/
-Current Recordings' tab.
-* When a recording completes successfully the entry gets moved to the
-'Finished recordings' tab.
-* When a recording fails or is aborted it gets moved to the 'Failed
-recordings' tab.
+
-Some entry details are not available/incomplete until the recording
+---
+
+ * Upcoming and currently recording entries remain in the [Upcoming/Current Recordings](dvr_upcoming) tab.
+
+ * When a recording completes successfully the entry is moved to the [Finished Recordings](dvr_finished) tab.
+
+ * When a recording fails or gets aborted the entry is moved to the [Failed Recordings](dvr_failed) tab.
+
+The *Details* column gives a quick overview as to the status of each
+entry:
+
+Icon | Description
+-------------------------------------------|-------------
+ | the program is scheduled (upcoming)
+ | the program is active and underway (current)
+ | click to display detailed information about the selected recording (upcoming or current)
+
+**Note**: Some entry details are not available/incomplete until the recording
completes or fails, e.g. filesize, total data errors, etc.
+
--- /dev/null
+##Digital Video Recorder - Failed Recordings
+
+This tab shows all failed recordings.
+
+
+
+The *Status* column indicates why a recording failed.
+See the status item on the [DVR Entries](class/dvrentry) page for more
+information.
+
+---
+
+###1. Playing a Failed Recording
+
+You can play a partial recording by clicking the *Play* link.
+
+If your browser supports video playback it should automatically start
+playing. Note, the *Play* links do not link to an actual file but to a m3u playlist.
+
+###2. Downloading a Recording
+
+Highlight the desired entry then press the *[Download]* button from the
+menu bar.
+
+###3. Re-recording an Entry/Re-schedule a Failed Recording.
+
+You can re-schedule an entry by pressing the *[Re-record]* button from
+the menu bar.
+
+**Note**: Your EPG data must have another matching event to be able to re-schedule
+the entry.
+
+###4. Moving an Entry
+
+Failed recording can be moved to the [Finished Recordings](dvr_finished)
+tab by highlighting the desired entry and then pressing the *[Move to finished]*
+button from the menu bar.
+
+###5. Deleting an Entry
+
+Highlight the desired entry(s) then press the *[Delete]* button.
+
+**Deleting an entry cannot be undone. You
+will be prompted to confirm deletion.**
+
+**Tip**: You can highlight multiple entries by holding ctrl or shift
+(to select a range).
+
--- /dev/null
+##Digital Video Recorder - Finished Recordings
+
+This tab shows all your finished recordings.
+
+
+
+---
+
+###1. Playing a Recording
+
+You can play a recording by clicking the *Play* link.
+
+If your browser supports video playback it should automatically start
+playing. Note, the *Play* links do not link to an actual file but to a m3u playlist.
+
+###2. Downloading a Recording
+
+Highlight the desired entry then press the *[Download]* button from the
+menu bar.
+
+###3. Editing an Entry
+
+You can edit an entry by clicking the *[Edit]* button from the menu bar,
+note that not all [DVR Entry](class/dvrentry) fields can be edited.
+
+###4. Deleting an Entry.
+
+Highlight the desired entry(s) then press the *[Delete]* button.
+
+**Deleting an entry cannot be undone. You
+will be prompted to confirm deletion.**
+
+**Tip**: You can highlight multiple entries by holding ctrl or shift
+(to select a range).
+
+

-### Items
+---
-**Details**
-: Shows the status of the recording event:
+###1. Adding and Editing an Entry
-Icon | Description
--------------------------------------------|-------------
- | the program is scheduled (upcoming)
- | the program is active and underway (current)
- | click to display detailed information about the selected recording (upcoming or current)
-
-Please see the [DVR Entry](class/dvrentry) page for a more detailed look at
-the various entry options.
-
-###1. Adding an Entry/Adding a New Recording
-
-You can add an entry by:
-
-####1.1. Using the EPG
+####1.1. Adding an Entry Using the EPG
Using the Electronic Program Guide search functionality, find the
program/event you would like to record. For full instructions on how to
* Record it once by pressing the *[Record program]* button.
* Automatically record all upcoming events matching the program's title by pressing the *[Autorec]* button.
* Record all upcoming series episodes by pressing the *[Record series]* button. **This replaces the *[Autorec]* button when series link information is available.**
-
+
**Tip**: You can quickly find all matching programs by clicking on the title.
-####1.2. Using Autorec Rules
+####1.2. Adding an Entry Using Autorec Rules
Autorec rules allow you to match events using various options.
Please see [Autorec](dvr_autorec) for more information.
-###1.3. Manual Event Entry/Editing an Entry
+####1.3. Manual Event Entry/Editing an Entry
-A common set of fields is used for the _Add_ or _Edit_ functions, most
+Use the *[Add]* button to manually to add an entry. To edit an entry,
+highlight the desired entry within the grid and then press the *[Edit]* button.
+
+A common set of fields is used for the _Add_ or _Edit_ dialogs, most
of which can also be seen in the grid view:

-See the [DVR Entry](class/dvrentry) page for a more detailed look at
+See the [DVR Entries](class/dvrentry) page for a more detailed look at
the various entry options.
+
+###2. Deleting an Entry
+
+You can delete or abort an upcoming entry (or an already in-progress recording) by pressing
+the *[Delete]* or *[Abort]* buttons.
+
+* The *[Delete]* button completely removes the event and any associated files.
+* The *[Abort]* button stops an already in-progress recording, moves the entry to the [Failed Recordings](dvr_failed) and marks it as *Aborted by user*. Note that this does not remove the (partial) recording file from disk.
+
+**Deleting or aborting an entry cannot be undone, you will be prompted for confirmation.**
* Digital Video Recorder
+ - [DVR Entries](class/dvrentry)
- [Upcoming/Current Recordings](dvr_upcoming)
- - [Finished Recordings](class/dvrentry)
- - [Failed Recordings](class/dvrentry)
+ - [Finished Recordings](dvr_finished)
+ - [Failed Recordings](dvr_failed)
- [DVR AutoRec Entries](class/dvrautorec)
- [Time Schedules (TimeRec)](class/dvrtimerec)
- - [DVR Entry](class/dvrentry)
Web Interface Configuration Guide
--- /dev/null
+The *status* column indicates why an entry failed:
+
+Status | Description
+-----------------|----------------------------------------------------------
+Aborted by user | The recording was interrupted by the user.
+File missing | The associated file(s) cannot be found on disk.
+Time missed | Indicates a recording failed due to one (or more) of the following: Tvheadend wasn't running when the entry/recording was scheduled to start; Tvheadend couldn't create the necessary file(s)/folder(s) to begin recording due to file system issues; The tuner returned no data indicating a signal/external problem; No free tuner was available for use;
dvr_entry_t *de = (dvr_entry_t *)o;
if (de && !dvr_entry_is_editable(de))
return PO_RDONLY | PO_DURATION | PO_ADVANCED;
- return PO_DURATION | PO_ADVANCED;
+ return PO_DURATION | PO_ADVANCED | PO_DOC_NLIST;
}
static int
return m;
}
+static char *
+dvr_entry_prop_status_doc(const struct property *p, const char *lang)
+{
+ extern const char *tvh_doc_dvr_status_property[];
+ return prop_md_doc(tvh_doc_dvr_status_property, lang);
+}
+
extern const char *tvh_doc_dvrentry_class[];
const idclass_t dvr_entry_class = {
.ic_class = "dvrentry",
- .ic_caption = N_("DVR Entry"),
+ .ic_caption = N_("DVR Entries"),
.ic_event = "dvrentry",
.ic_doc = tvh_doc_dvrentry_class,
.ic_changed = dvr_entry_class_changed,
"stop time."),
.off = offsetof(dvr_entry_t, de_stop_extra),
.list = dvr_entry_class_extra_list,
- .opts = PO_SORTKEY | PO_ADVANCED,
+ .opts = PO_SORTKEY | PO_ADVANCED | PO_DOC_NLIST,
},
{
.type = PT_TIME,
.type = PT_STR,
.id = "channel_icon",
.name = N_("Channel icon"),
- /*.desc = N_("Channel icon URL."),*/
+ .desc = N_("Channel icon URL."),
.get = dvr_entry_class_channel_icon_url_get,
.opts = PO_HIDDEN | PO_RDONLY | PO_NOSAVE | PO_NOUI,
},
.def.i = DVR_PRIO_NORMAL,
.set = dvr_entry_class_pri_set,
.list = dvr_entry_class_pri_list,
- .opts = PO_SORTKEY,
+ .opts = PO_SORTKEY | PO_DOC_NLIST,
},
{
.type = PT_U32,
.off = offsetof(dvr_entry_t, de_retention),
.def.i = DVR_RET_DVRCONFIG,
.list = dvr_entry_class_retention_list,
- .opts = PO_HIDDEN | PO_EXPERT
+ .opts = PO_HIDDEN | PO_EXPERT | PO_DOC_NLIST,
},
{
.type = PT_U32,
.off = offsetof(dvr_entry_t, de_removal),
.def.i = DVR_RET_DVRCONFIG,
.list = dvr_entry_class_removal_list,
- .opts = PO_HIDDEN | PO_ADVANCED
+ .opts = PO_HIDDEN | PO_ADVANCED | PO_DOC_NLIST,
},
{
.type = PT_STR,
.type = PT_STR,
.id = "filename",
.name = N_("Filename"),
- /*.desc = N_("Filename used by this entry."), */
+ .desc = N_("Filename used by the entry."),
.get = dvr_entry_class_filename_get,
.opts = PO_RDONLY | PO_NOSAVE | PO_NOUI,
},
.type = PT_STR,
.id = "directory",
.name = N_("Directory"),
- /*.desc = N_("Directory used by this entry."), */
+ .desc = N_("Directory used by the entry."),
.off = offsetof(dvr_entry_t, de_directory),
.opts = PO_RDONLY | PO_NOUI,
},
.type = PT_U32,
.id = "errorcode",
.name = N_("Error code"),
- /*.desc = N_("Error code of entry."), */
+ .desc = N_("Error code of entry."),
.off = offsetof(dvr_entry_t, de_last_error),
.opts = PO_RDONLY | PO_NOUI,
},
.type = PT_STR,
.id = "status",
.name = N_("Status"),
+ .doc = dvr_entry_prop_status_doc,
.desc = N_("The recording/entry status."),
.get = dvr_entry_class_status_get,
.opts = PO_RDONLY | PO_NOSAVE | PO_LOCALE,