summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2005-10-03 18:00:00 +0200
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2005-10-03 18:00:00 +0200
commit88d8d634089bae65bdfea8238a847b7883058072 (patch)
tree8d6143bb63258e7c8b918d664f69a5870d1e8983
parentc16bbf7422f37108580e559ca849e5aafbdac672 (diff)
downloadvdr-patch-lnbsharing-vdr-1.3.34.tar.gz
vdr-patch-lnbsharing-vdr-1.3.34.tar.bz2
Version 1.3.34vdr-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.
-rw-r--r--CONTRIBUTORS8
-rw-r--r--HISTORY38
-rw-r--r--PLUGINS/src/skincurses/HISTORY4
-rw-r--r--PLUGINS/src/skincurses/README8
-rw-r--r--channels.conf34
-rw-r--r--ci.c37
-rw-r--r--ci.h5
-rw-r--r--config.h8
-rw-r--r--i18n.c79
-rw-r--r--menu.c95
-rw-r--r--menu.h4
-rw-r--r--osd.c4
-rw-r--r--osdbase.c16
-rw-r--r--osdbase.h4
-rw-r--r--recording.c17
-rw-r--r--recording.h5
-rw-r--r--skins.c7
-rw-r--r--tools.h4
-rw-r--r--vdr.54
19 files changed, 305 insertions, 76 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 2a9dd18..36f15b7 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -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üßler <marco@lordzodiac.de>
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
diff --git a/HISTORY b/HISTORY
index 9eb14b8..58e8278 100644
--- a/HISTORY
+++ b/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.
diff --git a/PLUGINS/src/skincurses/HISTORY b/PLUGINS/src/skincurses/HISTORY
index 33119f4..3af01cc 100644
--- a/PLUGINS/src/skincurses/HISTORY
+++ b/PLUGINS/src/skincurses/HISTORY
@@ -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.
diff --git a/PLUGINS/src/skincurses/README b/PLUGINS/src/skincurses/README
index 7e82b22..ff82b0e 100644
--- a/PLUGINS/src/skincurses/README
+++ b/PLUGINS/src/skincurses/README
@@ -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.
diff --git a/channels.conf b/channels.conf
index 0b35a9c..c34b8b4 100644
--- a/channels.conf
+++ b/channels.conf
@@ -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
diff --git a/ci.c b/ci.c
index 4e341d7..9e86c61 100644
--- a/ci.c
+++ b/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:
diff --git a/ci.h b/ci.h
index 9d71895..6c35e6f 100644
--- a/ci.h
+++ b/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 {
diff --git a/config.h b/config.h
index fa11391..d33de6a 100644
--- a/config.h
+++ b/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);
diff --git a/i18n.c b/i18n.c
index ca5d77e..33f49e1 100644
--- a/i18n.c
+++ b/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",
diff --git a/menu.c b/menu.c
index a28c8a8..19079be 100644
--- a/menu.c
+++ b/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,7 +1631,8 @@ void cMenuRecordings::Set(bool Refresh)
}
}
free(LastItemText);
- Display();
+ if (Refresh)
+ Display();
}
cRecording *cMenuRecordings::GetRecording(cMenuRecordingItem *Item)
@@ -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;
diff --git a/menu.h b/menu.h
index a122fa3..33e05b8 100644
--- a/menu.h
+++ b/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);
diff --git a/osd.c b/osd.c
index 104393d..83042e2 100644
--- a/osd.c
+++ b/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)
diff --git a/osdbase.c b/osdbase.c
index 98307cd..9646bcc 100644
--- a/osdbase.c
+++ b/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;
diff --git a/osdbase.h b/osdbase.h
index bcb3c40..ec545ae 100644
--- a/osdbase.h
+++ b/osdbase.h
@@ -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);
diff --git a/recording.c b/recording.c
index 8b21cdd..9e96922 100644
--- a/recording.c
+++ b/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)
diff --git a/recording.h b/recording.h
index 96bb4b5..341284f 100644
--- a/recording.h
+++ b/recording.h
@@ -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:
diff --git a/skins.c b/skins.c
index fb21ed3..e81e882 100644
--- a/skins.c
+++ b/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"
@@ -169,8 +169,9 @@ bool cSkins::SetCurrent(const char *Name)
eKeys cSkins::Message(eMessageType Type, const char *s, int Seconds)
{
switch (Type) {
- case mtInfo: isyslog("info: %s", s); break;
- case mtError: esyslog("ERROR: %s", s); break;
+ case mtInfo: isyslog("info: %s", s); break;
+ case mtWarning: isyslog("warning: %s", s); break;
+ case mtError: esyslog("ERROR: %s", s); break;
default: ;
}
if (!Current())
diff --git a/tools.h b/tools.h
index 7ad3e76..97f4262 100644
--- a/tools.h
+++ b/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; }
diff --git a/vdr.5 b/vdr.5
index 3267617..f139556 100644
--- a/vdr.5
+++ b/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.