-##Digital Video Recorder - Autorec
-
-This tab is used to create and maintain Digital Video Recorder rules.
-These can be EPG-driven (such as those created from the initial EPG tab)
-through the DVR AutoRec Entries tab , or can be timer-based through the
-Time Schedules tab.
-
This tab controls EPG-driven recording rules.

+Any EPG events matched by an auto-recording rule will appear as a
+[DVR Entry](class/dvrentry).
+
+---
-DVR entries are used by Tvheadend to keep track of upcoming, finished and failed recordings.
+DVR entries are used by Tvheadend to keep track of upcoming, finished
+and failed recordings.

* When a recording fails or gets aborted the entry is moved to the [Failed Recordings](dvr_failed) tab.
-**Note**: Some entry details are not available/incomplete until the recording
+Some entry details are not available/incomplete until the recording
completes or fails, e.g. filesize, total data errors, etc.
---
-##Digital Video Recorder - Time Schedules
+This tab controls timer-driven recording rules.
-This tab is used to create and maintain Digital Video Recorder rules.
-These can be EPG-driven (such as those created from the initial EPG tab)
-through the DVR AutoRec Entries tab , or can be timer-based through the
-Time Schedules tab.
+
-This tab controls timer-driven recording rules.
+Timer events will appear as a [DVR Entry](class/dvrentry).
-
+---
-##Digital Video Recorder - Failed Recordings
+##DVR - Failed Recordings
-This tab shows all failed recordings.
+This tab shows all failed recording entries.

###Playing a Failed Recording
-You can play a partial recording by clicking the *Play* link.
+You can play a partial recording by clicking the *Play* link,
+note that these links do not link to an actual file but to a playlist.
-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.
+This will automatically launch an appropriate player, otherwise you will
+need to manually open the playlist to start watching (normally a
+double-click on the downloaded file).
###Downloading a Recording
###Moving an Entry
-Failed recording can be moved to the [Finished Recordings](dvr_finished)
+Failed recordings 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.
Highlight the desired entry(s) then press the *[Delete]* button on the menu bar.
-**Deleting an entry cannot be undone. You
-will be prompted to confirm deletion.**
+**Deleting can't be undone. You will be prompted to confirm deletion.**
**Tip**: You can highlight multiple entries by holding ctrl or shift
-(to select a range).
+(to select a range) while clicking.
-##Digital Video Recorder - Finished Recordings
+##DVR - Finished Recordings
-This tab shows all your finished recordings.
+This tab shows all your finished recording entries.

###Playing a Recording
-You can play a recording by clicking the *Play* link.
+You can play a recording by clicking the *Play* link,
+note that these links do not link to an actual file but to a playlist.
-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.
+This will automatically launch an appropriate player, otherwise you will
+need to manually open the playlist to start watching (normally a
+double-click on the downloaded file).
###Downloading a Recording
###Editing an Entry
You can edit an entry by clicking the *[Edit]* button on the menu bar,
-note that not all [DVR Entry](class/dvrentry) fields can be edited.
+note that not all [Entry](class/dvrentry) fields can be edited.
-###Deleting an Entry.
+###Deleting an Entry
Highlight the desired entry(s) then press the *[Delete]* button on the
menu bar.
-**Deleting an entry cannot be undone. You
+**Deleting can't be undone. You
will be prompted to confirm deletion.**
**Tip**: You can highlight multiple entries by holding ctrl or shift
-(to select a range).
+(to select a range) while clicking.
-##Digital Video Recorder - Upcoming/Current Recordings
+##DVR - Upcoming/Current Recordings
-This tab shows your all upcoming/current recordings.
+This tab shows your all upcoming/current recording entries.

####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
-search the EPG, take a look at the [EPG](epg) page.
+program/event you would like to record. Click on it, then using the broadcast
+details dialog you can:
-Once you've found the program you'd like to record, click on it, then
-using the resultant dialog you can:
-
-* Record it once by pressing the *[Record program]* button.
+* Record the event 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.
+For full instructions on how to search and record using the EPG take a
+look at the [EPG](epg) page.
####Adding an Entry Using Autorec Rules
* Record events using regular expressions, they can be as simple or as powerful as you like.
* Record events that broadcast between certain times or days of the week.
-Please see [Autorec](dvr_autorec) for more information.
+See [Autorec](class/dvrautorec) for more information.
+
+####Adding a Timer Event
+
+You can set time-based entries using the [Timer](class/dvrtimerec) tab.
####Manual Event Entry/Editing an Entry
-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.
+To add or edit an entry highlight the desired entry within the grid and
+then press the *[Add]* or *[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 Entries](class/dvrentry) page for a more detailed look at
the various entry options.
-###Deleting an Entry
+###Deleting an Entry/Stopping an In-progress Recording
-You can delete or abort an upcoming entry (or an already in-progress recording) by pressing
-the *[Delete]* or *[Abort]* buttons.
+You can delete, stop or abort an upcoming (or an already in-progress) recording by pressing
+the *[Delete]*, *[Stop]* or *[Abort]* button from the menu bar.
-* The *[Delete]* button completely removes the event and any associated files.
+* The *[Delete]* button completely removes the event and any associated file(s).
+* The *[Stop]* button gracefully stops an in-progress recording and moves it to the [Finished Recordings](dvr_finished) tab.
* 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.
+Note that only in-progress recording can be stopped or aborted.
+
**Deleting or aborting an entry cannot be undone, you will be prompted for confirmation.**
**Filter content type...** | Only display events that match the given content type tag.
| Most DVB networks classify their events into content groups. This field allows you to filter based on content type (e.g. “Sports” or “Game Show”). Supported tags are determined by your broadcaster. Again, simply start typing to filter the entries if you have a long list to choose from.
**Filter duration...** | Only display events that fall between the given minimum and maximum durations.
- | This allows you to filter for or against, say, a daily broadcast and a weekly omnibus edition of a programme, or only look for short news bulletins and not the 24-hour rolling broadcasts.
+ | This allows you to filter for or against, say, a daily broadcast and a weekly omnibus edition of a program, or only look for short news bulletins and not the 24-hour rolling broadcasts.
*Title*, *Channel*, *Tag* and *Content Type* are dependent on your configuration and on what your
broadcaster sends. Options for the *Duration* are as follows:
Filter Range | Example Purpose
-----------------------|----------------
-00:00:01 to 00:15:00 | Very short news bulletins, children's programmes, etc.
-00:15:01 to 00:30:00 | Short programmes, e.g. daily soap operas
-00:30:01 to 01:30:00 | Medium-length programmes, e.g. documentaries
-01:30:01 to 03:00:00 | Longer programmes, e.g. films
-03:00:00 to no maximum | Very long programmes, e.g. major sporting events
+00:00:01 to 00:15:00 | Very short news bulletins, children's programs, etc.
+00:15:01 to 00:30:00 | Short programs, e.g. daily soap operas
+00:30:01 to 01:30:00 | Medium-length programs, e.g. documentaries
+01:30:01 to 03:00:00 | Longer programs, e.g. films
+03:00:00 to no maximum | Very long programs, e.g. major sporting events
So, if you only want to see Movies from your available HD channels, you
would select ‘HDTV’ in the *[Filter tag…]* field, and select ‘Movie /
Drama’ in the *[Filter content type…]* field. If you wish, you could
-then further limit the search to programmes of between 90 minutes and 3
+then further limit the search to programs of between 90 minutes and 3
hours by selecting ‘01:30:01 to 03:00:00’ in the *[Filter duration…]*
field.
The main grid items have the following functions:
**Details**
-: Displays the current status of a recording event for this programme if
+: Displays the current status of a recording event for this program if
one applies:
Icon | Description
-------------------------------------------------------|-------------
- | the programme is scheduled for recording
- | the programme is currently recording
+ | the program is scheduled for recording
+ | the program is currently recording
 | click to call up more detailed information about an event
+ | the program failed to record
**Progress**
-: A bar graph display of how far through a programme we currently are.
+: A bar graph display of how far through a program we currently are.
**Title**
-: The title of the programme. *You can automatically set a filter to the
+: The title of the program. *You can automatically set a filter to the
value of this field by clicking on it (e.g. click on 'Daily News' will
- automatically filter the whole grid to only show programmes with the same
+ automatically filter the whole grid to only show programs with the same
name).*
-**SubTitle**
-: The subtitle of the programme, if gien by your EPG provider. Note that some
- (notably, UK) providers use this for a programme synopsis instead of a true
+**Subtitle**
+: The subtitle of the program, if gien by your EPG provider. Note that some
+ (notably, UK) providers use this for a program synopsis instead of a true
subtitle.
**Episode**
: Episode number, if given by your EPG provider.
**Start Time**
-: The scheduled start time of the programme.
+: The scheduled start time of the program.
**End Time**
-: The scheduled end time of the programme.
+: The scheduled end time of the program.
**Duration**
-: The scheduled duration (i.e. start time to end time) of the programme.
+: The scheduled duration (i.e. start time to end time) of the program.
**Number**
: The channel number of the broadcasting channel, if defined.
**Channel**
: The name of the broadcasting channel. *You can automatically set a filter to the
value of this field by clicking on it (e.g. click on 'Channel 4 HD' will
- automatically filter the whole grid to only show programmes from that channel).*
+ automatically filter the whole grid to only show programs from that channel).*
**Stars**
-: Rating (in stars) of the programme.
+: Rating (in stars) of the program.
**Age**
-: Age rating of the programme.
+: Age rating of the program.
**Content Type**
: Any content/genre information as provided by the EPG provider. *You can
automatically set a filter to the value of this field by clicking on it
(e.g. click on 'Movie/Drama' will automatically filter the whole grid
- to only show programmes of the same type).*
+ to only show programs of the same type).*
---
specific DVR profile that will apply to the recording or autorec rule.
This will normally show as *(default)*, but you can define different
profiles in the **Configuration -\> Recording -\> Digital Video
-Recorder** tab. This allows you to set, for example, more post-
+Recorder Profiles** tab. This allows you to set, for example, more post-
broadcast padding for a channel that always runs late, or perhaps define
a different post-processing command to strip adverts out on a commercial
channel.
-You will also see a *[Search IMDB]* button to look for the programme by name
-on imdb.com, and a *[Play program]* button to watch a programme that’s already
+You will also see *[Search IMDB]* and *[TheTVDB] buttons to look for the program by name
+on imdb.com/thetvdb.com, and a *[Play program]* button to watch a program that’s already
in progress. This second button downloads a playlist file (XSPF or M3U
depending on your startup options); if your system is configured for it,
this will automatically launch an appropriate player, otherwise you will
- [Upcoming/Current Recordings](dvr_upcoming)
- [Finished Recordings](dvr_finished)
- [Failed Recordings](dvr_failed)
- - [DVR AutoRec Entries](class/dvrautorec)
- - [Time Schedules (TimeRec)](class/dvrtimerec)
+ - [Auto-recording (Autorecs)](class/dvrautorec)
+ - [Time-based Recording (Timers)](class/dvrtimerec)
Web Interface Configuration Guide
const idclass_t dvr_autorec_entry_class = {
.ic_class = "dvrautorec",
- .ic_caption = N_("DVR Auto-record entry"),
+ .ic_caption = N_("DVR - Auto-recording (Autorecs)"),
.ic_event = "dvrautorec",
.ic_doc = tvh_doc_dvrautorec_class,
.ic_changed = dvr_autorec_entry_class_changed,
.type = PT_STR,
.id = "name",
.name = N_("Name"),
- .desc = N_("The name given to the rule."),
+ .desc = N_("The name of the the rule."),
.off = offsetof(dvr_autorec_entry_t, dae_name),
},
{
.type = PT_U32,
.id = "btype",
.name = N_("Broadcast type"),
- .desc = N_("Select type of broadcast (all, new/premiere or repeat)."),
+ .desc = N_("Select type of broadcast."),
.def.i = DVR_AUTOREC_BTYPE_ALL,
.off = offsetof(dvr_autorec_entry_t, dae_btype),
.list = dvr_autorec_entry_class_btype_list,
"be used to filter matching events/programs."),
.list = dvr_autorec_entry_class_content_type_list,
.off = offsetof(dvr_autorec_entry_t, dae_content_type),
- .opts = PO_ADVANCED
+ .opts = PO_ADVANCED,
},
{
.type = PT_STR,
.set = dvr_autorec_entry_class_start_set,
.get = dvr_autorec_entry_class_start_get,
.list = dvr_autorec_entry_class_time_list_,
- .opts = PO_SORTKEY
+ .opts = PO_SORTKEY | PO_DOC_NLIST,
},
{
.type = PT_STR,
.set = dvr_autorec_entry_class_start_window_set,
.get = dvr_autorec_entry_class_start_window_get,
.list = dvr_autorec_entry_class_time_list_,
- .opts = PO_SORTKEY,
+ .opts = PO_SORTKEY | PO_DOC_NLIST,
},
{
.type = PT_TIME,
"time by x minutes."),
.off = offsetof(dvr_autorec_entry_t, dae_start_extra),
.list = dvr_autorec_entry_class_extra_list,
- .opts = PO_DURATION | PO_SORTKEY | PO_ADVANCED
+ .opts = PO_DURATION | PO_SORTKEY | PO_ADVANCED | PO_DOC_NLIST,
},
{
.type = PT_TIME,
"stop time"),
.off = offsetof(dvr_autorec_entry_t, dae_stop_extra),
.list = dvr_autorec_entry_class_extra_list,
- .opts = PO_DURATION | PO_SORTKEY | PO_ADVANCED
+ .opts = PO_DURATION | PO_SORTKEY | PO_ADVANCED | PO_DOC_NLIST,
},
{
.type = PT_U32,
.get = dvr_autorec_entry_class_weekdays_get_,
.list = dvr_autorec_entry_class_weekdays_list,
.rend = dvr_autorec_entry_class_weekdays_rend_,
- .def.list = dvr_autorec_entry_class_weekdays_default
+ .def.list = dvr_autorec_entry_class_weekdays_default,
+ .opts = PO_DOC_NLIST,
},
{
.type = PT_INT,
"shorter than this duration."),
.list = dvr_autorec_entry_class_minduration_list,
.off = offsetof(dvr_autorec_entry_t, dae_minduration),
- .opts = PO_ADVANCED
+ .opts = PO_ADVANCED | PO_DOC_NLIST,
},
{
.type = PT_INT,
"longer than this duration."),
.list = dvr_autorec_entry_class_maxduration_list,
.off = offsetof(dvr_autorec_entry_t, dae_maxduration),
- .opts = PO_ADVANCED
+ .opts = PO_ADVANCED | PO_DOC_NLIST,
},
{
.type = PT_U32,
.id = "pri",
.name = N_("Priority"),
.desc = N_("The priority of any recordings set because of this "
- "rule: in descending priority, values are "
- "important, high, normal, low and unimportant. "
- "Higher-priority events will take precedence and "
+ "rule will take precedence and "
"cancel lower-priority events."),
.list = dvr_entry_class_pri_list,
.def.i = DVR_PRIO_NORMAL,
.off = offsetof(dvr_autorec_entry_t, dae_pri),
- .opts = PO_ADVANCED
+ .opts = PO_ADVANCED,
},
{
.type = PT_U32,
.def.i = DVR_AUTOREC_RECORD_ALL,
.off = offsetof(dvr_autorec_entry_t, dae_record),
.list = dvr_autorec_entry_class_dedup_list,
- .opts = PO_ADVANCED
+ .opts = PO_ADVANCED,
},
{
.type = PT_U32,
.def.i = DVR_RET_DVRCONFIG,
.off = offsetof(dvr_autorec_entry_t, dae_retention),
.list = dvr_entry_class_retention_list,
- .opts = PO_HIDDEN | PO_EXPERT,
+ .opts = PO_HIDDEN | PO_EXPERT | PO_DOC_NLIST,
},
{
.type = PT_U32,
.def.i = DVR_RET_DVRCONFIG,
.off = offsetof(dvr_autorec_entry_t, dae_removal),
.list = dvr_entry_class_removal_list,
- .opts = PO_HIDDEN | PO_ADVANCED,
+ .opts = PO_HIDDEN | PO_ADVANCED | PO_DOC_NLIST,
},
{
.type = PT_U32,
const idclass_t dvr_config_class = {
.ic_class = "dvrconfig",
- .ic_caption = N_("DVR configuration profile"),
+ .ic_caption = N_("DVR - Configuration Profile"),
.ic_event = "dvrconfig",
.ic_doc = tvh_doc_dvrconfig_class,
.ic_changed = dvr_config_class_changed,
.def.i = DVR_PRIO_NORMAL,
.set = dvr_entry_class_pri_set,
.list = dvr_entry_class_pri_list,
- .opts = PO_SORTKEY | PO_DOC_NLIST,
+ .opts = PO_SORTKEY,
},
{
.type = PT_U32,
const idclass_t dvr_timerec_entry_class = {
.ic_class = "dvrtimerec",
- .ic_caption = N_("DVR time record entry"),
+ .ic_caption = N_("DVR - Time-based Recording (Timers)"),
.ic_event = "dvrtimerec",
.ic_doc = tvh_doc_dvrtimerec_class,
.ic_changed = dvr_timerec_entry_class_changed,
.get = dvr_timerec_entry_class_start_get,
.list = dvr_timerec_entry_class_time_list,
.def.s = "12:00",
- .opts = PO_SORTKEY,
+ .opts = PO_SORTKEY | PO_DOC_NLIST,
},
{
.type = PT_STR,
.get = dvr_timerec_entry_class_stop_get,
.list = dvr_timerec_entry_class_time_list,
.def.s = "12:00",
- .opts = PO_SORTKEY,
+ .opts = PO_SORTKEY | PO_DOC_NLIST,
},
{
.type = PT_U32,
.get = dvr_timerec_entry_class_weekdays_get,
.list = dvr_autorec_entry_class_weekdays_list,
.rend = dvr_timerec_entry_class_weekdays_rend,
- .def.list = dvr_timerec_entry_class_weekdays_default
+ .def.list = dvr_timerec_entry_class_weekdays_default,
+ .opts = PO_DOC_NLIST,
},
{
.type = PT_U32,
.def.i = DVR_RET_DVRCONFIG,
.off = offsetof(dvr_timerec_entry_t, dte_retention),
.list = dvr_entry_class_retention_list,
- .opts = PO_EXPERT
+ .opts = PO_EXPERT | PO_DOC_NLIST,
},
{
.type = PT_U32,
.def.i = DVR_RET_DVRCONFIG,
.off = offsetof(dvr_timerec_entry_t, dte_removal),
.list = dvr_entry_class_removal_list,
- .opts = PO_ADVANCED
+ .opts = PO_ADVANCED | PO_DOC_NLIST,
},
{
.type = PT_STR,