Commit Message
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
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:;
--- 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
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
@@ -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 )
@@ -380,6 +380,7 @@
cLoadepgFilter *Filter;
cChannel *OldChannel;
cChannel *EpgChannel;
+ cDevice *EpgDevice;
int Margin;
int StatusKey;
int Padding;