mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Version 1.3.34
- Fixed a leftover 'summary.vdr' in vdr.5 (thanks to Peter Bieringer for reporting this one). - Fixed opening recording folders in case the last replayed recording no longer exists (reported by Udo Richter). - Fixed an unjustified "Error while accessing recording!" after deleting a recording from a subfolder. - Fixed handling the '.update' file in case the video directory is not at the default location (reported by Jon Burgess). - Fixed a crash in cConfig::Load() when compiling on the PPC (thanks to Sascha Volkenandt). - Fixed the FATALERRNO macro to check for a non-zero errno value (reported by Marco Schlüßler). - Added a check against MAXOSDAREAS in cOsd::CanHandleAreas() (reported by Udo Richter). - Fixed setting current menu item if the first one is non-selectable. - cOsdItem::cOsdItem() now has a 'Selectable' parameter. - Improved displaying 'sub-title' and 'bottom text' in the CAM menu. - Added status message "Resetting CAM..." for an immediate feedback when the CAM reset has been triggered. - The CAM menu now automatically updates itself in case of a progress display (as used, for instance, when updating the firmware via satellite). - Now skipping some funny characters sent by some CAMs at the beginning of strings. - The CAM menu is now completely closed when pressing the Menu key while inside a sub menu. - Reduced MAX_CONNECT_RETRIES in ci.c to 2 (waiting too long made the whole thing appear hanging). - Added status message "Opening CAM menu..." for an immediate feedback when the CAM menu has been requested. - Speeded up initial opening of the CAM menu. - Fixed handling of menus with no selectable items. - The character 0x8A in CAM menu strings is now mapped to a real newline. - The 'sub-title' and 'bottom text' in the CAM menu can now consist of several lines. - Improved the CAM enquiry menu.
This commit is contained in:
parent
c16bbf7422
commit
88d8d63408
@ -791,6 +791,7 @@ Sascha Volkenandt <sascha@akv-soft.de>
|
||||
for reporting a bug in timeout handling in cRwLock::Lock()
|
||||
for pointing out that the SVDRP command DELR deleted recordings that are currently
|
||||
being written to by a timer
|
||||
for fixing a crash in cConfig::Load() when compiling on the PPC
|
||||
|
||||
Malcolm Caldwell <malcolm.caldwell@ntu.edu.au>
|
||||
for modifying LOF handling to allow for C-band reception
|
||||
@ -918,6 +919,7 @@ Hermann Gausterer <mrq1@gmx.net>
|
||||
Peter Bieringer <pb@bieringer.de>
|
||||
for reporting a problem with duplicate recordings with the same file name
|
||||
for suggesting to implement the command line option '--vfat'
|
||||
for reporting a leftover 'summary.vdr' in vdr.5
|
||||
|
||||
Alexander Damhuis <ad@phonedation.de>
|
||||
for reporting problems when deleting a timer that is currently recording
|
||||
@ -933,6 +935,8 @@ Jon Burgess <mplayer@jburgess.uklinux.net>
|
||||
for pointing out a problem with NPTL ("Native Posix Thread Library")
|
||||
for changing thread handling to make it work with NPTL ("Native Posix Thread Library")
|
||||
for fixing a memory leak in thread handling when using NPTL
|
||||
for reporting a bug in handling the '.update' file in case the video directory is
|
||||
not at the default location
|
||||
|
||||
Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
|
||||
for reporting a crash when canceling a newly created timer
|
||||
@ -1229,6 +1233,7 @@ Marco Schl
|
||||
for improving resetting CAM connections
|
||||
for fixing handling EPG data for time shifted events
|
||||
for fixing detecting short channel names for "Kabel Deutschland"
|
||||
for reporting that the FATALERRNO macro needs to check for a non-zero errno value
|
||||
|
||||
Jürgen Schmitz <j.schmitz@web.de>
|
||||
for reporting a bug in displaying the current channel when switching via the SVDRP
|
||||
@ -1281,6 +1286,9 @@ Udo Richter <udo_richter@gmx.de>
|
||||
for reporting a problem with cRemux in a single thread
|
||||
for adding 'Service' functions to the plugin interface
|
||||
for reporting an unused MAINMENUENTRY in svdrpdemo.c
|
||||
for reporting a bug in opening recording folders in case the last replayed recording
|
||||
no longer exists
|
||||
for reporting a missing check against MAXOSDAREAS in cOsd::CanHandleAreas()
|
||||
|
||||
Sven Kreiensen <svenk@kammer.uni-hannover.de>
|
||||
for his help in keeping 'channels.conf.terr' up to date
|
||||
|
38
HISTORY
38
HISTORY
@ -45,7 +45,7 @@ Video Disk Recorder Revision History
|
||||
a prepended '@' character.
|
||||
- If an instant recording is currently active, the "Main" menu now contains
|
||||
an option to stop that recording.
|
||||
- Timers are now only processed when the Menu is not active. So after editing
|
||||
- Timers are now only processed when the menu is not active. So after editing
|
||||
a timer the effect will take place only after the menu has been closed.
|
||||
In order to avoid missing a timer event by inadvertently leaving the menu
|
||||
open, the menu will be closed automatically after about two minutes of
|
||||
@ -3849,3 +3849,39 @@ Video Disk Recorder Revision History
|
||||
added or deleted, so that other VDR instances can update their lists (thanks to
|
||||
Alexander Rieger).
|
||||
- Made the function ExchangeChars() public (suggested by Lucian Muresan).
|
||||
|
||||
2005-10-03: Version 1.3.34
|
||||
|
||||
- Fixed a leftover 'summary.vdr' in vdr.5 (thanks to Peter Bieringer for reporting
|
||||
this one).
|
||||
- Fixed opening recording folders in case the last replayed recording no longer
|
||||
exists (reported by Udo Richter).
|
||||
- Fixed an unjustified "Error while accessing recording!" after deleting a recording
|
||||
from a subfolder.
|
||||
- Fixed handling the '.update' file in case the video directory is not at the default
|
||||
location (reported by Jon Burgess).
|
||||
- Fixed a crash in cConfig::Load() when compiling on the PPC (thanks to Sascha
|
||||
Volkenandt).
|
||||
- Fixed the FATALERRNO macro to check for a non-zero errno value (reported by Marco
|
||||
Schlüßler).
|
||||
- Added a check against MAXOSDAREAS in cOsd::CanHandleAreas() (reported by Udo
|
||||
Richter).
|
||||
- Fixed setting current menu item if the first one is non-selectable.
|
||||
- cOsdItem::cOsdItem() now has a 'Selectable' parameter.
|
||||
- Improved displaying 'sub-title' and 'bottom text' in the CAM menu.
|
||||
- Added status message "Resetting CAM..." for an immediate feedback when the CAM
|
||||
reset has been triggered.
|
||||
- The CAM menu now automatically updates itself in case of a progress display (as
|
||||
used, for instance, when updating the firmware via satellite).
|
||||
- Now skipping some funny characters sent by some CAMs at the beginning of strings.
|
||||
- The CAM menu is now completely closed when pressing the Menu key while inside
|
||||
a sub menu.
|
||||
- Reduced MAX_CONNECT_RETRIES in ci.c to 2 (waiting too long made the whole thing
|
||||
appear hanging).
|
||||
- Added status message "Opening CAM menu..." for an immediate feedback when the CAM
|
||||
menu has been requested.
|
||||
- Speeded up initial opening of the CAM menu.
|
||||
- Fixed handling of menus with no selectable items.
|
||||
- The character 0x8A in CAM menu strings is now mapped to a real newline.
|
||||
- The 'sub-title' and 'bottom text' in the CAM menu can now consist of several lines.
|
||||
- Improved the CAM enquiry menu.
|
||||
|
@ -17,3 +17,7 @@ VDR Plugin 'skincurses' Revision History
|
||||
2005-05-16: Version 0.0.4
|
||||
|
||||
- New "recording info" display.
|
||||
|
||||
2005-10-01:
|
||||
|
||||
- Added a note about using this skin to the README file.
|
||||
|
@ -14,3 +14,11 @@ The 'skincurses' plugin implements a VDR skin that works in a
|
||||
shell window, using only plain text output. It re-implements
|
||||
what used to be available by compiling VDR versions before 1.3.7
|
||||
with the DEBUG_OSD macro set.
|
||||
|
||||
To activate this skin you can either select it in the Setup/OSD
|
||||
menu, or put the line
|
||||
|
||||
OSDSkin = curses
|
||||
|
||||
into your 'setup.conf' file before starting VDR. Make sure this
|
||||
is the only OSDSkin line in that file.
|
||||
|
@ -8,26 +8,27 @@ hr-fernsehen;ARD:11836:hC34:S19.2E:27500:301:302=deu:304:0:28108:1:1101:0
|
||||
NDR FS MV;ARD:12109:hC34:S19.2E:27500:2401:2402=deu:2404:0:28224:1:1073:0
|
||||
SR SÜDWEST Fernsehen;ARD:12265:hC34:S19.2E:27500:1301:1302=deu:1304:0:28486:1:1093:0
|
||||
WDR Köln;ARD:11836:hC34:S19.2E:27500:601:602=deu:604:0:28111:1:1101:0
|
||||
BR-alpha;ARD:11836:hC34:S19.2E:27500:701:702=deu:704:0:28112:1:1101:0
|
||||
BR-alpha;ARD:11836:hC34:S19.2E:27500:701:702=deu;703:704:0:28112:1:1101:0
|
||||
SÜDWEST Ferns. BW;ARD:11836:hC34:S19.2E:27500:801:802=deu:804:0:28113:1:1101:0
|
||||
Phoenix;ARD:11836:hC34:S19.2E:27500:901:902=deu:904:0:28114:1:1101:0
|
||||
ZDF;ZDFvision:11953:hC34:S19.2E:27500:110:120=deu,121=2ch;125=dd:130:0:28006:1:1079:0
|
||||
3sat;ZDFvision:11953:hC34:S19.2E:27500:210:220=deu,221=2ch;225=dd:230:0:28007:1:1079:0
|
||||
KiKa;ZDFvision:11953:hC34:S19.2E:27500:310:320=deu:330:0:28008:1:1079:0
|
||||
KiKa;ZDFvision:11953:hC34:S19.2E:27500:310:320:330:0:28008:1:1079:0
|
||||
arte;ARD:11836:hC34:S19.2E:27500:401:402=deu,403=fra:404:0:28109:1:1101:0
|
||||
ORF1;ORF:12692:hC56:S19.2E:22000:160:161=deu;163=deu:165:1762,D05,1702,1801:13001:1:1117:0
|
||||
ORF2;ORF:12692:hC56:S19.2E:22000:500:501=deu;503=deu:505:3:13002:1:1117:0
|
||||
ORF2;ORF:12692:hC56:S19.2E:22000:500:501=deu;503=deu:505:1762,D05,1702,1801:13002:1:1117:0
|
||||
ZDFinfokanal;ZDFvision:11953:hC34:S19.2E:27500:610:620=deu:130:0:28011:1:1079:0
|
||||
CNN Int.;CNN:11778:vC34:S19.2E:27500:165:100=eng:47:0:28522:1:1068:0
|
||||
Super RTL,S RTL;RTL World:12187:hC34:S19.2E:27500:165:120=deu:65:0:12040:1:1089:0
|
||||
VOX;RTL World:12187:hC34:S19.2E:27500:167:136=deu:71:0:12060:1:1089:0
|
||||
KABEL1;ProSiebenSat.1:12480:vC34:S19.2E:27500:511:512=deu:33:0:899:133:33:0
|
||||
DAS VIERTE,D VIERTE;BetaDigital:12460:hC34:S19.2E:27500:2047:2048=deu:36:0:1793:133:5:0
|
||||
NEUN LIVE Television,NEUN LIVE;BetaDigital:12480:vC34:S19.2E:27500:767:768=deu:35:0:897:133:33:0
|
||||
DSF;BetaDigital:12480:vC34:S19.2E:27500:1023:1024=deu:39:0:900:133:33:0
|
||||
HSE24,HSE24;BetaDigital:12480:vC34:S19.2E:27500:1279:1280=deu:37:0:40:133:33:0
|
||||
Bloomberg TV Germany;Bloomberg:12551:vC56:S19.2E:22000:162:99=deu:0:0:12160:1:1108:0
|
||||
EURONEWS;CSAT:11817:vC34:S19.2E:27500:163:92=fra,93=eng,94=ita,95=esl,91=rus,98=por,99=deu:0:0:8004:1:1070:0
|
||||
rbb Brandenburg;ARD:12109:hC34:S19.2E:27500:601:602=deu:604:0:28205:1:1073:0
|
||||
EURONEWS;CSAT:11817:vC34:S19.2E:27500:163:92=fra,93=eng,94=ita,95=esl,98=por,99=deu,91=rus:0:0:8004:1:1070:0
|
||||
rbb Brandenburg;ARD:12109:hC34:S19.2E:27500:501:502=deu:504:0:28205:1:1073:0
|
||||
Sky News:11597:vC56:S19.2E:22000:305+131:306=eng:0:0:28707:1:1026:0
|
||||
Veronica/JETIX;CANALDIGITAAL:12574:hC56:S19.2E:22000:518+8190:92=dut:38:622,100:5020:53:1109:0
|
||||
BVN;CANALDIGITAAL:12574:hC56:S19.2E:22000:515+8190:96=dut:36:0:5025:53:1109:0
|
||||
@ -44,22 +45,22 @@ MDR FERNSEHEN;ARD:12109:hC34:S19.2E:27500:401:402=deu:404:0:28204:1:1073:0
|
||||
rbb Berlin;ARD:12109:hC34:S19.2E:27500:601:602=deu:604:0:28206:1:1073:0
|
||||
:Premiere World
|
||||
PREMIERE START,START;PREMIERE:11797:hC34:S19.2E:27500:255:256=deu:32:1:8:133:2:0
|
||||
PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu,513=deu;515=deu:32:1:10:133:2:0
|
||||
PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu,1793=deu;1795=deu:32:1:11:133:2:0
|
||||
PREMIERE 1,PREM 1;PREMIERE:11797:hC34:S19.2E:27500:511:512=deu;515=deu:32:1:10:133:2:0
|
||||
PREMIERE 2,PREM 2;PREMIERE:11797:hC34:S19.2E:27500:1791:1792=deu;1795=deu:32:1:11:133:2:0
|
||||
PREMIERE 3,PREM 3;PREMIERE:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:32:1:43:133:2:0
|
||||
PREMIERE 4,PREM 4;PREMIERE:11797:hC34:S19.2E:27500:767:768=deu,769=deu:32:1801,1722,1702:9:133:2:0
|
||||
PREMIERE 5,PREM 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu:32:1702,1801,1722:29:133:2:0
|
||||
PREMIERE 5,PREM 5;PREMIERE:11797:hC34:S19.2E:27500:1279:1280=deu,1281=deu:32:1722,1702,1801:29:133:2:0
|
||||
PREMIERE 6,PREM 6;PREMIERE:11797:hC34:S19.2E:27500:1535:1536=deu:32:1:41:133:2:0
|
||||
PREMIERE 7,PREM 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1702,1801,1722:20:133:2:0
|
||||
PREMIERE 7,PREM 7;PREMIERE:11797:hC34:S19.2E:27500:1023:1024=deu:32:1801,1722,1702:20:133:2:0
|
||||
DISNEY CHANNEL,DISNEY;PREMIERE:11758:hC34:S19.2E:27500:2559:2560=deu:32:1722,1801,1702:34:133:17:0
|
||||
:Premiere Direkt
|
||||
PREMIERE DIREKT,DIREKT;PREMIERE:12031:hC34:S19.2E:27500:2815:2816=deu,2817=deu;2819=deu:0:0:18:133:4:0
|
||||
:PW Erotic
|
||||
BEATE-UHSE.TV,B-UHSE;PREMIERE:11758:hC34:S19.2E:27500:1791:1792=deu:32:1801,1722,1702:21:133:17:0
|
||||
DIREKT EROTIK,EROTIK;PREMIERE:12031:hC34:S19.2E:27500:1279:1280=deu:0:1722,1801,1702:513:133:4:0
|
||||
BEATE-UHSE.TV,B-UHSE;PREMIERE:11758:hC34:S19.2E:27500:1791:1792=deu:32:1722,1702,1801:21:133:17:0
|
||||
DIREKT EROTIK,EROTIK;PREMIERE:12031:hC34:S19.2E:27500:1279:1280=deu:0:1801,1722,1702:513:133:4:0
|
||||
:Sportsworld
|
||||
PREMIERE SPORT PORTAL,SPORT PORTAL;PREMIERE:11719:hC34:S19.2E:27500:255:256=deu,257=deu:32:1702,1801,1722:17:133:3:0
|
||||
PREMIERE WIN,WIN;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu:32:1722,1801,1702:27:133:4:0
|
||||
PREMIERE SPORT PORTAL,SPORT PORTAL;PREMIERE:11719:hC34:S19.2E:27500:255:256=deu,257=deu:32:1722,1702,1801:17:133:3:0
|
||||
PREMIERE WIN,WIN;PREMIERE:12031:hC34:S19.2E:27500:3839:3840=deu:32:1801,1702,1722:27:133:4:0
|
||||
:Beta Digital
|
||||
N24;ProSiebenSat.1:12480:vC34:S19.2E:27500:2047:2048=deu:36:0:47:133:33:0
|
||||
LibertyTV FR;LibertyTV.com:12610:vC56:S19.2E:22000:941:943=deu:0:0:12199:1:1112:0
|
||||
@ -89,9 +90,9 @@ TELE 5;BetaDigital:12480:vC34:S19.2E:27500:1535:1536=deu:38:0:51:133:33:0
|
||||
:@201 Sky
|
||||
Sky One;BSkyB:12226:hC23:S28.2E:27500:515+8190:643=eng:579:960,961:4705:2:2027:0
|
||||
Sky Mix;BSkyB:12226:hC23:S28.2E:27500:514+8190:642=eng,662=NAR:578:960,961:5104:2:2027:0
|
||||
ITV2;BSkyB:10758:vC56:S28.2E:22000:2314:2315=eng:2317:960,961:10070:2:2044:0
|
||||
ITV2;BSkyB:10758:vC56:S28.2E:22000:2314:2315=eng,2363=NAR:2317:960,961:10070:2:2044:0
|
||||
Sci-Fi;BSkyB:12148:hC23:S28.2E:27500:512+8190:640=eng:576:960,961:4905:2:2023:0
|
||||
Paramount;BSkyB:12187:hC23:S28.2E:27500:2313+2304:2317=eng,2318=NAR:2315:960,961:5904:2:2025:0
|
||||
Paramount;BSkyB:12187:hC23:S28.2E:27500:2313+2304:2326=eng,2327=NAR:2315:960,961:5904:2:2025:0
|
||||
Paramount;BSkyB:11526:vC23:S28.2E:27500:2317+2306:2318=eng:2319:960,961:50305:2:2404:0
|
||||
Paramount 2;BSkyB:11914:hC23:S28.2E:27500:514+8190:642=eng,662=NAR:578:960,961:4504:2:2011:0
|
||||
Discovery;BSkyB:11875:hC23:S28.2E:27500:2304:2306=eng,2307=NAR:2305:960,961:6201:2:2009:0
|
||||
@ -108,7 +109,7 @@ Sky Cinema 1;BSkyB:12285:vC23:S28.2E:27500:519+8190:647=eng,667=NAR:583:960,961:
|
||||
Sky Cinema 2;BSkyB:12285:vC23:S28.2E:27500:517+8190:645=eng,665=NAR:581:960,961:4802:2:2030:0
|
||||
:@900 Some 'seed' channels
|
||||
Chelsea TV;BskyB:11778:vC23:S28.2E:27500:2308+2304:2309=eng:0:960,961:9307:2:2004:0
|
||||
WDR Münster;ARD:12421:hC34:S19.2E:27500:701:702=deu:104:0:28310:1:1201:0
|
||||
WDR Münster;ARD:12421:hC34:S19.2E:27500:101:102=deu:104:0:28310:1:1201:0
|
||||
Animal Plnt+;BSkyB:12070:hC23:S28.2E:27500:2314+2307:2315=eng:0:960,961:50002:2:2019:0
|
||||
S1T;BSkyB:12285:vC23:S28.2E:27500:513+8190:641=eng,661=NAR:577:960,961:4409:2:2030:0
|
||||
CNN;BSkyB:12051:vC23:S28.2E:27500:2313:2315=eng:2314:0:7140:2:2018:0
|
||||
@ -117,4 +118,5 @@ IGLESIA MME;T-Systems/MTI:11200:vC56:S13.0E:27500:4097:4098:0:0:4733:318:13400:0
|
||||
Euro1080;EURO1080:12168:vC34:S19.2E:27500:308:256:0:FF:21100:1:1088:0
|
||||
Astra HD:12441:vC34:S19.2E:27500:133+80:134=eng:0:FF:29700:0:0:0
|
||||
eng-WRN-multi;WRN:12597:vC34:S13.0E:27500:0:2132:0:0:8230:318:9400:0
|
||||
TVS Teleport Bonn;DMV:11535:vC34:S1.0W:5632:308+8190:256=eng,257=eng:0:2:1:65535:1:0
|
||||
:@1000 New channels
|
||||
|
37
ci.c
37
ci.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: ci.c 1.28 2005/09/17 11:43:08 kls Exp $
|
||||
* $Id: ci.c 1.36 2005/10/03 12:58:22 kls Exp $
|
||||
*/
|
||||
|
||||
#include "ci.h"
|
||||
@ -92,9 +92,17 @@ static char *CopyString(int Length, const uint8_t *Data)
|
||||
///< Copies the string at Data.
|
||||
///< \return Returns a pointer to a newly allocated string.
|
||||
{
|
||||
// Some CAMs send funny characters at the beginning of strings.
|
||||
// Let's just skip them:
|
||||
while (Length > 0 && (*Data == ' ' || *Data == 0x05 || *Data == 0x96 || *Data == 0x97)) {
|
||||
Length--;
|
||||
Data++;
|
||||
}
|
||||
char *s = MALLOC(char, Length + 1);
|
||||
strncpy(s, (char *)Data, Length);
|
||||
s[Length] = 0;
|
||||
// The character 0x8A is used as newline, so let's put a real '\n' in there:
|
||||
strreplace(s, 0x8A, '\n');
|
||||
return s;
|
||||
}
|
||||
|
||||
@ -394,7 +402,7 @@ const uint8_t *cCiTransportConnection::Data(int &Length)
|
||||
return tpdu->Data(Length);
|
||||
}
|
||||
|
||||
#define MAX_CONNECT_RETRIES 20
|
||||
#define MAX_CONNECT_RETRIES 2
|
||||
|
||||
int cCiTransportConnection::CreateConnection(void)
|
||||
{
|
||||
@ -1026,6 +1034,7 @@ public:
|
||||
cCiEnquiry *Enquiry(bool Clear = false);
|
||||
bool SendMenuAnswer(uint8_t Selection);
|
||||
bool SendAnswer(const char *Text);
|
||||
bool SendCloseMMI(void);
|
||||
};
|
||||
|
||||
cCiMMI::cCiMMI(int SessionId, cCiTransportConnection *Tc)
|
||||
@ -1198,6 +1207,14 @@ bool cCiMMI::SendAnswer(const char *Text)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool cCiMMI::SendCloseMMI(void)
|
||||
{
|
||||
dbgprotocol("%d: ==> Close MMI\n", SessionId());
|
||||
SendData(AOT_CLOSE_MMI, 0);
|
||||
//XXX return value of all SendData() calls???
|
||||
return true;
|
||||
}
|
||||
|
||||
// --- cCiMenu ---------------------------------------------------------------
|
||||
|
||||
cCiMenu::cCiMenu(cCiMMI *MMI, bool Selectable)
|
||||
@ -1229,6 +1246,12 @@ bool cCiMenu::AddEntry(char *s)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool cCiMenu::HasUpdate(void)
|
||||
{
|
||||
// If the mmi is gone, the menu shall be closed, which also qualifies as 'update'.
|
||||
return !mmi || mmi->HasUserIO();
|
||||
}
|
||||
|
||||
bool cCiMenu::Select(int Index)
|
||||
{
|
||||
cMutexLock MutexLock(&mutex);
|
||||
@ -1242,6 +1265,11 @@ bool cCiMenu::Cancel(void)
|
||||
return Select(-1);
|
||||
}
|
||||
|
||||
bool cCiMenu::Abort(void)
|
||||
{
|
||||
return mmi && mmi->SendCloseMMI();
|
||||
}
|
||||
|
||||
// --- cCiEnquiry ------------------------------------------------------------
|
||||
|
||||
cCiEnquiry::cCiEnquiry(cCiMMI *MMI)
|
||||
@ -1271,6 +1299,11 @@ bool cCiEnquiry::Cancel(void)
|
||||
return Reply(NULL);
|
||||
}
|
||||
|
||||
bool cCiEnquiry::Abort(void)
|
||||
{
|
||||
return mmi && mmi->SendCloseMMI();
|
||||
}
|
||||
|
||||
// --- cCiCaPmt --------------------------------------------------------------
|
||||
|
||||
// Ca Pmt List Management:
|
||||
|
5
ci.h
5
ci.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: ci.h 1.14 2005/08/20 14:56:11 kls Exp $
|
||||
* $Id: ci.h 1.17 2005/10/03 12:49:52 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __CI_H
|
||||
@ -40,6 +40,8 @@ public:
|
||||
bool Selectable(void) { return selectable; }
|
||||
bool Select(int Index);
|
||||
bool Cancel(void);
|
||||
bool Abort(void);
|
||||
bool HasUpdate(void);
|
||||
};
|
||||
|
||||
class cCiEnquiry {
|
||||
@ -58,6 +60,7 @@ public:
|
||||
int ExpectedLength(void) { return expectedLength; }
|
||||
bool Reply(const char *s);
|
||||
bool Cancel(void);
|
||||
bool Abort(void);
|
||||
};
|
||||
|
||||
class cCiCaPmt {
|
||||
|
8
config.h
8
config.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: config.h 1.228 2005/09/14 16:04:09 kls Exp $
|
||||
* $Id: config.h 1.230 2005/10/01 10:41:33 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __CONFIG_H
|
||||
@ -19,8 +19,8 @@
|
||||
#include "i18n.h"
|
||||
#include "tools.h"
|
||||
|
||||
#define VDRVERSION "1.3.33"
|
||||
#define VDRVERSNUM 10333 // Version * 10000 + Major * 100 + Minor
|
||||
#define VDRVERSION "1.3.34"
|
||||
#define VDRVERSNUM 10334 // Version * 10000 + Major * 100 + Minor
|
||||
|
||||
#define MAXPRIORITY 99
|
||||
#define MAXLIFETIME 99
|
||||
@ -91,7 +91,7 @@ public:
|
||||
const char *FileName(void) { return fileName; }
|
||||
bool Load(const char *FileName = NULL, bool AllowComments = false, bool MustExist = false)
|
||||
{
|
||||
Clear();
|
||||
cConfig<T>::Clear();
|
||||
if (FileName) {
|
||||
free(fileName);
|
||||
fileName = strdup(FileName);
|
||||
|
79
i18n.c
79
i18n.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: i18n.c 1.210 2005/09/25 11:57:04 kls Exp $
|
||||
* $Id: i18n.c 1.213 2005/10/03 12:27:15 kls Exp $
|
||||
*
|
||||
* Translations provided by:
|
||||
*
|
||||
@ -2273,6 +2273,27 @@ const tI18nPhrase Phrases[] = {
|
||||
"Kõvaketas peaaegu täis!",
|
||||
"Kun lidt diskplads tilbage!",
|
||||
},
|
||||
{ "Opening CAM menu...",
|
||||
"CAM-Menü wird geöffnet...",
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
},
|
||||
{ "Can't open CAM menu!",
|
||||
"CAM-Menü kann nicht geöffnet werden!",
|
||||
"Ne morem odpreti CAM menija!",
|
||||
@ -2294,6 +2315,27 @@ const tI18nPhrase Phrases[] = {
|
||||
"Ei saa avada CAM menüüd!",
|
||||
"Kan ikke åbne CAM menuen!",
|
||||
},
|
||||
{ "Resetting CAM...",
|
||||
"CAM wird zurückgesetzt...",
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
},
|
||||
{ "Can't reset CAM!",
|
||||
"CAM-Reset fehlgeschlagen!",
|
||||
"Ne morem resetirati CAM-a",
|
||||
@ -2316,26 +2358,47 @@ const tI18nPhrase Phrases[] = {
|
||||
"Kan ikke nulstille CAM!",
|
||||
},
|
||||
{ "CAM has been reset",
|
||||
"CAM wurde zurückgesetzt!",
|
||||
"CAM je resetiran!",
|
||||
"Modulo CAM reimpostato!",
|
||||
"CAM is herstart!",
|
||||
"CAM wurde zurückgesetzt",
|
||||
"CAM je resetiran",
|
||||
"Modulo CAM reimpostato",
|
||||
"CAM is herstart",
|
||||
"",//TODO
|
||||
"La CAM a été réinitialisée",
|
||||
"",//TODO
|
||||
"Salausmoduuli alustettu",
|
||||
"CAM-Reset wykonany!",
|
||||
"CAM-Reset wykonany",
|
||||
"CAM reiniciada",
|
||||
"Óôï CAM Ýãéíå åðáíáöïñÜ",
|
||||
"CA modulen har återställts",
|
||||
"CAM-ul a fost resetat",
|
||||
"A CAM vissza lett állítva",
|
||||
"CAM reiniciada",
|
||||
"CAM-ÜÞÔãÛì ßÕàÕ×ÐßãéÕÝ!",
|
||||
"CAM je resetiran!",
|
||||
"CAM-ÜÞÔãÛì ßÕàÕ×ÐßãéÕÝ",
|
||||
"CAM je resetiran",
|
||||
"CAM mooduli taaskäivitus tehtud",
|
||||
"CAM er blevet nulstillet",
|
||||
},
|
||||
{ "Please enter %d digits!",
|
||||
"Bitte geben Sie %d Ziffern ein!",
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
"",//TODO
|
||||
},
|
||||
{ "No audio available!",
|
||||
"Kein Audio verfügbar!",
|
||||
"Zvok ni dosegljiv",
|
||||
|
93
menu.c
93
menu.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menu.c 1.362 2005/09/25 13:37:21 kls Exp $
|
||||
* $Id: menu.c 1.374 2005/10/03 12:53:51 kls Exp $
|
||||
*/
|
||||
|
||||
#include "menu.h"
|
||||
@ -34,6 +34,7 @@
|
||||
|
||||
#define MAXRECORDCONTROLS (MAXDEVICES * MAXRECEIVERS)
|
||||
#define MAXINSTANTRECTIME (24 * 60 - 1) // 23:59 hours
|
||||
#define MAXWAITFORCAMMENU 4 // seconds to wait for the CAM menu to open
|
||||
|
||||
#define CHNUMWIDTH (numdigits(Channels.MaxNumber()) + 1)
|
||||
|
||||
@ -1287,33 +1288,59 @@ eOSState cMenuCommands::ProcessKey(eKeys Key)
|
||||
cMenuCam::cMenuCam(cCiMenu *CiMenu)
|
||||
:cOsdMenu("")
|
||||
{
|
||||
dsyslog("CAM: Menu ------------------");
|
||||
ciMenu = CiMenu;
|
||||
selected = false;
|
||||
offset = 0;
|
||||
if (ciMenu->Selectable())
|
||||
SetHasHotkeys();
|
||||
SetTitle(ciMenu->TitleText() ? ciMenu->TitleText() : "CAM");
|
||||
for (int i = 0; i < ciMenu->NumEntries(); i++)
|
||||
Add(new cOsdItem(hk(ciMenu->Entry(i))));
|
||||
//XXX implement a clean way of displaying this:
|
||||
Add(new cOsdItem(ciMenu->SubTitleText()));
|
||||
Add(new cOsdItem(ciMenu->BottomText()));
|
||||
SetTitle(*ciMenu->TitleText() ? ciMenu->TitleText() : "CAM");
|
||||
dsyslog("CAM: '%s'", ciMenu->TitleText());
|
||||
if (*ciMenu->SubTitleText()) {
|
||||
dsyslog("CAM: '%s'", ciMenu->SubTitleText());
|
||||
AddMultiLineItem(ciMenu->SubTitleText());
|
||||
offset = Count();
|
||||
}
|
||||
for (int i = 0; i < ciMenu->NumEntries(); i++) {
|
||||
Add(new cOsdItem(hk(ciMenu->Entry(i)), osUnknown, ciMenu->Selectable()));
|
||||
dsyslog("CAM: '%s'", ciMenu->Entry(i));
|
||||
}
|
||||
if (*ciMenu->BottomText()) {
|
||||
AddMultiLineItem(ciMenu->BottomText());
|
||||
dsyslog("CAM: '%s'", ciMenu->BottomText());
|
||||
}
|
||||
Display();
|
||||
dsyslog("CAM: Menu - %s", ciMenu->TitleText());
|
||||
}
|
||||
|
||||
cMenuCam::~cMenuCam()
|
||||
{
|
||||
if (!selected)
|
||||
ciMenu->Cancel();
|
||||
ciMenu->Abort();
|
||||
delete ciMenu;
|
||||
}
|
||||
|
||||
void cMenuCam::AddMultiLineItem(const char *s)
|
||||
{
|
||||
while (s && *s) {
|
||||
const char *p = strchr(s, '\n');
|
||||
int l = p ? p - s : strlen(s);
|
||||
cOsdItem *item = new cOsdItem;
|
||||
item->SetSelectable(false);
|
||||
item->SetText(strndup(s, l), false);
|
||||
Add(item);
|
||||
s = p ? p + 1 : p;
|
||||
}
|
||||
}
|
||||
|
||||
eOSState cMenuCam::Select(void)
|
||||
{
|
||||
if (ciMenu->Selectable()) {
|
||||
ciMenu->Select(Current());
|
||||
selected = true;
|
||||
ciMenu->Select(Current() - offset);
|
||||
dsyslog("CAM: select %d", Current() - offset);
|
||||
}
|
||||
else
|
||||
ciMenu->Cancel();
|
||||
selected = true;
|
||||
return osEnd;
|
||||
}
|
||||
|
||||
@ -1327,36 +1354,51 @@ eOSState cMenuCam::ProcessKey(eKeys Key)
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
else if (state == osBack) {
|
||||
ciMenu->Cancel();
|
||||
selected = true;
|
||||
return osEnd;
|
||||
}
|
||||
if (ciMenu->HasUpdate()) {
|
||||
selected = true;
|
||||
return osEnd;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
// --- cMenuCamEnquiry -------------------------------------------------------
|
||||
|
||||
//XXX this is just quick and dirty - make this a separate display object
|
||||
cMenuCamEnquiry::cMenuCamEnquiry(cCiEnquiry *CiEnquiry)
|
||||
:cOsdMenu("", 10)
|
||||
:cOsdMenu("", 1)
|
||||
{
|
||||
ciEnquiry = CiEnquiry;
|
||||
int Length = ciEnquiry->ExpectedLength();
|
||||
input = MALLOC(char, Length + 1);
|
||||
*input = 0;
|
||||
replied = false;
|
||||
SetTitle(ciEnquiry->Text() ? ciEnquiry->Text() : "CAM");
|
||||
Add(new cMenuEditNumItem("Input", input, Length, ciEnquiry->Blind()));
|
||||
SetTitle("CAM");
|
||||
Add(new cOsdItem(ciEnquiry->Text(), osUnknown, false));
|
||||
Add(new cOsdItem("", osUnknown, false));
|
||||
Add(new cMenuEditNumItem("", input, Length, ciEnquiry->Blind()));
|
||||
Display();
|
||||
}
|
||||
|
||||
cMenuCamEnquiry::~cMenuCamEnquiry()
|
||||
{
|
||||
if (!replied)
|
||||
ciEnquiry->Cancel();
|
||||
ciEnquiry->Abort();
|
||||
free(input);
|
||||
delete ciEnquiry;
|
||||
}
|
||||
|
||||
eOSState cMenuCamEnquiry::Reply(void)
|
||||
{
|
||||
//XXX check length???
|
||||
if (ciEnquiry->ExpectedLength() < 0xFF && int(strlen(input)) != ciEnquiry->ExpectedLength()) {
|
||||
char buffer[64];
|
||||
snprintf(buffer, sizeof(buffer), tr("Please enter %d digits!"), ciEnquiry->ExpectedLength());
|
||||
Skins.Message(mtError, buffer);
|
||||
return osContinue;
|
||||
}
|
||||
ciEnquiry->Reply(input);
|
||||
replied = true;
|
||||
return osEnd;
|
||||
@ -1372,6 +1414,11 @@ eOSState cMenuCamEnquiry::ProcessKey(eKeys Key)
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
else if (state == osBack) {
|
||||
ciEnquiry->Cancel();
|
||||
replied = true;
|
||||
return osEnd;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
@ -1513,6 +1560,7 @@ cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus)
|
||||
SetCurrent(First());
|
||||
else if (OpenSubMenus && cReplayControl::LastReplayed() && Open(true))
|
||||
return;
|
||||
Display();
|
||||
SetHelpKeys();
|
||||
}
|
||||
|
||||
@ -1556,7 +1604,7 @@ void cMenuRecordings::Set(bool Refresh)
|
||||
if (Refresh) {
|
||||
cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
|
||||
if (ri) {
|
||||
cRecording *Recording = GetRecording(ri);
|
||||
cRecording *Recording = Recordings.GetByName(ri->FileName());
|
||||
if (Recording)
|
||||
CurrentRecording = Recording->FileName();
|
||||
}
|
||||
@ -1583,6 +1631,7 @@ void cMenuRecordings::Set(bool Refresh)
|
||||
}
|
||||
}
|
||||
free(LastItemText);
|
||||
if (Refresh)
|
||||
Display();
|
||||
}
|
||||
|
||||
@ -2155,8 +2204,13 @@ eOSState cMenuSetupCICAM::Menu(void)
|
||||
{
|
||||
cMenuSetupCICAMItem *item = (cMenuSetupCICAMItem *)Get(Current());
|
||||
if (item) {
|
||||
if (item->CiHandler()->EnterMenu(item->Slot()))
|
||||
if (item->CiHandler()->EnterMenu(item->Slot())) {
|
||||
Skins.Message(mtWarning, tr("Opening CAM menu..."));
|
||||
time_t t = time(NULL);
|
||||
while (time(NULL) - t < MAXWAITFORCAMMENU && !item->CiHandler()->HasUserIO())
|
||||
item->CiHandler()->Process();
|
||||
return osEnd; // the CAM menu will be executed explicitly from the main loop
|
||||
}
|
||||
else
|
||||
Skins.Message(mtError, tr("Can't open CAM menu!"));
|
||||
}
|
||||
@ -2167,6 +2221,7 @@ eOSState cMenuSetupCICAM::Reset(void)
|
||||
{
|
||||
cMenuSetupCICAMItem *item = (cMenuSetupCICAMItem *)Get(Current());
|
||||
if (item) {
|
||||
Skins.Message(mtWarning, tr("Resetting CAM..."));
|
||||
if (item->CiHandler()->Reset(item->Slot())) {
|
||||
Skins.Message(mtInfo, tr("CAM has been reset"));
|
||||
return osEnd;
|
||||
|
4
menu.h
4
menu.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menu.h 1.74 2005/09/25 09:03:32 kls Exp $
|
||||
* $Id: menu.h 1.76 2005/10/03 10:39:08 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __MENU_H
|
||||
@ -120,6 +120,8 @@ class cMenuCam : public cOsdMenu {
|
||||
private:
|
||||
cCiMenu *ciMenu;
|
||||
bool selected;
|
||||
int offset;
|
||||
void AddMultiLineItem(const char *s);
|
||||
eOSState Select(void);
|
||||
public:
|
||||
cMenuCam(cCiMenu *CiMenu);
|
||||
|
4
osd.c
4
osd.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: osd.c 1.62 2005/06/19 10:43:04 kls Exp $
|
||||
* $Id: osd.c 1.63 2005/10/02 08:47:13 kls Exp $
|
||||
*/
|
||||
|
||||
#include "osd.h"
|
||||
@ -618,6 +618,8 @@ cBitmap *cOsd::GetBitmap(int Area)
|
||||
|
||||
eOsdError cOsd::CanHandleAreas(const tArea *Areas, int NumAreas)
|
||||
{
|
||||
if (NumAreas > MAXOSDAREAS)
|
||||
return oeTooManyAreas;
|
||||
eOsdError Result = oeOk;
|
||||
for (int i = 0; i < NumAreas; i++) {
|
||||
if (Areas[i].x1 > Areas[i].x2 || Areas[i].y1 > Areas[i].y2 || Areas[i].x1 < 0 || Areas[i].y1 < 0)
|
||||
|
16
osdbase.c
16
osdbase.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: osdbase.c 1.20 2005/06/18 10:30:51 kls Exp $
|
||||
* $Id: osdbase.c 1.22 2005/10/02 15:00:40 kls Exp $
|
||||
*/
|
||||
|
||||
#include "osdbase.h"
|
||||
@ -25,12 +25,12 @@ cOsdItem::cOsdItem(eOSState State)
|
||||
fresh = true;
|
||||
}
|
||||
|
||||
cOsdItem::cOsdItem(const char *Text, eOSState State)
|
||||
cOsdItem::cOsdItem(const char *Text, eOSState State, bool Selectable)
|
||||
{
|
||||
text = NULL;
|
||||
offset = -1;
|
||||
state = State;
|
||||
selectable = true;
|
||||
selectable = Selectable;
|
||||
fresh = true;
|
||||
SetText(Text);
|
||||
}
|
||||
@ -196,8 +196,11 @@ void cOsdMenu::Display(void)
|
||||
int count = Count();
|
||||
if (count > 0) {
|
||||
int ni = 0;
|
||||
for (cOsdItem *item = First(); item; item = Next(item))
|
||||
for (cOsdItem *item = First(); item; item = Next(item)) {
|
||||
cStatus::MsgOsdItem(item->Text(), ni++);
|
||||
if (current < 0 && item->Selectable())
|
||||
current = item->Index();
|
||||
}
|
||||
if (current < 0)
|
||||
current = 0; // just for safety - there HAS to be a current item!
|
||||
if (current - first >= displayMenuItems || current < first) {
|
||||
@ -210,8 +213,9 @@ void cOsdMenu::Display(void)
|
||||
int i = first;
|
||||
int n = 0;
|
||||
for (cOsdItem *item = Get(first); item; item = Next(item)) {
|
||||
displayMenu->SetItem(item->Text(), i - first, i == current, item->Selectable());
|
||||
if (i == current)
|
||||
bool CurrentSelectable = (i == current) && item->Selectable();
|
||||
displayMenu->SetItem(item->Text(), i - first, CurrentSelectable, item->Selectable());
|
||||
if (CurrentSelectable)
|
||||
cStatus::MsgOsdCurrentItem(item->Text());
|
||||
if (++n == displayMenuItems)
|
||||
break;
|
||||
|
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: osdbase.h 1.11 2005/06/12 10:46:34 kls Exp $
|
||||
* $Id: osdbase.h 1.12 2005/10/02 09:18:20 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __OSDBASE_H
|
||||
@ -56,7 +56,7 @@ protected:
|
||||
bool fresh;
|
||||
public:
|
||||
cOsdItem(eOSState State = osUnknown);
|
||||
cOsdItem(const char *Text, eOSState State = osUnknown);
|
||||
cOsdItem(const char *Text, eOSState State = osUnknown, bool Selectable = true);
|
||||
virtual ~cOsdItem();
|
||||
bool Selectable(void) { return selectable; }
|
||||
void SetText(const char *Text, bool Copy = true);
|
||||
|
17
recording.c
17
recording.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: recording.c 1.119 2005/09/25 14:29:49 kls Exp $
|
||||
* $Id: recording.c 1.120 2005/10/01 10:29:02 kls Exp $
|
||||
*/
|
||||
|
||||
#include "recording.h"
|
||||
@ -743,10 +743,11 @@ void cRecording::ResetResume(void) const
|
||||
|
||||
cRecordings Recordings;
|
||||
|
||||
char *cRecordings::updateFileName = NULL;
|
||||
|
||||
cRecordings::cRecordings(bool Deleted)
|
||||
:cThread("video directory scanner")
|
||||
{
|
||||
updateFileName = strdup(AddDirectory(VideoDirectory, ".update"));
|
||||
deleted = Deleted;
|
||||
lastUpdate = 0;
|
||||
state = 0;
|
||||
@ -755,7 +756,6 @@ cRecordings::cRecordings(bool Deleted)
|
||||
cRecordings::~cRecordings()
|
||||
{
|
||||
Cancel(3);
|
||||
free(updateFileName);
|
||||
}
|
||||
|
||||
void cRecordings::Action(void)
|
||||
@ -763,6 +763,13 @@ void cRecordings::Action(void)
|
||||
Refresh();
|
||||
}
|
||||
|
||||
const char *cRecordings::UpdateFileName(void)
|
||||
{
|
||||
if (!updateFileName)
|
||||
updateFileName = strdup(AddDirectory(VideoDirectory, ".update"));
|
||||
return updateFileName;
|
||||
}
|
||||
|
||||
void cRecordings::Refresh(bool Foreground)
|
||||
{
|
||||
lastUpdate = time(NULL); // doing this first to make sure we don't miss anything
|
||||
@ -825,13 +832,13 @@ bool cRecordings::StateChanged(int &State)
|
||||
|
||||
void cRecordings::TouchUpdate(void)
|
||||
{
|
||||
TouchFile(updateFileName);
|
||||
TouchFile(UpdateFileName());
|
||||
lastUpdate = time(NULL); // make sure we don't tigger ourselves
|
||||
}
|
||||
|
||||
bool cRecordings::NeedsUpdate(void)
|
||||
{
|
||||
return lastUpdate < LastModifiedTime(updateFileName);
|
||||
return lastUpdate < LastModifiedTime(UpdateFileName());
|
||||
}
|
||||
|
||||
bool cRecordings::Update(bool Wait)
|
||||
|
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: recording.h 1.44 2005/09/25 14:30:13 kls Exp $
|
||||
* $Id: recording.h 1.45 2005/10/01 10:24:41 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __RECORDING_H
|
||||
@ -93,10 +93,11 @@ public:
|
||||
|
||||
class cRecordings : public cList<cRecording>, public cThread {
|
||||
private:
|
||||
char *updateFileName;
|
||||
static char *updateFileName;
|
||||
bool deleted;
|
||||
time_t lastUpdate;
|
||||
int state;
|
||||
const char *UpdateFileName(void);
|
||||
void Refresh(bool Foreground = false);
|
||||
void ScanVideoDir(const char *DirName, bool Foreground = false);
|
||||
protected:
|
||||
|
3
skins.c
3
skins.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: skins.c 1.4 2005/01/14 13:07:19 kls Exp $
|
||||
* $Id: skins.c 1.5 2005/10/02 10:12:10 kls Exp $
|
||||
*/
|
||||
|
||||
#include "skins.h"
|
||||
@ -170,6 +170,7 @@ eKeys cSkins::Message(eMessageType Type, const char *s, int Seconds)
|
||||
{
|
||||
switch (Type) {
|
||||
case mtInfo: isyslog("info: %s", s); break;
|
||||
case mtWarning: isyslog("warning: %s", s); break;
|
||||
case mtError: esyslog("ERROR: %s", s); break;
|
||||
default: ;
|
||||
}
|
||||
|
4
tools.h
4
tools.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: tools.h 1.78 2005/09/25 12:54:58 kls Exp $
|
||||
* $Id: tools.h 1.79 2005/10/01 12:43:31 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __TOOLS_H
|
||||
@ -45,7 +45,7 @@ extern int SysLogLevel;
|
||||
#define DELETENULL(p) (delete (p), p = NULL)
|
||||
|
||||
#define CHECK(s) { if ((s) < 0) LOG_ERROR; } // used for 'ioctl()' calls
|
||||
#define FATALERRNO (errno != EAGAIN && errno != EINTR)
|
||||
#define FATALERRNO (errno && errno != EAGAIN && errno != EINTR)
|
||||
|
||||
#ifndef __STL_CONFIG_H // in case some plugin needs to use the STL
|
||||
template<class T> inline T min(T a, T b) { return a <= b ? a : b; }
|
||||
|
4
vdr.5
4
vdr.5
@ -8,7 +8,7 @@
|
||||
.\" License as specified in the file COPYING that comes with the
|
||||
.\" vdr distribution.
|
||||
.\"
|
||||
.\" $Id: vdr.5 1.38 2005/09/04 14:43:42 kls Exp $
|
||||
.\" $Id: vdr.5 1.39 2005/09/26 21:38:44 kls Exp $
|
||||
.\"
|
||||
.TH vdr 5 "19 Mar 2005" "1.3.23" "Video Disk Recorder Files"
|
||||
.SH NAME
|
||||
@ -325,7 +325,7 @@ of these cannot be determined, \fBTITLE\fR will default to the channel name, and
|
||||
Arbitrary text that describes the recording made by this timer.
|
||||
Any newline characters in the summary have to be replaced by '|', and
|
||||
the summary may contain ':' characters. If this field is not empty, its
|
||||
contents will be written into the \fIsummary.vdr\fR file of the recording.
|
||||
contents will be written into the \fIinfo.vdr\fR file of the recording.
|
||||
.SS SOURCES
|
||||
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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user