mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Version 1.2.2
- Fixed a bug in channel switching after Left/Right has been pressed (thanks to Michael Walle for reporting this one). - Improved channel switching in case of numerical input by switching as soon as the channel is unique (suggested by Jaakko Hyvätti). - Fixed creating a new channel in the "Channels" menu in case the 'channels.conf' contains ':@nnn' lines with no text (thanks to Guy Roussin for reporting this one). - Changed the behaviour of the '0' key in normal viewing mode so that a channel only qualifies as "previous" if it has been selected for at least 3 seconds (suggested by Thomas Keil). - Now clearing the channel info display when entering numeric keys to switch channels (suggested by Guy Roussin). - Added missing I18N entry for "Ppid" (thanks to Rolf Ahrenberg). - Fixed handling the color buttons in the "Edit channel" menu (thanks to Thomas Keil for reporting this one). - Fixed an occasional "Broken pipe" error in SVDRP connections (thanks to Gerhard Steiner for reporting this one). - Fixed checking CA capabilities with the dvb-kernel driver (thanks to Kenneth Aafløy). - Fixed selecting the device, because sometimes an FTA recording terminated a CA recording (thanks to Emil Naepflein). - Fixed a possible crash in case a VFAT file system is used without compiling VDR with VFAT=1 (thanks to Ernst Fürst for reporting this one). - Now the program uses the values of VIDEODIR and PLUGINDIR defined in Makefile or Make.config as defaults (thanks to Steffen Barszus). - Added the usual menu timeout to the CAM menus.
This commit is contained in:
parent
64ddfca3b0
commit
6c2c3ace8b
25
CONTRIBUTORS
25
CONTRIBUTORS
@ -518,6 +518,7 @@ Gerhard Steiner <steiner@mail.austria.com>
|
|||||||
for fixing resume file handling in case the resume.vdr file can't be written
|
for fixing resume file handling in case the resume.vdr file can't be written
|
||||||
for reporting a problem with newly created timers in case they are not confirmed
|
for reporting a problem with newly created timers in case they are not confirmed
|
||||||
with "Ok"
|
with "Ok"
|
||||||
|
for reporting an occasional "Broken pipe" error in SVDRP connections
|
||||||
|
|
||||||
Jaakko Hyvätti <jaakko@hyvatti.iki.fi>
|
Jaakko Hyvätti <jaakko@hyvatti.iki.fi>
|
||||||
for translating OSD texts to the Finnish language
|
for translating OSD texts to the Finnish language
|
||||||
@ -525,12 +526,16 @@ Jaakko Hyv
|
|||||||
for fixing recording overlapping timers on the same channel in case
|
for fixing recording overlapping timers on the same channel in case
|
||||||
DO_REC_AND_PLAY_ON_PRIMARY_DEVICE and/or DO_MULTIPLE_RECORDINGS is not defined
|
DO_REC_AND_PLAY_ON_PRIMARY_DEVICE and/or DO_MULTIPLE_RECORDINGS is not defined
|
||||||
for fixing the minimum lifespan of deleted recordings
|
for fixing the minimum lifespan of deleted recordings
|
||||||
|
for suggesting to improve channel switching in case of numerical input by switching
|
||||||
|
as soon as the channel is unique
|
||||||
|
|
||||||
Dennis Noordsij <dennis.noordsij@wiral.com>
|
Dennis Noordsij <dennis.noordsij@wiral.com>
|
||||||
for reporting a small glitch when switching channels
|
for reporting a small glitch when switching channels
|
||||||
|
|
||||||
Steffen Barszus <st_barszus@gmx.de>
|
Steffen Barszus <st_barszus@gmx.de>
|
||||||
for reporting a bug in switching audio tracks in 'Transfer Mode' on the primary DVB device
|
for reporting a bug in switching audio tracks in 'Transfer Mode' on the primary DVB device
|
||||||
|
for making the program use the values of VIDEODIR and PLUGINDIR defined in Makefile
|
||||||
|
or Makefile.config as defaults
|
||||||
|
|
||||||
Peter Seyringer <e9425234@student.tuwien.ac.at>
|
Peter Seyringer <e9425234@student.tuwien.ac.at>
|
||||||
for reporting a bug in saving the polarization parameter of channels that have a
|
for reporting a bug in saving the polarization parameter of channels that have a
|
||||||
@ -550,6 +555,8 @@ Guy Roussin <guy.roussin@teledetection.fr>
|
|||||||
for suggesting not to display channel group delimiters without text
|
for suggesting not to display channel group delimiters without text
|
||||||
for reporting a bug in handling channels in the "Channels" menu in case there are
|
for reporting a bug in handling channels in the "Channels" menu in case there are
|
||||||
':@nnn' group separators without names
|
':@nnn' group separators without names
|
||||||
|
for suggesting to clear the channel info display when entering numeric keys to
|
||||||
|
switch channels
|
||||||
|
|
||||||
Georg Hitsch <georg@hitsch.at>
|
Georg Hitsch <georg@hitsch.at>
|
||||||
for his help in keeping 'channels.conf' up to date
|
for his help in keeping 'channels.conf' up to date
|
||||||
@ -561,6 +568,8 @@ Clemens Kirchgatterer <clemens@thf.ath.cx>
|
|||||||
Emil Naepflein <Emil.Naepflein@philosys.de>
|
Emil Naepflein <Emil.Naepflein@philosys.de>
|
||||||
for suggesting to take an active SVDRP connection into account when doing shutdown or
|
for suggesting to take an active SVDRP connection into account when doing shutdown or
|
||||||
housekeeping
|
housekeeping
|
||||||
|
for fixing selecting the device, because sometimes an FTA recording terminated a
|
||||||
|
CA recording
|
||||||
|
|
||||||
Gerald Berwolf <genka@genka.de>
|
Gerald Berwolf <genka@genka.de>
|
||||||
for suggesting to deactivate some templates in tools.h in case some plugin needs to
|
for suggesting to deactivate some templates in tools.h in case some plugin needs to
|
||||||
@ -719,3 +728,19 @@ Jon Burgess <mplayer@jburgess.uklinux.net>
|
|||||||
|
|
||||||
Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
|
Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
|
||||||
for reporting a crash when cancelling a newly created timer
|
for reporting a crash when cancelling a newly created timer
|
||||||
|
|
||||||
|
Michael Walle <michael.walle@web.de>
|
||||||
|
for reporting a bug in channel switching after Left/Right has been pressed
|
||||||
|
|
||||||
|
Thomas Keil <tk@commedia-group.com>
|
||||||
|
for suggesting to change the behaviour of the '0' key in normal viewing mode so
|
||||||
|
that a channel only qualifies as "previous" if it has been selected for at least
|
||||||
|
3 seconds
|
||||||
|
for reporting a bug in handling the color buttons in the "Edit channel" menu
|
||||||
|
|
||||||
|
Kenneth Aafløy <ke-aa@frisurf.no>
|
||||||
|
for fixing checking CA capabilities with the dvb-kernel driver
|
||||||
|
|
||||||
|
Ernst Fürst <ernstfuerst@swissonline.ch>
|
||||||
|
for reporting a crash in case a VFAT file system is used without compiling VDR
|
||||||
|
with VFAT=1
|
||||||
|
29
HISTORY
29
HISTORY
@ -2253,3 +2253,32 @@ Video Disk Recorder Revision History
|
|||||||
channel (thanks to Malcolm Caldwell for reporting this one).
|
channel (thanks to Malcolm Caldwell for reporting this one).
|
||||||
- Some corrections to the Finnish OSD texts (thanks to Niko Tarnanen and Rolf
|
- Some corrections to the Finnish OSD texts (thanks to Niko Tarnanen and Rolf
|
||||||
Ahrenberg).
|
Ahrenberg).
|
||||||
|
|
||||||
|
2003-08-03: Version 1.2.2
|
||||||
|
|
||||||
|
- Fixed a bug in channel switching after Left/Right has been pressed (thanks to
|
||||||
|
Michael Walle for reporting this one).
|
||||||
|
- Improved channel switching in case of numerical input by switching as soon as
|
||||||
|
the channel is unique (suggested by Jaakko Hyvätti).
|
||||||
|
- Fixed creating a new channel in the "Channels" menu in case the 'channels.conf'
|
||||||
|
contains ':@nnn' lines with no text (thanks to Guy Roussin for reporting this
|
||||||
|
one).
|
||||||
|
- Changed the behaviour of the '0' key in normal viewing mode so that a channel
|
||||||
|
only qualifies as "previous" if it has been selected for at least 3 seconds
|
||||||
|
(suggested by Thomas Keil).
|
||||||
|
- Now clearing the channel info display when entering numeric keys to switch
|
||||||
|
channels (suggested by Guy Roussin).
|
||||||
|
- Added missing I18N entry for "Ppid" (thanks to Rolf Ahrenberg).
|
||||||
|
- Fixed handling the color buttons in the "Edit channel" menu (thanks to Thomas
|
||||||
|
Keil for reporting this one).
|
||||||
|
- Fixed an occasional "Broken pipe" error in SVDRP connections (thanks to Gerhard
|
||||||
|
Steiner for reporting this one).
|
||||||
|
- Fixed checking CA capabilities with the dvb-kernel driver (thanks to Kenneth
|
||||||
|
Aafløy).
|
||||||
|
- Fixed selecting the device, because sometimes an FTA recording terminated a
|
||||||
|
CA recording (thanks to Emil Naepflein).
|
||||||
|
- Fixed a possible crash in case a VFAT file system is used without compiling VDR
|
||||||
|
with VFAT=1 (thanks to Ernst Fürst for reporting this one).
|
||||||
|
- Now the program uses the values of VIDEODIR and PLUGINDIR defined in Makefile
|
||||||
|
or Makefile.config as defaults (thanks to Steffen Barszus).
|
||||||
|
- Added the usual menu timeout to the CAM menus.
|
||||||
|
3
MANUAL
3
MANUAL
@ -154,7 +154,8 @@ Version 1.2
|
|||||||
menu) by pressing the "Blue" button.
|
menu) by pressing the "Blue" button.
|
||||||
|
|
||||||
Pressing the '0' key in normal viewing mode toggles between the current and
|
Pressing the '0' key in normal viewing mode toggles between the current and
|
||||||
the previous channel.
|
the previous channel. A channel is considered "previous" if it has been
|
||||||
|
selected for at least 3 seconds.
|
||||||
|
|
||||||
After switching to a different channel the channel number and name, as well
|
After switching to a different channel the channel number and name, as well
|
||||||
as the current time are displayed at the top of the screen. If available, the
|
as the current time are displayed at the top of the screen. If available, the
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: Make.config.template 1.1 2002/11/01 14:05:36 kls Exp $
|
# $Id: Make.config.template 1.2 2003/08/02 14:25:53 kls Exp $
|
||||||
|
|
||||||
### The C compiler and options:
|
### The C compiler and options:
|
||||||
|
|
||||||
@ -22,4 +22,5 @@ DVBDIR = ../DVB
|
|||||||
MANDIR = /usr/local/man
|
MANDIR = /usr/local/man
|
||||||
BINDIR = /usr/local/bin
|
BINDIR = /usr/local/bin
|
||||||
|
|
||||||
|
PLUGINDIR= ./PLUGINS
|
||||||
VIDEODIR = /video
|
VIDEODIR = /video
|
||||||
|
5
Makefile
5
Makefile
@ -4,7 +4,7 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: Makefile 1.56 2003/01/06 12:28:09 kls Exp $
|
# $Id: Makefile 1.57 2003/08/02 14:27:21 kls Exp $
|
||||||
|
|
||||||
.DELETE_ON_ERROR:
|
.DELETE_ON_ERROR:
|
||||||
|
|
||||||
@ -49,6 +49,9 @@ DEFINES += -DREMOTE_$(REMOTE)
|
|||||||
|
|
||||||
DEFINES += -D_GNU_SOURCE
|
DEFINES += -D_GNU_SOURCE
|
||||||
|
|
||||||
|
DEFINES += -DVIDEODIR=\"$(VIDEODIR)\"
|
||||||
|
DEFINES += -DPLUGINDIR=\"$(PLUGINDIR)/lib\"
|
||||||
|
|
||||||
ifdef DEBUG_OSD
|
ifdef DEBUG_OSD
|
||||||
DEFINES += -DDEBUG_OSD
|
DEFINES += -DDEBUG_OSD
|
||||||
NCURSESLIB = -lncurses
|
NCURSESLIB = -lncurses
|
||||||
|
@ -85,9 +85,9 @@ Premiere Direkt 3D:12070:h:S19.2E:27500:511:512:0:101:212:0:0:0
|
|||||||
:PW Erotic
|
:PW Erotic
|
||||||
Beate-Uhse.TV:12071:h:S19.2E:27500:1023:1024:0:101:21:0:0:0
|
Beate-Uhse.TV:12071:h:S19.2E:27500:1023:1024:0:101:21:0:0:0
|
||||||
Premiere Erotik 1:12031:h:S19.2E:27500:1279:1280:2:101:513:0:0:0
|
Premiere Erotik 1:12031:h:S19.2E:27500:1279:1280:2:101:513:0:0:0
|
||||||
Premiere Erotik 2:12070:h:0:27500:1535:1536:0:101:778:0:0:0
|
Premiere Erotik 2:12070:h:S19.2E:27500:1535:1536:0:101:778:0:0:0
|
||||||
Premiere Erotik 3:12070:h:0:27500:1791:1792:0:101:779:0:0:0
|
Premiere Erotik 3:12070:h:S19.2E:27500:1791:1792:0:101:779:0:0:0
|
||||||
Premiere Erotik 4:12070:h:0:27500:3583:3584:0:101:780:0:0:0
|
Premiere Erotik 4:12070:h:S19.2E:27500:3583:3584:0:101:780:0:0:0
|
||||||
:Sportsworld
|
:Sportsworld
|
||||||
Premiere Sport 1:11720:h:S19.2E:27500:255:256,257:0:101:17:0:0:0
|
Premiere Sport 1:11720:h:S19.2E:27500:255:256,257:0:101:17:0:0:0
|
||||||
Premiere Sport 2:12031:h:S19.2E:27500:3839:3840:0:101:27:0:0:0
|
Premiere Sport 2:12031:h:S19.2E:27500:3839:3840:0:101:27:0:0:0
|
||||||
|
4
ci.c
4
ci.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: ci.c 1.15 2003/05/25 11:45:11 kls Exp $
|
* $Id: ci.c 1.16 2003/08/02 10:00:01 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* XXX TODO
|
/* XXX TODO
|
||||||
@ -1314,7 +1314,7 @@ cCiHandler *cCiHandler::CreateCiHandler(const char *FileName)
|
|||||||
int NumSlots = Caps.slot_num;
|
int NumSlots = Caps.slot_num;
|
||||||
if (NumSlots > 0) {
|
if (NumSlots > 0) {
|
||||||
//XXX dsyslog("CAM: found %d CAM slots", NumSlots); // TODO let's do this only once we can be sure that there _really_ is a CAM adapter!
|
//XXX dsyslog("CAM: found %d CAM slots", NumSlots); // TODO let's do this only once we can be sure that there _really_ is a CAM adapter!
|
||||||
if (Caps.slot_type == CA_CI_LINK)
|
if ((Caps.slot_type & CA_CI_LINK) != 0)
|
||||||
return new cCiHandler(fd_ca, NumSlots);
|
return new cCiHandler(fd_ca, NumSlots);
|
||||||
else
|
else
|
||||||
isyslog("CAM doesn't support link layer interface");
|
isyslog("CAM doesn't support link layer interface");
|
||||||
|
6
config.h
6
config.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.h 1.164 2003/06/06 12:28:20 kls Exp $
|
* $Id: config.h 1.165 2003/06/12 20:37:14 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
#ifndef __CONFIG_H
|
||||||
@ -19,8 +19,8 @@
|
|||||||
#include "device.h"
|
#include "device.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
#define VDRVERSION "1.2.1"
|
#define VDRVERSION "1.2.2"
|
||||||
#define VDRVERSNUM 10201 // Version * 10000 + Major * 100 + Minor
|
#define VDRVERSNUM 10202 // Version * 10000 + Major * 100 + Minor
|
||||||
|
|
||||||
#define MAXPRIORITY 99
|
#define MAXPRIORITY 99
|
||||||
#define MAXLIFETIME 99
|
#define MAXLIFETIME 99
|
||||||
|
39
device.c
39
device.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.c 1.45 2003/06/08 09:19:59 kls Exp $
|
* $Id: device.c 1.46 2003/08/02 11:44:28 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
@ -142,23 +142,34 @@ cDevice *cDevice::GetDevice(int Index)
|
|||||||
cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers)
|
cDevice *cDevice::GetDevice(const cChannel *Channel, int Priority, bool *NeedsDetachReceivers)
|
||||||
{
|
{
|
||||||
cDevice *d = NULL;
|
cDevice *d = NULL;
|
||||||
|
int select = 7, pri;
|
||||||
|
|
||||||
for (int i = 0; i < numDevices; i++) {
|
for (int i = 0; i < numDevices; i++) {
|
||||||
bool ndr;
|
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 basicly able to do the job
|
||||||
&& (!d // we don't have a device yet, or...
|
if (device[i]->Receiving() && !ndr)
|
||||||
|| (device[i]->Receiving() && !ndr) // ...this one is already receiving and allows additional receivers, or...
|
pri = 0; // receiving and allows additional receivers
|
||||||
|| !d->Receiving() // ...the one we have is not receiving...
|
else if (d && !device[i]->Receiving() && device[i]->ProvidesCa(Channel->Ca()) < d->ProvidesCa(Channel->Ca()))
|
||||||
&& (device[i]->Priority() < d->Priority() // ...this one has an even lower Priority, or...
|
pri = 1; // free and fewer Ca's
|
||||||
|| device[i]->Priority() == d->Priority() // ...same Priority...
|
else if (!device[i]->Receiving() && !device[i]->IsPrimaryDevice())
|
||||||
&& device[i]->ProvidesCa(Channel->Ca()) < d->ProvidesCa(Channel->Ca()) // ...but this one provides fewer Ca values
|
pri = 2; // free and not the primary device
|
||||||
)
|
else if (!device[i]->Receiving())
|
||||||
)
|
pri = 3; // free
|
||||||
) {
|
else if (d && device[i]->Priority() < d->Priority())
|
||||||
d = device[i];
|
pri = 4; // receiving but priority is lower
|
||||||
if (NeedsDetachReceivers)
|
else if (d && device[i]->Priority() == d->Priority() && device[i]->ProvidesCa(Channel->Ca()) < d->ProvidesCa(Channel->Ca()))
|
||||||
*NeedsDetachReceivers = ndr;
|
pri = 5; // receiving with same priority but fewer Ca's
|
||||||
|
else
|
||||||
|
pri = 6; // all others
|
||||||
|
if (pri < select) {
|
||||||
|
select = pri;
|
||||||
|
d = device[i];
|
||||||
|
if (NeedsDetachReceivers)
|
||||||
|
*NeedsDetachReceivers = ndr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*XXX+ too complex with multiple recordings per device
|
/*XXX+ too complex with multiple recordings per device
|
||||||
if (!d && Ca > MAXDEVICES) {
|
if (!d && Ca > MAXDEVICES) {
|
||||||
// We didn't find one the easy way, so now we have to try harder:
|
// We didn't find one the easy way, so now we have to try harder:
|
||||||
|
19
i18n.c
19
i18n.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: i18n.c 1.128 2003/06/09 09:49:29 kls Exp $
|
* $Id: i18n.c 1.129 2003/07/13 15:03:07 kls Exp $
|
||||||
*
|
*
|
||||||
* Translations provided by:
|
* Translations provided by:
|
||||||
*
|
*
|
||||||
@ -1044,6 +1044,23 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"Vpid",
|
"Vpid",
|
||||||
"PID Vídeo",
|
"PID Vídeo",
|
||||||
},
|
},
|
||||||
|
{ "Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Aikatieto PID",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
"Ppid",
|
||||||
|
},
|
||||||
{ "Apid1",
|
{ "Apid1",
|
||||||
"Apid1",
|
"Apid1",
|
||||||
"Apid1",
|
"Apid1",
|
||||||
|
64
menu.c
64
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 1.256 2003/06/07 12:31:57 kls Exp $
|
* $Id: menu.c 1.264 2003/08/03 09:38:37 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -713,6 +713,8 @@ void cMenuChannels::Propagate(void)
|
|||||||
|
|
||||||
eOSState cMenuChannels::Switch(void)
|
eOSState cMenuChannels::Switch(void)
|
||||||
{
|
{
|
||||||
|
if (HasSubMenu())
|
||||||
|
return osContinue;
|
||||||
cChannel *ch = GetChannel(Current());
|
cChannel *ch = GetChannel(Current());
|
||||||
if (ch)
|
if (ch)
|
||||||
cDevice::PrimaryDevice()->SwitchChannel(ch, true);
|
cDevice::PrimaryDevice()->SwitchChannel(ch, true);
|
||||||
@ -733,12 +735,12 @@ eOSState cMenuChannels::New(void)
|
|||||||
{
|
{
|
||||||
if (HasSubMenu())
|
if (HasSubMenu())
|
||||||
return osContinue;
|
return osContinue;
|
||||||
return AddSubMenu(new cMenuEditChannel(Channels.Get(Current()), true));
|
return AddSubMenu(new cMenuEditChannel(GetChannel(Current()), true));
|
||||||
}
|
}
|
||||||
|
|
||||||
eOSState cMenuChannels::Delete(void)
|
eOSState cMenuChannels::Delete(void)
|
||||||
{
|
{
|
||||||
if (Count() > 0) {
|
if (!HasSubMenu() && Count() > 0) {
|
||||||
int Index = Current();
|
int Index = Current();
|
||||||
cChannel *channel = GetChannel(Current());
|
cChannel *channel = GetChannel(Current());
|
||||||
int DeletedChannel = channel->Number();
|
int DeletedChannel = channel->Number();
|
||||||
@ -793,7 +795,9 @@ eOSState cMenuChannels::ProcessKey(eKeys Key)
|
|||||||
case kRed: return Edit();
|
case kRed: return Edit();
|
||||||
case kGreen: return New();
|
case kGreen: return New();
|
||||||
case kYellow: return Delete();
|
case kYellow: return Delete();
|
||||||
case kBlue: Mark(); break;
|
case kBlue: if (!HasSubMenu())
|
||||||
|
Mark();
|
||||||
|
break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1558,6 +1562,7 @@ cMenuCam::cMenuCam(cCiMenu *CiMenu)
|
|||||||
Add(new cOsdItem(ciMenu->BottomText()));
|
Add(new cOsdItem(ciMenu->BottomText()));
|
||||||
Display();
|
Display();
|
||||||
dsyslog("CAM: Menu - %s", ciMenu->TitleText());
|
dsyslog("CAM: Menu - %s", ciMenu->TitleText());
|
||||||
|
lastActivity = time(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
cMenuCam::~cMenuCam()
|
cMenuCam::~cMenuCam()
|
||||||
@ -1586,6 +1591,10 @@ eOSState cMenuCam::ProcessKey(eKeys Key)
|
|||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Key != kNone)
|
||||||
|
lastActivity = time(NULL);
|
||||||
|
else if (time(NULL) - lastActivity > MENUTIMEOUT)
|
||||||
|
state = osEnd;
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1603,6 +1612,7 @@ cMenuCamEnquiry::cMenuCamEnquiry(cCiEnquiry *CiEnquiry)
|
|||||||
SetTitle(ciEnquiry->Text() ? ciEnquiry->Text() : "CAM");
|
SetTitle(ciEnquiry->Text() ? ciEnquiry->Text() : "CAM");
|
||||||
Add(new cMenuEditNumItem("Input", input, Length, ciEnquiry->Blind()));
|
Add(new cMenuEditNumItem("Input", input, Length, ciEnquiry->Blind()));
|
||||||
Display();
|
Display();
|
||||||
|
lastActivity = time(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
cMenuCamEnquiry::~cMenuCamEnquiry()
|
cMenuCamEnquiry::~cMenuCamEnquiry()
|
||||||
@ -1631,6 +1641,10 @@ eOSState cMenuCamEnquiry::ProcessKey(eKeys Key)
|
|||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Key != kNone)
|
||||||
|
lastActivity = time(NULL);
|
||||||
|
else if (time(NULL) - lastActivity > MENUTIMEOUT)
|
||||||
|
state = osEnd;
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2740,8 +2754,28 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key)
|
|||||||
number = number * 10 + Key - k0;
|
number = number * 10 + Key - k0;
|
||||||
if (number > 0) {
|
if (number > 0) {
|
||||||
cChannel *channel = Channels.GetByNumber(number);
|
cChannel *channel = Channels.GetByNumber(number);
|
||||||
|
Interface->Clear();
|
||||||
|
withInfo = false;
|
||||||
DisplayChannel(channel);
|
DisplayChannel(channel);
|
||||||
lastTime = time_ms();
|
lastTime = time_ms();
|
||||||
|
// Lets see if there can be any useful further input:
|
||||||
|
int n = channel ? number * 10 : 0;
|
||||||
|
while (channel && (channel = Channels.Next(channel)) != NULL) {
|
||||||
|
if (!channel->GroupSep()) {
|
||||||
|
if (n <= channel->Number() && channel->Number() <= n + 9) {
|
||||||
|
n = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (channel->Number() > n)
|
||||||
|
n *= 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (n > 0) {
|
||||||
|
// This channel is the only one that fits the input, so let's take it right away:
|
||||||
|
Interface->Flush(); // makes sure the user sees his last input
|
||||||
|
Channels.SwitchTo(number);
|
||||||
|
return osEnd;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -2783,6 +2817,7 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key)
|
|||||||
case kChanUp:
|
case kChanUp:
|
||||||
case kChanDn|k_Repeat:
|
case kChanDn|k_Repeat:
|
||||||
case kChanDn:
|
case kChanDn:
|
||||||
|
group = -1;
|
||||||
Refresh();
|
Refresh();
|
||||||
break;
|
break;
|
||||||
case kNone:
|
case kNone:
|
||||||
@ -2968,16 +3003,19 @@ cRecordControl::cRecordControl(cDevice *Device, cTimer *Timer, bool Pause)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cRecordingUserCommand::InvokeCommand(RUC_BEFORERECORDING, fileName);
|
cRecordingUserCommand::InvokeCommand(RUC_BEFORERECORDING, fileName);
|
||||||
const cChannel *ch = timer->Channel();
|
isyslog("record %s", fileName);
|
||||||
recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2());
|
if (MakeDirs(fileName, true)) {
|
||||||
if (device->AttachReceiver(recorder)) {
|
const cChannel *ch = timer->Channel();
|
||||||
Recording.WriteSummary();
|
recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2());
|
||||||
cStatus::MsgRecording(device, Recording.Name());
|
if (device->AttachReceiver(recorder)) {
|
||||||
if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo()
|
Recording.WriteSummary();
|
||||||
cReplayControl::SetRecording(fileName, Recording.Name());
|
cStatus::MsgRecording(device, Recording.Name());
|
||||||
|
if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo()
|
||||||
|
cReplayControl::SetRecording(fileName, Recording.Name());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DELETENULL(recorder);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
DELETENULL(recorder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cRecordControl::~cRecordControl()
|
cRecordControl::~cRecordControl()
|
||||||
|
4
menu.h
4
menu.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.h 1.56 2003/05/24 16:35:52 kls Exp $
|
* $Id: menu.h 1.57 2003/08/03 09:37:18 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __MENU_H
|
#ifndef __MENU_H
|
||||||
@ -62,6 +62,7 @@ public:
|
|||||||
class cMenuCam : public cOsdMenu {
|
class cMenuCam : public cOsdMenu {
|
||||||
private:
|
private:
|
||||||
cCiMenu *ciMenu;
|
cCiMenu *ciMenu;
|
||||||
|
time_t lastActivity;
|
||||||
bool selected;
|
bool selected;
|
||||||
eOSState Select(void);
|
eOSState Select(void);
|
||||||
public:
|
public:
|
||||||
@ -73,6 +74,7 @@ public:
|
|||||||
class cMenuCamEnquiry : public cOsdMenu {
|
class cMenuCamEnquiry : public cOsdMenu {
|
||||||
private:
|
private:
|
||||||
cCiEnquiry *ciEnquiry;
|
cCiEnquiry *ciEnquiry;
|
||||||
|
time_t lastActivity;
|
||||||
char *input;
|
char *input;
|
||||||
bool replied;
|
bool replied;
|
||||||
eOSState Reply(void);
|
eOSState Reply(void);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recorder.c 1.6 2003/05/16 13:33:04 kls Exp $
|
* $Id: recorder.c 1.7 2003/08/02 13:01:19 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@ -34,12 +34,6 @@ cRecorder::cRecorder(const char *FileName, int Ca, int Priority, int VPid, int A
|
|||||||
fileSize = 0;
|
fileSize = 0;
|
||||||
active = false;
|
active = false;
|
||||||
lastDiskSpaceCheck = time(NULL);
|
lastDiskSpaceCheck = time(NULL);
|
||||||
isyslog("record %s", FileName);
|
|
||||||
|
|
||||||
// Create directories if necessary:
|
|
||||||
|
|
||||||
if (!MakeDirs(FileName, true))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Make sure the disk is up and running:
|
// Make sure the disk is up and running:
|
||||||
|
|
||||||
|
4
svdrp.c
4
svdrp.c
@ -10,7 +10,7 @@
|
|||||||
* and interact with the Video Disk Recorder - or write a full featured
|
* and interact with the Video Disk Recorder - or write a full featured
|
||||||
* graphical interface that sits on top of an SVDRP connection.
|
* graphical interface that sits on top of an SVDRP connection.
|
||||||
*
|
*
|
||||||
* $Id: svdrp.c 1.52 2003/06/06 13:30:52 kls Exp $
|
* $Id: svdrp.c 1.53 2003/07/26 10:57:33 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "svdrp.h"
|
#include "svdrp.h"
|
||||||
@ -1100,7 +1100,7 @@ bool cSVDRP::Process(void)
|
|||||||
}
|
}
|
||||||
lastActivity = time(NULL);
|
lastActivity = time(NULL);
|
||||||
}
|
}
|
||||||
else if (r <= 0) {
|
else if (r < 0) {
|
||||||
isyslog("lost connection to SVDRP client");
|
isyslog("lost connection to SVDRP client");
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
14
vdr.c
14
vdr.c
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.cadsoft.de/vdr
|
* The project's page is at http://www.cadsoft.de/vdr
|
||||||
*
|
*
|
||||||
* $Id: vdr.c 1.160 2003/05/29 12:27:26 kls Exp $
|
* $Id: vdr.c 1.162 2003/08/02 14:01:32 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
@ -57,6 +57,7 @@
|
|||||||
#define ACTIVITYTIMEOUT 60 // seconds before starting housekeeping
|
#define ACTIVITYTIMEOUT 60 // seconds before starting housekeeping
|
||||||
#define SHUTDOWNWAIT 300 // seconds to wait in user prompt before automatic shutdown
|
#define SHUTDOWNWAIT 300 // seconds to wait in user prompt before automatic shutdown
|
||||||
#define MANUALSTART 600 // seconds the next timer must be in the future to assume manual start
|
#define MANUALSTART 600 // seconds the next timer must be in the future to assume manual start
|
||||||
|
#define ZAPTIMEOUT 3 // seconds until a channel counts as "previous" for switching with '0'
|
||||||
|
|
||||||
static int Interrupted = 0;
|
static int Interrupted = 0;
|
||||||
|
|
||||||
@ -92,7 +93,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
#define DEFAULTSVDRPPORT 2001
|
#define DEFAULTSVDRPPORT 2001
|
||||||
#define DEFAULTWATCHDOG 0 // seconds
|
#define DEFAULTWATCHDOG 0 // seconds
|
||||||
#define DEFAULTPLUGINDIR "./PLUGINS/lib"
|
#define DEFAULTPLUGINDIR PLUGINDIR
|
||||||
|
|
||||||
int SVDRPport = DEFAULTSVDRPPORT;
|
int SVDRPport = DEFAULTSVDRPPORT;
|
||||||
const char *AudioCommand = NULL;
|
const char *AudioCommand = NULL;
|
||||||
@ -455,6 +456,8 @@ int main(int argc, char *argv[])
|
|||||||
int LastChannel = -1;
|
int LastChannel = -1;
|
||||||
int LastTimerChannel = -1;
|
int LastTimerChannel = -1;
|
||||||
int PreviousChannel = cDevice::CurrentChannel();
|
int PreviousChannel = cDevice::CurrentChannel();
|
||||||
|
int LastLastChannel = PreviousChannel;
|
||||||
|
time_t LastChannelChanged = time(NULL);
|
||||||
time_t LastActivity = 0;
|
time_t LastActivity = 0;
|
||||||
int MaxLatencyTime = 0;
|
int MaxLatencyTime = 0;
|
||||||
bool ForceShutdown = false;
|
bool ForceShutdown = false;
|
||||||
@ -492,9 +495,12 @@ int main(int argc, char *argv[])
|
|||||||
if (!EITScanner.Active() && cDevice::CurrentChannel() != LastChannel) {
|
if (!EITScanner.Active() && cDevice::CurrentChannel() != LastChannel) {
|
||||||
if (!Menu)
|
if (!Menu)
|
||||||
Menu = Temp = new cDisplayChannel(cDevice::CurrentChannel(), LastChannel > 0);
|
Menu = Temp = new cDisplayChannel(cDevice::CurrentChannel(), LastChannel > 0);
|
||||||
if (LastChannel > 0)
|
|
||||||
PreviousChannel = LastChannel;
|
|
||||||
LastChannel = cDevice::CurrentChannel();
|
LastChannel = cDevice::CurrentChannel();
|
||||||
|
LastChannelChanged = time(NULL);
|
||||||
|
}
|
||||||
|
if (LastLastChannel != LastChannel && time(NULL) - LastChannelChanged >= ZAPTIMEOUT) {
|
||||||
|
PreviousChannel = LastLastChannel;
|
||||||
|
LastLastChannel = LastChannel;
|
||||||
}
|
}
|
||||||
// Timers and Recordings:
|
// Timers and Recordings:
|
||||||
if (!Timers.BeingEdited()) {
|
if (!Timers.BeingEdited()) {
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: videodir.c 1.9 2002/08/11 13:31:02 kls Exp $
|
* $Id: videodir.c 1.10 2003/08/02 13:43:28 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "videodir.h"
|
#include "videodir.h"
|
||||||
@ -18,7 +18,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
const char *VideoDirectory = "/video";
|
const char *VideoDirectory = VIDEODIR;
|
||||||
|
|
||||||
class cVideoDirectory {
|
class cVideoDirectory {
|
||||||
private:
|
private:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user