xbmc-pvr-addons: update to xbmc-pvr-addons-frodo-910d7e7

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2013-09-09 02:18:11 +02:00
parent af907c752a
commit 23b1ae1729
3 changed files with 1 additions and 346 deletions

View File

@ -19,7 +19,7 @@
################################################################################ ################################################################################
PKG_NAME="xbmc-pvr-addons" PKG_NAME="xbmc-pvr-addons"
PKG_VERSION="frodo-78b0aae" PKG_VERSION="frodo-910d7e7"
if [ "$XBMC" = "master" ]; then if [ "$XBMC" = "master" ]; then
PKG_VERSION="b84a88f" PKG_VERSION="b84a88f"
fi fi

View File

@ -1,345 +0,0 @@
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);