From: Mark Clarkstone Date: Thu, 7 Apr 2016 14:34:22 +0000 (+0100) Subject: A bucket of changes! X-Git-Tag: v4.2.1~706 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e296daaa8b839f5abdbffd0ed3110235b9f9f8f7;p=thirdparty%2Ftvheadend.git A bucket of changes! mdhelp: add dvr_failed and dvr_finished mdhelp: add dvr tab image mdhelp: move "details" column info to dvrentry (as it applies to the other tabs too) mdhelp: update dvrentry mdhelp: update toc mdhelp: add extended info for the status property (added dvr_status.md) dvr_db: update various property descriptions dvb_db: add PO_DOC_NLIST opt to some properties Plus some other little bits here and there.. --- diff --git a/docs/class/dvrentry.md b/docs/class/dvrentry.md index 646047b7b..82586fd19 100644 --- a/docs/class/dvrentry.md +++ b/docs/class/dvrentry.md @@ -1,12 +1,24 @@ -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. +!['Digital Video Recorder' Tabs](docresources/configdvrtabs4.png) -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 +-------------------------------------------|------------- +![Clock icon](icons/scheduled.png) | the program is scheduled (upcoming) +![Recording icon](icons/rec.png) | the program is active and underway (current) +![Information icon](icons/information.png) | 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. + diff --git a/docs/docresources/configdvrtabs4.png b/docs/docresources/configdvrtabs4.png new file mode 100644 index 000000000..75aad50df Binary files /dev/null and b/docs/docresources/configdvrtabs4.png differ diff --git a/docs/markdown/dvr_failed.md b/docs/markdown/dvr_failed.md new file mode 100644 index 000000000..f716ea994 --- /dev/null +++ b/docs/markdown/dvr_failed.md @@ -0,0 +1,48 @@ +##Digital Video Recorder - Failed Recordings + +This tab shows all failed recordings. + +!['Failed Recordings' Tab](docresources/failedrecordings1.png) + +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). + diff --git a/docs/markdown/dvr_finished.md b/docs/markdown/dvr_finished.md new file mode 100644 index 000000000..7377d1bc4 --- /dev/null +++ b/docs/markdown/dvr_finished.md @@ -0,0 +1,36 @@ +##Digital Video Recorder - Finished Recordings + +This tab shows all your finished recordings. + +!['Finished Recordings' Tab](docresources/finishedrecordings1.png) + +--- + +###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). + + diff --git a/docs/markdown/dvr_upcoming.md b/docs/markdown/dvr_upcoming.md index 811168724..e14815c05 100644 --- a/docs/markdown/dvr_upcoming.md +++ b/docs/markdown/dvr_upcoming.md @@ -4,25 +4,11 @@ This tab shows your all upcoming/current recordings. !['Upcoming/Current Recordings' Tab](docresources/upcomingrecordings1.png) -### Items +--- -**Details** -: Shows the status of the recording event: +###1. Adding and Editing an Entry -Icon | Description --------------------------------------------|------------- -![Clock icon](icons/clock.png) | the program is scheduled (upcoming) -![Recording icon](icons/rec.png) | the program is active and underway (current) -![Information icon](icons/information.png) | 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 @@ -34,10 +20,10 @@ using the resultant dialog you can: * 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. @@ -46,12 +32,25 @@ 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: ![Add/Edit Upcoming Recording](docresources/upcomingrecordings3.png) -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.** diff --git a/docs/markdown/toc.md b/docs/markdown/toc.md index 5f4959111..2c71b5cf1 100644 --- a/docs/markdown/toc.md +++ b/docs/markdown/toc.md @@ -22,12 +22,12 @@ Web Interface Guide * 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 diff --git a/docs/property/dvr_status.md b/docs/property/dvr_status.md new file mode 100644 index 000000000..f136a1efa --- /dev/null +++ b/docs/property/dvr_status.md @@ -0,0 +1,7 @@ +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; diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index aa8217f97..bc9ba1b54 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -2153,7 +2153,7 @@ dvr_entry_class_start_extra_opts(void *o) 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 @@ -2809,11 +2809,18 @@ dvr_entry_class_content_type_list(void *o, const char *lang) 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, @@ -2882,7 +2889,7 @@ const idclass_t dvr_entry_class = { "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, @@ -2917,7 +2924,7 @@ const idclass_t dvr_entry_class = { .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, }, @@ -2990,7 +2997,7 @@ const idclass_t dvr_entry_class = { .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, @@ -3000,7 +3007,7 @@ const idclass_t dvr_entry_class = { .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, @@ -3010,7 +3017,7 @@ const idclass_t dvr_entry_class = { .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, @@ -3046,7 +3053,7 @@ const idclass_t dvr_entry_class = { .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, }, @@ -3054,7 +3061,7 @@ const idclass_t dvr_entry_class = { .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, }, @@ -3062,7 +3069,7 @@ const idclass_t dvr_entry_class = { .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, }, @@ -3205,6 +3212,7 @@ const idclass_t dvr_entry_class = { .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,