Announce LoadEPG 0.1.11

Message ID 46A8E3F0.6020101@ventoso.org
State New
Headers

Commit Message

Luca Olivetti July 26, 2007, 6:12 p.m. UTC
  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
  

Comments

Luca Olivetti July 28, 2007, 9:25 a.m. UTC | #1
En/na Luca Olivetti ha escrit:

> 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).

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:

         fclose( File );
         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);
         }
     }
     LoadFile:;
  
lukkinosat July 30, 2007, 11:14 a.m. UTC | #2
--- Luca Olivetti <luca@ventoso.org> 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.
As soon as I can I make you to know :-)

Do you speak italian? 

Hello, Luca



      ___________________________________ 
L'email della prossima generazione? Puoi averla con la nuova Yahoo! Mail: http://it.docs.yahoo.com/nowyoucan.html
  
Luca Olivetti July 30, 2007, 12:13 p.m. UTC | #3
En/na lukkinosat ha escrit:
> --- Luca Olivetti <luca@ventoso.org> 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.

> As soon as I can I make you to know :-)
> 
> Do you speak italian? 

Yes, I do

Bye
  

Patch

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;