summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <Klaus (dot) Schmidinger (at) tvdr (dot) de>2012-07-14 15:28:00 +0200
committerDieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de>2012-07-15 20:49:35 +0200
commit046b506748196e9e2da7472a4ff76ff593e67b76 (patch)
treed0fa028b363317c7b49402e8beff2d0913216869
parent5500959f4f73c21cef8910b3815b4ee3fa1327dd (diff)
downloadvdr-patches-046b506748196e9e2da7472a4ff76ff593e67b76.tar.gz
vdr-patches-046b506748196e9e2da7472a4ff76ff593e67b76.tar.bz2
Version 1.7.29
Original announce message: VDR developer version 1.7.29 is now available at ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.29.tar.bz2 A 'diff' against the previous version is available at ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.28-1.7.29.diff MD5 checksums: a3f0ae42ba456aa1865c9ed065a64d80 vdr-1.7.29.tar.bz2 39db6b495210c293726126fbcba3e631 vdr-1.7.28-1.7.29.diff WARNING: ======== This is a developer version. Even though I use it in my productive environment. I strongly recommend that you only use it under controlled conditions and for testing and debugging. The default skin "LCARS" displays the signal strengths and qualities of all devices in its main menu. For devices that have an stb0899 frontend chip (like the TT-budget S2-3200) retrieving this information from the driver is rather slow, which results in a sluggish response to user input in the main menu. To speed this up you may want to apply the patches from ftp://ftp.tvdr.de/vdr/Developer/Driver-Patches to the LinuxDVB driver source. From the HISTORY file: - Added a missing template specification to the c'tor of cSortedTimers (thanks to Udo Richter). - Fixed the background color of the Transfer Mode indicator bitmap in the LCARS skin. - The LCARS skin now only displays devices that can actually receive channels, leaving out, for instance, pure replay devices (suggested by Reinhard Nissl). - Now scaling down the Transfer Mode indicator bitmap in the LCARS skin in case it doesn't fit with the selected font size (reported by Reinhard Nissl). - Fixed making LCARS the default skin. - Adjusted the default values for OSD and font sizes to better fit HDTV. - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). - Fixed the call to ChannelString() in cSkinLCARSDisplayChannel::SetChannel() (thanks to Rolf Ahrenberg). - Removed DeleteEvent() from the EPG handler interface (turned out not to be useful) and replaced it with HandledExternally() (thanks to Jörg Wendel). - Added SetComponents() to the EPG handler interface (thanks to Dirk Heiser). - Updated the Italian OSD texts (thanks to Diego Pierotto). - Changed the button colors in the LCARS skin to better fit with the rest of the theme. - Removed the gap from the main menu buttons in the LCARS skin. - Fixed some copy&paste errors in PLUGINS.html (thanks to Winfried Köhler). - The LCARS skin's main menu now only displays timers that are actually activated. - Within the "Recordings" menu, pressing the '0' key now toggles sorting between "by time" and "by name". The selected sort mode is stored separately for each folder (provided you have write access to that folder). If a folder is newly created by a repeating timer, the sort mode for that folder is initially set to "by time". - Fixed several spelling errors (thanks to Ville Skyttä). - Fixed handling recording with more than two bonded devices. - Fixed the type of MBperMinute in cVideoDiskUsage::HasChanged() (thanks to Andreas Mair). - Setting the "broken link" or "TEI" flags when cutting recordings is now suppressed if the editing point merges two seamlessly fitting parts of the same stream (thanks to Torsten Lang). - Fixed displaying messages in the LCARS skin. - Fixed checking for a visible live programme in case a menu or the channel display is currently open. - Changed some of the colors in the LCARS skin (you may need to delete the file lcars-default.theme from your themes directory to see these changes). - The new setup option "Miscellaneous/Show channel names with source" can be used to turn on adding the source character to channel names whenever they are displayed (suggested by Ludi Kaleni).
-rw-r--r--CONTRIBUTORS23
-rw-r--r--HISTORY45
-rw-r--r--MANUAL17
-rw-r--r--PLUGINS.html4
-rw-r--r--PLUGINS/src/dvbhddevice/dvbhddevice.c10
-rw-r--r--PLUGINS/src/dvbhddevice/hdffcmd.c8
-rw-r--r--PLUGINS/src/dvbhddevice/hdffcmd.h3
-rw-r--r--PLUGINS/src/dvbhddevice/hdffosd.c23
-rw-r--r--PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_defs.h1
-rw-r--r--PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_generic.c42
-rw-r--r--PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.c39
-rw-r--r--PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.h5
-rw-r--r--channels.c38
-rw-r--r--channels.h8
-rw-r--r--config.c21
-rw-r--r--config.h11
-rw-r--r--cutter.c32
-rw-r--r--device.c8
-rw-r--r--dvbplayer.c4
-rw-r--r--eit.c17
-rw-r--r--epg.c29
-rw-r--r--epg.h15
-rw-r--r--libsi/headers.h4
-rw-r--r--menu.c48
-rw-r--r--menu.h5
-rw-r--r--osd.c4
-rw-r--r--po/ar.po5
-rw-r--r--po/ca_ES.po5
-rw-r--r--po/cs_CZ.po5
-rw-r--r--po/da_DK.po5
-rw-r--r--po/de_DE.po5
-rw-r--r--po/el_GR.po5
-rw-r--r--po/es_ES.po5
-rw-r--r--po/et_EE.po5
-rw-r--r--po/fi_FI.po17
-rw-r--r--po/fr_FR.po5
-rw-r--r--po/hr_HR.po5
-rw-r--r--po/hu_HU.po5
-rw-r--r--po/it_IT.po21
-rw-r--r--po/lt_LT.po5
-rw-r--r--po/mk_MK.po5
-rw-r--r--po/nl_NL.po5
-rw-r--r--po/nn_NO.po5
-rw-r--r--po/pl_PL.po5
-rw-r--r--po/pt_PT.po5
-rw-r--r--po/ro_RO.po5
-rw-r--r--po/ru_RU.po5
-rw-r--r--po/sk_SK.po5
-rw-r--r--po/sl_SI.po5
-rw-r--r--po/sr_SR.po5
-rw-r--r--po/sv_SE.po5
-rw-r--r--po/tr_TR.po5
-rw-r--r--po/uk_UA.po5
-rw-r--r--po/zh_CN.po5
-rw-r--r--recording.c66
-rw-r--r--recording.h12
-rw-r--r--skinlcars.c151
-rw-r--r--sources.h3
-rw-r--r--timers.c6
-rw-r--r--vdr.c7
-rw-r--r--videodir.c4
61 files changed, 672 insertions, 209 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index baa09ee..6512bfc 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -982,7 +982,7 @@ Christian Jacobsen <christian.jacobsen@stageholding.de>
for reporting a problem with multiple entries of the same subdirectory in the
"Recordings" menu
-Andreas Mair <andreas@vdr-developer.org>
+Andreas Mair <amair.sob@googlemail.com>
for reporting a short display of the main menu if a plugin displays its own OSD and
is started through a user defined key macro
for reporting a problem with extremely long summary fields in timers
@@ -995,6 +995,7 @@ Andreas Mair <andreas@vdr-developer.org>
for fixing handling 3 and 4 byte UTF-8 symbols in Utf8CharGet()
for fixing initializing the timer's flags in the cTimer copy constructor
for reporting a crash in case CutRecording() is called from a plugin
+ for fixing the type of MBperMinute in cVideoDiskUsage::HasChanged()
Olivier Jacques <jacquesolivier@hotmail.com>)
for translating OSD texts to the French language
@@ -1141,6 +1142,7 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
to "Single"
for fixing reduced bpp support for DVB subtitles
for implementing "DVB Standard compliance" handling
+ for fixing the call to ChannelString() in cSkinLCARSDisplayChannel::SetChannel()
Ralf Klueber <ralf.klueber@vodafone.com>
for reporting a bug in cutting a recording if there is only a single editing mark
@@ -1304,13 +1306,17 @@ Reinhard Nissl <rnissl@gmx.de>
for storing the original display size when handling DVB subtitles
for reporting a problem with horizontal scaling of subtitles
for fixing a buffer overflow in cFont::Bidi()
- for avoiding an unecessary call to Recordings.ResetResume()
+ for avoiding an unnecessary call to Recordings.ResetResume()
for debugging a problem in handling the bitmap color depth for scaled subtitles
for making subtitle PIDs be decrypted
for making cEITScanner process new transponders before old ones, to make sure
transponder changes are recognized
for helping to debug switching into time shift mode when pausing live video
for fixing a possible high CPU load when pausing replay
+ for suggesting that the LCARS skin should only displays devices that can actually
+ receive channels
+ for reporting that the Transfer Mode indicator bitmap in the LCARS skin may not
+ fit with small font sizes
Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the
@@ -1744,6 +1750,7 @@ Udo Richter <udo_richter@gmx.de>
for a patch that sets the start time of an edited recording to the time of the first
editing mark
for adding the option --outputonly to the dvbsddevice plugin
+ for adding a missing template specification to the c'tor of cSortedTimers
Sven Kreiensen <svenk@kammer.uni-hannover.de>
for his help in keeping 'channels.conf.terr' up to date
@@ -2151,7 +2158,7 @@ Jrgen Schneider <ivory7@gmx.de>
Christian Wieninger <cwieninger@gmx.de>
for suggesting to add cMenuEditStrItem::InEditMode()
for his idea of going directly into the "Edit timer" menu for a timer created
- from the "Schedule" menu in case it starts withing the next two minutes
+ from the "Schedule" menu in case it starts within the next two minutes
for reporting a problem with a format string in recording.c on 64bit systems
for reporting a problem with the device selection in case of timer conflicts
for a patch that fixed part of a crash in i18n character set conversion
@@ -2459,6 +2466,7 @@ Ulf Kiener <webmaster@ulf-kiener.de>
Jrg Wendel <vdr-ml@jwendel.de>
for reporting that cPlugin::Active() was called too often
+ for adding HandledExternally() to the EPG handler interface
Peter Pinnau <vdr@unterbrecher.de>
for reporting that 'uint32_t' requires including stdint.h in font.h on some systems
@@ -2564,6 +2572,7 @@ Benjamin Hess <benjamin.h@gmx.ch>
Winfried Koehler <w_koehl@gmx.de>
for fixing finding new transponders
for reporting a compiler warning in calculations involving FramesPerSecond()
+ for fixing some copy&paste errors in PLUGINS.html
Hans-Werner Hilse <hilse@web.de>
for adding the command line option --userdump to enable core dumps in case VDR
@@ -2864,6 +2873,8 @@ Torsten Lang <info@torstenlang.de>
for reporting a bug in checking for UTF-8 support in cFont::Bidi()
for a patch that was used to implement caching the information whether a recording
is stored on the video directory file system within the cRecording data
+ for suppressing setting the "broken link" or "TEI" flags when cutting recordings
+ if the editing point merges two seamlessly fitting parts of the same stream
Christian Ruppert <idl0r@gentoo.org>
for some improvements to the Makefiles
@@ -2900,3 +2911,9 @@ Christian Richter <cr@crichter.net>
Christian Kaiser <christian.kaiser@teleservice.com>
for adding DeleteEvent() to the EPG handler interface
+
+Dirk Heiser <dirk-vdr@gmx.de>
+ for adding SetComponents() to the EPG handler interface
+
+Ludi Kaleni <ludi113@hotmail.com>
+ for suggesting to add the source character to channel names whenever they are displayed
diff --git a/HISTORY b/HISTORY
index 23412f8..f7ca2aa 100644
--- a/HISTORY
+++ b/HISTORY
@@ -6604,7 +6604,7 @@ Video Disk Recorder Revision History
to Ville Skytt).
- The Makefile now also installs the include files (thanks to Ville Skytt).
- Added handling of "ANSI/SCTE 57" descriptors (thanks to Rolf Ahrenberg).
-- Avoiding an unecessary call to Recordings.ResetResume() (thanks to Reinhard
+- Avoiding an unnecessary call to Recordings.ResetResume() (thanks to Reinhard
Nissl).
2011-06-19: Version 1.7.19
@@ -7147,3 +7147,46 @@ Video Disk Recorder Revision History
- Speeded up opening menus on systems with many (several thousands) of recordings, by
caching the information whether a recording is stored on the video directory file
system within the cRecording data (based on a patch from Torsten Lang).
+
+2012-07-14: Version 1.7.29
+
+- Added a missing template specification to the c'tor of cSortedTimers (thanks to Udo
+ Richter).
+- Fixed the background color of the Transfer Mode indicator bitmap in the LCARS skin.
+- The LCARS skin now only displays devices that can actually receive channels, leaving
+ out, for instance, pure replay devices (suggested by Reinhard Nissl).
+- Now scaling down the Transfer Mode indicator bitmap in the LCARS skin in case it
+ doesn't fit with the selected font size (reported by Reinhard Nissl).
+- Fixed making LCARS the default skin.
+- Adjusted the default values for OSD and font sizes to better fit HDTV.
+- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
+- Fixed the call to ChannelString() in cSkinLCARSDisplayChannel::SetChannel() (thanks
+ to Rolf Ahrenberg).
+- Removed DeleteEvent() from the EPG handler interface (turned out not to be useful)
+ and replaced it with HandledExternally() (thanks to Jrg Wendel).
+- Added SetComponents() to the EPG handler interface (thanks to Dirk Heiser).
+- Updated the Italian OSD texts (thanks to Diego Pierotto).
+- Changed the button colors in the LCARS skin to better fit with the rest of the theme.
+- Removed the gap from the main menu buttons in the LCARS skin.
+- Fixed some copy&paste errors in PLUGINS.html (thanks to Winfried Khler).
+- The LCARS skin's main menu now only displays timers that are actually activated.
+- Within the "Recordings" menu, pressing the '0' key now toggles sorting between
+ "by time" and "by name". The selected sort mode is stored separately for each
+ folder (provided you have write access to that folder).
+ If a folder is newly created by a repeating timer, the sort mode for that
+ folder is initially set to "by time".
+- Fixed several spelling errors (thanks to Ville Skytt).
+- Fixed handling recording with more than two bonded devices.
+- Fixed the type of MBperMinute in cVideoDiskUsage::HasChanged() (thanks to Andreas
+ Mair).
+- Setting the "broken link" or "TEI" flags when cutting recordings is now suppressed
+ if the editing point merges two seamlessly fitting parts of the same stream (thanks
+ to Torsten Lang).
+- Fixed displaying messages in the LCARS skin.
+- Fixed checking for a visible live programme in case a menu or the channel display
+ is currently open.
+- Changed some of the colors in the LCARS skin (you may need to delete the file
+ lcars-default.theme from your themes directory to see these changes).
+- The new setup option "Miscellaneous/Show channel names with source" can be used to
+ turn on adding the source character to channel names whenever they are displayed
+ (suggested by Ludi Kaleni).
diff --git a/MANUAL b/MANUAL
index a33f3bf..5d3c9a5 100644
--- a/MANUAL
+++ b/MANUAL
@@ -24,7 +24,7 @@ Version 1.6
Green - Audio New New Ins/Ovr Rewind Skip -60s -
Yellow - Pause live Delete Delete Delete Delete Skip +60s -
Blue - Stop/Resume Mark Info - Info Stop -
- 0..9 Ch select - Sort(2) Day(3) Numeric inp. Exec cmd(1) Editing -
+ 0..9 Ch select - Sort(2) Day(3) Numeric inp. Sort/Exec cmd(1) Editing -
In a numerical input field (like the response to a CAM enquiry) the keys 0..9
are used to enter the data, and the Left key can be used to delete the last
@@ -81,7 +81,7 @@ Version 1.6
Yellow Info
Blue Timers menu
- (1) See "Processing Recordings" below.
+ (1) See "Sort Recordings" and "Processing Recordings" below.
(2) In the "Channels" menu the '0' key switches the sort mode through "by number",
"by name" and "by provider". Other numeric input positions the cursor to
the channel with the number entered so far. If there is no channel with that
@@ -301,6 +301,14 @@ Version 1.6
A previously stopped playback session can be resumed by pressing the "Blue"
key in the "VDR" menu.
+* Sort Recordings
+
+ Within the "Recordings" menu, pressing the '0' key toggles sorting between
+ "by time" and "by name". The selected sort mode is stored separately for each
+ folder (provided you have write access to that folder).
+ If a folder is newly created by a repeating timer, the sort mode for that
+ folder is initially set to "by time".
+
* Processing Recordings
The configuration file 'reccmds.conf' can be used to define system commands
@@ -905,6 +913,11 @@ Version 1.6
wrap around the beginning or end of the channel list if
this parameter is set to 'yes'.
+ Show channel names with source = no
+ If this option is turned on, channel names will be displayed
+ with the source appended to them, as in "ZDF (S)", where
+ 'S' stands for "Satellite".
+
Emergency exit = yes If, for some reason, a recording fails because the video
data stream is broken, or the CAM doesn't decrypt etc.,
VDR automatically exits in order to allow the surrounding
diff --git a/PLUGINS.html b/PLUGINS.html
index 82164bf..a6b29f2 100644
--- a/PLUGINS.html
+++ b/PLUGINS.html
@@ -1687,7 +1687,7 @@ The first step in implementing a new skin is to derive a class from <tt>cSkin</t
that provides the handling objects necessary to do the actual work:
<p><table><tr><td class="code"><pre>
-#include "skins.h"
+#include &lt;vdr/skins.h&gt;
class cMySkin : public cSkin {
public:
@@ -1697,7 +1697,7 @@ public:
virtual cSkinDisplayMenu *DisplayMenu(void);
virtual cSkinDisplayReplay *DisplayReplay(bool ModeOnly);
virtual cSkinDisplayVolume *DisplayVolume(void);
- virtual cSkinDisplayMessage *DisplayTrack(int NumTracks, const char * const *Tracks);
+ virtual cSkinDisplayTracks *DisplayTracks(const char *Title, int NumTracks, const char * const *Tracks);
virtual cSkinDisplayMessage *DisplayMessage(void);
};
</pre></td></tr></table><p>
diff --git a/PLUGINS/src/dvbhddevice/dvbhddevice.c b/PLUGINS/src/dvbhddevice/dvbhddevice.c
index a1e5881..20b6762 100644
--- a/PLUGINS/src/dvbhddevice/dvbhddevice.c
+++ b/PLUGINS/src/dvbhddevice/dvbhddevice.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: dvbhddevice.c 1.16 2012/02/08 15:10:30 kls Exp $
+ * $Id: dvbhddevice.c 1.17 2012/06/07 09:33:18 kls Exp $
*/
#include <vdr/plugin.h>
@@ -52,7 +52,7 @@ void cPluginDvbhddevice::MainThreadHook(void)
if (gHdffSetup.CecEnabled && gHdffSetup.CecTvOn)
{
HDFF::cHdffCmdIf * hdffCmdIf = cDvbHdFfDevice::GetHdffCmdHandler();
- if (!mIsUserInactive)
+ if (hdffCmdIf && !mIsUserInactive)
{
hdffCmdIf->CmdHdmiSendCecCommand(HDFF_CEC_COMMAND_TV_ON);
}
@@ -67,12 +67,14 @@ const char *cPluginDvbhddevice::MainMenuEntry(void)
cOsdObject *cPluginDvbhddevice::MainMenuAction(void)
{
- return new cHdffMenu(cDvbHdFfDevice::GetHdffCmdHandler());
+ HDFF::cHdffCmdIf * hdffCmdIf = cDvbHdFfDevice::GetHdffCmdHandler();
+ return hdffCmdIf ? new cHdffMenu(hdffCmdIf) : NULL;
}
cMenuSetupPage *cPluginDvbhddevice::SetupMenu(void)
{
- return new cHdffSetupPage(cDvbHdFfDevice::GetHdffCmdHandler());
+ HDFF::cHdffCmdIf * hdffCmdIf = cDvbHdFfDevice::GetHdffCmdHandler();
+ return hdffCmdIf ? new cHdffSetupPage(hdffCmdIf) : NULL;
}
bool cPluginDvbhddevice::SetupParse(const char *Name, const char *Value)
diff --git a/PLUGINS/src/dvbhddevice/hdffcmd.c b/PLUGINS/src/dvbhddevice/hdffcmd.c
index 78e8a89..a6a41d9 100644
--- a/PLUGINS/src/dvbhddevice/hdffcmd.c
+++ b/PLUGINS/src/dvbhddevice/hdffcmd.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: hdffcmd.c 1.24 2012/02/28 09:19:09 kls Exp $
+ * $Id: hdffcmd.c 1.25 2012/06/16 11:16:38 kls Exp $
*/
#include <stdint.h>
@@ -310,6 +310,12 @@ void cHdffCmdIf::CmdOsdDrawText(uint32_t hDisplay, uint32_t hFont, int X, int Y,
HdffCmdOsdDrawText(mOsdDev, hDisplay, hFont, X, Y, pText, Color);
}
+void cHdffCmdIf::CmdOsdDrawUtf8Text(uint32_t hDisplay, uint32_t hFont, int X, int Y, const char * pText, uint32_t Color)
+{
+ //printf("Text(UTF8) %08X (%d,%d), %s, %08X\n", hFont, X, Y, pText, Color);
+ HdffCmdOsdDrawUtf8Text(mOsdDev, hDisplay, hFont, X, Y, pText, Color);
+}
+
void cHdffCmdIf::CmdOsdDrawTextW(uint32_t hDisplay, uint32_t hFont, int X, int Y, const uint16_t * pText, uint32_t Color)
{
//printf("TextW %08X (%d,%d), %08X\n", hFont, X, Y, Color);
diff --git a/PLUGINS/src/dvbhddevice/hdffcmd.h b/PLUGINS/src/dvbhddevice/hdffcmd.h
index c4f5104..f33fe08 100644
--- a/PLUGINS/src/dvbhddevice/hdffcmd.h
+++ b/PLUGINS/src/dvbhddevice/hdffcmd.h
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: hdffcmd.h 1.19 2012/02/06 11:09:27 kls Exp $
+ * $Id: hdffcmd.h 1.20 2012/06/16 11:16:52 kls Exp $
*/
#ifndef _HDFF_CMD_H_
@@ -74,6 +74,7 @@ public:
void CmdOsdDrawEllipse(uint32_t hDisplay, int CX, int CY, int RadiusX, int RadiusY,
uint32_t Color, uint32_t Flags);
void CmdOsdDrawText(uint32_t hDisplay, uint32_t hFont, int X, int Y, const char * pText, uint32_t Color);
+ void CmdOsdDrawUtf8Text(uint32_t hDisplay, uint32_t hFont, int X, int Y, const char * pText, uint32_t Color);
void CmdOsdDrawTextW(uint32_t hDisplay, uint32_t hFont, int X, int Y, const uint16_t * pText, uint32_t Color);
void CmdOsdDrawBitmap(uint32_t hDisplay, int X, int Y, const uint8_t * pBitmap,
int BmpWidth, int BmpHeight, int BmpSize,
diff --git a/PLUGINS/src/dvbhddevice/hdffosd.c b/PLUGINS/src/dvbhddevice/hdffosd.c
index 0b95707..427a3fb 100644
--- a/PLUGINS/src/dvbhddevice/hdffosd.c
+++ b/PLUGINS/src/dvbhddevice/hdffosd.c
@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
- * $Id: hdffosd.c 1.15 2012/05/17 13:29:50 kls Exp $
+ * $Id: hdffosd.c 1.17 2012/06/16 11:17:11 kls Exp $
*/
#include "hdffosd.h"
@@ -47,6 +47,8 @@ private:
uint32_t mBitmapColors[256];
uint32_t mBitmapNumColors;
+ bool mSupportsUtf8Text;
+
protected:
virtual void SetActive(bool On);
public:
@@ -78,6 +80,12 @@ cHdffOsd::cHdffOsd(int Left, int Top, HDFF::cHdffCmdIf * pHdffCmdIf, uint Level)
shown = false;
mChanged = false;
mBitmapPalette = HDFF_INVALID_HANDLE;
+
+ mSupportsUtf8Text = false;
+ if (mHdffCmdIf->CmdGetFirmwareVersion(NULL, 0) >= 0x309)
+ mSupportsUtf8Text = true;
+
+ memset(&config, 0, sizeof(config));
config.FontKerning = true;
config.FontAntialiasing = Setup.AntiAlias ? true : false;
mHdffCmdIf->CmdOsdConfigure(&config);
@@ -346,15 +354,19 @@ void cHdffOsd::DrawText(int x, int y, const char *s, tColor ColorFg, tColor Colo
{
if ((Alignment & taLeft) != 0)
{
+#if (APIVERSNUM >= 10728)
if ((Alignment & taBorder) != 0)
x += max(h / TEXT_ALIGN_BORDER, 1);
+#endif
}
else if ((Alignment & taRight) != 0)
{
if (w < Width)
x += Width - w;
+#if (APIVERSNUM >= 10728)
if ((Alignment & taBorder) != 0)
x -= max(h / TEXT_ALIGN_BORDER, 1);
+#endif
}
else
{ // taCentered
@@ -378,8 +390,11 @@ void cHdffOsd::DrawText(int x, int y, const char *s, tColor ColorFg, tColor Colo
}
}
}
- //x -= mLeft;
- //y -= mTop;
+ if (mSupportsUtf8Text)
+ {
+ mHdffCmdIf->CmdOsdDrawUtf8Text(mDisplay, pFont->Handle, x + mLeft, y + mTop + h, s, ColorFg);
+ }
+ else
{
uint16_t tmp[1000];
uint16_t len = 0;
@@ -394,9 +409,7 @@ void cHdffOsd::DrawText(int x, int y, const char *s, tColor ColorFg, tColor Colo
tmp[len] = 0;
mHdffCmdIf->CmdOsdDrawTextW(mDisplay, pFont->Handle, x + mLeft, y + mTop + h, tmp, ColorFg);
}
- //mHdffCmdIf->CmdOsdDrawText(mDisplay, pFont->Handle, x + mLeft, y + mTop + h - 7, s, ColorFg);
mHdffCmdIf->CmdOsdSetDisplayClippingArea(mDisplay, false, 0, 0, 0, 0);
- //Font->DrawText(this, x, y, s, ColorFg, ColorBg, limit);
mChanged = true;
}
diff --git a/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_defs.h b/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_defs.h
index f68da66..322c256 100644
--- a/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_defs.h
+++ b/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_defs.h
@@ -103,6 +103,7 @@ typedef enum HdffMessageId_t
HDFF_MSG_OSD_DRAW_TEXT,
HDFF_MSG_OSD_DRAW_WIDE_TEXT,
HDFF_MSG_OSD_DRAW_BITMAP,
+ HDFF_MSG_OSD_DRAW_UTF8_TEXT,
HDFF_MSG_HDMI_ENABLE_OUTPUT = 0,
HDFF_MSG_HDMI_SET_VIDEO_MODE,
diff --git a/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_generic.c b/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_generic.c
index f72a7d3..797abe8 100644
--- a/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_generic.c
+++ b/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_generic.c
@@ -21,6 +21,7 @@
*
*********************************************************************/
+#include <errno.h>
#include <stdint.h>
#include <string.h>
#include <sys/ioctl.h>
@@ -38,8 +39,12 @@ int HdffCmdGetFirmwareVersion(int OsdDevice, uint32_t * Version, char * String,
osd_raw_cmd_t osd_cmd;
int err;
+ if (Version == NULL)
+ return -EINVAL;
+
*Version = 0;
- String[0] = 0;
+ if (String)
+ String[0] = 0;
BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
@@ -54,11 +59,14 @@ int HdffCmdGetFirmwareVersion(int OsdDevice, uint32_t * Version, char * String,
{
if (osd_cmd.result_len > 0)
{
- uint8_t textLength = resultData[9];
- if (textLength >= MaxLength)
- textLength = MaxLength - 1;
- memcpy(String, &resultData[10], textLength);
- String[textLength] = 0;
+ if (String)
+ {
+ uint8_t textLength = resultData[9];
+ if (textLength >= MaxLength)
+ textLength = MaxLength - 1;
+ memcpy(String, &resultData[10], textLength);
+ String[textLength] = 0;
+ }
*Version = (resultData[6] << 16)
| (resultData[7] << 8)
| resultData[8];
@@ -76,8 +84,12 @@ int HdffCmdGetInterfaceVersion(int OsdDevice, uint32_t * Version, char * String,
osd_raw_cmd_t osd_cmd;
int err;
+ if (Version == NULL)
+ return -EINVAL;
+
*Version = 0;
- String[0] = 0;
+ if (String)
+ String[0] = 0;
BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
@@ -92,11 +104,14 @@ int HdffCmdGetInterfaceVersion(int OsdDevice, uint32_t * Version, char * String,
{
if (osd_cmd.result_len > 0)
{
- uint8_t textLength = resultData[9];
- if (textLength >= MaxLength)
- textLength = MaxLength - 1;
- memcpy(String, &resultData[10], textLength);
- String[textLength] = 0;
+ if (String)
+ {
+ uint8_t textLength = resultData[9];
+ if (textLength >= MaxLength)
+ textLength = MaxLength - 1;
+ memcpy(String, &resultData[10], textLength);
+ String[textLength] = 0;
+ }
*Version = (resultData[6] << 16)
| (resultData[7] << 8)
| resultData[8];
@@ -114,6 +129,9 @@ int HdffCmdGetCopyrights(int OsdDevice, uint8_t Index, char * String,
osd_raw_cmd_t osd_cmd;
int err;
+ if (String == NULL)
+ return -EINVAL;
+
String[0] = 0;
BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
diff --git a/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.c b/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.c
index dfe2759..9367415 100644
--- a/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.c
+++ b/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.c
@@ -57,6 +57,8 @@ int HdffCmdOsdConfigure(int OsdDevice, const HdffOsdConfig_t * Config)
{
BitBuffer_SetBits(&cmdBuf, 1, 0);
}
+ BitBuffer_SetBits(&cmdBuf, 6, 0); // reserved
+ BitBuffer_SetBits(&cmdBuf, 16, Config->FontDpi);
osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
}
@@ -581,6 +583,43 @@ int HdffCmdOsdDrawText(int OsdDevice, uint32_t Display, uint32_t Font,
return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
}
+int HdffCmdOsdDrawUtf8Text(int OsdDevice, uint32_t Display, uint32_t Font,
+ uint16_t X, uint16_t Y, const char * Text,
+ uint32_t Color)
+{
+ uint8_t cmdData[1060];
+ BitBuffer_t cmdBuf;
+ osd_raw_cmd_t osd_cmd;
+ int i;
+ int length;
+
+ length = 0;
+ while (Text[length])
+ {
+ length++;
+ }
+ if (length > 980)
+ length = 980;
+
+ BitBuffer_Init(&cmdBuf, cmdData, sizeof(cmdData));
+ memset(&osd_cmd, 0, sizeof(osd_raw_cmd_t));
+ osd_cmd.cmd_data = cmdData;
+ HdffCmdBuildHeader(&cmdBuf, HDFF_MSG_TYPE_COMMAND, HDFF_MSG_GROUP_OSD,
+ HDFF_MSG_OSD_DRAW_UTF8_TEXT);
+ BitBuffer_SetBits(&cmdBuf, 32, Display);
+ BitBuffer_SetBits(&cmdBuf, 32, Font);
+ BitBuffer_SetBits(&cmdBuf, 16, X);
+ BitBuffer_SetBits(&cmdBuf, 16, Y);
+ BitBuffer_SetBits(&cmdBuf, 32, Color);
+ BitBuffer_SetBits(&cmdBuf, 16, length);
+ for (i = 0; i < length; i++)
+ {
+ BitBuffer_SetBits(&cmdBuf, 8, Text[i]);
+ }
+ osd_cmd.cmd_len = HdffCmdSetLength(&cmdBuf);
+ return ioctl(OsdDevice, OSD_RAW_CMD, &osd_cmd);
+}
+
int HdffCmdOsdDrawWideText(int OsdDevice, uint32_t Display, uint32_t Font,
uint16_t X, uint16_t Y, const uint16_t * Text,
uint32_t Color)
diff --git a/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.h b/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.h
index 5c13559..48851ef 100644
--- a/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.h
+++ b/PLUGINS/src/dvbhddevice/libhdffcmd/hdffcmd_osd.h
@@ -40,6 +40,7 @@ typedef struct HdffOsdConfig_t
{
int FontAntialiasing;
int FontKerning;
+ uint16_t FontDpi;
} HdffOsdConfig_t;
typedef enum HdffColorType_t
@@ -148,6 +149,10 @@ int HdffCmdOsdDrawText(int OsdDevice, uint32_t Display, uint32_t Font,
uint16_t X, uint16_t Y, const char * Text,
uint32_t Color);
+int HdffCmdOsdDrawUtf8Text(int OsdDevice, uint32_t Display, uint32_t Font,
+ uint16_t X, uint16_t Y, const char * Text,
+ uint32_t Color);
+
int HdffCmdOsdDrawWideText(int OsdDevice, uint32_t Display, uint32_t Font,
uint16_t X, uint16_t Y, const uint16_t * Text,
uint32_t Color);
diff --git a/channels.c b/channels.c
index 65e5134..4c04608 100644
--- a/channels.c
+++ b/channels.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: channels.c 2.22 2012/04/01 09:27:08 kls Exp $
+ * $Id: channels.c 2.24 2012/07/14 12:34:47 kls Exp $
*/
#include "channels.h"
@@ -112,10 +112,34 @@ cChannel& cChannel::operator= (const cChannel &Channel)
provider = strcpyrealloc(provider, Channel.provider);
portalName = strcpyrealloc(portalName, Channel.portalName);
memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
+ nameSource = NULL; // these will be recalculated automatically
+ shortNameSource = NULL;
parameters = Channel.parameters;
return *this;
}
+const char *cChannel::Name(void) const
+{
+ if (Setup.ShowChannelNamesWithSource && !groupSep) {
+ if (isempty(nameSource))
+ nameSource = cString::sprintf("%s (%c)", name, cSource::ToChar(source));
+ return nameSource;
+ }
+ return name;
+}
+
+const char *cChannel::ShortName(bool OrName) const
+{
+ if (OrName && isempty(shortName))
+ return Name();
+ if (Setup.ShowChannelNamesWithSource && !groupSep) {
+ if (isempty(shortNameSource))
+ shortNameSource = cString::sprintf("%s (%c)", shortName, cSource::ToChar(source));
+ return shortNameSource;
+ }
+ return shortName;
+}
+
int cChannel::Transponder(int Frequency, char Polarization)
{
// some satellites have transponders at the same frequency, just with different polarization:
@@ -193,6 +217,8 @@ bool cChannel::SetTransponderData(int Source, int Frequency, int Srate, const ch
srate = Srate;
parameters = Parameters;
schedule = NULL;
+ nameSource = NULL;
+ shortNameSource = NULL;
if (Number() && !Quiet) {
dsyslog("changing transponder data of channel %d from %s to %s", Number(), *OldTransponderData, *TransponderDataToString());
modification |= CHANNELMOD_TRANSP;
@@ -233,10 +259,14 @@ void cChannel::SetName(const char *Name, const char *ShortName, const char *Prov
modification |= CHANNELMOD_NAME;
Channels.SetModified();
}
- if (nn)
+ if (nn) {
name = strcpyrealloc(name, Name);
- if (ns)
+ nameSource = NULL;
+ }
+ if (ns) {
shortName = strcpyrealloc(shortName, ShortName);
+ shortNameSource = NULL;
+ }
if (np)
provider = strcpyrealloc(provider, Provider);
}
@@ -721,6 +751,8 @@ bool cChannel::Parse(const char *s)
free(tpidbuf);
free(caidbuf);
free(namebuf);
+ nameSource = NULL;
+ shortNameSource = NULL;
if (!GetChannelID().Valid()) {
esyslog("ERROR: channel data results in invalid ID!");
return false;
diff --git a/channels.h b/channels.h
index 203a4c9..815cb47 100644
--- a/channels.h
+++ b/channels.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: channels.h 2.15 2012/03/11 11:46:39 kls Exp $
+ * $Id: channels.h 2.16 2012/06/17 11:21:33 kls Exp $
*/
#ifndef __CHANNELS_H
@@ -123,6 +123,8 @@ private:
int number; // Sequence number assigned on load
bool groupSep;
int __EndData__;
+ mutable cString nameSource;
+ mutable cString shortNameSource;
cString parameters;
int modification;
mutable const cSchedule *schedule;
@@ -137,8 +139,8 @@ public:
cString ToText(void) const;
bool Parse(const char *s);
bool Save(FILE *f);
- const char *Name(void) const { return name; }
- const char *ShortName(bool OrName = false) const { return (OrName && isempty(shortName)) ? name : shortName; }
+ const char *Name(void) const;
+ const char *ShortName(bool OrName = false) const;
const char *Provider(void) const { return provider; }
const char *PortalName(void) const { return portalName; }
int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
diff --git a/config.c b/config.c
index b6c4b42..56454df 100644
--- a/config.c
+++ b/config.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.c 2.22 2012/05/11 11:06:57 kls Exp $
+ * $Id: config.c 2.26 2012/06/17 12:27:07 kls Exp $
*/
#include "config.h"
@@ -373,7 +373,7 @@ cSetup Setup;
cSetup::cSetup(void)
{
strcpy(OSDLanguage, ""); // default is taken from environment
- strcpy(OSDSkin, "sttng");
+ strcpy(OSDSkin, "lcars");
strcpy(OSDTheme, "default");
PrimaryDVB = 1;
ShowInfoOnChSwitch = 1;
@@ -424,10 +424,10 @@ cSetup::cSetup(void)
UseDolbyDigital = 1;
ChannelInfoPos = 0;
ChannelInfoTime = 5;
- OSDLeftP = 0.08;
- OSDTopP = 0.08;
- OSDWidthP = 0.87;
- OSDHeightP = 0.84;
+ OSDLeftP = 0.03;
+ OSDTopP = 0.03;
+ OSDWidthP = 0.93;
+ OSDHeightP = 0.93;
OSDLeft = 54;
OSDTop = 45;
OSDWidth = 624;
@@ -439,9 +439,9 @@ cSetup::cSetup(void)
strcpy(FontOsd, DefaultFontOsd);
strcpy(FontSml, DefaultFontSml);
strcpy(FontFix, DefaultFontFix);
- FontOsdSizeP = 0.038;
- FontSmlSizeP = 0.035;
- FontFixSizeP = 0.031;
+ FontOsdSizeP = 0.031;
+ FontSmlSizeP = 0.028;
+ FontFixSizeP = 0.030;
FontOsdSize = 22;
FontSmlSize = 18;
FontFixSize = 20;
@@ -462,6 +462,7 @@ cSetup::cSetup(void)
DeviceBondings = "";
InitialVolume = -1;
ChannelsWrap = 0;
+ ShowChannelNamesWithSource = 0;
EmergencyExit = 1;
}
@@ -657,6 +658,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "InitialVolume")) InitialVolume = atoi(Value);
else if (!strcasecmp(Name, "DeviceBondings")) DeviceBondings = Value;
else if (!strcasecmp(Name, "ChannelsWrap")) ChannelsWrap = atoi(Value);
+ else if (!strcasecmp(Name, "ShowChannelNamesWithSource")) ShowChannelNamesWithSource = atoi(Value);
else if (!strcasecmp(Name, "EmergencyExit")) EmergencyExit = atoi(Value);
else
return false;
@@ -755,6 +757,7 @@ bool cSetup::Save(void)
Store("InitialVolume", InitialVolume);
Store("DeviceBondings", DeviceBondings);
Store("ChannelsWrap", ChannelsWrap);
+ Store("ShowChannelNamesWithSource", ShowChannelNamesWithSource);
Store("EmergencyExit", EmergencyExit);
Sort();
diff --git a/config.h b/config.h
index e283d77..acdf77a 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 2.47 2012/04/15 10:45:32 kls Exp $
+ * $Id: config.h 2.49 2012/06/17 11:14:50 kls Exp $
*/
#ifndef __CONFIG_H
@@ -22,13 +22,13 @@
// VDR's own version number:
-#define VDRVERSION "1.7.28"
-#define VDRVERSNUM 10728 // Version * 10000 + Major * 100 + Minor
+#define VDRVERSION "1.7.29"
+#define VDRVERSNUM 10729 // Version * 10000 + Major * 100 + Minor
// The plugin API's version number:
-#define APIVERSION "1.7.28"
-#define APIVERSNUM 10728 // Version * 10000 + Major * 100 + Minor
+#define APIVERSION "1.7.29"
+#define APIVERSNUM 10729 // Version * 10000 + Major * 100 + Minor
// When loading plugins, VDR searches them by their APIVERSION, which
// may be smaller than VDRVERSION in case there have been no changes to
@@ -323,6 +323,7 @@ public:
int CurrentDolby;
int InitialVolume;
int ChannelsWrap;
+ int ShowChannelNamesWithSource;
int EmergencyExit;
int __EndData__;
cString InitialChannel;
diff --git a/cutter.c b/cutter.c
index eb8f820..62eae82 100644
--- a/cutter.c
+++ b/cutter.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: cutter.c 2.12 2012/06/02 13:46:55 kls Exp $
+ * $Id: cutter.c 2.13 2012/06/10 14:33:36 kls Exp $
*/
#include "cutter.h"
@@ -83,7 +83,9 @@ void cCuttingThread::Action(void)
int LastIFrame = 0;
toMarks.Add(0);
toMarks.Save();
- uchar buffer[MAXFRAMESIZE];
+ uchar buffer[MAXFRAMESIZE], buffer2[MAXFRAMESIZE];
+ int Length2;
+ bool CheckForSeamlessStream = false;
bool LastMark = false;
bool cutIn = true;
while (Running()) {
@@ -142,7 +144,21 @@ void cCuttingThread::Action(void)
FileSize = 0;
}
LastIFrame = 0;
-
+ // Compare the current frame with the previously stored one, to see if this is a seamlessly merged recording of the same stream:
+ if (CheckForSeamlessStream) {
+ if (Length == Length2) {
+ int diffs = 0;
+ for (int i = 0; i < Length; i++) {
+ if (buffer[i] != buffer2[i]) {
+ if (diffs++ > 10)
+ break;
+ }
+ }
+ if (diffs < 10) // the continuity counters of the PAT/PMT packets may differ
+ cutIn = false; // it's apparently a seamless stream, so no need for "broken" handling
+ }
+ CheckForSeamlessStream = false;
+ }
if (cutIn) {
if (isPesRecording)
cRemux::SetBrokenLink(buffer, Length);
@@ -172,6 +188,16 @@ void cCuttingThread::Action(void)
toMarks.Add(toIndex->Last() + 1);
toMarks.Save();
if (Mark) {
+ // Read the next frame, for later comparison with the first frame at this mark:
+ if (fromIndex->Get(Index, &FileNumber, &FileOffset, &Independent, &Length2)) {
+ if (FileNumber != CurrentFileNumber)
+ fromFile = fromFileName->SetOffset(FileNumber, FileOffset);
+ if (fromFile) {
+ int len = ReadFrame(fromFile, buffer2, Length2, sizeof(buffer2));
+ if (len >= 0 && len == Length2)
+ CheckForSeamlessStream = true;
+ }
+ }
Index = Mark->Position();
Mark = fromMarks.Next(Mark);
CurrentFileNumber = 0; // triggers SetOffset before reading next frame
diff --git a/device.c b/device.c
index 9c382a1..872b1aa 100644
--- a/device.c
+++ b/device.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: device.c 2.60 2012/04/26 09:40:36 kls Exp $
+ * $Id: device.c 2.62 2012/06/10 13:13:18 kls Exp $
*/
#include "device.h"
@@ -271,7 +271,7 @@ cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool LiveView
if (NumUsableSlots && !CamSlots.Get(j)->Assign(device[i], true))
continue; // CAM slot can't be used with this device
bool ndr;
- if (device[i]->ProvidesChannel(Channel, Priority, &ndr)) { // this device is basicly able to do the job
+ if (device[i]->ProvidesChannel(Channel, Priority, &ndr)) { // this device is basically able to do the job
if (NumUsableSlots && device[i]->CamSlot() && device[i]->CamSlot() != CamSlots.Get(j))
ndr = true; // using a different CAM slot requires detaching receivers
// Put together an integer number that reflects the "impact" using
@@ -334,7 +334,7 @@ cDevice *cDevice::GetDeviceForTransponder(const cChannel *Channel, int Priority)
if (d->ProvidesTransponder(Channel)) {
if (d->MaySwitchTransponder(Channel))
Device = d; // this device may switch to the transponder without disturbing any receiver or live view
- else if (!d->Occupied()) {
+ else if (!d->Occupied() && d->MaySwitchTransponder(Channel)) { // MaySwitchTransponder() implicitly calls Occupied()
if (d->Priority() < Priority && (!Device || d->Priority() < Device->Priority()))
Device = d; // use this one only if no other with less impact can be found
}
@@ -803,7 +803,7 @@ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
EnsureAudioTrack(true);
EnsureSubtitleTrack();
}
- cStatus::MsgChannelSwitch(this, Channel->Number(), LiveView); // only report status if channel switch successfull
+ cStatus::MsgChannelSwitch(this, Channel->Number(), LiveView); // only report status if channel switch successful
}
return Result;
diff --git a/dvbplayer.c b/dvbplayer.c
index b325c98..f2cb2d2 100644
--- a/dvbplayer.c
+++ b/dvbplayer.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbplayer.c 2.27 2012/05/06 11:02:35 kls Exp $
+ * $Id: dvbplayer.c 2.28 2012/06/09 14:37:24 kls Exp $
*/
#include "dvbplayer.h"
@@ -513,7 +513,7 @@ void cDvbPlayer::Action(void)
if (dropFrame) {
if (!eof || (playDir != pdForward && dropFrame->Index() > 0) || (playDir == pdForward && dropFrame->Index() < readIndex)) {
- ringBuffer->Drop(dropFrame); // the very first and last frame are continously repeated to flush data through the device
+ ringBuffer->Drop(dropFrame); // the very first and last frame are continuously repeated to flush data through the device
dropFrame = NULL;
}
}
diff --git a/eit.c b/eit.c
index 3cc097e..12e1d24 100644
--- a/eit.c
+++ b/eit.c
@@ -8,7 +8,7 @@
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
* Adapted to 'libsi' for VDR 1.3.0 by Marcel Wiesweg <marcel.wiesweg@gmx.de>.
*
- * $Id: eit.c 2.17 2012/06/02 14:05:22 kls Exp $
+ * $Id: eit.c 2.20 2012/06/04 10:26:10 kls Exp $
*/
#include "eit.h"
@@ -45,6 +45,7 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
return;
}
+ bool handledExternally = EpgHandlers.HandledExternally(channel);
cSchedule *pSchedule = (cSchedule *)Schedules->GetSchedule(channel, true);
bool Empty = true;
@@ -70,7 +71,7 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
cEvent *newEvent = NULL;
cEvent *rEvent = NULL;
cEvent *pEvent = (cEvent *)pSchedule->GetEvent(SiEitEvent.getEventId(), StartTime);
- if (!pEvent) {
+ if (!pEvent || handledExternally) {
if (OnlyRunningStatus)
continue;
// If we don't have that event yet, we create a new one.
@@ -78,7 +79,8 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
pEvent = newEvent = new cEvent(SiEitEvent.getEventId());
newEvent->SetStartTime(StartTime);
newEvent->SetDuration(Duration);
- pSchedule->AddEvent(newEvent);
+ if (!handledExternally)
+ pSchedule->AddEvent(newEvent);
}
else {
// We have found an existing event, either through its event ID or its start time.
@@ -283,18 +285,15 @@ cEIT::cEIT(cSchedules *Schedules, int Source, u_char Tid, const u_char *Data, bo
delete ExtendedEventDescriptors;
delete ShortEventDescriptor;
- pEvent->SetComponents(Components);
+ EpgHandlers.SetComponents(pEvent, Components);
EpgHandlers.FixEpgBugs(pEvent);
if (LinkChannels)
channel->SetLinkChannels(LinkChannels);
Modified = true;
EpgHandlers.HandleEvent(pEvent);
-
- if (EpgHandlers.DeleteEvent(pEvent)) {
- pSchedule->DelEvent(pEvent);
- pEvent = NULL;
- }
+ if (handledExternally)
+ delete pEvent;
}
if (Tid == 0x4E) {
if (Empty && getSectionNumber() == 0)
diff --git a/epg.c b/epg.c
index 8e2af14..d47c4a3 100644
--- a/epg.c
+++ b/epg.c
@@ -7,7 +7,7 @@
* Original version (as used in VDR before 1.3.0) written by
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
*
- * $Id: epg.c 2.14 2012/06/02 14:08:12 kls Exp $
+ * $Id: epg.c 2.17 2012/06/04 10:26:10 kls Exp $
*/
#include "epg.h"
@@ -1331,6 +1331,15 @@ bool cEpgHandlers::HandleEitEvent(cSchedule *Schedule, const SI::EIT::Event *Eit
return false;
}
+bool cEpgHandlers::HandledExternally(const cChannel *Channel)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->HandledExternally(Channel))
+ return true;
+ }
+ return false;
+}
+
void cEpgHandlers::SetEventID(cEvent *Event, tEventID EventID)
{
for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
@@ -1412,6 +1421,15 @@ void cEpgHandlers::SetVps(cEvent *Event, time_t Vps)
Event->SetVps(Vps);
}
+void cEpgHandlers::SetComponents(cEvent *Event, cComponents *Components)
+{
+ for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
+ if (eh->SetComponents(Event, Components))
+ return;
+ }
+ Event->SetComponents(Components);
+}
+
void cEpgHandlers::FixEpgBugs(cEvent *Event)
{
for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
@@ -1429,15 +1447,6 @@ void cEpgHandlers::HandleEvent(cEvent *Event)
}
}
-bool cEpgHandlers::DeleteEvent(const cEvent *Event)
-{
- for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
- if (eh->DeleteEvent(Event))
- return true;
- }
- return false;
-}
-
void cEpgHandlers::SortSchedule(cSchedule *Schedule)
{
for (cEpgHandler *eh = First(); eh; eh = Next(eh)) {
diff --git a/epg.h b/epg.h
index fc05c22..98cb776 100644
--- a/epg.h
+++ b/epg.h
@@ -7,7 +7,7 @@
* Original version (as used in VDR before 1.3.0) written by
* Robert Schneider <Robert.Schneider@web.de> and Rolf Hakenes <hakenes@hippomi.de>.
*
- * $Id: epg.h 2.10 2012/06/02 14:07:51 kls Exp $
+ * $Id: epg.h 2.13 2012/06/04 10:26:10 kls Exp $
*/
#ifndef __EPG_H
@@ -244,6 +244,12 @@ public:
///< EPG handlers are queried to see if any of them would like to do the
///< complete processing by itself. TableID and Version are from the
///< incoming section data.
+ virtual bool HandledExternally(const cChannel *Channel) { return false; }
+ ///< If any EPG handler returns true in this function, it is assumed that
+ ///< the EPG for the given Channel is handled completely from some external
+ ///< source. Incoming EIT data is processed as usual, but any new EPG event
+ ///< will not be added to the respective schedule. It's up to the EPG
+ ///< handler to take care of this.
virtual bool SetEventID(cEvent *Event, tEventID EventID) { return false; }
virtual bool SetTitle(cEvent *Event, const char *Title) { return false; }
virtual bool SetShortText(cEvent *Event, const char *ShortText) { return false; }
@@ -253,14 +259,12 @@ public:
virtual bool SetStartTime(cEvent *Event, time_t StartTime) { return false; }
virtual bool SetDuration(cEvent *Event, int Duration) { return false; }
virtual bool SetVps(cEvent *Event, time_t Vps) { return false; }
+ virtual bool SetComponents(cEvent *Event, cComponents *Components) { return false; }
virtual bool FixEpgBugs(cEvent *Event) { return false; }
///< Fixes some known problems with EPG data.
virtual bool HandleEvent(cEvent *Event) { return false; }
///< After all modifications of the Event have been done, the EPG handler
///< can take a final look at it.
- virtual bool DeleteEvent(const cEvent *Event) { return false; }
- ///< After the complete processing of the Event is finished, an EPG handler
- ///< can decide that this Event shall be deleted from its schedule.
virtual bool SortSchedule(cSchedule *Schedule) { return false; }
///< Sorts the Schedule after the complete table has been processed.
virtual bool DropOutdated(cSchedule *Schedule, time_t SegmentStart, time_t SegmentEnd, uchar TableID, uchar Version) { return false; }
@@ -272,6 +276,7 @@ class cEpgHandlers : public cList<cEpgHandler> {
public:
bool IgnoreChannel(const cChannel *Channel);
bool HandleEitEvent(cSchedule *Schedule, const SI::EIT::Event *EitEvent, uchar TableID, uchar Version);
+ bool HandledExternally(const cChannel *Channel);
void SetEventID(cEvent *Event, tEventID EventID);
void SetTitle(cEvent *Event, const char *Title);
void SetShortText(cEvent *Event, const char *ShortText);
@@ -281,9 +286,9 @@ public:
void SetStartTime(cEvent *Event, time_t StartTime);
void SetDuration(cEvent *Event, int Duration);
void SetVps(cEvent *Event, time_t Vps);
+ void SetComponents(cEvent *Event, cComponents *Components);
void FixEpgBugs(cEvent *Event);
void HandleEvent(cEvent *Event);
- bool DeleteEvent(const cEvent *Event);
void SortSchedule(cSchedule *Schedule);
void DropOutdated(cSchedule *Schedule, time_t SegmentStart, time_t SegmentEnd, uchar TableID, uchar Version);
};
diff --git a/libsi/headers.h b/libsi/headers.h
index daea50e..85c83b2 100644
--- a/libsi/headers.h
+++ b/libsi/headers.h
@@ -10,7 +10,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: headers.h 2.4 2012/01/11 11:35:17 kls Exp $
+ * $Id: headers.h 2.5 2012/06/09 14:37:24 kls Exp $
* *
***************************************************************************/
@@ -2040,7 +2040,7 @@ struct descr_application_icons_descriptor_end {
struct descr_simple_application_location_descriptor {
u_char descriptor_tag :8;
u_char descriptor_length :8;
- /* inital_path_bytes */
+ /* initial_path_bytes */
};
// Private DVB Descriptor Premiere.de
diff --git a/menu.c b/menu.c
index ed07b7e..9f4c54e 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 2.54 2012/05/12 13:08:23 kls Exp $
+ * $Id: menu.c 2.58 2012/06/17 11:12:25 kls Exp $
*/
#include "menu.h"
@@ -1888,6 +1888,8 @@ eOSState cMenuCommands::ProcessKey(eKeys Key)
// --- cMenuCam --------------------------------------------------------------
+static bool CamMenuIsOpen = false;
+
class cMenuCam : public cOsdMenu {
private:
cCamSlot *camSlot;
@@ -1919,6 +1921,7 @@ cMenuCam::cMenuCam(cCamSlot *CamSlot)
lastCamExchange = time(NULL);
SetNeedsFastResponse(true);
QueryCam();
+ CamMenuIsOpen = true;
}
cMenuCam::~cMenuCam()
@@ -1930,6 +1933,7 @@ cMenuCam::~cMenuCam()
ciEnquiry->Abort();
delete ciEnquiry;
free(input);
+ CamMenuIsOpen = false;
}
void cMenuCam::GenerateTitle(const char *s)
@@ -2075,6 +2079,11 @@ cOsdObject *CamControl(void)
return NULL;
}
+bool CamMenuActive(void)
+{
+ return CamMenuIsOpen;
+}
+
// --- cMenuRecording --------------------------------------------------------
class cMenuRecording : public cOsdMenu {
@@ -2247,6 +2256,7 @@ void cMenuRecordings::Set(bool Refresh)
}
}
Clear();
+ GetRecordingsSortMode(DirectoryName());
Recordings.Sort();
for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) {
if (!base || (strstr(recording->Name(), base) == recording->Name() && recording->Name()[strlen(base)] == FOLDERDELIMCHAR)) {
@@ -2272,6 +2282,17 @@ void cMenuRecordings::Set(bool Refresh)
Display();
}
+cString cMenuRecordings::DirectoryName(void)
+{
+ cString d(VideoDirectory);
+ if (base) {
+ char *s = ExchangeChars(strdup(base), true);
+ d = AddDirectory(d, s);
+ free(s);
+ }
+ return d;
+}
+
cRecording *cMenuRecordings::GetRecording(cMenuRecordingItem *Item)
{
cRecording *recording = Recordings.GetByName(Item->FileName());
@@ -2417,6 +2438,15 @@ eOSState cMenuRecordings::Commands(eKeys Key)
return osContinue;
}
+eOSState cMenuRecordings::Sort(void)
+{
+ if (HasSubMenu())
+ return osContinue;
+ IncRecordingsSortMode(DirectoryName());
+ Set(true);
+ return osContinue;
+}
+
eOSState cMenuRecordings::ProcessKey(eKeys Key)
{
bool HadSubMenu = HasSubMenu();
@@ -2431,6 +2461,7 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key)
case kYellow: return Delete();
case kInfo:
case kBlue: return Info();
+ case k0: return Sort();
case k1...k9: return Commands(Key);
case kNone: if (Recordings.StateChanged(recordingsState))
Set(true);
@@ -3127,6 +3158,7 @@ cMenuSetupMisc::cMenuSetupMisc(void)
Add(new cMenuEditChanItem(tr("Setup.Miscellaneous$Initial channel"), &data.InitialChannel, tr("Setup.Miscellaneous$as before")));
Add(new cMenuEditIntItem( tr("Setup.Miscellaneous$Initial volume"), &data.InitialVolume, -1, 255, tr("Setup.Miscellaneous$as before")));
Add(new cMenuEditBoolItem(tr("Setup.Miscellaneous$Channels wrap"), &data.ChannelsWrap));
+ Add(new cMenuEditBoolItem(tr("Setup.Miscellaneous$Show channel names with source"), &data.ShowChannelNamesWithSource));
Add(new cMenuEditBoolItem(tr("Setup.Miscellaneous$Emergency exit"), &data.EmergencyExit));
}
@@ -4149,6 +4181,20 @@ cRecordControl::cRecordControl(cDevice *Device, cTimer *Timer, bool Pause)
if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo()
cReplayControl::SetRecording(fileName);
Recordings.AddByName(fileName);
+ if (Timer && !Timer->IsSingleEvent()) {
+ char *Directory = strdup(fileName);
+ // going up two directory levels to get the series folder
+ if (char *p = strrchr(Directory, '/')) {
+ while (p > Directory && *--p != '/')
+ ;
+ *p = 0;
+ if (!HasRecordingsSortMode(Directory)) {
+ dsyslog("setting %s to be sorted by time", Directory);
+ SetRecordingsSortMode(Directory, rsmTime);
+ }
+ }
+ free(Directory);
+ }
return;
}
else
diff --git a/menu.h b/menu.h
index 99f88d0..ba93c5d 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 2.9 2012/05/12 11:48:04 kls Exp $
+ * $Id: menu.h 2.11 2012/06/13 11:23:11 kls Exp $
*/
#ifndef __MENU_H
@@ -187,6 +187,7 @@ public:
};
cOsdObject *CamControl(void);
+bool CamMenuActive(void);
class cMenuRecordingItem;
@@ -203,8 +204,10 @@ private:
eOSState Rewind(void);
eOSState Delete(void);
eOSState Info(void);
+ eOSState Sort(void);
eOSState Commands(eKeys Key = kNone);
protected:
+ cString DirectoryName(void);
cRecording *GetRecording(cMenuRecordingItem *Item);
public:
cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false);
diff --git a/osd.c b/osd.c
index 37ee310..d82a27b 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 2.31 2012/06/02 13:32:38 kls Exp $
+ * $Id: osd.c 2.32 2012/06/09 14:37:24 kls Exp $
*/
#include "osd.h"
@@ -130,7 +130,7 @@ void cPalette::SetAntiAliasGranularity(uint FixedColors, uint BlendColors)
antiAliasGranularity = MAXNUMCOLORS - 1;
else {
int ColorsForBlending = MAXNUMCOLORS - FixedColors;
- int ColorsPerBlend = ColorsForBlending / BlendColors + 2; // +2 = the full foreground and background colors, which are amoung the fixed colors
+ int ColorsPerBlend = ColorsForBlending / BlendColors + 2; // +2 = the full foreground and background colors, which are among the fixed colors
antiAliasGranularity = double(MAXNUMCOLORS - 1) / (ColorsPerBlend - 1);
}
}
diff --git a/po/ar.po b/po/ar.po
index 414e6b6..ddfc50a 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-10-16 11:16-0400\n"
"Last-Translator: Osama Alrawab <alrawab@hotmail.com>\n"
"Language-Team: Arabic <ar@li.org>\n"
@@ -1146,6 +1146,9 @@ msgstr "فعل الصوت"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "كسابق"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "خروج طارىء"
diff --git a/po/ca_ES.po b/po/ca_ES.po
index cd017b2..ce13921 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Catalan <vdr@linuxtv.org>\n"
@@ -1122,6 +1122,9 @@ msgstr "Volum inicial"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Sortida d'emergncia"
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 2feacbe..9619361 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2010-05-06 11:00+0200\n"
"Last-Translator: Radek Šťastný <dedkus@gmail.com>\n"
"Language-Team: Czech <vdr@linuxtv.org>\n"
@@ -1121,6 +1121,9 @@ msgstr "Hlasitost po spuštění"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Nouzové ukončení"
diff --git a/po/da_DK.po b/po/da_DK.po
index b5681b0..5a463b9 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: Danish <vdr@linuxtv.org>\n"
@@ -1119,6 +1119,9 @@ msgstr "Lydstyrke ved opstart"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Ndudgang"
diff --git a/po/de_DE.po b/po/de_DE.po
index 088dbaf..20a5476 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2010-01-16 16:46+0100\n"
"Last-Translator: Klaus Schmidinger <kls@tvdr.de>\n"
"Language-Team: German <vdr@linuxtv.org>\n"
@@ -1119,6 +1119,9 @@ msgstr "Lautstrke beim Einschalten"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Rundum zappen"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr "Kanalnamen mit Quelle anzeigen"
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Notausstieg"
diff --git a/po/el_GR.po b/po/el_GR.po
index bb53086..d27af7e 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: Greek <vdr@linuxtv.org>\n"
@@ -1119,6 +1119,9 @@ msgstr ""
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr ""
diff --git a/po/es_ES.po b/po/es_ES.po
index 93ca669..f38ce2f 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-03-02 19:02+0100\n"
"Last-Translator: Luca Olivetti <luca@ventoso.org>\n"
"Language-Team: Spanish <vdr@linuxtv.org>\n"
@@ -1120,6 +1120,9 @@ msgstr "Volumen inicial"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Salida de emergencia"
diff --git a/po/et_EE.po b/po/et_EE.po
index cfd61f0..b136d37 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Arthur Konovalov <artlov@gmail.com>\n"
"Language-Team: Estonian <vdr@linuxtv.org>\n"
@@ -1119,6 +1119,9 @@ msgstr "Helitugevus käivitamisel"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Kanalite ringkerimine"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Hädaväljumine"
diff --git a/po/fi_FI.po b/po/fi_FI.po
index af24f81..aa76eef 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2007-08-15 15:52+0200\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: Finnish <vdr@linuxtv.org>\n"
@@ -1122,6 +1122,9 @@ msgstr "Äänenvoimakkuus käynnistettäessä"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Kanavien rullaus"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Käytä hätäsammutusta"
@@ -1277,22 +1280,22 @@ msgid "Classic VDR"
msgstr "Klassinen VDR"
msgid "DISK"
-msgstr ""
+msgstr "LEVY"
msgid "LOAD"
-msgstr ""
+msgstr "KUORMA"
msgid "TIMERS"
-msgstr ""
+msgstr "AJASTIMET"
msgid "DEVICES"
-msgstr ""
+msgstr "LAITTEET"
msgid "LIVE"
-msgstr ""
+msgstr "LIVE"
msgid "PLAY"
-msgstr ""
+msgstr "TOISTO"
msgid "ST:TNG Panels"
msgstr "ST:TNG konsoli"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 44b2fa3..451cf56 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-02-27 18:14+0100\n"
"Last-Translator: Jean-Claude Repetto <jc@repetto.org>\n"
"Language-Team: French <vdr@linuxtv.org>\n"
@@ -1125,6 +1125,9 @@ msgstr "Volume initial"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Arrt d'urgence"
diff --git a/po/hr_HR.po b/po/hr_HR.po
index 541c64e..6fddf87 100644
--- a/po/hr_HR.po
+++ b/po/hr_HR.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-03-17 19:00+0100\n"
"Last-Translator: Adrian Caval <anrxc@sysphere.org>\n"
"Language-Team: Croatian <vdr@linuxtv.org>\n"
@@ -1121,6 +1121,9 @@ msgstr "Poetna jaina zvuka"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Izlaz u sluaju nude"
diff --git a/po/hu_HU.po b/po/hu_HU.po
index c7814ee..71047a3 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2012-01-02 11:54+0200\n"
"Last-Translator: Istvn Fley <ifuley@tigercomp.ro>\n"
"Language-Team: Hungarian <vdr@linuxtv.org>\n"
@@ -1123,6 +1123,9 @@ msgstr "Hanger indulsnl"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Csatornalista grgetse"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Vszlellts"
diff --git a/po/it_IT.po b/po/it_IT.po
index 8027cb2..03cfbe1 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
-"PO-Revision-Date: 2012-03-19 01:08+0100\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
+"PO-Revision-Date: 2012-06-06 22:50+0100\n"
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
"Language-Team: Italian <vdr@linuxtv.org>\n"
"Language: it\n"
@@ -925,7 +925,7 @@ msgid "Setup.DVB$Primary DVB interface"
msgstr "Scheda DVB primaria"
msgid "Setup.DVB$Standard compliance"
-msgstr ""
+msgstr "Modalità base"
msgid "Setup.DVB$Video format"
msgstr "Formato video"
@@ -1126,6 +1126,9 @@ msgstr "Volume iniziale"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Riavvolgimento canali"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Uscita di emergenza"
@@ -1281,22 +1284,22 @@ msgid "Classic VDR"
msgstr "VDR Classico"
msgid "DISK"
-msgstr ""
+msgstr "DISCO"
msgid "LOAD"
-msgstr ""
+msgstr "CARICA"
msgid "TIMERS"
-msgstr ""
+msgstr "TIMER"
msgid "DEVICES"
-msgstr ""
+msgstr "SCHEDE"
msgid "LIVE"
-msgstr ""
+msgstr "DAL VIVO"
msgid "PLAY"
-msgstr ""
+msgstr "RIPRODUCI"
msgid "ST:TNG Panels"
msgstr "Consolle ST:TNG"
diff --git a/po/lt_LT.po b/po/lt_LT.po
index 03d3508..98b8a68 100644
--- a/po/lt_LT.po
+++ b/po/lt_LT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2010-10-30 11:55+0200\n"
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
"Language-Team: Lithuanian <vdr@linuxtv.org>\n"
@@ -1119,6 +1119,9 @@ msgstr "Garsas įjungimo metu"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Kanalų pridengimas"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Avarinis išėjimas"
diff --git a/po/mk_MK.po b/po/mk_MK.po
index e62fac8..a767aca 100644
--- a/po/mk_MK.po
+++ b/po/mk_MK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR-1.7.14\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2010-03-11 00:54+0100\n"
"Last-Translator: Dimitar Petrovski <dimeptr@gmail.com>\n"
"Language-Team: Macedonian <en@li.org>\n"
@@ -1120,6 +1120,9 @@ msgstr "Почетна јачина на звук"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Премотување канали"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Итен излез"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 9d1fcde..a312fdc 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-02-26 17:20+0100\n"
"Last-Translator: Johan Schuring <johan.schuring@vetteblei.nl>\n"
"Language-Team: Dutch <vdr@linuxtv.org>\n"
@@ -1123,6 +1123,9 @@ msgstr "Opstartvolume"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Nooduitgang"
diff --git a/po/nn_NO.po b/po/nn_NO.po
index 44940e0..2612be2 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2007-08-12 14:17+0200\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: Norwegian Nynorsk <vdr@linuxtv.org>\n"
@@ -1120,6 +1120,9 @@ msgstr ""
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr ""
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 90a1762..166b35b 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-03-09 12:59+0100\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: Polish <vdr@linuxtv.org>\n"
@@ -1120,6 +1120,9 @@ msgstr "Pocztkowa gono"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Wyjcie awaryjne"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index c201761..da11c07 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.15\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2010-03-28 22:49+0100\n"
"Last-Translator: Cris Silva <hudokkow@gmail.com>\n"
"Language-Team: Portuguese <vdr@linuxtv.org>\n"
@@ -1120,6 +1120,9 @@ msgstr "Volume inicial"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Retroceder canais"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Sada de emergncia"
diff --git a/po/ro_RO.po b/po/ro_RO.po
index 64aadc8..3f6d1e1 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.12\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2011-03-10 23:52+0100\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: Romanian <vdr@linuxtv.org>\n"
@@ -1122,6 +1122,9 @@ msgstr "Volumul la pornire"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Lista de canale n bucl"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Oprire de urgen"
diff --git a/po/ru_RU.po b/po/ru_RU.po
index f3cd5c3..4ed7801 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-12-15 14:37+0100\n"
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
"Language-Team: Russian <vdr@linuxtv.org>\n"
@@ -1120,6 +1120,9 @@ msgstr " "
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr " "
diff --git a/po/sk_SK.po b/po/sk_SK.po
index 985435d..069fd55 100644
--- a/po/sk_SK.po
+++ b/po/sk_SK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.16\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2011-02-15 16:29+0100\n"
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
"Language-Team: Slovak <vdr@linuxtv.org>\n"
@@ -1119,6 +1119,9 @@ msgstr "Hlasitos po spusten"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Prepna z prvho na posledn a opane"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Ndzov ukonenie"
diff --git a/po/sl_SI.po b/po/sl_SI.po
index 8b25fc3..5bb6b9b 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-02-28 19:44+0100\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: Slovenian <vdr@linuxtv.org>\n"
@@ -1120,6 +1120,9 @@ msgstr "Privzeta glasnost"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Izhod v sili"
diff --git a/po/sr_SR.po b/po/sr_SR.po
index 39bc9d2..4be71c5 100644
--- a/po/sr_SR.po
+++ b/po/sr_SR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.1\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2011-01-09 15:57+0100\n"
"Last-Translator: Milan Cvijanovi <elcom_cvijo@hotmail.com>\n"
"Language-Team: Serbian <vdr@linuxtv.org>\n"
@@ -1143,6 +1143,9 @@ msgstr "Poetna jaina tona"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Kanal spakovan"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Izlaz u sluaju nude"
diff --git a/po/sv_SE.po b/po/sv_SE.po
index 7987755..4e99893 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-03-12 18:25+0100\n"
"Last-Translator: Magnus Andersson <svankan@bahnhof.se>\n"
"Language-Team: Swedish <vdr@linuxtv.org>\n"
@@ -1122,6 +1122,9 @@ msgstr "Ljudstyrka vid uppstart"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Ofrutsedd avslutning"
diff --git a/po/tr_TR.po b/po/tr_TR.po
index 163b823..d38761a 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2008-02-28 00:33+0100\n"
"Last-Translator: Oktay Yolgeen <oktay_73@yahoo.de>\n"
"Language-Team: Turkish <vdr@linuxtv.org>\n"
@@ -1119,6 +1119,9 @@ msgstr "Aldaki ses"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Acil ck"
diff --git a/po/uk_UA.po b/po/uk_UA.po
index 588cf7a..5ec4a0b 100644
--- a/po/uk_UA.po
+++ b/po/uk_UA.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.7.7\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2010-04-25 16:35+0200\n"
"Last-Translator: Yarema aka Knedlyk <yupadmin@gmail.com>\n"
"Language-Team: Ukrainian <vdr@linuxtv.org>\n"
@@ -1119,6 +1119,9 @@ msgstr "Гучність при включенні"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr "Кінець каналів"
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "Аварійний вихід"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index d087946..0c1e18b 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR 1.6.0\n"
"Report-Msgid-Bugs-To: <vdr-bugs@tvdr.de>\n"
-"POT-Creation-Date: 2012-06-02 15:10+0200\n"
+"POT-Creation-Date: 2012-06-17 13:59+0200\n"
"PO-Revision-Date: 2009-09-23 23:50+0800\n"
"Last-Translator: Nan Feng <nfgx@21cn.com>\n"
"Language-Team: Chinese (simplified) <vdr@linuxtv.org>\n"
@@ -1122,6 +1122,9 @@ msgstr "初始化声音"
msgid "Setup.Miscellaneous$Channels wrap"
msgstr ""
+msgid "Setup.Miscellaneous$Show channel names with source"
+msgstr ""
+
msgid "Setup.Miscellaneous$Emergency exit"
msgstr "突发事件退出"
diff --git a/recording.c b/recording.c
index 2a73645..d13225b 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 2.56 2012/06/03 09:51:27 kls Exp $
+ * $Id: recording.c 2.57 2012/06/09 13:57:30 kls Exp $
*/
#include "recording.h"
@@ -53,6 +53,8 @@
#define INFOFILESUFFIX "/info"
#define MARKSFILESUFFIX "/marks"
+#define SORTMODEFILE ".sort"
+
#define MINDISKSPACE 1024 // MB
#define REMOVECHECKDELTA 60 // seconds between checks for removing deleted files
@@ -610,7 +612,7 @@ cRecording::cRecording(cTimer *Timer, const cEvent *Event)
{
resume = RESUME_NOT_INITIALIZED;
titleBuffer = NULL;
- sortBuffer = NULL;
+ sortBufferName = sortBufferTime = NULL;
fileName = NULL;
name = NULL;
fileSizeMB = -1; // unknown
@@ -683,7 +685,7 @@ cRecording::cRecording(const char *FileName)
numFrames = -1;
deleted = 0;
titleBuffer = NULL;
- sortBuffer = NULL;
+ sortBufferName = sortBufferTime = NULL;
FileName = fileName = strdup(FileName);
if (*(fileName + strlen(fileName) - 1) == '/')
*(fileName + strlen(fileName) - 1) = 0;
@@ -795,7 +797,8 @@ cRecording::cRecording(const char *FileName)
cRecording::~cRecording()
{
free(titleBuffer);
- free(sortBuffer);
+ free(sortBufferName);
+ free(sortBufferTime);
free(fileName);
free(name);
delete info;
@@ -816,22 +819,27 @@ char *cRecording::StripEpisodeName(char *s)
}
t++;
}
- if (s1 && s2)
- memmove(s1 + 1, s2, t - s2 + 1);
+ if (s1 && s2) {
+ s1++;
+ memmove(s1, s2, t - s2 + 1);
+ *s1 = 0xFF; // sorts folders before plain recordings
+ }
return s;
}
char *cRecording::SortName(void) const
{
- if (!sortBuffer) {
- char *s = StripEpisodeName(strdup(FileName() + strlen(VideoDirectory) + 1));
+ char **sb = (RecordingsSortMode == rsmName) ? &sortBufferName : &sortBufferTime;
+ if (!*sb) {
+ char *s = (RecordingsSortMode == rsmName) ? strdup(FileName() + strlen(VideoDirectory) + 1)
+ : StripEpisodeName(strdup(FileName() + strlen(VideoDirectory) + 1));
strreplace(s, '/', 'a'); // some locales ignore '/' when sorting
int l = strxfrm(NULL, s, 0) + 1;
- sortBuffer = MALLOC(char, l);
- strxfrm(sortBuffer, s, l);
+ *sb = MALLOC(char, l);
+ strxfrm(*sb, s, l);
free(s);
}
- return sortBuffer;
+ return *sb;
}
int cRecording::GetResume(void) const
@@ -2133,3 +2141,39 @@ int ReadFrame(cUnbufferedFile *f, uchar *b, int Length, int Max)
LOG_ERROR;
return r;
}
+
+// --- Recordings Sort Mode --------------------------------------------------
+
+eRecordingsSortMode RecordingsSortMode = rsmName;
+
+bool HasRecordingsSortMode(const char *Directory)
+{
+ return access(AddDirectory(Directory, SORTMODEFILE), R_OK) == 0;
+}
+
+void GetRecordingsSortMode(const char *Directory)
+{
+ if (FILE *f = fopen(AddDirectory(Directory, SORTMODEFILE), "r")) {
+ char buf[8];
+ if (fgets(buf, sizeof(buf), f))
+ RecordingsSortMode = eRecordingsSortMode(constrain(atoi(buf), 0, int(rsmTime)));
+ fclose(f);
+ }
+}
+
+void SetRecordingsSortMode(const char *Directory, eRecordingsSortMode SortMode)
+{
+ if (FILE *f = fopen(AddDirectory(Directory, SORTMODEFILE), "w")) {
+ fputs(cString::sprintf("%d\n", SortMode), f);
+ fclose(f);
+ }
+}
+
+void IncRecordingsSortMode(const char *Directory)
+{
+ GetRecordingsSortMode(Directory);
+ RecordingsSortMode = eRecordingsSortMode(int(RecordingsSortMode) + 1);
+ if (RecordingsSortMode > rsmTime)
+ RecordingsSortMode = eRecordingsSortMode(0);
+ SetRecordingsSortMode(Directory, RecordingsSortMode);
+}
diff --git a/recording.h b/recording.h
index 56659ed..8e71230 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 2.33 2012/06/03 09:49:09 kls Exp $
+ * $Id: recording.h 2.34 2012/06/09 13:55:22 kls Exp $
*/
#ifndef __RECORDING_H
@@ -83,7 +83,8 @@ class cRecording : public cListObject {
private:
mutable int resume;
mutable char *titleBuffer;
- mutable char *sortBuffer;
+ mutable char *sortBufferName;
+ mutable char *sortBufferTime;
mutable char *fileName;
mutable char *name;
mutable int fileSizeMB;
@@ -333,4 +334,11 @@ char *ExchangeChars(char *s, bool ToFileSystem);
bool GenerateIndex(const char *FileName);
+enum eRecordingsSortMode { rsmName, rsmTime };
+extern eRecordingsSortMode RecordingsSortMode;
+bool HasRecordingsSortMode(const char *Directory);
+void GetRecordingsSortMode(const char *Directory);
+void SetRecordingsSortMode(const char *Directory, eRecordingsSortMode SortMode);
+void IncRecordingsSortMode(const char *Directory);
+
#endif //__RECORDING_H
diff --git a/skinlcars.c b/skinlcars.c
index a602923..5937efe 100644
--- a/skinlcars.c
+++ b/skinlcars.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: skinlcars.c 2.2 2012/06/03 10:17:00 kls Exp $
+ * $Id: skinlcars.c 2.13 2012/06/13 13:27:31 kls Exp $
*/
// "Star Trek: The Next Generation"(R) is a registered trademark of Paramount Pictures,
@@ -76,11 +76,11 @@ static cTheme Theme;
// Color domains:
#define CLR_BACKGROUND 0x99000000
-#define CLR_MAIN_FRAME 0xFFF1DF6F
-#define CLR_CHANNEL_FRAME 0xFFFFCC99
+#define CLR_MAIN_FRAME 0xFFFF9966
+#define CLR_CHANNEL_FRAME 0xFF8A9EC9
#define CLR_REPLAY_FRAME 0xFFCC6666
#define CLR_DATE 0xFF99CCFF
-#define CLR_MENU_ITEMS 0xFFFFBC57
+#define CLR_MENU_ITEMS 0xFF9999FF
#define CLR_TIMER 0xFF99CCFF
#define CLR_DEVICE 0xFFF1B1AF
#define CLR_CHANNEL_NAME 0xFF99CCFF
@@ -93,10 +93,10 @@ static cTheme Theme;
#define CLR_ALERT 0xFFFF0000
#define CLR_EXPOSED 0xFF990000
#define CLR_WHITE 0xFFFFFFFF
-#define CLR_RED 0xFFB20000
-#define CLR_GREEN 0xFF00B200
-#define CLR_YELLOW 0xFFB2B200
-#define CLR_BLUE 0xFF0000B2
+#define CLR_RED 0xFFCC6666
+#define CLR_GREEN 0xFFA0FF99
+#define CLR_YELLOW 0xFFF1DF60
+#define CLR_BLUE 0xFF9A99FF
#define CLR_BLACK 0xFF000000
// General colors:
@@ -122,24 +122,24 @@ THEME_CLR(Theme, clrEventDescription, CLR_TEXT);
// Buttons:
-THEME_CLR(Theme, clrButtonRedFg, CLR_WHITE);
+THEME_CLR(Theme, clrButtonRedFg, CLR_BLACK);
THEME_CLR(Theme, clrButtonRedBg, CLR_RED);
THEME_CLR(Theme, clrButtonGreenFg, CLR_BLACK);
THEME_CLR(Theme, clrButtonGreenBg, CLR_GREEN);
THEME_CLR(Theme, clrButtonYellowFg, CLR_BLACK);
THEME_CLR(Theme, clrButtonYellowBg, CLR_YELLOW);
-THEME_CLR(Theme, clrButtonBlueFg, CLR_WHITE);
+THEME_CLR(Theme, clrButtonBlueFg, CLR_BLACK);
THEME_CLR(Theme, clrButtonBlueBg, CLR_BLUE);
// Messages:
-THEME_CLR(Theme, clrMessageStatusFg, CLR_WHITE);
+THEME_CLR(Theme, clrMessageStatusFg, CLR_BLACK);
THEME_CLR(Theme, clrMessageStatusBg, CLR_BLUE);
THEME_CLR(Theme, clrMessageInfoFg, CLR_BLACK);
THEME_CLR(Theme, clrMessageInfoBg, CLR_GREEN);
THEME_CLR(Theme, clrMessageWarningFg, CLR_BLACK);
THEME_CLR(Theme, clrMessageWarningBg, CLR_YELLOW);
-THEME_CLR(Theme, clrMessageErrorFg, CLR_WHITE);
+THEME_CLR(Theme, clrMessageErrorFg, CLR_BLACK);
THEME_CLR(Theme, clrMessageErrorBg, CLR_RED);
// Volume:
@@ -166,11 +166,11 @@ THEME_CLR(Theme, clrMenuTitle, CLR_MAIN_FRAME);
THEME_CLR(Theme, clrMenuMainBracket, CLR_MENU_ITEMS);
THEME_CLR(Theme, clrMenuTimerRecording, CLR_DEVICE);
THEME_CLR(Theme, clrMenuDeviceRecording, CLR_TIMER);
-THEME_CLR(Theme, clrMenuItemCurrentFg, CLR_BLACK);
-THEME_CLR(Theme, clrMenuItemCurrentBg, CLR_MENU_ITEMS);
+THEME_CLR(Theme, clrMenuItemCurrentFg, CLR_MAIN_FRAME);
+THEME_CLR(Theme, clrMenuItemCurrentBg, RgbShade(CLR_MENU_ITEMS, -0.5));
THEME_CLR(Theme, clrMenuItemSelectable, CLR_MENU_ITEMS);
THEME_CLR(Theme, clrMenuItemNonSelectable, CLR_TEXT);
-THEME_CLR(Theme, clrMenuScrollbarTotal, CLR_MENU_ITEMS);
+THEME_CLR(Theme, clrMenuScrollbarTotal, RgbShade(CLR_MAIN_FRAME, 0.2));
THEME_CLR(Theme, clrMenuScrollbarShown, CLR_SEEN);
THEME_CLR(Theme, clrMenuScrollbarArrow, CLR_BLACK);
THEME_CLR(Theme, clrMenuText, CLR_TEXT);
@@ -515,7 +515,7 @@ void cSkinLCARSDisplayChannel::SetChannel(const cChannel *Channel, int Number)
else if (Number)
ChNumber = cString::sprintf("%d-", Number);
else
- ChName = ChannelString(NULL, NULL);
+ ChName = ChannelString(NULL, 0);
osd->DrawText(xc00, yc00, ChNumber, Theme.Color(clrChannelFrameFg), frameColor, tallFont, xc02 - xc00, yc02 - yc00, taTop | taRight | taBorder);
osd->DrawText(xc03, yc00, ChName, Theme.Color(clrChannelName), Theme.Color(clrBackground), tallFont, xi - xc03 - lineHeight, 0, taTop | taLeft);
lastSignalDisplay = 0;
@@ -548,14 +548,30 @@ void cSkinLCARSDisplayChannel::SetEvents(const cEvent *Present, const cEvent *Fo
void cSkinLCARSDisplayChannel::SetMessage(eMessageType Type, const char *Text)
{
if (Text) {
- int y0 = yc11 - ShowSeenExtent;
- int y1 = yc11;
- osd->SaveRegion(xc06, y0, xc13 - 1, yc12 - 1);
- osd->DrawRectangle(xc06, y0, xc07, y1 - 1, Theme.Color(clrBackground)); // clears the "seen" bar
- osd->DrawText(xc06, yc11, Text, Theme.Color(clrMessageStatusFg + 2 * Type), Theme.Color(clrMessageStatusBg + 2 * Type), cFont::GetFont(fontSml), xc13 - xc06, yc12 - yc11, taCenter);
+ int x0, x1, y0, y1, y2;
+ if (withInfo) {
+ x0 = xc06;
+ x1 = xc13;
+ y0 = yc11 - ShowSeenExtent;
+ y1 = yc11;
+ y2 = yc12;
+ }
+ else {
+ x0 = xc03;
+ x1 = xc13;
+ y0 = y1 = yc00;
+ y2 = yc02;
+ }
+ osd->SaveRegion(x0, y0, x1 - 1, y2 - 1);
+ if (withInfo)
+ osd->DrawRectangle(xc06, y0, xc07, y1 - 1, Theme.Color(clrBackground)); // clears the "seen" bar
+ osd->DrawText(x0, y1, Text, Theme.Color(clrMessageStatusFg + 2 * Type), Theme.Color(clrMessageStatusBg + 2 * Type), cFont::GetFont(fontSml), x1 - x0, y2 - y1, taCenter);
+ message = true;
}
- else
+ else {
osd->RestoreRegion();
+ message = false;
+ }
}
void cSkinLCARSDisplayChannel::Flush(void)
@@ -566,16 +582,16 @@ void cSkinLCARSDisplayChannel::Flush(void)
DrawTrack();
DrawDevice();
DrawSignal();
+ int Current = 0;
+ int Total = 0;
+ if (present) {
+ time_t t = time(NULL);
+ if (t > present->StartTime())
+ Current = t - present->StartTime();
+ Total = present->Duration();
+ }
+ DrawSeen(Current, Total);
}
- int Current = 0;
- int Total = 0;
- if (present) {
- time_t t = time(NULL);
- if (t > present->StartTime())
- Current = t - present->StartTime();
- Total = present->Duration();
- }
- DrawSeen(Current, Total);
}
osd->Flush();
initial = false;
@@ -928,7 +944,7 @@ void cSkinLCARSDisplayMenu::DrawMainButton(const char *Text, int x0, int x1, int
{
int h = y1 - y0;
osd->DrawEllipse(x0, y0, x1 - 1, y1 - 1, ColorBg, 7);
- osd->DrawText(x1 + Gap, y0, Text, ColorFg, ColorBg, Font, x2 - x1 - Gap, h, taBottom | taRight);
+ osd->DrawText(x1, y0, Text, ColorFg, ColorBg, Font, x2 - x1, h, taBottom | taRight);
osd->DrawEllipse(x2, y0, x3 - 1, y1 - 1, ColorBg, 5);
}
@@ -1149,6 +1165,7 @@ void cSkinLCARSDisplayMenu::DrawTimers(void)
osd->DrawRectangle(xs07, ys04, xs13 - 1, ys05 - 1, Theme.Color(clrBackground));
cSortedTimers SortedTimers;
cVector<int> FreeDeviceSlots;
+ int NumDevices = 0;
int y = ys04;
// Timers and recording devices:
while (1) {
@@ -1167,6 +1184,7 @@ void cSkinLCARSDisplayMenu::DrawTimers(void)
Device = RecordControl->Device();
deviceOffset[Device->DeviceNumber()] = y;
deviceRecording[Device->DeviceNumber()] = true;
+ NumDevices++;
}
else
FreeDeviceSlots.Append(y);
@@ -1177,7 +1195,7 @@ void cSkinLCARSDisplayMenu::DrawTimers(void)
}
SortedTimers[i] = NULL;
}
- else if (!Device) {
+ else if (!Device && Timer->HasFlags(tfActive)) {
DrawTimer(Timer, y, false);
FreeDeviceSlots.Append(y);
y += lineHeight + Gap;
@@ -1192,20 +1210,29 @@ void cSkinLCARSDisplayMenu::DrawTimers(void)
int Slot = 0;
for (int i = 0; i < cDevice::NumDevices(); i++) {
if (const cDevice *Device = cDevice::GetDevice(i)) {
- if (!deviceRecording[Device->DeviceNumber()]) {
- if (Slot < FreeDeviceSlots.Size()) {
- y = FreeDeviceSlots[Slot];
- Slot++;
+ if (Device->NumProvidedSystems()) {
+ if (!deviceRecording[Device->DeviceNumber()]) {
+ if (Slot < FreeDeviceSlots.Size()) {
+ y = FreeDeviceSlots[Slot];
+ Slot++;
+ }
+ if (y + lineHeight > ys05)
+ break;
+ deviceOffset[Device->DeviceNumber()] = y;
+ y += lineHeight + Gap;
+ NumDevices++;
}
- if (y + lineHeight > ys05)
- break;
- deviceOffset[Device->DeviceNumber()] = y;
- y += lineHeight + Gap;
}
}
}
- osd->DrawText(xs02, ys00, itoa(Timers.Count()), Theme.Color(clrMenuFrameFg), frameColor, font, xs03 - xs02, ys01 - ys00, taBottom | taLeft | taBorder);
- osd->DrawText(xs08, ys00, itoa(cDevice::NumDevices()), Theme.Color(clrMenuFrameFg), frameColor, font, xs09 - xs08, ys01 - ys00, taBottom | taRight | taBorder);
+ // Total number of active timers:
+ int NumTimers = 0;
+ for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) {
+ if (Timer->HasFlags(tfActive))
+ NumTimers++;
+ }
+ osd->DrawText(xs02, ys00, itoa(NumTimers), Theme.Color(clrMenuFrameFg), frameColor, font, xs03 - xs02, ys01 - ys00, taBottom | taLeft | taBorder);
+ osd->DrawText(xs08, ys00, itoa(NumDevices), Theme.Color(clrMenuFrameFg), frameColor, font, xs09 - xs08, ys01 - ys00, taBottom | taRight | taBorder);
lastSignalDisplay = 0;
initial = true; // forces redrawing of devices
}
@@ -1231,8 +1258,10 @@ void cSkinLCARSDisplayMenu::DrawDevice(const cDevice *Device)
void cSkinLCARSDisplayMenu::DrawDevices(void)
{
for (int i = 0; i < cDevice::NumDevices(); i++) {
- if (const cDevice *Device = cDevice::GetDevice(i))
- DrawDevice(Device);
+ if (const cDevice *Device = cDevice::GetDevice(i)) {
+ if (Device->NumProvidedSystems())
+ DrawDevice(Device);
+ }
}
}
@@ -1247,10 +1276,24 @@ void cSkinLCARSDisplayMenu::DrawLiveIndicator(void)
if (lastLiveIndicatorY >= 0)
osd->DrawRectangle(xs12, lastLiveIndicatorY, xs13 - 1, lastLiveIndicatorY + lineHeight - 1, Theme.Color(clrBackground));
if (y >= 0) {
- osd->DrawRectangle(xs12, y, xs12 + lineHeight / 2 - 1, y + lineHeight - 1, frameColor);
- osd->DrawEllipse (xs12 + lineHeight / 2, y, xs13 - 1, y + lineHeight - 1, frameColor, 5);
- if (Transferring)
- osd->DrawBitmap((xs12 + xs13 - bmTransferMode.Width()) / 2, y + (lineHeight - bmTransferMode.Height()) / 2, bmTransferMode, Theme.Color(clrChannelFrameFg), Theme.Color(clrChannelFrameBg));
+ tColor ColorBg = Theme.Color(clrChannelFrameBg);
+ osd->DrawRectangle(xs12, y, xs12 + lineHeight / 2 - 1, y + lineHeight - 1, ColorBg);
+ osd->DrawEllipse (xs12 + lineHeight / 2, y, xs13 - 1, y + lineHeight - 1, ColorBg, 5);
+ if (Transferring) {
+ int w = bmTransferMode.Width();
+ int h = bmTransferMode.Height();
+ int b = w * w + h * h; // the diagonal of the bitmap (squared)
+ int c = lineHeight * lineHeight; // the diameter of the circle (squared)
+ const cBitmap *bm = &bmTransferMode;
+ if (b > c) {
+ // the bitmap doesn't fit, so scale it down:
+ double f = sqrt(double(c) / (2 * b));
+ bm = bmTransferMode.Scaled(f, f);
+ }
+ osd->DrawBitmap((xs12 + xs13 - bm->Width()) / 2, y + (lineHeight - bm->Height()) / 2, *bm, Theme.Color(clrChannelFrameFg), ColorBg);
+ if (bm != &bmTransferMode)
+ delete bm;
+ }
}
lastLiveIndicatorY = y;
lastLiveIndicatorTransferring = Transferring;
@@ -1263,8 +1306,10 @@ void cSkinLCARSDisplayMenu::DrawSignals(void)
if (initial || Now - lastSignalDisplay >= SIGNALDISPLAYDELTA) {
for (int i = 0; i < cDevice::NumDevices(); i++) {
if (const cDevice *Device = cDevice::GetDevice(i)) {
- if (int y = deviceOffset[i])
- DrawDeviceSignal(osd, Device, xs + lineHeight / 2, y, xs11, y + lineHeight, lastSignalStrength[i], lastSignalQuality[i], initial);
+ if (Device->NumProvidedSystems()) {
+ if (int y = deviceOffset[i])
+ DrawDeviceSignal(osd, Device, xs + lineHeight / 2, y, xs11, y + lineHeight, lastSignalStrength[i], lastSignalQuality[i], initial);
+ }
}
}
lastSignalDisplay = Now;
@@ -1772,7 +1817,7 @@ void cSkinLCARSDisplayReplay::SetMessage(eMessageType Type, const char *Text)
{
if (Text) {
osd->SaveRegion(xp06, yp08, xp13 - 1, yp09 - 1);
- osd->DrawText(xp06, yp08, Text, Theme.Color(clrMessageStatusFg + 2 * Type), Theme.Color(clrMessageStatusBg + 2 * Type), cFont::GetFont(fontSml), xp13 - xp06, 0, taCenter);
+ osd->DrawText(xp06, yp08, Text, Theme.Color(clrMessageStatusFg + 2 * Type), Theme.Color(clrMessageStatusBg + 2 * Type), cFont::GetFont(fontSml), xp13 - xp06, yp09 - yp08, taCenter);
}
else
osd->RestoreRegion();
@@ -2060,7 +2105,7 @@ void cSkinLCARSDisplayMessage::SetMessage(eMessageType Type, const char *Text)
osd->DrawRectangle(x0, y0, x1 - 1, y1 - 1, clrTransparent);
osd->DrawEllipse (x0, y0, x1 - 1, y1 - 1, ColorBg, 7);
osd->DrawRectangle(x1, y0, x2 - 1, y1 - 1, ColorBg);
- osd->DrawText(x3, y0, Text, ColorFg, ColorBg, cFont::GetFont(fontOsd), x4 - x3, 0, taCenter);
+ osd->DrawText(x3, y0, Text, ColorFg, ColorBg, cFont::GetFont(fontSml), x4 - x3, y1 - y0, taCenter);
osd->DrawRectangle(x5, y0, x6 - 1, y1 - 1, ColorBg);
osd->DrawRectangle(x6, y0, x7 - 1, y1 - 1, clrTransparent);
osd->DrawEllipse (x6, y0, x7 - 1, y1 - 1, ColorBg, 5);
diff --git a/sources.h b/sources.h
index 6b362e3..516a3ed 100644
--- a/sources.h
+++ b/sources.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: sources.h 2.3 2010/03/07 13:53:11 kls Exp $
+ * $Id: sources.h 2.4 2012/06/17 11:19:23 kls Exp $
*/
#ifndef __SOURCES_H
@@ -33,6 +33,7 @@ public:
int Code(void) const { return code; }
const char *Description(void) const { return description; }
bool Parse(const char *s);
+ static char ToChar(int Code) { return (Code & st_Mask) >> 24; }
static cString ToString(int Code);
static int FromString(const char *s);
static int FromData(eSourceType SourceType, int Position = 0, bool East = false);
diff --git a/timers.c b/timers.c
index 4634c1c..c4f4f7a 100644
--- a/timers.c
+++ b/timers.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: timers.c 2.9 2012/04/25 09:02:03 kls Exp $
+ * $Id: timers.c 2.11 2012/06/09 14:37:24 kls Exp $
*/
#include "timers.h"
@@ -280,7 +280,7 @@ bool cTimer::Parse(const char *s)
free(aux);
aux = NULL;
//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 occurred when the EIT gathering
//XXX was put into a separate thread - don't know why this happens...
//XXX As a cure we copy the original string and add a blank.
//XXX If anybody can shed some light on why sscanf() failes here, I'd love
@@ -829,7 +829,7 @@ static int CompareTimers(const void *a, const void *b)
}
cSortedTimers::cSortedTimers(void)
-:cVector(Timers.Count())
+:cVector<const cTimer *>(Timers.Count())
{
for (const cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer))
Append(Timer);
diff --git a/vdr.c b/vdr.c
index 3fcb675..c075dbe 100644
--- a/vdr.c
+++ b/vdr.c
@@ -22,7 +22,7 @@
*
* The project's page is at http://www.tvdr.de
*
- * $Id: vdr.c 2.36 2012/04/26 09:23:41 kls Exp $
+ * $Id: vdr.c 2.37 2012/06/13 11:28:41 kls Exp $
*/
#include <getopt.h>
@@ -570,7 +570,6 @@ int main(int argc, char *argv[])
int MaxLatencyTime = 0;
bool InhibitEpgScan = false;
bool IsInfoMenu = false;
- bool CheckHasProgramme = false;
cSkin *CurrentSkin = NULL;
// Load plugins:
@@ -761,7 +760,7 @@ int main(int argc, char *argv[])
// Make sure we have a visible programme in case device usage has changed:
if (!EITScanner.Active() && cDevice::PrimaryDevice()->HasDecoder() && !cDevice::PrimaryDevice()->HasProgramme()) {
static time_t lastTime = 0;
- if ((!Menu || CheckHasProgramme) && Now - lastTime > MINCHANNELWAIT) { // !Menu to avoid interfering with the CAM if a CAM menu is open
+ if (!CamMenuActive() && Now - lastTime > MINCHANNELWAIT) { // !CamMenuActive() to avoid interfering with the CAM if a CAM menu is open
cChannel *Channel = Channels.GetByNumber(cDevice::CurrentChannel());
if (Channel && (Channel->Vpid() || Channel->Apid(0) || Channel->Dpid(0))) {
if (cDevice::GetDeviceForTransponder(Channel, LIVEPRIORITY) && Channels.SwitchTo(Channel->Number())) // try to switch to the original channel...
@@ -774,7 +773,6 @@ int main(int argc, char *argv[])
}
lastTime = Now; // don't do this too often
LastTimerChannel = -1;
- CheckHasProgramme = false;
}
}
// Update the OSD size:
@@ -1140,7 +1138,6 @@ int main(int argc, char *argv[])
DELETE_MENU;
cControl::Shutdown();
Menu = new cMenuMain(osRecordings);
- CheckHasProgramme = true; // to have live tv after stopping replay with 'Back'
break;
case osReplay: DELETE_MENU;
cControl::Shutdown();
diff --git a/videodir.c b/videodir.c
index 870b4cb..5f94d33 100644
--- a/videodir.c
+++ b/videodir.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: videodir.c 2.1 2012/04/22 15:03:10 kls Exp $
+ * $Id: videodir.c 2.2 2012/06/10 13:45:21 kls Exp $
*/
#include "videodir.h"
@@ -261,7 +261,7 @@ bool cVideoDiskUsage::HasChanged(int &State)
if (FreeMB != freeMB) {
usedPercent = UsedPercent;
freeMB = FreeMB;
- int MBperMinute = Recordings.MBperMinute();
+ double MBperMinute = Recordings.MBperMinute();
if (MBperMinute <= 0)
MBperMinute = MB_PER_MINUTE;
freeMinutes = int(double(FreeMB) / MBperMinute);