From 299c773404ff45b54de1791445c0936bced5593d Mon Sep 17 00:00:00 2001 From: Lucian Muresan Date: Thu, 24 Apr 2014 01:02:13 +0200 Subject: [PATCH] add epg source channel alias --- README | 9 +++++++++ setup.cpp | 12 ++++++++---- setup.h | 5 +++++ source.cpp | 18 ++++++++++++++++-- source.h | 7 ++++++- 5 files changed, 44 insertions(+), 7 deletions(-) diff --git a/README b/README index a8ae3f5..ed3cbc2 100644 --- a/README +++ b/README @@ -34,6 +34,9 @@ must be placed in /var/lib/epgsources under a directory with a name similar to the name of the source) The second line shows the maximum days which will be provided. The next lines are unique channelnames, provided by the source. +If those names provided by the source are not meaningful when displayed +in the OSD, an alias with utf-8 encoding can be added separated by the '|' +character (see examples below). There can be application dependend data after each channelname. Note, that the plugin/VDR must be able to read this control file. @@ -62,3 +65,9 @@ rtl.de;004 sat1.de;005 nickcomedy;190:417 +file;01:15;0;0 +8 +10001.port.ro|TVR 1 +10002.port.ro|TVR 2 +10003.port.ro|HBO +10015.port.ro|TVR International diff --git a/setup.cpp b/setup.cpp index 4038c8c..c4ba29c 100644 --- a/setup.cpp +++ b/setup.cpp @@ -161,7 +161,7 @@ void cMenuSetupXmltv2vdr::Output(void) } } } - cString buffer = cString::sprintf("%s:\t%s",channels[i],mapped ? tr("mapped") : ""); + cString buffer = cString::sprintf("%s:\t%s",extchannels[i],mapped ? tr("mapped") : ""); Add(new cOsdItem(buffer),true); } mappingEnd=Current(); @@ -181,6 +181,7 @@ void cMenuSetupXmltv2vdr::Output(void) void cMenuSetupXmltv2vdr::generatesumchannellist() { channels.Clear(); + extchannels.Clear(); if (!g->EPGSources()->Count()) return; for (int i=0; iEPGSources()->Count()-1; i++) { @@ -202,6 +203,7 @@ void cMenuSetupXmltv2vdr::generatesumchannellist() if (!found) { channels.Append(strdup(channellist->Get(x)->Name())); + extchannels.Append(strdup(channellist->Get(x)->NameExtended())); } } } @@ -209,6 +211,7 @@ void cMenuSetupXmltv2vdr::generatesumchannellist() } } channels.Sort(); + extchannels.Sort(); } void cMenuSetupXmltv2vdr::Store(void) @@ -963,7 +966,7 @@ void cMenuSetupXmltv2vdrChannelSource::output(void) { sel[i]=0; } - Add(new cMenuEditBoolItem(channellist->Get(i)->Name(),&sel[i],"",tr("selected"))); + Add(new cMenuEditBoolItem(channellist->Get(i)->NameExtended(),&sel[i],"",tr("selected"))); } Display(); } @@ -1022,7 +1025,8 @@ cMenuSetupXmltv2vdrChannelMap::cMenuSetupXmltv2vdrChannelMap(cGlobals *Global, c flags=0; if (Index>menu->ChannelList()->Size()) return; const char *channel=(*menu->ChannelList())[Index]; - if (!channel) return; + const char *extchannel=(*menu->ChannelListExtended())[Index]; + if (!channel || !extchannel) return; SetPlugin(plugin); @@ -1037,7 +1041,7 @@ cMenuSetupXmltv2vdrChannelMap::cMenuSetupXmltv2vdrChannelMap(cGlobals *Global, c } if (!lmap) return; - title=cString::sprintf("%s - %s '%s' : %s",trVDR("Setup"),trVDR("Plugin"),plugin->Name(), channel); + title=cString::sprintf("%s - %s '%s' : %s",trVDR("Setup"),trVDR("Plugin"),plugin->Name(), extchannel); SetTitle(title); flags=lmap->Flags(); diff --git a/setup.h b/setup.h index 6777b2a..be861e0 100644 --- a/setup.h +++ b/setup.h @@ -31,6 +31,7 @@ protected: virtual void Store(void); private: cStringList channels; + cStringList extchannels; cGlobals *g; cMenuSetupXmltv2vdrChannelSource *cs; cMenuSetupXmltv2vdrChannelMap *cm; @@ -62,6 +63,10 @@ public: { return &channels; } + cStringList *ChannelListExtended() + { + return &extchannels; + } }; class cMenuSetupXmltv2vdrTextMap : public cMenuSetupPage diff --git a/source.cpp b/source.cpp index 32457c9..9453b09 100644 --- a/source.cpp +++ b/source.cpp @@ -15,15 +15,17 @@ #include "extpipe.h" #include "debug.h" -cEPGChannel::cEPGChannel(const char *Name, bool InUse) +cEPGChannel::cEPGChannel(const char *Name, const char *ExtName, bool InUse) { name=strdup(Name); inuse=InUse; + extname=strdup(ExtName); } cEPGChannel::~cEPGChannel() { if (name) free((void *) name); + if (extname) free((void *) extname); } int cEPGChannel::Compare(const cListObject &ListObject) const @@ -325,9 +327,21 @@ bool cEPGSource::ReadConfig() // backward compatibility cname++; } + char *pipechar=strchr(line,'|'); + char *extra=0; + char extname[256]=""; + + if (pipechar) + { + *pipechar=0; + pipechar++; + extra=pipechar; + dsyslogs(this,"found channel with extended name %s,%s",cname,extra); + sprintf(extname, "%s | %s", cname, extra); + } if (!strchr(cname,' ') && (strlen(cname)>0)) { - cEPGChannel *epgchannel= new cEPGChannel(cname,false); + cEPGChannel *epgchannel= new cEPGChannel(cname,pipechar?extname:cname,false); if (epgchannel) channels.Add(epgchannel); } } diff --git a/source.h b/source.h index 759aec4..2ab7a41 100644 --- a/source.h +++ b/source.h @@ -24,8 +24,9 @@ class cEPGChannel : public cListObject private: bool inuse; const char *name; + const char *extname; public: - cEPGChannel(const char *Name, bool InUse=false); + cEPGChannel(const char *Name, const char *ExtName, bool InUse=false); ~cEPGChannel(); virtual int Compare(const cListObject &ListObject) const; bool InUse() @@ -40,6 +41,10 @@ public: { return name; } + const char *NameExtended() + { + return extname; + } }; class cEPGChannels : public cList {}; -- 1.9.1