mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-01 15:07:49 +00:00
xbmc-pvr-addons: update iptvsimple
This commit is contained in:
parent
0e071f78ef
commit
6392f1f5a8
@ -0,0 +1,345 @@
|
|||||||
|
commit f014d5dcc803d705355148efe2ec720217880d0a
|
||||||
|
Author: Stefan Saraev <stefan@saraev.ca>
|
||||||
|
Date: Mon Jul 1 19:57:33 2013 +0300
|
||||||
|
|
||||||
|
backport latest changes
|
||||||
|
|
||||||
|
added latest changes up to https://github.com/afedchin/xbmc-addon-iptvsimple/commit/a716cdc3cdf44
|
||||||
|
|
||||||
|
all credit goes to Anton Fedchin <afedchin@ruswizards.com>
|
||||||
|
|
||||||
|
diff --git a/addons/pvr.iptvsimple/addon/addon.xml.in b/addons/pvr.iptvsimple/addon/addon.xml.in
|
||||||
|
index 185c3ab..d4692f8 100644
|
||||||
|
--- a/addons/pvr.iptvsimple/addon/addon.xml.in
|
||||||
|
+++ b/addons/pvr.iptvsimple/addon/addon.xml.in
|
||||||
|
@@ -6,7 +6,7 @@
|
||||||
|
provider-name="nightik">
|
||||||
|
<requires>
|
||||||
|
<c-pluff version="0.1"/>
|
||||||
|
- <import addon="xbmc.pvr" version="1.6.0"/>
|
||||||
|
+ <import addon="xbmc.pvr" version="1.6.1"/>
|
||||||
|
</requires>
|
||||||
|
<extension
|
||||||
|
point="xbmc.pvrclient"
|
||||||
|
diff --git a/addons/pvr.iptvsimple/addon/resources/language/English/strings.po b/addons/pvr.iptvsimple/addon/resources/language/English/strings.po
|
||||||
|
index d676f4d..98763a4 100644
|
||||||
|
--- a/addons/pvr.iptvsimple/addon/resources/language/English/strings.po
|
||||||
|
+++ b/addons/pvr.iptvsimple/addon/resources/language/English/strings.po
|
||||||
|
@@ -32,7 +32,7 @@ msgid "Remote Path (Internet address)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30010"
|
||||||
|
-msgid "Play List Settings"
|
||||||
|
+msgid "General"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30011"
|
||||||
|
@@ -43,6 +43,10 @@ msgctxt "#30012"
|
||||||
|
msgid "M3U Play List URL"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
+msgctxt "#30013"
|
||||||
|
+msgid "Numbering channels starts at"
|
||||||
|
+msgstr ""
|
||||||
|
+
|
||||||
|
msgctxt "#30020"
|
||||||
|
msgid "EPG Settings"
|
||||||
|
msgstr ""
|
||||||
|
diff --git a/addons/pvr.iptvsimple/addon/resources/language/French/strings.po b/addons/pvr.iptvsimple/addon/resources/language/French/strings.po
|
||||||
|
index 73663c6..08f9342 100644
|
||||||
|
--- a/addons/pvr.iptvsimple/addon/resources/language/French/strings.po
|
||||||
|
+++ b/addons/pvr.iptvsimple/addon/resources/language/French/strings.po
|
||||||
|
@@ -31,8 +31,8 @@ msgid "Remote Path (Internet address)"
|
||||||
|
msgstr "Chemin d'accès (adresse internet)"
|
||||||
|
|
||||||
|
msgctxt "#30010"
|
||||||
|
-msgid "Play List Settings"
|
||||||
|
-msgstr "Paramètres de la Playlist"
|
||||||
|
+msgid "General"
|
||||||
|
+msgstr "General"
|
||||||
|
|
||||||
|
msgctxt "#30011"
|
||||||
|
msgid "M3U Play List Path"
|
||||||
|
@@ -42,6 +42,10 @@ msgctxt "#30012"
|
||||||
|
msgid "M3U Play List URL"
|
||||||
|
msgstr "URL de la playlist M3U"
|
||||||
|
|
||||||
|
+msgctxt "#30013"
|
||||||
|
+msgid "Numbering channels starts at"
|
||||||
|
+msgstr "Numbering channels starts at"
|
||||||
|
+
|
||||||
|
msgctxt "#30020"
|
||||||
|
msgid "EPG Settings"
|
||||||
|
msgstr "Paramètres EPG"
|
||||||
|
diff --git a/addons/pvr.iptvsimple/addon/resources/language/Russian/strings.po b/addons/pvr.iptvsimple/addon/resources/language/Russian/strings.po
|
||||||
|
index a7f577f..fe15e49 100644
|
||||||
|
--- a/addons/pvr.iptvsimple/addon/resources/language/Russian/strings.po
|
||||||
|
+++ b/addons/pvr.iptvsimple/addon/resources/language/Russian/strings.po
|
||||||
|
@@ -30,8 +30,8 @@ msgid "Remote Path (Internet address)"
|
||||||
|
msgstr "Удалённый путь (сеть Интернет)"
|
||||||
|
|
||||||
|
msgctxt "#30010"
|
||||||
|
-msgid "Play List Settings"
|
||||||
|
-msgstr "Установки плейлиста"
|
||||||
|
+msgid "General"
|
||||||
|
+msgstr "Основные"
|
||||||
|
|
||||||
|
msgctxt "#30011"
|
||||||
|
msgid "M3U Play List Path"
|
||||||
|
@@ -41,6 +41,10 @@ msgctxt "#30012"
|
||||||
|
msgid "M3U Play List URL"
|
||||||
|
msgstr "Ссылка на M3U"
|
||||||
|
|
||||||
|
+msgctxt "#30013"
|
||||||
|
+msgid "Numbering channels starts at"
|
||||||
|
+msgstr "Начинать нумерацию каналов с"
|
||||||
|
+
|
||||||
|
msgctxt "#30020"
|
||||||
|
msgid "EPG Settings"
|
||||||
|
msgstr "Установки EPG"
|
||||||
|
diff --git a/addons/pvr.iptvsimple/addon/resources/settings.xml b/addons/pvr.iptvsimple/addon/resources/settings.xml
|
||||||
|
index 63d42a6..845572f 100644
|
||||||
|
--- a/addons/pvr.iptvsimple/addon/resources/settings.xml
|
||||||
|
+++ b/addons/pvr.iptvsimple/addon/resources/settings.xml
|
||||||
|
@@ -1,18 +1,28 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<settings>
|
||||||
|
- <setting id="sep1" label="30010" type="lsep"/>
|
||||||
|
- <setting id="m3uPathType" type="enum" label="30000" lvalues="30001|30002" default="1" />
|
||||||
|
- <setting id="m3uPath" type="file" label="30011" default="" visible="eq(-1,0)"/>
|
||||||
|
- <setting id="m3uUrl" type="text" label="30012" default="" visible="eq(-2,1)"/>
|
||||||
|
+ <!-- M3U -->
|
||||||
|
+ <category label="30010">
|
||||||
|
+ <setting id="sep1" label="30010" type="lsep"/>
|
||||||
|
+ <setting id="m3uPathType" type="enum" label="30000" lvalues="30001|30002" default="1" />
|
||||||
|
+ <setting id="m3uPath" type="file" label="30011" default="" visible="eq(-1,0)"/>
|
||||||
|
+ <setting id="m3uUrl" type="text" label="30012" default="" visible="eq(-2,1)"/>
|
||||||
|
+ <setting id="startNum" type="number" label="30013" default="1" />
|
||||||
|
+ </category>
|
||||||
|
|
||||||
|
- <setting id="sep2" label="30020" type="lsep"/>
|
||||||
|
- <setting id="epgPathType" type="enum" label="30000" lvalues="30001|30002" default="1" />
|
||||||
|
- <setting id="epgPath" type="file" label="30021" default="" visible="eq(-1,0)"/>
|
||||||
|
- <setting id="epgUrl" type="text" label="30022" default="" visible="eq(-2,1)"/>
|
||||||
|
-<!-- <setting id="epgTimeShift" type="slider" label="30024" default="0" range="-12,.5,12" option="float"/>-->
|
||||||
|
- <setting id="epgTimeShift_" type="enum" label="30024" default="12" values="-12|-11|-10|-9|-8|-7|-6|-5|-4|-3|-2|-1|0|+1|+2|+3|+4|+5|+6|+7|+8|+9|+10|+11|+12"/>-->
|
||||||
|
- <setting id="epgTSOverride" type="bool" label="30023" default="false"/>
|
||||||
|
+ <!-- EPG -->
|
||||||
|
+ <category label="30020">
|
||||||
|
+ <setting id="sep2" label="30020" type="lsep"/>
|
||||||
|
+ <setting id="epgPathType" type="enum" label="30000" lvalues="30001|30002" default="1" />
|
||||||
|
+ <setting id="epgPath" type="file" label="30021" default="" visible="eq(-1,0)"/>
|
||||||
|
+ <setting id="epgUrl" type="text" label="30022" default="" visible="eq(-2,1)"/>
|
||||||
|
+<!-- <setting id="epgTimeShift" type="slider" label="30024" default="0" range="-12,.5,12" option="float"/>-->
|
||||||
|
+ <setting id="epgTimeShift_" type="enum" label="30024" default="12" values="-12|-11|-10|-9|-8|-7|-6|-5|-4|-3|-2|-1|0|+1|+2|+3|+4|+5|+6|+7|+8|+9|+10|+11|+12"/>-->
|
||||||
|
+ <setting id="epgTSOverride" type="bool" label="30023" default="false"/>
|
||||||
|
+ </category>
|
||||||
|
|
||||||
|
- <setting id="sep3" label="30030" type="lsep"/>
|
||||||
|
- <setting id="logoPath" type="folder" label="30031" default="" />
|
||||||
|
+ <!-- Logos -->
|
||||||
|
+ <category label="30030">
|
||||||
|
+ <setting id="sep3" label="30030" type="lsep"/>
|
||||||
|
+ <setting id="logoPath" type="folder" label="30031" default="" />
|
||||||
|
+ </category>
|
||||||
|
</settings>
|
||||||
|
diff --git a/addons/pvr.iptvsimple/src/PVRIptvData.cpp b/addons/pvr.iptvsimple/src/PVRIptvData.cpp
|
||||||
|
index 4ca5265..24e3cee 100644
|
||||||
|
--- a/addons/pvr.iptvsimple/src/PVRIptvData.cpp
|
||||||
|
+++ b/addons/pvr.iptvsimple/src/PVRIptvData.cpp
|
||||||
|
@@ -155,16 +155,20 @@ bool PVRIptvData::LoadEPG(time_t iStart, time_t iEnd)
|
||||||
|
if (buffer[0] != '\x3C' || buffer[1] != '\x3F' || buffer[2] != '\x78' ||
|
||||||
|
buffer[3] != '\x6D' || buffer[4] != '\x6C')
|
||||||
|
{
|
||||||
|
- // check for tar archive
|
||||||
|
- if (strcmp(buffer + 0x101, "ustar") || strcmp(buffer + 0x101, "GNUtar"))
|
||||||
|
+ // check for BOM
|
||||||
|
+ if (buffer[0] != '\xEF' || buffer[1] != '\xBB' || buffer[2] != '\xBF')
|
||||||
|
{
|
||||||
|
- buffer += 0x200; // RECORDSIZE = 512
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
- {
|
||||||
|
- XBMC->Log(LOG_ERROR, "Invalid EPG file '%s': unable to decompress file.", m_strXMLTVUrl.c_str());
|
||||||
|
- m_bEGPLoaded = true;
|
||||||
|
- return false;
|
||||||
|
+ // check for tar archive
|
||||||
|
+ if (strcmp(buffer + 0x101, "ustar") || strcmp(buffer + 0x101, "GNUtar"))
|
||||||
|
+ {
|
||||||
|
+ buffer += 0x200; // RECORDSIZE = 512
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ XBMC->Log(LOG_ERROR, "Invalid EPG file '%s': unable to parse file.", m_strXMLTVUrl.c_str());
|
||||||
|
+ m_bEGPLoaded = true;
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -321,10 +325,10 @@ bool PVRIptvData::LoadPlayList(void)
|
||||||
|
/* load channels */
|
||||||
|
bool bFirst = true;
|
||||||
|
|
||||||
|
- int iUniqueChannelId = 0;
|
||||||
|
+ int iChannelIndex = 0;
|
||||||
|
int iUniqueGroupId = 0;
|
||||||
|
int iCurrentGroupId = 0;
|
||||||
|
- int iChannelNum = 0;
|
||||||
|
+ int iChannelNum = g_iStartNumber;
|
||||||
|
int iEPGTimeShift = 0;
|
||||||
|
|
||||||
|
PVRIptvChannel tmpChannel;
|
||||||
|
@@ -446,8 +450,8 @@ bool PVRIptvData::LoadPlayList(void)
|
||||||
|
else if (strLine[0] != '#')
|
||||||
|
{
|
||||||
|
PVRIptvChannel channel;
|
||||||
|
- channel.iUniqueId = ++iUniqueChannelId;
|
||||||
|
- channel.iChannelNumber = ++iChannelNum;
|
||||||
|
+ channel.iUniqueId = GetChannelId(tmpChannel.strChannelName.c_str(), strLine);
|
||||||
|
+ channel.iChannelNumber = iChannelNum++;
|
||||||
|
channel.strTvgId = tmpChannel.strTvgId;
|
||||||
|
channel.strChannelName = tmpChannel.strChannelName;
|
||||||
|
channel.strTvgName = tmpChannel.strTvgName;
|
||||||
|
@@ -460,10 +464,11 @@ bool PVRIptvData::LoadPlayList(void)
|
||||||
|
if (iCurrentGroupId > 0)
|
||||||
|
{
|
||||||
|
channel.bRadio = m_groups.at(iCurrentGroupId - 1).bRadio;
|
||||||
|
- m_groups.at(iCurrentGroupId - 1).members.push_back(channel.iChannelNumber);
|
||||||
|
+ m_groups.at(iCurrentGroupId - 1).members.push_back(iChannelIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_channels.push_back(channel);
|
||||||
|
+ iChannelIndex++;
|
||||||
|
|
||||||
|
tmpChannel.strTvgId = "";
|
||||||
|
tmpChannel.strChannelName = "";
|
||||||
|
@@ -568,26 +573,24 @@ PVR_ERROR PVRIptvData::GetChannelGroups(ADDON_HANDLE handle, bool bRadio)
|
||||||
|
|
||||||
|
PVR_ERROR PVRIptvData::GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group)
|
||||||
|
{
|
||||||
|
- for (unsigned int iGroupPtr = 0; iGroupPtr < m_groups.size(); iGroupPtr++)
|
||||||
|
+ PVRIptvChannelGroup *myGroup;
|
||||||
|
+ if ((myGroup = FindGroup(group.strGroupName)) != NULL)
|
||||||
|
{
|
||||||
|
- PVRIptvChannelGroup &myGroup = m_groups.at(iGroupPtr);
|
||||||
|
- if (!strcmp(myGroup.strGroupName.c_str(),group.strGroupName))
|
||||||
|
+ for (unsigned int iPtr = 0; iPtr < myGroup->members.size(); iPtr++)
|
||||||
|
{
|
||||||
|
- for (unsigned int iChannelPtr = 0; iChannelPtr < myGroup.members.size(); iChannelPtr++)
|
||||||
|
- {
|
||||||
|
- int iId = myGroup.members.at(iChannelPtr) - 1;
|
||||||
|
- if (iId < 0 || iId > (int)m_channels.size() - 1)
|
||||||
|
- continue;
|
||||||
|
- PVRIptvChannel &channel = m_channels.at(iId);
|
||||||
|
- PVR_CHANNEL_GROUP_MEMBER xbmcGroupMember;
|
||||||
|
- memset(&xbmcGroupMember, 0, sizeof(PVR_CHANNEL_GROUP_MEMBER));
|
||||||
|
-
|
||||||
|
- strncpy(xbmcGroupMember.strGroupName, group.strGroupName, sizeof(xbmcGroupMember.strGroupName) - 1);
|
||||||
|
- xbmcGroupMember.iChannelUniqueId = channel.iUniqueId;
|
||||||
|
- xbmcGroupMember.iChannelNumber = channel.iChannelNumber;
|
||||||
|
-
|
||||||
|
- PVR->TransferChannelGroupMember(handle, &xbmcGroupMember);
|
||||||
|
- }
|
||||||
|
+ int iIndex = myGroup->members.at(iPtr);
|
||||||
|
+ if (iIndex < 0 || iIndex >= (int) m_channels.size())
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ PVRIptvChannel &channel = m_channels.at(iIndex);
|
||||||
|
+ PVR_CHANNEL_GROUP_MEMBER xbmcGroupMember;
|
||||||
|
+ memset(&xbmcGroupMember, 0, sizeof(PVR_CHANNEL_GROUP_MEMBER));
|
||||||
|
+
|
||||||
|
+ strncpy(xbmcGroupMember.strGroupName, group.strGroupName, sizeof(xbmcGroupMember.strGroupName) - 1);
|
||||||
|
+ xbmcGroupMember.iChannelUniqueId = channel.iUniqueId;
|
||||||
|
+ xbmcGroupMember.iChannelNumber = channel.iChannelNumber;
|
||||||
|
+
|
||||||
|
+ PVR->TransferChannelGroupMember(handle, &xbmcGroupMember);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -891,9 +894,7 @@ int PVRIptvData::GetCachedFileContents(const std::string &strCachedName, const s
|
||||||
|
void PVRIptvData::ApplyChannelsLogos()
|
||||||
|
{
|
||||||
|
if (m_strLogoPath.IsEmpty())
|
||||||
|
- {
|
||||||
|
return;
|
||||||
|
- }
|
||||||
|
|
||||||
|
vector<PVRIptvChannel>::iterator channel;
|
||||||
|
for(channel = m_channels.begin(); channel < m_channels.end(); channel++)
|
||||||
|
@@ -975,3 +976,17 @@ CStdString PVRIptvData::ReadMarkerValue(std::string &strLine, const char* strMar
|
||||||
|
|
||||||
|
return std::string("");
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+int PVRIptvData::GetChannelId(const char * strChannelName, const char * strStreamUrl)
|
||||||
|
+{
|
||||||
|
+ std::string concat(strChannelName);
|
||||||
|
+ concat.append(strStreamUrl);
|
||||||
|
+
|
||||||
|
+ const char* strString = concat.c_str();
|
||||||
|
+ int iId = 0;
|
||||||
|
+ int c;
|
||||||
|
+ while (c = *strString++)
|
||||||
|
+ iId = ((iId << 5) + iId) + c; /* iId * 33 + c */
|
||||||
|
+
|
||||||
|
+ return abs(iId);
|
||||||
|
+}
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/addons/pvr.iptvsimple/src/PVRIptvData.h b/addons/pvr.iptvsimple/src/PVRIptvData.h
|
||||||
|
index 944a734..c49b0cc 100644
|
||||||
|
--- a/addons/pvr.iptvsimple/src/PVRIptvData.h
|
||||||
|
+++ b/addons/pvr.iptvsimple/src/PVRIptvData.h
|
||||||
|
@@ -103,6 +103,7 @@ protected:
|
||||||
|
virtual int GetCachedFileContents(const std::string &strCachedName, const std::string &strFilePath, std::string &strContent);
|
||||||
|
virtual void ApplyChannelsLogos();
|
||||||
|
virtual CStdString ReadMarkerValue(std::string &strLine, const char * strMarkerName);
|
||||||
|
+ virtual int GetChannelId(const char * strChannelName, const char * strStreamUrl);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void *Process(void);
|
||||||
|
diff --git a/addons/pvr.iptvsimple/src/client.cpp b/addons/pvr.iptvsimple/src/client.cpp
|
||||||
|
index b80f483..b8c55b4 100644
|
||||||
|
--- a/addons/pvr.iptvsimple/src/client.cpp
|
||||||
|
+++ b/addons/pvr.iptvsimple/src/client.cpp
|
||||||
|
@@ -54,6 +54,7 @@ std::string g_strTvgPath = "";
|
||||||
|
std::string g_strM3UPath = "";
|
||||||
|
std::string g_strLogoPath = "";
|
||||||
|
int g_iEPGTimeShift = 0;
|
||||||
|
+int g_iStartNumber = 1;
|
||||||
|
bool g_bTSOverride = true;
|
||||||
|
|
||||||
|
extern std::string PathCombine(const std::string &strPath, const std::string &strFileName)
|
||||||
|
@@ -102,7 +103,10 @@ void ADDON_ReadSettings(void)
|
||||||
|
{
|
||||||
|
g_strM3UPath = GetClientFilePath(M3U_FILE_NAME);
|
||||||
|
}
|
||||||
|
-
|
||||||
|
+ if (!XBMC->GetSetting("startNum", &g_iStartNumber))
|
||||||
|
+ {
|
||||||
|
+ g_iStartNumber = 1;
|
||||||
|
+ }
|
||||||
|
if (!XBMC->GetSetting("epgPathType", &iPathType))
|
||||||
|
{
|
||||||
|
iPathType = 1;
|
||||||
|
diff --git a/addons/pvr.iptvsimple/src/client.h b/addons/pvr.iptvsimple/src/client.h
|
||||||
|
index bc81eeb..89500f1 100644
|
||||||
|
--- a/addons/pvr.iptvsimple/src/client.h
|
||||||
|
+++ b/addons/pvr.iptvsimple/src/client.h
|
||||||
|
@@ -27,7 +27,7 @@
|
||||||
|
#include "libXBMC_pvr.h"
|
||||||
|
#include "libXBMC_gui.h"
|
||||||
|
|
||||||
|
-#define PVR_CLIENT_VERSION "0.1.3"
|
||||||
|
+#define PVR_CLIENT_VERSION "1.8.1"
|
||||||
|
#define M3U_FILE_NAME "iptv.m3u.cache"
|
||||||
|
#define TVG_FILE_NAME "xmltv.xml.cache"
|
||||||
|
|
||||||
|
@@ -47,6 +47,7 @@ extern std::string g_strM3UPath;
|
||||||
|
extern std::string g_strTvgPath;
|
||||||
|
extern std::string g_strLogoPath;
|
||||||
|
extern int g_iEPGTimeShift;
|
||||||
|
+extern int g_iStartNumber;
|
||||||
|
extern bool g_bTSOverride;
|
||||||
|
|
||||||
|
extern std::string PathCombine(const std::string &strPath, const std::string &strFileName);
|
Loading…
x
Reference in New Issue
Block a user