1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

The 'summary' field of a timer definition has been renamed to 'aux'

This commit is contained in:
Klaus Schmidinger 2006-02-25 12:09:22 +01:00
parent 6b74723336
commit bc2e59909f
8 changed files with 61 additions and 71 deletions

11
HISTORY
View File

@ -4371,3 +4371,14 @@ Video Disk Recorder Revision History
in libsi/descriptor.c obsolete (thanks to Marcel Wiesweg). in libsi/descriptor.c obsolete (thanks to Marcel Wiesweg).
- The "Ok" key in the "Jump" mode of the replay progress display now confirms the - The "Ok" key in the "Jump" mode of the replay progress display now confirms the
jump instead of closing the display (thanks to Christoph Haubrich). jump instead of closing the display (thanks to Christoph Haubrich).
- The 'summary' field of a timer definition has been renamed to 'aux', and is now
only used for external applications to store auxiliary information with a timer,
which has no meaning whatsoever to VDR itself.
The contents of the 'aux' field of a timer is copied into the recording's
'info.vdr' file, using the tag character '@'.
- The description of a recording is now taken exclusively from its related EPG
data. If an application wants to use a different description it needs to set
it with SVDRP/PUTE and use table ID 0x00, so that it won't be overwritten (as
a side effect, however, this also disables VPS for such an event).
- There is no more "Summary" menu when pressing "Ok" in the "Timers" menu.
The "Ok" key now always opens the "Edit timer" menu.

24
i18n.c
View File

@ -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.247 2006/02/04 14:17:54 kls Exp $ * $Id: i18n.c 1.248 2006/02/25 12:07:27 kls Exp $
* *
* Translations provided by: * Translations provided by:
* *
@ -569,28 +569,6 @@ const tI18nPhrase Phrases[] = {
"Hvad vises som det næste?", "Hvad vises som det næste?",
"Následující program", "Následující program",
}, },
{ "Summary",
"Inhalt",
"Vsebina",
"Sommario",
"Inhoud",
"Resumo",
"Résumé",
"Sammendrag",
"Yhteenveto",
"Podsumowanie",
"Resumen",
"Ðåñéå÷üìåíï",
"Sammanfattning",
"Cuprins",
"Tartalom",
"Resum",
"¾ßØáÐÝØÕ",
"Sadr¾aj",
"Ülevaade",
"Omtale",
"Obsah",
},
// Button texts (should not be more than 10 characters!): // Button texts (should not be more than 10 characters!):
{ "Button$Edit", { "Button$Edit",
"Editieren", "Editieren",

17
menu.c
View File

@ -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.416 2006/02/25 10:27:03 kls Exp $ * $Id: menu.c 1.417 2006/02/25 12:09:22 kls Exp $
*/ */
#include "menu.h" #include "menu.h"
@ -776,7 +776,6 @@ private:
eOSState Delete(void); eOSState Delete(void);
eOSState OnOff(void); eOSState OnOff(void);
virtual void Move(int From, int To); virtual void Move(int From, int To);
eOSState Summary(void);
cTimer *CurrentTimer(void); cTimer *CurrentTimer(void);
public: public:
cMenuTimers(void); cMenuTimers(void);
@ -870,16 +869,6 @@ void cMenuTimers::Move(int From, int To)
isyslog("timer %d moved to %d", From + 1, To + 1); isyslog("timer %d moved to %d", From + 1, To + 1);
} }
eOSState cMenuTimers::Summary(void)
{
if (HasSubMenu() || Count() == 0)
return osContinue;
cTimer *ti = CurrentTimer();
if (ti && !isempty(ti->Summary()))
return AddSubMenu(new cMenuText(tr("Summary"), ti->Summary()));
return Edit(); // convenience for people not using the Summary feature ;-)
}
eOSState cMenuTimers::ProcessKey(eKeys Key) eOSState cMenuTimers::ProcessKey(eKeys Key)
{ {
int TimerNumber = HasSubMenu() ? Count() : -1; int TimerNumber = HasSubMenu() ? Count() : -1;
@ -887,8 +876,8 @@ eOSState cMenuTimers::ProcessKey(eKeys Key)
if (state == osUnknown) { if (state == osUnknown) {
switch (Key) { switch (Key) {
case kOk: return Summary(); case kOk: return Edit();
case kRed: return Edit(); case kRed: return Edit();//XXX
case kGreen: return New(); case kGreen: return New();
case kYellow: return Delete(); case kYellow: return Delete();
case kBlue: if (Setup.SortTimers) case kBlue: if (Setup.SortTimers)

View File

@ -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.137 2006/02/19 13:09:29 kls Exp $ * $Id: recording.c 1.138 2006/02/25 11:49:48 kls Exp $
*/ */
#include "recording.h" #include "recording.h"
@ -261,6 +261,7 @@ cRecordingInfo::cRecordingInfo(const cChannel *Channel, const cEvent *Event)
channelID = Channel ? Channel->GetChannelID() : tChannelID::InvalidID; channelID = Channel ? Channel->GetChannelID() : tChannelID::InvalidID;
ownEvent = Event ? NULL : new cEvent(0); ownEvent = Event ? NULL : new cEvent(0);
event = ownEvent ? ownEvent : Event; event = ownEvent ? ownEvent : Event;
aux = NULL;
if (Channel) { if (Channel) {
// Since the EPG data's component records can carry only a single // Since the EPG data's component records can carry only a single
// language code, let's see whether the channel's PID data has // language code, let's see whether the channel's PID data has
@ -299,6 +300,7 @@ cRecordingInfo::cRecordingInfo(const cChannel *Channel, const cEvent *Event)
cRecordingInfo::~cRecordingInfo() cRecordingInfo::~cRecordingInfo()
{ {
delete ownEvent; delete ownEvent;
free(aux);
} }
void cRecordingInfo::SetData(const char *Title, const char *ShortText, const char *Description) void cRecordingInfo::SetData(const char *Title, const char *ShortText, const char *Description)
@ -311,6 +313,12 @@ void cRecordingInfo::SetData(const char *Title, const char *ShortText, const cha
((cEvent *)event)->SetDescription(Description); ((cEvent *)event)->SetDescription(Description);
} }
void cRecordingInfo::SetAux(const char *Aux)
{
free(aux);
aux = Aux ? strdup(Aux) : NULL;
}
bool cRecordingInfo::Read(FILE *f) bool cRecordingInfo::Read(FILE *f)
{ {
if (ownEvent) { if (ownEvent) {
@ -329,6 +337,9 @@ bool cRecordingInfo::Read(FILE *f)
channelID = tChannelID::FromString(t); channelID = tChannelID::FromString(t);
} }
break; break;
case '@': free(aux);
aux = strdup(t);
break;
default: if (!ownEvent->Parse(s)) { default: if (!ownEvent->Parse(s)) {
esyslog("ERROR: EPG data problem in line %d", line); esyslog("ERROR: EPG data problem in line %d", line);
return false; return false;
@ -346,6 +357,8 @@ bool cRecordingInfo::Write(FILE *f, const char *Prefix) const
if (channelID.Valid()) if (channelID.Valid())
fprintf(f, "%sC %s\n", Prefix, *channelID.ToString()); fprintf(f, "%sC %s\n", Prefix, *channelID.ToString());
event->Dump(f, Prefix, true); event->Dump(f, Prefix, true);
if (aux)
fprintf(f, "%s@ %s\n", Prefix, aux);
return true; return true;
} }
@ -497,11 +510,7 @@ cRecording::cRecording(cTimer *Timer, const cEvent *Event)
lifetime = Timer->Lifetime(); lifetime = Timer->Lifetime();
// handle info: // handle info:
info = new cRecordingInfo(Timer->Channel(), Event); info = new cRecordingInfo(Timer->Channel(), Event);
// this is a somewhat ugly hack to get the 'summary' information from the info->SetAux(Timer->Aux());
// timer into the recording info, but it saves us from having to actually
// copy the entire event data:
if (!isempty(Timer->Summary()))
info->SetData(isempty(info->Title()) ? Timer->File() : NULL, NULL, Timer->Summary());
} }
cRecording::cRecording(const char *FileName) cRecording::cRecording(const char *FileName)

View File

@ -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.51 2006/02/18 16:03:40 kls Exp $ * $Id: recording.h 1.52 2006/02/25 10:51:15 kls Exp $
*/ */
#ifndef __RECORDING_H #ifndef __RECORDING_H
@ -44,14 +44,17 @@ private:
tChannelID channelID; tChannelID channelID;
const cEvent *event; const cEvent *event;
cEvent *ownEvent; cEvent *ownEvent;
char *aux;
cRecordingInfo(const cChannel *Channel = NULL, const cEvent *Event = NULL); cRecordingInfo(const cChannel *Channel = NULL, const cEvent *Event = NULL);
void SetData(const char *Title, const char *ShortText, const char *Description); void SetData(const char *Title, const char *ShortText, const char *Description);
void SetAux(const char *Aux);
public: public:
~cRecordingInfo(); ~cRecordingInfo();
const char *Title(void) const { return event->Title(); } const char *Title(void) const { return event->Title(); }
const char *ShortText(void) const { return event->ShortText(); } const char *ShortText(void) const { return event->ShortText(); }
const char *Description(void) const { return event->Description(); } const char *Description(void) const { return event->Description(); }
const cComponents *Components(void) const { return event->Components(); } const cComponents *Components(void) const { return event->Components(); }
const char *Aux(void) const { return aux; }
bool Read(FILE *f); bool Read(FILE *f);
bool Write(FILE *f, const char *Prefix = "") const; bool Write(FILE *f, const char *Prefix = "") const;
}; };

View File

@ -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: timers.c 1.46 2006/02/03 15:20:14 kls Exp $ * $Id: timers.c 1.47 2006/02/25 10:44:50 kls Exp $
*/ */
#include "timers.h" #include "timers.h"
@ -41,7 +41,7 @@ cTimer::cTimer(bool Instant, bool Pause, cChannel *Channel)
priority = Pause ? Setup.PausePriority : Setup.DefaultPriority; priority = Pause ? Setup.PausePriority : Setup.DefaultPriority;
lifetime = Pause ? Setup.PauseLifetime : Setup.DefaultLifetime; lifetime = Pause ? Setup.PauseLifetime : Setup.DefaultLifetime;
*file = 0; *file = 0;
summary = NULL; aux = NULL;
event = NULL; event = NULL;
if (Instant && channel) if (Instant && channel)
snprintf(file, sizeof(file), "%s%s", Setup.MarkInstantRecord ? "@" : "", *Setup.NameInstantRecord ? Setup.NameInstantRecord : channel->Name()); snprintf(file, sizeof(file), "%s%s", Setup.MarkInstantRecord ? "@" : "", *Setup.NameInstantRecord ? Setup.NameInstantRecord : channel->Name());
@ -76,20 +76,20 @@ cTimer::cTimer(const cEvent *Event)
const char *Title = Event->Title(); const char *Title = Event->Title();
if (!isempty(Title)) if (!isempty(Title))
strn0cpy(file, Event->Title(), sizeof(file)); strn0cpy(file, Event->Title(), sizeof(file));
summary = NULL; aux = NULL;
event = Event; event = Event;
} }
cTimer::~cTimer() cTimer::~cTimer()
{ {
free(summary); free(aux);
} }
cTimer& cTimer::operator= (const cTimer &Timer) cTimer& cTimer::operator= (const cTimer &Timer)
{ {
memcpy(this, &Timer, sizeof(*this)); memcpy(this, &Timer, sizeof(*this));
if (summary) if (aux)
summary = strdup(summary); aux = strdup(aux);
event = NULL; event = NULL;
return *this; return *this;
} }
@ -109,9 +109,7 @@ cString cTimer::ToText(bool UseChannelID)
{ {
char *buffer; char *buffer;
strreplace(file, ':', '|'); strreplace(file, ':', '|');
strreplace(summary, '\n', '|'); asprintf(&buffer, "%u:%s:%s:%04d:%04d:%d:%d:%s:%s\n", flags, UseChannelID ? *Channel()->GetChannelID().ToString() : *itoa(Channel()->Number()), *PrintDay(day, weekdays), start, stop, priority, lifetime, file, aux ? aux : "");
asprintf(&buffer, "%u:%s:%s:%04d:%04d:%d:%d:%s:%s\n", flags, UseChannelID ? *Channel()->GetChannelID().ToString() : *itoa(Channel()->Number()), *PrintDay(day, weekdays), start, stop, priority, lifetime, file, summary ? summary : "");
strreplace(summary, '|', '\n');
strreplace(file, '|', ':'); strreplace(file, '|', ':');
return cString(buffer, true); return cString(buffer, true);
} }
@ -226,8 +224,8 @@ bool cTimer::Parse(const char *s)
char *channelbuffer = NULL; char *channelbuffer = NULL;
char *daybuffer = NULL; char *daybuffer = NULL;
char *filebuffer = NULL; char *filebuffer = NULL;
free(summary); free(aux);
summary = NULL; aux = NULL;
//XXX Apparently sscanf() doesn't work correctly if the last %a argument //XXX Apparently sscanf() doesn't work correctly if the last %a argument
//XXX results in an empty string (this first occured when the EIT gathering //XXX results in an empty string (this first occured when the EIT gathering
//XXX was put into a separate thread - don't know why this happens... //XXX was put into a separate thread - don't know why this happens...
@ -244,17 +242,16 @@ bool cTimer::Parse(const char *s)
s = s2; s = s2;
} }
bool result = false; bool result = false;
if (8 <= sscanf(s, "%u :%a[^:]:%a[^:]:%d :%d :%d :%d :%a[^:\n]:%a[^\n]", &flags, &channelbuffer, &daybuffer, &start, &stop, &priority, &lifetime, &filebuffer, &summary)) { if (8 <= sscanf(s, "%u :%a[^:]:%a[^:]:%d :%d :%d :%d :%a[^:\n]:%a[^\n]", &flags, &channelbuffer, &daybuffer, &start, &stop, &priority, &lifetime, &filebuffer, &aux)) {
ClrFlags(tfRecording); ClrFlags(tfRecording);
if (summary && !*skipspace(summary)) { if (aux && !*skipspace(aux)) {
free(summary); free(aux);
summary = NULL; aux = NULL;
} }
//TODO add more plausibility checks //TODO add more plausibility checks
result = ParseDay(daybuffer, day, weekdays); result = ParseDay(daybuffer, day, weekdays);
strn0cpy(file, filebuffer, MaxFileName); strn0cpy(file, filebuffer, MaxFileName);
strreplace(file, '|', ':'); strreplace(file, '|', ':');
strreplace(summary, '|', '\n');
if (isnumber(channelbuffer)) if (isnumber(channelbuffer))
channel = Channels.GetByNumber(atoi(channelbuffer)); channel = Channels.GetByNumber(atoi(channelbuffer));
else else

View File

@ -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: timers.h 1.24 2006/01/15 13:29:44 kls Exp $ * $Id: timers.h 1.25 2006/02/25 10:42:10 kls Exp $
*/ */
#ifndef __TIMERS_H #ifndef __TIMERS_H
@ -38,7 +38,7 @@ private:
int priority; int priority;
int lifetime; int lifetime;
char file[MaxFileName]; char file[MaxFileName];
char *summary; char *aux;
const cEvent *event; const cEvent *event;
public: public:
cTimer(bool Instant = false, bool Pause = false, cChannel *Channel = NULL); cTimer(bool Instant = false, bool Pause = false, cChannel *Channel = NULL);
@ -59,7 +59,7 @@ public:
int Lifetime(void) const { return lifetime; } int Lifetime(void) const { return lifetime; }
const char *File(void) const { return file; } const char *File(void) const { return file; }
time_t FirstDay(void) const { return weekdays ? day : 0; } time_t FirstDay(void) const { return weekdays ? day : 0; }
const char *Summary(void) const { return summary; } const char *Aux(void) const { return aux; }
cString ToText(bool UseChannelID = false); cString ToText(bool UseChannelID = false);
cString ToDescr(void) const; cString ToDescr(void) const;
const cEvent *Event(void) const { return event; } const cEvent *Event(void) const { return event; }

19
vdr.5
View File

@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the .\" License as specified in the file COPYING that comes with the
.\" vdr distribution. .\" vdr distribution.
.\" .\"
.\" $Id: vdr.5 1.49 2006/02/18 15:59:00 kls Exp $ .\" $Id: vdr.5 1.50 2006/02/25 11:16:02 kls Exp $
.\" .\"
.TH vdr 5 "19 Feb 2006" "1.3.43" "Video Disk Recorder Files" .TH vdr 5 "19 Feb 2006" "1.3.43" "Video Disk Recorder Files"
.SH NAME .SH NAME
@ -321,11 +321,11 @@ recording (if that data is available). If at the time of recording either
of these cannot be determined, \fBTITLE\fR will default to the channel name, and of these cannot be determined, \fBTITLE\fR will default to the channel name, and
\fBEPISODE\fR will default to a blank. \fBEPISODE\fR will default to a blank.
.TP .TP
.B Summary .B Auxiliary data
Arbitrary text that describes the recording made by this timer. An arbitrary string that can be used by external applications to store any
Any newline characters in the summary have to be replaced by '|', and kind of data related to this timer. The string must not contain any newline
the summary may contain ':' characters. If this field is not empty, its characters. If this field is not empty, its contents will be written into the
contents will be written into the \fIinfo.vdr\fR file of the recording. \fIinfo.vdr\fR file of the recording with the '@' tag.
.SS SOURCES .SS SOURCES
The file \fIsources.conf\fR defines the codes to be used in the \fBSource\fR field The file \fIsources.conf\fR defines the codes to be used in the \fBSource\fR field
of channels in \fIchannels.conf\fR and assigns descriptive texts to them. of channels in \fIchannels.conf\fR and assigns descriptive texts to them.
@ -567,8 +567,9 @@ actual contents of this file.
.SS INFO .SS INFO
The file \fIinfo.vdr\fR (if present in a recording directory) contains The file \fIinfo.vdr\fR (if present in a recording directory) contains
a description of the recording, derived from the EPG data at recording time a description of the recording, derived from the EPG data at recording time
(if such data was available) or the \fBSummary\fR field of the corresponding (if such data was available). The \fBAux\fR field of the corresponding
timer. This is a plain ASCII file and contains tagged lines like the \fBEPG DATA\fR timer (if given) is copied into this file, using the '@' tag.
This is a plain ASCII file and contains tagged lines like the \fBEPG DATA\fR
file (see the description of the \fIepg.data\fR file). Note that the tags file (see the description of the \fIepg.data\fR file). Note that the tags
c, E, e and V will not appear in an \fIinfo.vdr\fR file. c, E, e and V will not appear in an \fIinfo.vdr\fR file.
.SS RESUME .SS RESUME
@ -626,6 +627,8 @@ All other tags are optional (although every event
should at least have a \fBT\fR entry). should at least have a \fBT\fR entry).
There may be several \fBX\fR tags, depending on the number of tracks (video, audio etc.) There may be several \fBX\fR tags, depending on the number of tracks (video, audio etc.)
the event provides. the event provides.
The special tag character \fB@\fR is used to mark the \fBauxiliary data\fR from
a timer definition in the \fIinfo.vdr\fR file.
.TS .TS
tab (@); tab (@);