mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Implemented 'Rewind' in the 'Recordings' menu
This commit is contained in:
parent
7a92a25954
commit
535e755278
4
HISTORY
4
HISTORY
@ -350,7 +350,7 @@ Video Disk Recorder Revision History
|
|||||||
- Encrypted channels can now be selected even without knowing the PNR (however, it
|
- Encrypted channels can now be selected even without knowing the PNR (however, it
|
||||||
is still necessary for the EPG info).
|
is still necessary for the EPG info).
|
||||||
|
|
||||||
2001-02-10: Version 0.71
|
2001-02-11: Version 0.71
|
||||||
|
|
||||||
- Fixed 'Transfer Mode' in cases where a non-primary interface was switched to
|
- Fixed 'Transfer Mode' in cases where a non-primary interface was switched to
|
||||||
a channel that only the primary interface can receive (which could happen in
|
a channel that only the primary interface can receive (which could happen in
|
||||||
@ -386,3 +386,5 @@ Video Disk Recorder Revision History
|
|||||||
module only works if it is inserted into the last DVB card).
|
module only works if it is inserted into the last DVB card).
|
||||||
- The "Now", "Next" and "Schedule" menus now remember the current channel and
|
- The "Now", "Next" and "Schedule" menus now remember the current channel and
|
||||||
restore the list when switching between them.
|
restore the list when switching between them.
|
||||||
|
- The "Green" button in the "Recordings" menu can now be used to rewind a
|
||||||
|
recording and play it from the very beginning.
|
||||||
|
6
MANUAL
6
MANUAL
@ -18,10 +18,10 @@ Video Disk Recorder User's Manual
|
|||||||
Menu Menu on Menu off Menu off Menu off Menu off Menu off Menu on
|
Menu Menu on Menu off Menu off Menu off Menu off Menu off Menu on
|
||||||
Back - Menu off Main menu Main menu Discard Main menu Recordings menu
|
Back - Menu off Main menu Main menu Discard Main menu Recordings menu
|
||||||
Red - Record Edit Edit - Play -
|
Red - Record Edit Edit - Play -
|
||||||
Green - - New New - - Skip -60s
|
Green - - New New - Rewind Skip -60s
|
||||||
Yellow - - Delete Delete - Delete Skip +60s
|
Yellow - - Delete Delete - Delete Skip +60s
|
||||||
Blue - Resume Mark Mark - - Stop
|
Blue - Resume Mark Mark - Summary Stop
|
||||||
0..9 Ch select - - - Numeric inp. - -
|
0..9 Ch select - - - Numeric inp. - Editing
|
||||||
|
|
||||||
* Navigating through the On Screen Menus
|
* Navigating through the On Screen Menus
|
||||||
|
|
||||||
|
53
dvbapi.c
53
dvbapi.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbapi.c 1.57 2001/02/03 17:43:21 kls Exp $
|
* $Id: dvbapi.c 1.58 2001/02/11 11:04:41 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbapi.h"
|
#include "dvbapi.h"
|
||||||
@ -67,7 +67,6 @@ extern "C" {
|
|||||||
#define DISKCHECKINTERVAL 100 // seconds
|
#define DISKCHECKINTERVAL 100 // seconds
|
||||||
|
|
||||||
#define INDEXFILESUFFIX "/index.vdr"
|
#define INDEXFILESUFFIX "/index.vdr"
|
||||||
#define RESUMEFILESUFFIX "/resume.vdr"
|
|
||||||
#define RECORDFILESUFFIX "/%03d.vdr"
|
#define RECORDFILESUFFIX "/%03d.vdr"
|
||||||
#define RECORDFILESUFFIXLEN 20 // some additional bytes for safety...
|
#define RECORDFILESUFFIXLEN 20 // some additional bytes for safety...
|
||||||
|
|
||||||
@ -105,56 +104,6 @@ int HMSFToIndex(const char *HMSF)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- cResumeFile ------------------------------------------------------------
|
|
||||||
|
|
||||||
cResumeFile::cResumeFile(const char *FileName)
|
|
||||||
{
|
|
||||||
fileName = new char[strlen(FileName) + strlen(RESUMEFILESUFFIX) + 1];
|
|
||||||
if (fileName) {
|
|
||||||
strcpy(fileName, FileName);
|
|
||||||
strcat(fileName, RESUMEFILESUFFIX);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
esyslog(LOG_ERR, "ERROR: can't allocate memory for resume file name");
|
|
||||||
}
|
|
||||||
|
|
||||||
cResumeFile::~cResumeFile()
|
|
||||||
{
|
|
||||||
delete fileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
int cResumeFile::Read(void)
|
|
||||||
{
|
|
||||||
int resume = -1;
|
|
||||||
if (fileName) {
|
|
||||||
int f = open(fileName, O_RDONLY);
|
|
||||||
if (f >= 0) {
|
|
||||||
if (read(f, &resume, sizeof(resume)) != sizeof(resume)) {
|
|
||||||
resume = -1;
|
|
||||||
LOG_ERROR_STR(fileName);
|
|
||||||
}
|
|
||||||
close(f);
|
|
||||||
}
|
|
||||||
else if (errno != ENOENT)
|
|
||||||
LOG_ERROR_STR(fileName);
|
|
||||||
}
|
|
||||||
return resume;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool cResumeFile::Save(int Index)
|
|
||||||
{
|
|
||||||
if (fileName) {
|
|
||||||
int f = open(fileName, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP);
|
|
||||||
if (f >= 0) {
|
|
||||||
if (write(f, &Index, sizeof(Index)) != sizeof(Index))
|
|
||||||
LOG_ERROR_STR(fileName);
|
|
||||||
close(f);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- cIndexFile ------------------------------------------------------------
|
// --- cIndexFile ------------------------------------------------------------
|
||||||
|
|
||||||
class cIndexFile {
|
class cIndexFile {
|
||||||
|
12
dvbapi.h
12
dvbapi.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbapi.h 1.34 2001/02/10 13:11:48 kls Exp $
|
* $Id: dvbapi.h 1.35 2001/02/11 10:41:10 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __DVBAPI_H
|
#ifndef __DVBAPI_H
|
||||||
@ -33,16 +33,6 @@ typedef struct CRect {
|
|||||||
#define MenuLines 15
|
#define MenuLines 15
|
||||||
#define MenuColumns 40
|
#define MenuColumns 40
|
||||||
|
|
||||||
class cResumeFile {
|
|
||||||
private:
|
|
||||||
char *fileName;
|
|
||||||
public:
|
|
||||||
cResumeFile(const char *FileName);
|
|
||||||
~cResumeFile();
|
|
||||||
int Read(void);
|
|
||||||
bool Save(int Index);
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *IndexToHMSF(int Index, bool WithFrame = false);
|
const char *IndexToHMSF(int Index, bool WithFrame = false);
|
||||||
// Converts the given index to a string, optionally containing the frame number.
|
// Converts the given index to a string, optionally containing the frame number.
|
||||||
int HMSFToIndex(const char *HMSF);
|
int HMSFToIndex(const char *HMSF);
|
||||||
|
7
i18n.c
7
i18n.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: i18n.c 1.9 2001/02/03 16:06:04 kls Exp $
|
* $Id: i18n.c 1.10 2001/02/11 10:23:10 kls Exp $
|
||||||
*
|
*
|
||||||
* Slovenian translations provided by Miha Setina <mihasetina@softhome.net>
|
* Slovenian translations provided by Miha Setina <mihasetina@softhome.net>
|
||||||
* Italian translations provided by Alberto Carraro <bertocar@tin.it>
|
* Italian translations provided by Alberto Carraro <bertocar@tin.it>
|
||||||
@ -161,6 +161,11 @@ const tPhrase Phrases[] = {
|
|||||||
"Predavajaj",
|
"Predavajaj",
|
||||||
"Riproduci",
|
"Riproduci",
|
||||||
},
|
},
|
||||||
|
{ "Rewind",
|
||||||
|
"Anfang",
|
||||||
|
"",// TODO
|
||||||
|
"",// TODO
|
||||||
|
},
|
||||||
{ "Resume",
|
{ "Resume",
|
||||||
"Weiter",
|
"Weiter",
|
||||||
"Nadaljuj",
|
"Nadaljuj",
|
||||||
|
17
menu.c
17
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 1.64 2001/02/10 15:34:35 kls Exp $
|
* $Id: menu.c 1.65 2001/02/11 11:01:47 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -1497,7 +1497,7 @@ cMenuRecordings::cMenuRecordings(void)
|
|||||||
recording = Recordings.Next(recording);
|
recording = Recordings.Next(recording);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SetHelp(tr("Play"), NULL, tr("Delete"), tr("Summary"));
|
SetHelp(tr("Play"), tr("Rewind"), tr("Delete"), tr("Summary"));
|
||||||
Display();
|
Display();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1511,6 +1511,18 @@ eOSState cMenuRecordings::Play(void)
|
|||||||
return osContinue;
|
return osContinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eOSState cMenuRecordings::Rewind(void)
|
||||||
|
{
|
||||||
|
cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
|
||||||
|
if (ri) {
|
||||||
|
cDvbApi::PrimaryDvbApi->StopReplay(); // must do this first to be able to rewind the currently replayed recording
|
||||||
|
cResumeFile ResumeFile(ri->recording->FileName());
|
||||||
|
ResumeFile.Delete();
|
||||||
|
return Play();
|
||||||
|
}
|
||||||
|
return osContinue;
|
||||||
|
}
|
||||||
|
|
||||||
eOSState cMenuRecordings::Del(void)
|
eOSState cMenuRecordings::Del(void)
|
||||||
{
|
{
|
||||||
cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
|
cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
|
||||||
@ -1551,6 +1563,7 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key)
|
|||||||
switch (Key) {
|
switch (Key) {
|
||||||
case kOk:
|
case kOk:
|
||||||
case kRed: return Play();
|
case kRed: return Play();
|
||||||
|
case kGreen: return Rewind();
|
||||||
case kYellow: return Del();
|
case kYellow: return Del();
|
||||||
case kBlue: return Summary();
|
case kBlue: return Summary();
|
||||||
case kMenu: return osEnd;
|
case kMenu: return osEnd;
|
||||||
|
3
menu.h
3
menu.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.h 1.17 2001/02/04 11:47:21 kls Exp $
|
* $Id: menu.h 1.18 2001/02/11 10:30:35 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _MENU_H
|
#ifndef _MENU_H
|
||||||
@ -43,6 +43,7 @@ class cMenuRecordings : public cOsdMenu {
|
|||||||
private:
|
private:
|
||||||
cRecordings Recordings;
|
cRecordings Recordings;
|
||||||
eOSState Play(void);
|
eOSState Play(void);
|
||||||
|
eOSState Rewind(void);
|
||||||
eOSState Del(void);
|
eOSState Del(void);
|
||||||
eOSState Summary(void);
|
eOSState Summary(void);
|
||||||
public:
|
public:
|
||||||
|
62
recording.c
62
recording.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.c 1.25 2001/02/04 12:36:32 kls Exp $
|
* $Id: recording.c 1.26 2001/02/11 10:47:31 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
@ -15,7 +15,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "dvbapi.h"
|
|
||||||
#include "interface.h"
|
#include "interface.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
#include "videodir.h"
|
#include "videodir.h"
|
||||||
@ -25,6 +24,7 @@
|
|||||||
#define DATAFORMAT "%4d-%02d-%02d.%02d:%02d.%02d.%02d" RECEXT
|
#define DATAFORMAT "%4d-%02d-%02d.%02d:%02d.%02d.%02d" RECEXT
|
||||||
#define NAMEFORMAT "%s/%s/" DATAFORMAT
|
#define NAMEFORMAT "%s/%s/" DATAFORMAT
|
||||||
|
|
||||||
|
#define RESUMEFILESUFFIX "/resume.vdr"
|
||||||
#define SUMMARYFILESUFFIX "/summary.vdr"
|
#define SUMMARYFILESUFFIX "/summary.vdr"
|
||||||
#define MARKSFILESUFFIX "/marks.vdr"
|
#define MARKSFILESUFFIX "/marks.vdr"
|
||||||
|
|
||||||
@ -109,6 +109,64 @@ void AssertFreeDiskSpace(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- cResumeFile ------------------------------------------------------------
|
||||||
|
|
||||||
|
cResumeFile::cResumeFile(const char *FileName)
|
||||||
|
{
|
||||||
|
fileName = new char[strlen(FileName) + strlen(RESUMEFILESUFFIX) + 1];
|
||||||
|
if (fileName) {
|
||||||
|
strcpy(fileName, FileName);
|
||||||
|
strcat(fileName, RESUMEFILESUFFIX);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
esyslog(LOG_ERR, "ERROR: can't allocate memory for resume file name");
|
||||||
|
}
|
||||||
|
|
||||||
|
cResumeFile::~cResumeFile()
|
||||||
|
{
|
||||||
|
delete fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cResumeFile::Read(void)
|
||||||
|
{
|
||||||
|
int resume = -1;
|
||||||
|
if (fileName) {
|
||||||
|
int f = open(fileName, O_RDONLY);
|
||||||
|
if (f >= 0) {
|
||||||
|
if (read(f, &resume, sizeof(resume)) != sizeof(resume)) {
|
||||||
|
resume = -1;
|
||||||
|
LOG_ERROR_STR(fileName);
|
||||||
|
}
|
||||||
|
close(f);
|
||||||
|
}
|
||||||
|
else if (errno != ENOENT)
|
||||||
|
LOG_ERROR_STR(fileName);
|
||||||
|
}
|
||||||
|
return resume;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cResumeFile::Save(int Index)
|
||||||
|
{
|
||||||
|
if (fileName) {
|
||||||
|
int f = open(fileName, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP);
|
||||||
|
if (f >= 0) {
|
||||||
|
if (write(f, &Index, sizeof(Index)) != sizeof(Index))
|
||||||
|
LOG_ERROR_STR(fileName);
|
||||||
|
close(f);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cResumeFile::Delete(void)
|
||||||
|
{
|
||||||
|
if (fileName) {
|
||||||
|
if (remove(fileName) < 0 && errno != ENOENT)
|
||||||
|
LOG_ERROR_STR(fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// --- cRecording ------------------------------------------------------------
|
// --- cRecording ------------------------------------------------------------
|
||||||
|
|
||||||
cRecording::cRecording(cTimer *Timer)
|
cRecording::cRecording(cTimer *Timer)
|
||||||
|
13
recording.h
13
recording.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.h 1.12 2001/02/04 11:44:37 kls Exp $
|
* $Id: recording.h 1.13 2001/02/11 10:45:52 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __RECORDING_H
|
#ifndef __RECORDING_H
|
||||||
@ -17,6 +17,17 @@
|
|||||||
void RemoveDeletedRecordings(void);
|
void RemoveDeletedRecordings(void);
|
||||||
void AssertFreeDiskSpace(void);
|
void AssertFreeDiskSpace(void);
|
||||||
|
|
||||||
|
class cResumeFile {
|
||||||
|
private:
|
||||||
|
char *fileName;
|
||||||
|
public:
|
||||||
|
cResumeFile(const char *FileName);
|
||||||
|
~cResumeFile();
|
||||||
|
int Read(void);
|
||||||
|
bool Save(int Index);
|
||||||
|
void Delete(void);
|
||||||
|
};
|
||||||
|
|
||||||
class cRecording : public cListObject {
|
class cRecording : public cListObject {
|
||||||
friend class cRecordings;
|
friend class cRecordings;
|
||||||
private:
|
private:
|
||||||
|
Loading…
Reference in New Issue
Block a user