1
0
mirror of https://github.com/rofafor/vdr-plugin-iptv.git synced 2023-10-10 11:37:03 +00:00

updated vdr patch and added a preliminary channel editor.

This commit is contained in:
Rolf Ahrenberg
2007-09-18 18:48:10 +00:00
parent d2548271e9
commit dc6ff5edc6
5 changed files with 547 additions and 80 deletions

View File

@@ -1,11 +1,11 @@
diff -Nru vdr-1.5.9-vanilla/channels.c vdr-1.5.9-iptv/channels.c
--- vdr-1.5.9-vanilla/channels.c 2007-08-26 18:45:20.000000000 +0300
+++ vdr-1.5.9-iptv/channels.c 2007-09-11 20:22:48.000000000 +0300
+++ vdr-1.5.9-iptv/channels.c 2007-09-18 19:36:45.000000000 +0300
@@ -166,6 +166,7 @@
shortName = strdup("");
provider = strdup("");
portalName = strdup("");
+ param = strdup("");
+ pluginParam = strdup("");
memset(&__BeginData__, 0, (char *)&__EndData__ - (char *)&__BeginData__);
inversion = INVERSION_AUTO;
bandwidth = BANDWIDTH_AUTO;
@@ -13,7 +13,7 @@ diff -Nru vdr-1.5.9-vanilla/channels.c vdr-1.5.9-iptv/channels.c
shortName = NULL;
provider = NULL;
portalName = NULL;
+ param = NULL;
+ pluginParam = NULL;
schedule = NULL;
linkChannels = NULL;
refChannel = NULL;
@@ -21,7 +21,7 @@ diff -Nru vdr-1.5.9-vanilla/channels.c vdr-1.5.9-iptv/channels.c
free(shortName);
free(provider);
free(portalName);
+ free(param);
+ free(pluginParam);
}
cChannel& cChannel::operator= (const cChannel &Channel)
@@ -29,61 +29,98 @@ diff -Nru vdr-1.5.9-vanilla/channels.c vdr-1.5.9-iptv/channels.c
shortName = strcpyrealloc(shortName, Channel.shortName);
provider = strcpyrealloc(provider, Channel.provider);
portalName = strcpyrealloc(portalName, Channel.portalName);
+ param = strcpyrealloc(param, Channel.param);
+ pluginParam = strcpyrealloc(pluginParam, Channel.pluginParam);
memcpy(&__BeginData__, &Channel.__BeginData__, (char *)&Channel.__EndData__ - (char *)&Channel.__BeginData__);
return *this;
}
@@ -582,15 +586,16 @@
char buffer[64];
@@ -280,9 +284,26 @@
transmission = Channel->transmission;
guard = Channel->guard;
hierarchy = Channel->hierarchy;
+ if (IsPlug()) pluginParam = strcpyrealloc(pluginParam, Channel->pluginParam);
}
}
+bool cChannel::SetPlugTransponderData(int Source, int Frequency, const char *PluginParam)
+{
+ if (source != Source || frequency != Frequency || (strcmp(pluginParam, PluginParam) != 0)) {
+ if (Number()) {
+ dsyslog("changing transponder data of channel %d from %s:%d:%s to %s:%d:%s", Number(), *cSource::ToString(source), frequency, pluginParam, *cSource::ToString(Source), Frequency, PluginParam);
+ modification |= CHANNELMOD_TRANSP;
+ Channels.SetModified();
+ }
+ source = Source;
+ frequency = Frequency;
+ pluginParam = strcpyrealloc(pluginParam, PluginParam);
+ schedule = NULL;
+ }
+ return true;
+}
+
bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH)
{
// Workarounds for broadcaster stupidity:
@@ -407,6 +428,18 @@
}
}
+void cChannel::SetPluginParam(const char *PluginParam)
+{
+ if (!isempty(PluginParam) && strcmp(pluginParam, PluginParam) != 0) {
+ if (Number()) {
+ dsyslog("changing plugin parameters of channel %d from '%s' to '%s'", Number(), pluginParam, PluginParam);
+ modification |= CHANNELMOD_TRANSP;
+ Channels.SetModified();
+ }
+ pluginParam = strcpyrealloc(pluginParam, PluginParam);
+ }
+}
+
#define STRDIFF 0x01
#define VALDIFF 0x02
@@ -579,7 +612,7 @@
if (isdigit(type))
type = 'S';
#define ST(s) if (strchr(s, type))
- char buffer[64];
+ char buffer[256];
char *q = buffer;
*q = 0;
- ST(" S ") q += sprintf(q, "%c", polarization);
- ST("CST") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
- ST("CST") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
- ST(" T") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
- ST("C T") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
- ST(" T") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
- ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
- ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
- ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
+ ST(" S ") q += sprintf(q, "%c", polarization);
+ ST(" CST") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
+ ST(" CST") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
+ ST(" T") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
+ ST(" C T") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
+ ST(" T") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
+ ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
+ ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
+ ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
+ ST("P ") q += sprintf(q, "%s", param);
ST(" S ") q += sprintf(q, "%c", polarization);
@@ -591,6 +624,7 @@
ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));
+ ST("P ") snprintf(buffer, sizeof(buffer), "%s", pluginParam);
return buffer;
}
@@ -612,7 +617,7 @@
@@ -612,7 +646,7 @@
bool cChannel::StringToParameters(const char *s)
{
- while (s && *s) {
+ while (s && *s && IsPlug()) {
+ while (s && *s && !IsPlug()) {
switch (toupper(*s)) {
case 'B': s = ParseParameter(s, bandwidth, BandwidthValues); break;
case 'C': s = ParseParameter(s, coderateH, CoderateValues); break;
@@ -813,6 +818,7 @@
@@ -813,6 +847,7 @@
shortName = strcpyrealloc(shortName, p);
}
name = strcpyrealloc(name, namebuf);
+ param = strcpyrealloc(param, parambuf);
+ if (IsPlug()) pluginParam = strcpyrealloc(pluginParam, parambuf);
free(parambuf);
free(sourcebuf);
diff -Nru vdr-1.5.9-vanilla/channels.h vdr-1.5.9-iptv/channels.h
--- vdr-1.5.9-vanilla/channels.h 2007-08-26 18:45:20.000000000 +0300
+++ vdr-1.5.9-iptv/channels.h 2007-09-11 20:22:48.000000000 +0300
+++ vdr-1.5.9-iptv/channels.h 2007-09-18 19:36:24.000000000 +0300
@@ -114,6 +114,7 @@
char *shortName;
char *provider;
char *portalName;
+ char *param;
+ char *pluginParam;
int __BeginData__;
int frequency; // MHz
int source;
@@ -91,7 +128,7 @@ diff -Nru vdr-1.5.9-vanilla/channels.h vdr-1.5.9-iptv/channels.h
int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
int Transponder(void) const; ///< Returns the transponder frequency in MHz, plus the polarization in case of sat
static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization
+ const char *Param(void) const { return param; }
+ const char *PluginParam(void) const { return pluginParam; }
int Source(void) const { return source; }
int Srate(void) const { return srate; }
int Vpid(void) const { return vpid; }
@@ -103,14 +140,29 @@ diff -Nru vdr-1.5.9-vanilla/channels.h vdr-1.5.9-iptv/channels.h
bool IsCable(void) const { return cSource::IsCable(source); }
bool IsSat(void) const { return cSource::IsSat(source); }
bool IsTerr(void) const { return cSource::IsTerr(source); }
@@ -206,12 +209,14 @@
bool HasTimer(void) const;
int Modification(int Mask = CHANNELMOD_ALL);
void CopyTransponderData(const cChannel *Channel);
+ bool SetPlugTransponderData(int Source, int Frequency, const char *PluginParam);
bool SetSatTransponderData(int Source, int Frequency, char Polarization, int Srate, int CoderateH);
bool SetCableTransponderData(int Source, int Frequency, int Modulation, int Srate, int CoderateH);
bool SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CodeRateH, int CodeRateL, int Guard, int Transmission);
void SetId(int Nid, int Tid, int Sid, int Rid = 0);
void SetName(const char *Name, const char *ShortName, const char *Provider);
void SetPortalName(const char *PortalName);
+ void SetPluginParam(const char *PluginParam);
void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int Tpid);
void SetCaIds(const int *CaIds); // list must be zero-terminated
void SetCaDescriptors(int Level);
diff -Nru vdr-1.5.9-vanilla/menu.c vdr-1.5.9-iptv/menu.c
--- vdr-1.5.9-vanilla/menu.c 2007-08-26 18:45:20.000000000 +0300
+++ vdr-1.5.9-iptv/menu.c 2007-09-11 20:23:26.000000000 +0300
+++ vdr-1.5.9-iptv/menu.c 2007-09-18 19:36:24.000000000 +0300
@@ -219,6 +219,7 @@
cChannel *channel;
cChannel data;
char name[256];
+ char param[256];
+ char pluginParam[256];
void Setup(void);
public:
cMenuEditChannel(cChannel *Channel, bool New = false);
@@ -118,41 +170,29 @@ diff -Nru vdr-1.5.9-vanilla/menu.c vdr-1.5.9-iptv/menu.c
// Parameters for all types of sources:
strn0cpy(name, data.name, sizeof(name));
+ strn0cpy(param, data.param, sizeof(param));
+ strn0cpy(pluginParam, data.pluginParam, sizeof(pluginParam));
Add(new cMenuEditStrItem( tr("Name"), name, sizeof(name), tr(FileNameChars)));
Add(new cMenuEditSrcItem( tr("Source"), &data.source));
Add(new cMenuEditIntItem( tr("Frequency"), &data.frequency));
@@ -269,16 +271,17 @@
Add(new cMenuEditIntItem( tr("Rid"), &data.rid, 0));
XXX*/
// Parameters for specific types of sources:
- ST(" S ") Add(new cMenuEditChrItem( tr("Polarization"), &data.polarization, "hvlr"));
- ST("CS ") Add(new cMenuEditIntItem( tr("Srate"), &data.srate));
- ST("CST") Add(new cMenuEditMapItem( tr("Inversion"), &data.inversion, InversionValues, tr("off")));
- ST("CST") Add(new cMenuEditMapItem( tr("CoderateH"), &data.coderateH, CoderateValues, tr("none")));
- ST(" T") Add(new cMenuEditMapItem( tr("CoderateL"), &data.coderateL, CoderateValues, tr("none")));
- ST("C T") Add(new cMenuEditMapItem( tr("Modulation"), &data.modulation, ModulationValues, "QPSK"));
- ST(" T") Add(new cMenuEditMapItem( tr("Bandwidth"), &data.bandwidth, BandwidthValues));
- ST(" T") Add(new cMenuEditMapItem( tr("Transmission"), &data.transmission, TransmissionValues));
- ST(" T") Add(new cMenuEditMapItem( tr("Guard"), &data.guard, GuardValues));
- ST(" T") Add(new cMenuEditMapItem( tr("Hierarchy"), &data.hierarchy, HierarchyValues, tr("none")));
+ ST(" S ") Add(new cMenuEditChrItem( tr("Polarization"), &data.polarization, "hvlr"));
+ ST(" CS ") Add(new cMenuEditIntItem( tr("Srate"), &data.srate));
+ ST(" CST") Add(new cMenuEditMapItem( tr("Inversion"), &data.inversion, InversionValues, tr("off")));
+ ST(" CST") Add(new cMenuEditMapItem( tr("CoderateH"), &data.coderateH, CoderateValues, tr("none")));
+ ST(" T") Add(new cMenuEditMapItem( tr("CoderateL"), &data.coderateL, CoderateValues, tr("none")));
+ ST(" C T") Add(new cMenuEditMapItem( tr("Modulation"), &data.modulation, ModulationValues, "QPSK"));
+ ST(" T") Add(new cMenuEditMapItem( tr("Bandwidth"), &data.bandwidth, BandwidthValues));
+ ST(" T") Add(new cMenuEditMapItem( tr("Transmission"), &data.transmission, TransmissionValues));
+ ST(" T") Add(new cMenuEditMapItem( tr("Guard"), &data.guard, GuardValues));
+ ST(" T") Add(new cMenuEditMapItem( tr("Hierarchy"), &data.hierarchy, HierarchyValues, tr("none")));
+ ST("P ") Add(new cMenuEditStrItem( tr("Parameters"), param, sizeof(param), tr(FileNameChars)));
@@ -279,6 +281,7 @@
ST(" T") Add(new cMenuEditMapItem( tr("Transmission"), &data.transmission, TransmissionValues));
ST(" T") Add(new cMenuEditMapItem( tr("Guard"), &data.guard, GuardValues));
ST(" T") Add(new cMenuEditMapItem( tr("Hierarchy"), &data.hierarchy, HierarchyValues, tr("none")));
+ ST("P ") Add(new cMenuEditStrItem( tr("Parameters"), pluginParam, sizeof(pluginParam), tr(FileNameChars)));
SetCurrent(Get(current));
Display();
@@ -293,6 +296,7 @@
if (Key == kOk) {
if (Channels.HasUniqueChannelID(&data, channel)) {
data.name = strcpyrealloc(data.name, name);
+ data.pluginParam = strcpyrealloc(data.pluginParam, pluginParam);
if (channel) {
*channel = data;
isyslog("edited channel %d %s", channel->Number(), *data.ToText());
diff -Nru vdr-1.5.9-vanilla/po/fi_FI.po vdr-1.5.9-iptv/po/fi_FI.po
--- vdr-1.5.9-vanilla/po/fi_FI.po 2007-08-26 18:45:20.000000000 +0300
+++ vdr-1.5.9-iptv/po/fi_FI.po 2007-09-11 20:24:22.000000000 +0300
+++ vdr-1.5.9-iptv/po/fi_FI.po 2007-09-18 19:36:24.000000000 +0300
@@ -1271,3 +1271,7 @@
#, c-format
msgid "VDR will shut down in %s minutes"
@@ -163,7 +203,7 @@ diff -Nru vdr-1.5.9-vanilla/po/fi_FI.po vdr-1.5.9-iptv/po/fi_FI.po
+msgstr "Parametrit"
diff -Nru vdr-1.5.9-vanilla/sources.c vdr-1.5.9-iptv/sources.c
--- vdr-1.5.9-vanilla/sources.c 2007-08-26 18:45:20.000000000 +0300
+++ vdr-1.5.9-iptv/sources.c 2007-09-11 20:22:48.000000000 +0300
+++ vdr-1.5.9-iptv/sources.c 2007-09-18 19:36:24.000000000 +0300
@@ -37,6 +37,7 @@
char buffer[16];
char *q = buffer;
@@ -182,7 +222,7 @@ diff -Nru vdr-1.5.9-vanilla/sources.c vdr-1.5.9-iptv/sources.c
case 'T': type = stTerr; break;
diff -Nru vdr-1.5.9-vanilla/sources.conf vdr-1.5.9-iptv/sources.conf
--- vdr-1.5.9-vanilla/sources.conf 2007-08-26 18:45:20.000000000 +0300
+++ vdr-1.5.9-iptv/sources.conf 2007-09-11 20:22:48.000000000 +0300
+++ vdr-1.5.9-iptv/sources.conf 2007-09-18 19:36:24.000000000 +0300
@@ -188,3 +188,7 @@
# Terrestrial
@@ -193,7 +233,7 @@ diff -Nru vdr-1.5.9-vanilla/sources.conf vdr-1.5.9-iptv/sources.conf
+P Plugin
diff -Nru vdr-1.5.9-vanilla/sources.h vdr-1.5.9-iptv/sources.h
--- vdr-1.5.9-vanilla/sources.h 2007-08-26 18:45:20.000000000 +0300
+++ vdr-1.5.9-iptv/sources.h 2007-09-11 20:22:48.000000000 +0300
+++ vdr-1.5.9-iptv/sources.h 2007-09-18 19:36:24.000000000 +0300
@@ -16,10 +16,11 @@
public:
enum eSourceType {