Feature #1805 ยป 0001-add-epg-source-channel-alias.patch
| README | ||
|---|---|---|
|
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.
|
||
| ... | ... | |
|
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
|
||
| setup.cpp | ||
|---|---|---|
|
}
|
||
|
}
|
||
|
}
|
||
|
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();
|
||
| ... | ... | |
|
void cMenuSetupXmltv2vdr::generatesumchannellist()
|
||
|
{
|
||
|
channels.Clear();
|
||
|
extchannels.Clear();
|
||
|
if (!g->EPGSources()->Count()) return;
|
||
|
for (int i=0; i<g->EPGSources()->Count()-1; i++)
|
||
|
{
|
||
| ... | ... | |
|
if (!found)
|
||
|
{
|
||
|
channels.Append(strdup(channellist->Get(x)->Name()));
|
||
|
extchannels.Append(strdup(channellist->Get(x)->NameExtended()));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
| ... | ... | |
|
}
|
||
|
}
|
||
|
channels.Sort();
|
||
|
extchannels.Sort();
|
||
|
}
|
||
|
void cMenuSetupXmltv2vdr::Store(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();
|
||
|
}
|
||
| ... | ... | |
|
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);
|
||
| ... | ... | |
|
}
|
||
|
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();
|
||
| setup.h | ||
|---|---|---|
|
virtual void Store(void);
|
||
|
private:
|
||
|
cStringList channels;
|
||
|
cStringList extchannels;
|
||
|
cGlobals *g;
|
||
|
cMenuSetupXmltv2vdrChannelSource *cs;
|
||
|
cMenuSetupXmltv2vdrChannelMap *cm;
|
||
| ... | ... | |
|
{
|
||
|
return &channels;
|
||
|
}
|
||
|
cStringList *ChannelListExtended()
|
||
|
{
|
||
|
return &extchannels;
|
||
|
}
|
||
|
};
|
||
|
class cMenuSetupXmltv2vdrTextMap : public cMenuSetupPage
|
||
| source.cpp | ||
|---|---|---|
|
#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
|
||
| ... | ... | |
|
// 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);
|
||
|
}
|
||
|
}
|
||
| source.h | ||
|---|---|---|
|
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()
|
||
| ... | ... | |
|
{
|
||
|
return name;
|
||
|
}
|
||
|
const char *NameExtended()
|
||
|
{
|
||
|
return extname;
|
||
|
}
|
||
|
};
|
||
|
class cEPGChannels : public cList<cEPGChannel> {};
|
||