En/na Luca Olivetti ha escrit:
En/na lukkinosat ha escrit:
--- Luca Olivetti <luca@xxxxxxxxxxx> ha scritto:
I made a crude hack: I assume that the epg is in
ISO-8859-15, so if
SystemCharacterTable is different than iso-8859-15,
I call iconv to
convert the file in cLoadepgOsd::SaveEpg, just
before the LoadFile label:
[CUT]
Hi
The epg is ISO-8859-15. I must still try with vdr
version 1.5.x.
Well, with the previous patch, the iconv hack and using
cDevice::PrimaryDevice() to tune to the epg channel, everything is
working fine here.
For a more general solution I suppose I'll have to do the same I did in
my actuator plugin (use cDevice::PrimaryDevice() only if the selected
device is ActualDevice and provides the needed channel).
I'll look into it and post a revised patch.
Here it is. It should work for 1.4.x as well as for 1.5.x (but I only
tested it with 1.5.6 and a single dvb card, so YMMV).
Bye
--
Luca
Només a loadepg-0.1.11: .dependencies
diff --unified --recursive --exclude '*.o' --exclude '*.so' loadepg-0.1.11.orig/loadepg.c loadepg-0.1.11/loadepg.c
--- loadepg-0.1.11.orig/loadepg.c 2007-07-26 18:32:05.000000000 +0200
+++ loadepg-0.1.11/loadepg.c 2007-07-30 14:54:09.468527000 +0200
@@ -936,6 +936,10 @@
Timeout = 0;
LoadepgConfig.OldUpdateChannels = Setup.UpdateChannels;
Setup.UpdateChannels = 0;
+ EpgDevice=NULL;
+ for (int i=0; i<cDevice::NumDevices() && EpgDevice==NULL; i++)
+ if (cDevice::GetDevice(i)->CardIndex()==LoadepgConfig.DeviceNumber -1)
+ EpgDevice=cDevice::GetDevice(i);
}
cLoadepgOsd::~cLoadepgOsd( void )
@@ -947,7 +951,7 @@
Setup.UpdateChannels = LoadepgConfig.OldUpdateChannels;
if( Filter )
{
- cDevice::GetDevice( LoadepgConfig.DeviceNumber - 1 )->Detach( Filter );
+ EpgDevice->Detach( Filter );
delete Filter;
}
if( Osd )
@@ -967,7 +971,7 @@
if( SwitchToEpgChannel() )
{
Filter = new cLoadepgFilter();
- cDevice::GetDevice( LoadepgConfig.DeviceNumber - 1 )->AttachFilter( Filter );
+ EpgDevice->AttachFilter( Filter );
}
else
{
@@ -1009,6 +1013,7 @@
void cLoadepgOsd::Show( void )
{
+ if ( EpgDevice == NULL) return;
Osd = cOsdProvider::NewOsd( 160, 88 );
if( Osd )
{
@@ -1026,7 +1031,8 @@
bool cLoadepgOsd::SaveOldChannel( void )
{
- OldChannel = Channels.GetByNumber( cDevice::GetDevice( LoadepgConfig.DeviceNumber - 1 )->CurrentChannel() );
+ if (EpgDevice == NULL) return false;
+ OldChannel = Channels.GetByNumber( EpgDevice->CurrentChannel() );
if( OldChannel )
{
return true;
@@ -1038,7 +1044,8 @@
{
if( OldChannel )
{
- cDevice::GetDevice( LoadepgConfig.DeviceNumber - 1 )->SwitchChannel( OldChannel, true );
+ if (UsingPrimaryDevice) cDevice::PrimaryDevice()->SwitchChannel( OldChannel, true);
+ else EpgDevice->SwitchChannel( OldChannel, false );
}
}
@@ -1055,9 +1062,19 @@
*EpgChannel = *OldChannel;
sscanf( EpgProviderValue1[MenuItem], "%[^:]:%[^:]:%[^:]:%[^:]:%[^:]", ProviderName, Frequency, Polarization, SourceName, SymbolRate );
EpgChannel->cChannel::SetSatTransponderData( cSource::FromString( SourceName ), atoi( Frequency ), Polarization[0], atoi( SymbolRate ), FEC_AUTO );
- cDevice::GetDevice( LoadepgConfig.DeviceNumber - 1 )->SwitchChannel( EpgChannel, true );
+ if (EpgDevice==cDevice::ActualDevice() && cDevice::GetDevice(EpgChannel,0
+ #if APIVERSNUM >= 10500
+ ,true
+ #endif
+ ) == EpgDevice) {
+ cDevice::PrimaryDevice()->SwitchChannel( EpgChannel, true );
+ UsingPrimaryDevice = true;
+ } else {
+ EpgDevice->SwitchChannel( EpgChannel, false );
+ UsingPrimaryDevice = false;
+ }
usleep( 2000000 );
- if( cDevice::GetDevice( LoadepgConfig.DeviceNumber - 1 )->HasLock() )
+ if( EpgDevice->HasLock() )
{
return true;
}
@@ -1071,6 +1088,10 @@
eOSState cLoadepgOsd::ProcessKey( eKeys Key )
{
+ if (EpgDevice == NULL ) {
+ Skins.Message(mtError,tr("Card not available"));
+ return osEnd;
+ }
eOSState state = cOsdObject::ProcessKey( Key );
StatusKey = 0;
if( state == osUnknown )
@@ -1259,6 +1280,18 @@
BeginProgramId = BeginProgramId + ListEpgPrograms[ChannelId+1];
}
fclose( File );
+#if APIVERSNUM >= 10500
+ const char *syschar=cCharSetConv::SystemCharacterTable();
+ if (syschar==NULL || !strcasestr(syschar, "ISO-8859-15")) {
+ char *cmd;
+ asprintf(&cmd, "iconv -f ISO-8859-15 -t %s -o \"%s.converted\" \"%s\"", syschar ? syschar : "UTF-8",FileName,FileName);
+ SystemExec(cmd);
+ free(cmd);
+ asprintf(&cmd, "mv \"%s.converted\" \"%s\"", FileName,FileName);
+ SystemExec(cmd);
+ free(cmd);
+ }
+#endif
}
LoadFile:;
if( ( File = fopen( FileName, "r" ) ) != NULL )
@@ -1357,7 +1390,7 @@
}
if( Status.Plugin == STATUS_INIT )
{
- if( LoadepgConfig.DeviceNumber == 1 )
+ if( UsingPrimaryDevice )
{
LineHeight = Font->Height() + ( Padding * 2 );
LineWidth = 399;
diff --unified --recursive --exclude '*.o' --exclude '*.so' loadepg-0.1.11.orig/loadepg.h loadepg-0.1.11/loadepg.h
--- loadepg-0.1.11.orig/loadepg.h 2007-07-26 18:32:23.000000000 +0200
+++ loadepg-0.1.11/loadepg.h 2007-07-30 14:49:15.478527000 +0200
@@ -380,6 +380,8 @@
cLoadepgFilter *Filter;
cChannel *OldChannel;
cChannel *EpgChannel;
+ cDevice *EpgDevice;
+ bool UsingPrimaryDevice;
int Margin;
int StatusKey;
int Padding;
_______________________________________________
vdr mailing list
vdr@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr