En/na lukkinosat ha escrit:
Hello

On site http://www.kikko77.altervista.org/ in the
section download, is available the new version of
LoadEPG.

History:
2007-07-26: Version 0.1.11
- Fixed for new format epg of Digital+ (S19.2E Spain)

Since vdr 1.5.x changed the numbering of the cards if there are softdevices, I changed it to look for the card using the CardIndex (patch attached, in case you want to take a look), but it doesn't work anyway: it switches to the transponder with the epg, then it switches back instantly to the previous one, so it obviously doesn't get any data. If I change the function cLoadepgOsd::SwitchToEpgChannel (and only that function) to use cDevice::PrimaryDevice() to do the switching then everything works as expected (well, special characters show up as little squares in accents in the epg, but I'll look into that).

Bye
--
Luca
diff --unified --recursive --exclude='*.o' --exclude='*~' 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-26 19:55:16.363010000 +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,7 @@
 {
     if( OldChannel )
     {
-         cDevice::GetDevice( LoadepgConfig.DeviceNumber - 1 )->SwitchChannel( OldChannel, true );
+         EpgDevice->SwitchChannel( OldChannel, true );
     }
 }
 
@@ -1055,9 +1061,9 @@
         *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 );
+	EpgDevice->SwitchChannel( EpgChannel, true );
 	usleep( 2000000 );
-	if( cDevice::GetDevice( LoadepgConfig.DeviceNumber - 1 )->HasLock() )
+	if( EpgDevice->HasLock() )
 	{
 	    return true;
 	}
@@ -1071,6 +1077,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 )
diff --unified --recursive --exclude='*.o' --exclude='*~' 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-26 19:41:09.433010000 +0200
@@ -380,6 +380,7 @@
 	cLoadepgFilter *Filter;
 	cChannel *OldChannel;
 	cChannel *EpgChannel;
+	cDevice *EpgDevice;
 	int Margin;
 	int StatusKey;
 	int Padding;
_______________________________________________
vdr mailing list
vdr@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr

Reply via email to