mirror of
https://github.com/DigitalDevices/pvr.octonet.git
synced 2025-03-01 10:53:09 +00:00
Compare commits
40 Commits
0.3.7
...
1.2.1-Matr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8032f085fd | ||
|
|
0f6cd141c4 | ||
|
|
d5ec59e00e | ||
|
|
e2a73af36e | ||
|
|
a55552e768 | ||
|
|
14d3e9d225 | ||
|
|
cf9ee98727 | ||
|
|
9d98f2bba4 | ||
|
|
ca692f14be | ||
|
|
69da8dbd0c | ||
|
|
6d4f3847c7 | ||
|
|
38e25e1f1c | ||
|
|
472dc2beae | ||
|
|
ec08c20540 | ||
|
|
63ef363522 | ||
|
|
c91061f84b | ||
|
|
414e756912 | ||
|
|
9de3166203 | ||
|
|
df1b033f14 | ||
|
|
0295717be2 | ||
|
|
203f800eaa | ||
|
|
153dfeb3d5 | ||
|
|
1e44819300 | ||
|
|
54680a38bd | ||
|
|
689afbf4cd | ||
|
|
c4af00a4fe | ||
|
|
f1f8d44b78 | ||
|
|
e9b4c05de5 | ||
|
|
a77cf111bb | ||
|
|
020dd98e7b | ||
|
|
d7bb865329 | ||
|
|
9bbd7cf3c4 | ||
|
|
7b9ec7d884 | ||
|
|
37abebb540 | ||
|
|
3494c4c470 | ||
|
|
ff41fc9acc | ||
|
|
1ced6b3fa4 | ||
|
|
cd774b6edc | ||
|
|
2a63777b6d | ||
|
|
e9f0d6bf76 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
/build
|
||||
pvr.octonet/addon.xml
|
||||
|
||||
30
.travis.yml
30
.travis.yml
@@ -7,28 +7,22 @@ language: cpp
|
||||
# Linux. We need Trusty in order to get up to date versions of
|
||||
# cmake and g++.
|
||||
#
|
||||
env:
|
||||
global:
|
||||
- app_id=pvr.octonet
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- os: linux
|
||||
dist: trusty
|
||||
dist: xenial
|
||||
sudo: required
|
||||
compiler: gcc
|
||||
- os: linux
|
||||
dist: trusty
|
||||
dist: xenial
|
||||
sudo: required
|
||||
compiler: clang
|
||||
- os: osx
|
||||
osx_image: xcode7.3
|
||||
- os: osx
|
||||
osx_image: xcode6.1
|
||||
|
||||
#
|
||||
# Some of the OS X images don't have cmake, contrary to what people
|
||||
# on the Internet say
|
||||
#
|
||||
before_install:
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then which cmake || brew update ; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then which cmake || brew install cmake ; fi
|
||||
osx_image: xcode10.2
|
||||
|
||||
#
|
||||
# The addon source is automatically checked out in $TRAVIS_BUILD_DIR,
|
||||
@@ -36,10 +30,10 @@ before_install:
|
||||
#
|
||||
before_script:
|
||||
- cd $TRAVIS_BUILD_DIR/..
|
||||
- git clone --depth=1 https://github.com/xbmc/xbmc.git -b Krypton
|
||||
- mkdir -p xbmc/project/cmake/addons/addons/pvr.octonet
|
||||
- echo "pvr.octonet https://github.com/DigitalDevices/pvr.octonet master" > xbmc/project/cmake/addons/addons/pvr.octonet/pvr.octonet.txt
|
||||
- cd $TRAVIS_BUILD_DIR && mkdir build && cd build
|
||||
- cmake -DADDONS_TO_BUILD=pvr.octonet -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/project/cmake/addons
|
||||
- git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git
|
||||
- cd ${app_id} && mkdir build && cd build
|
||||
- mkdir -p definition/${app_id}
|
||||
- echo ${app_id} $TRAVIS_BUILD_DIR $TRAVIS_COMMIT > definition/${app_id}/${app_id}.txt
|
||||
- cmake -DADDONS_TO_BUILD=${app_id} -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DADDONS_DEFINITION_DIR=$TRAVIS_BUILD_DIR/build/definition -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons
|
||||
|
||||
script: make
|
||||
|
||||
@@ -1,19 +1,15 @@
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
project(pvr.octonet)
|
||||
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
|
||||
enable_language(CXX)
|
||||
|
||||
find_package(Kodi REQUIRED)
|
||||
find_package(kodiplatform REQUIRED)
|
||||
find_package(p8-platform REQUIRED)
|
||||
find_package(JsonCpp REQUIRED)
|
||||
|
||||
include_directories(
|
||||
${kodiplatform_INCLUDE_DIRS}
|
||||
${p8-platform_INCLUDE_DIRS}
|
||||
${KODI_INCLUDE_DIR}
|
||||
${KODI_INCLUDE_DIR}/.. # Hack way with "/..", need bigger Kodi cmake rework to match right include ways
|
||||
${JSONCPP_INCLUDE_DIRS})
|
||||
|
||||
set(DEPLIBS
|
||||
@@ -26,10 +22,19 @@ set(OCTONET_SOURCES
|
||||
src/Socket.cpp
|
||||
src/rtsp_client.cpp)
|
||||
|
||||
set(OCTONET_HEADERS
|
||||
src/client.h
|
||||
src/OctonetData.h
|
||||
src/Socket.h)
|
||||
|
||||
build_addon(pvr.octonet OCTONET DEPLIBS)
|
||||
|
||||
if(WIN32)
|
||||
target_link_libraries(pvr.octonet wsock32 ws2_32)
|
||||
if(NOT CMAKE_SYSTEM_NAME STREQUAL WindowsStore)
|
||||
target_link_libraries(pvr.octonet wsock32 ws2_32)
|
||||
else()
|
||||
target_link_libraries(pvr.octonet ws2_32)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(CPack)
|
||||
|
||||
1
Jenkinsfile
vendored
Normal file
1
Jenkinsfile
vendored
Normal file
@@ -0,0 +1 @@
|
||||
buildPlugin(version: "Matrix")
|
||||
@@ -20,17 +20,14 @@ $ git clone https://github.com/DigitalDevices/pvr.octonet.git
|
||||
Clone the Kodi repository:
|
||||
|
||||
```
|
||||
$ git clone https://github.com/xbmc/xbmc.git
|
||||
$ git clone --branch master https://github.com/xbmc/xbmc.git
|
||||
```
|
||||
|
||||
If you already have a local Kodi checkout, you can use that one. Just make sure it is recent enough
|
||||
(Kodi 17 Beta 5 or later should work).
|
||||
|
||||
```
|
||||
$ cd pvr.octonet
|
||||
$ mkdir build
|
||||
$ cd build
|
||||
$ cmake -DCMAKE_BUILD_TYPE=Release -DADDONS_TO_BUILD="pvr.octonet" -DADDON_SRC_PREFIX="path to parent of pvr.octonet" -DCMAKE_INSTALL_PREFIX="install" -DPACKAGE_ZIP=ON "path to kodi/project/cmake/addons"
|
||||
$ cmake -DCMAKE_BUILD_TYPE=Release -DADDONS_TO_BUILD="pvr.octonet" -DADDON_SRC_PREFIX="path to parent of pvr.octonet" -DCMAKE_INSTALL_PREFIX="install" -DPACKAGE_ZIP=ON "path to kodi/cmake/addons"
|
||||
```
|
||||
|
||||
On Windows, you should add `-G "NMake Makefiles"` to the CMake invocation. Make sure that
|
||||
|
||||
@@ -29,12 +29,12 @@ artifacts:
|
||||
build_script:
|
||||
- cd ..
|
||||
- set ROOT=%cd%
|
||||
- git clone --depth=1 https://github.com/xbmc/xbmc.git -b Krypton
|
||||
- mkdir xbmc\project\cmake\addons\addons\pvr.octonet
|
||||
- echo pvr.octonet https://github.com/DigitalDevices/pvr.octonet master > xbmc\project\cmake\addons\addons\pvr.octonet\pvr.octonet.txt
|
||||
- git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git
|
||||
- mkdir xbmc\cmake\addons\addons\pvr.octonet
|
||||
- echo pvr.octonet https://github.com/DigitalDevices/pvr.octonet master > xbmc\cmake\addons\addons\pvr.octonet\pvr.octonet.txt
|
||||
- cd %ADDON%
|
||||
- mkdir build
|
||||
- cd build
|
||||
# Must use absolute path for cmake to build depends correctly
|
||||
- cmake -G "%GENERATOR%" -DADDONS_TO_BUILD=%ADDON% -DCMAKE_BUILD_TYPE=%CONFIG% -DADDON_SRC_PREFIX=%ROOT% -DCMAKE_INSTALL_PREFIX=install -DPACKAGE_ZIP=1 %ROOT%\xbmc\project\cmake\addons
|
||||
- cmake -G "%GENERATOR%" -DADDONS_TO_BUILD=%ADDON% -DCMAKE_BUILD_TYPE=%CONFIG% -DADDON_SRC_PREFIX=%ROOT% -DCMAKE_INSTALL_PREFIX=install -DPACKAGE_ZIP=1 %ROOT%\xbmc\cmake\addons
|
||||
- cmake --build . --config %CONFIG%
|
||||
|
||||
4
debian/control
vendored
4
debian/control
vendored
@@ -1,8 +1,8 @@
|
||||
Source: kodi-pvr-octonet
|
||||
Priority: extra
|
||||
Maintainer: Julian Scheel <julian@jusst.de>
|
||||
Build-Depends: debhelper (>= 9.0.0), cmake, libjsoncpp-dev, kodi-pvr-dev,
|
||||
libkodiplatform-dev (>= 16.0.0), kodi-addon-dev
|
||||
Build-Depends: debhelper (>= 9.0.0), cmake, libjsoncpp-dev,
|
||||
libp8-platform-dev, kodi-addon-dev
|
||||
Standards-Version: 3.9.4
|
||||
Section: libs
|
||||
Homepage: https://github.com/DigitalDevices/pvr.octonet
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
project(jsoncpp)
|
||||
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
enable_language(CXX)
|
||||
SET(CMAKE_CXX_STANDARD 11)
|
||||
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
SET(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
set(SOURCES src/lib_json/json_reader.cpp
|
||||
src/lib_json/json_value.cpp
|
||||
|
||||
1
depends/common/jsoncpp/jsoncpp.sha256
Normal file
1
depends/common/jsoncpp/jsoncpp.sha256
Normal file
@@ -0,0 +1 @@
|
||||
3671ba6051e0f30849942cc66d1798fdf0362d089343a83f704c09ee7156604f
|
||||
@@ -1 +1 @@
|
||||
jsoncpp http://mirrors.kodi.tv/build-deps/sources/jsoncpp-src-0.5.0.tar.gz
|
||||
jsoncpp http://mirrors.kodi.tv/build-deps/sources/jsoncpp-1.8.3.tar.gz
|
||||
|
||||
@@ -1,23 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<addon
|
||||
id="pvr.octonet"
|
||||
version="0.3.7"
|
||||
version="1.2.1"
|
||||
name="Digital Devices Octopus NET Client"
|
||||
provider-name="digitaldevices">
|
||||
<requires>
|
||||
<c-pluff version="0.1" />
|
||||
<import addon="xbmc.pvr" version="5.2.1" />
|
||||
</requires>
|
||||
<requires>@ADDON_DEPENDS@</requires>
|
||||
<extension
|
||||
point="xbmc.pvrclient"
|
||||
library_linux="pvr.octonet.so"
|
||||
library_osx="pvr.octonet.dylib"
|
||||
library_freebsd="pvr.octonet.so"
|
||||
library_windx="pvr.octonet.dll"
|
||||
library_android="libpvr.octonet.so" />
|
||||
library_@PLATFORM@="@LIBRARY_FILENAME@"/>
|
||||
<extension point="xbmc.addon.metadata">
|
||||
<summary lang="de_DE">Kodi PVR Addon für Digital Devices Octopus NET Streams</summary>
|
||||
<summary lang="en_US">Kodi PVR Addon for Digital Devices Octopus NET Streams</summary>
|
||||
<platform>all</platform>
|
||||
<platform>@PLATFORM@</platform>
|
||||
</extension>
|
||||
</addon>
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <json/json.h>
|
||||
|
||||
#include "OctonetData.h"
|
||||
#include "p8-platform/util/StringUtils.h"
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
#define timegm _mkgmtime
|
||||
@@ -42,7 +41,7 @@ OctonetData::OctonetData()
|
||||
lastEpgLoad = 0;
|
||||
|
||||
if (!loadChannelList())
|
||||
kodi->QueueNotification(QUEUE_ERROR, kodi->GetLocalizedString(30001), channels.size());
|
||||
libKodi->QueueNotification(QUEUE_ERROR, libKodi->GetLocalizedString(30001), channels.size());
|
||||
}
|
||||
|
||||
OctonetData::~OctonetData(void)
|
||||
@@ -62,15 +61,15 @@ int64_t OctonetData::parseID(std::string id)
|
||||
bool OctonetData::loadChannelList()
|
||||
{
|
||||
std::string jsonContent;
|
||||
void *f = kodi->OpenFile(("http://" + serverAddress + "/channellist.lua?select=json").c_str(), 0);
|
||||
void *f = libKodi->OpenFile(("http://" + serverAddress + "/channellist.lua?select=json").c_str(), 0);
|
||||
if (!f)
|
||||
return false;
|
||||
|
||||
char buf[1024];
|
||||
while (int read = kodi->ReadFile(f, buf, 1024))
|
||||
while (int read = libKodi->ReadFile(f, buf, 1024))
|
||||
jsonContent.append(buf, read);
|
||||
|
||||
kodi->CloseFile(f);
|
||||
libKodi->CloseFile(f);
|
||||
|
||||
Json::Value root;
|
||||
Json::Reader reader;
|
||||
@@ -147,15 +146,15 @@ bool OctonetData::loadEPG(void)
|
||||
return false;
|
||||
|
||||
std::string jsonContent;
|
||||
void *f = kodi->OpenFile(("http://" + serverAddress + "/epg.lua?;#|encoding=gzip").c_str(), 0);
|
||||
void *f = libKodi->OpenFile(("http://" + serverAddress + "/epg.lua?;#|encoding=gzip").c_str(), 0);
|
||||
if (!f)
|
||||
return false;
|
||||
|
||||
char buf[1024];
|
||||
while (int read = kodi->ReadFile(f, buf, 1024))
|
||||
while (int read = libKodi->ReadFile(f, buf, 1024))
|
||||
jsonContent.append(buf, read);
|
||||
|
||||
kodi->CloseFile(f);
|
||||
libKodi->CloseFile(f);
|
||||
|
||||
Json::Value root;
|
||||
Json::Reader reader;
|
||||
@@ -184,7 +183,7 @@ bool OctonetData::loadEPG(void)
|
||||
channel = findChannel(entry.channelId);
|
||||
|
||||
if (channel == NULL) {
|
||||
kodi->Log(LOG_ERROR, "EPG for unknown channel.");
|
||||
libKodi->Log(LOG_ERROR, "EPG for unknown channel.");
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -228,12 +227,12 @@ PVR_ERROR OctonetData::getChannels(ADDON_HANDLE handle, bool bRadio)
|
||||
return PVR_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t start, time_t end)
|
||||
PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, int iChannelUid, time_t start, time_t end)
|
||||
{
|
||||
for (unsigned int i = 0; i < channels.size(); i++)
|
||||
{
|
||||
OctonetChannel &chan = channels.at(i);
|
||||
if (channel.iUniqueId != chan.id)
|
||||
if (iChannelUid != chan.id)
|
||||
continue;
|
||||
|
||||
if(chan.epg.empty()) {
|
||||
@@ -255,7 +254,7 @@ PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, t
|
||||
EPG_TAG entry;
|
||||
memset(&entry, 0, sizeof(EPG_TAG));
|
||||
|
||||
entry.iChannelNumber = i;
|
||||
entry.iUniqueChannelId = chan.id;
|
||||
entry.iUniqueBroadcastId = it->id;
|
||||
entry.strTitle = it->title.c_str();
|
||||
entry.strPlotOutline = it->subtitle.c_str();
|
||||
@@ -276,7 +275,7 @@ PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, t
|
||||
EPG_TAG entry;
|
||||
memset(&entry, 0, sizeof(EPG_TAG));
|
||||
|
||||
entry.iChannelNumber = i;
|
||||
entry.iUniqueChannelId = chan.id;
|
||||
entry.iUniqueBroadcastId = it->id;
|
||||
entry.strTitle = it->title.c_str();
|
||||
entry.strPlotOutline = it->subtitle.c_str();
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include <vector>
|
||||
|
||||
#include "p8-platform/threads/threads.h"
|
||||
#include "p8-platform/util/StdString.h"
|
||||
#include "client.h"
|
||||
|
||||
struct OctonetEpgEntry
|
||||
@@ -69,7 +68,7 @@ class OctonetData : public P8PLATFORM::CThread
|
||||
virtual PVR_ERROR getGroups(ADDON_HANDLE handle, bool bRadio);
|
||||
virtual PVR_ERROR getGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group);
|
||||
|
||||
virtual PVR_ERROR getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t start, time_t end);
|
||||
virtual PVR_ERROR getEPG(ADDON_HANDLE handle, int iChannelUid, time_t start, time_t end);
|
||||
const std::string& getUrl(int id) const;
|
||||
const std::string& getName(int id) const;
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
#include "libXBMC_addon.h"
|
||||
#include "kodi/libXBMC_addon.h"
|
||||
#include <string>
|
||||
#include "p8-platform/os.h"
|
||||
#include "client.h"
|
||||
@@ -196,13 +196,13 @@ int Socket::send ( const char* data, const unsigned int len )
|
||||
|
||||
if (result < 0)
|
||||
{
|
||||
kodi->Log(LOG_ERROR, "Socket::send - select failed");
|
||||
libKodi->Log(LOG_ERROR, "Socket::send - select failed");
|
||||
close();
|
||||
return 0;
|
||||
}
|
||||
if (FD_ISSET(_sd, &set_w))
|
||||
{
|
||||
kodi->Log(LOG_ERROR, "Socket::send - failed to send data");
|
||||
libKodi->Log(LOG_ERROR, "Socket::send - failed to send data");
|
||||
close();
|
||||
return 0;
|
||||
}
|
||||
@@ -212,7 +212,7 @@ int Socket::send ( const char* data, const unsigned int len )
|
||||
if (status == -1)
|
||||
{
|
||||
errormessage( getLastError(), "Socket::send");
|
||||
kodi->Log(LOG_ERROR, "Socket::send - failed to send data");
|
||||
libKodi->Log(LOG_ERROR, "Socket::send - failed to send data");
|
||||
close();
|
||||
return 0;
|
||||
}
|
||||
@@ -296,7 +296,7 @@ bool Socket::ReadLine (string& line)
|
||||
|
||||
if (result < 0)
|
||||
{
|
||||
kodi->Log(LOG_DEBUG, "%s: select failed", __FUNCTION__);
|
||||
libKodi->Log(LOG_DEBUG, "%s: select failed", __FUNCTION__);
|
||||
errormessage(getLastError(), __FUNCTION__);
|
||||
close();
|
||||
return false;
|
||||
@@ -306,11 +306,11 @@ bool Socket::ReadLine (string& line)
|
||||
{
|
||||
if (retries != 0)
|
||||
{
|
||||
kodi->Log(LOG_DEBUG, "%s: timeout waiting for response, retrying... (%i)", __FUNCTION__, retries);
|
||||
libKodi->Log(LOG_DEBUG, "%s: timeout waiting for response, retrying... (%i)", __FUNCTION__, retries);
|
||||
retries--;
|
||||
continue;
|
||||
} else {
|
||||
kodi->Log(LOG_DEBUG, "%s: timeout waiting for response. Aborting after 10 retries.", __FUNCTION__);
|
||||
libKodi->Log(LOG_DEBUG, "%s: timeout waiting for response. Aborting after 10 retries.", __FUNCTION__);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -318,7 +318,7 @@ bool Socket::ReadLine (string& line)
|
||||
result = recv(_sd, buffer, sizeof(buffer) - 1, 0);
|
||||
if (result < 0)
|
||||
{
|
||||
kodi->Log(LOG_DEBUG, "%s: recv failed", __FUNCTION__);
|
||||
libKodi->Log(LOG_DEBUG, "%s: recv failed", __FUNCTION__);
|
||||
errormessage(getLastError(), __FUNCTION__);
|
||||
close();
|
||||
return false;
|
||||
@@ -389,7 +389,7 @@ bool Socket::connect ( const std::string& host, const unsigned short port )
|
||||
|
||||
if ( !setHostname( host ) )
|
||||
{
|
||||
kodi->Log(LOG_ERROR, "Socket::setHostname(%s) failed.\n", host.c_str());
|
||||
libKodi->Log(LOG_ERROR, "Socket::setHostname(%s) failed.\n", host.c_str());
|
||||
return false;
|
||||
}
|
||||
_port = port;
|
||||
@@ -438,7 +438,7 @@ bool Socket::connect ( const std::string& host, const unsigned short port )
|
||||
|
||||
if (address == NULL)
|
||||
{
|
||||
kodi->Log(LOG_ERROR, "Socket::connect %s:%u\n", host.c_str(), port);
|
||||
libKodi->Log(LOG_ERROR, "Socket::connect %s:%u\n", host.c_str(), port);
|
||||
errormessage(getLastError(), "Socket::connect");
|
||||
close();
|
||||
return false;
|
||||
@@ -474,7 +474,7 @@ bool Socket::set_non_blocking ( const bool b )
|
||||
|
||||
if (ioctlsocket(_sd, FIONBIO, &iMode) == -1)
|
||||
{
|
||||
kodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket condition to: %i", iMode);
|
||||
libKodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket condition to: %i", iMode);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -565,7 +565,7 @@ void Socket::errormessage( int errnum, const char* functionname) const
|
||||
default:
|
||||
errmsg = "WSA Error";
|
||||
}
|
||||
kodi->Log(LOG_ERROR, "%s: (Winsock error=%i) %s\n", functionname, errnum, errmsg);
|
||||
libKodi->Log(LOG_ERROR, "%s: (Winsock error=%i) %s\n", functionname, errnum, errmsg);
|
||||
}
|
||||
|
||||
int Socket::getLastError() const
|
||||
@@ -623,7 +623,7 @@ bool Socket::set_non_blocking ( const bool b )
|
||||
|
||||
if(fcntl (_sd , F_SETFL, opts) == -1)
|
||||
{
|
||||
kodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket flags to: %i", opts);
|
||||
libKodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket flags to: %i", opts);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -699,7 +699,7 @@ void Socket::errormessage( int errnum, const char* functionname) const
|
||||
break;
|
||||
}
|
||||
|
||||
kodi->Log(LOG_ERROR, "%s: (errno=%i) %s\n", functionname, errnum, errmsg);
|
||||
libKodi->Log(LOG_ERROR, "%s: (errno=%i) %s\n", functionname, errnum, errmsg);
|
||||
}
|
||||
|
||||
int Socket::getLastError() const
|
||||
|
||||
104
src/client.cpp
104
src/client.cpp
@@ -21,10 +21,10 @@
|
||||
*/
|
||||
|
||||
#include "client.h"
|
||||
#include <xbmc_pvr_dll.h>
|
||||
#include <libXBMC_addon.h>
|
||||
#include <kodi/xbmc_pvr_dll.h>
|
||||
#include <kodi/libXBMC_addon.h>
|
||||
#include <p8-platform/util/util.h>
|
||||
#include <libKODI_guilib.h>
|
||||
#include <kodi/libKODI_guilib.h>
|
||||
|
||||
#include "OctonetData.h"
|
||||
#include "rtsp_client.hpp"
|
||||
@@ -36,7 +36,7 @@ std::string octonetAddress = "";
|
||||
|
||||
/* internal state variables */
|
||||
ADDON_STATUS addonStatus = ADDON_STATUS_UNKNOWN;
|
||||
CHelper_libXBMC_addon *kodi = NULL;
|
||||
CHelper_libXBMC_addon *libKodi = NULL;
|
||||
CHelper_libXBMC_pvr *pvr = NULL;
|
||||
|
||||
OctonetData *data = NULL;
|
||||
@@ -49,7 +49,7 @@ extern "C" {
|
||||
void ADDON_ReadSettings(void)
|
||||
{
|
||||
char buffer[2048];
|
||||
if (kodi->GetSetting("octonetAddress", &buffer))
|
||||
if (libKodi->GetSetting("octonetAddress", &buffer))
|
||||
octonetAddress = buffer;
|
||||
}
|
||||
|
||||
@@ -59,22 +59,22 @@ ADDON_STATUS ADDON_Create(void *callbacks, void* props)
|
||||
return ADDON_STATUS_UNKNOWN;
|
||||
|
||||
PVR_PROPERTIES *pvrprops = (PVR_PROPERTIES*)props;
|
||||
kodi = new CHelper_libXBMC_addon;
|
||||
if (!kodi->RegisterMe(callbacks)) {
|
||||
kodi->Log(LOG_ERROR, "%s: Failed to register octonet addon", __func__);
|
||||
SAFE_DELETE(kodi);
|
||||
libKodi = new CHelper_libXBMC_addon;
|
||||
if (!libKodi->RegisterMe(callbacks)) {
|
||||
libKodi->Log(LOG_ERROR, "%s: Failed to register octonet addon", __func__);
|
||||
SAFE_DELETE(libKodi);
|
||||
return ADDON_STATUS_PERMANENT_FAILURE;
|
||||
}
|
||||
|
||||
pvr = new CHelper_libXBMC_pvr;
|
||||
if (!pvr->RegisterMe(callbacks)) {
|
||||
kodi->Log(LOG_ERROR, "%s: Failed to register octonet pvr addon", __func__);
|
||||
libKodi->Log(LOG_ERROR, "%s: Failed to register octonet pvr addon", __func__);
|
||||
SAFE_DELETE(pvr);
|
||||
SAFE_DELETE(kodi);
|
||||
SAFE_DELETE(libKodi);
|
||||
return ADDON_STATUS_PERMANENT_FAILURE;
|
||||
}
|
||||
|
||||
kodi->Log(LOG_DEBUG, "%s: Creating octonet pvr addon", __func__);
|
||||
libKodi->Log(LOG_DEBUG, "%s: Creating octonet pvr addon", __func__);
|
||||
ADDON_ReadSettings();
|
||||
|
||||
data = new OctonetData;
|
||||
@@ -83,12 +83,10 @@ ADDON_STATUS ADDON_Create(void *callbacks, void* props)
|
||||
return addonStatus;
|
||||
}
|
||||
|
||||
void ADDON_Stop() {} /* no-op */
|
||||
|
||||
void ADDON_Destroy()
|
||||
{
|
||||
delete pvr;
|
||||
delete kodi;
|
||||
delete libKodi;
|
||||
addonStatus = ADDON_STATUS_UNKNOWN;
|
||||
}
|
||||
|
||||
@@ -97,16 +95,6 @@ ADDON_STATUS ADDON_GetStatus()
|
||||
return addonStatus;
|
||||
}
|
||||
|
||||
bool ADDON_HasSettings()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
unsigned int ADDON_GetSettings(ADDON_StructSetting ***sSet)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue)
|
||||
{
|
||||
/* For simplicity do a full addon restart whenever settings are
|
||||
@@ -114,9 +102,6 @@ ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue)
|
||||
return ADDON_STATUS_NEED_RESTART;
|
||||
}
|
||||
|
||||
void ADDON_FreeSettings() {} /* no-op */
|
||||
void ADDON_Announce(const char *flag, const char *sender, const char *message, const void *data) {} /* no-op */
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -125,32 +110,16 @@ void ADDON_Announce(const char *flag, const char *sender, const char *message, c
|
||||
extern "C"
|
||||
{
|
||||
|
||||
const char* GetPVRAPIVersion(void)
|
||||
{
|
||||
return XBMC_PVR_API_VERSION;
|
||||
}
|
||||
|
||||
const char* GetMininumPVRAPIVersion(void)
|
||||
{
|
||||
return XBMC_PVR_MIN_API_VERSION;
|
||||
}
|
||||
|
||||
const char* GetGUIAPIVersion(void)
|
||||
{
|
||||
return KODI_GUILIB_API_VERSION;
|
||||
}
|
||||
|
||||
const char* GetMininumGUIAPIVersion(void)
|
||||
{
|
||||
return KODI_GUILIB_MIN_API_VERSION;
|
||||
}
|
||||
|
||||
PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES *pCapabilities)
|
||||
{
|
||||
pCapabilities->bSupportsTV = true;
|
||||
pCapabilities->bSupportsRadio = true;
|
||||
pCapabilities->bSupportsChannelGroups = true;
|
||||
pCapabilities->bSupportsEPG = true;
|
||||
pCapabilities->bSupportsRecordings = false;
|
||||
pCapabilities->bSupportsRecordingsRename = false;
|
||||
pCapabilities->bSupportsRecordingsLifetimeChange = false;
|
||||
pCapabilities->bSupportsDescrambleInfo = false;
|
||||
|
||||
return PVR_ERROR_NO_ERROR;
|
||||
}
|
||||
@@ -162,7 +131,7 @@ const char* GetBackendName(void)
|
||||
|
||||
const char* GetBackendVersion(void)
|
||||
{
|
||||
return XBMC_PVR_API_VERSION;
|
||||
return STR(OCTONET_VERSION);
|
||||
}
|
||||
|
||||
const char* GetConnectionString(void)
|
||||
@@ -174,12 +143,12 @@ PVR_ERROR GetDriveSpace(long long* iTotal, long long* iUsed) { return PVR_ERROR_
|
||||
PVR_ERROR CallMenuHook(const PVR_MENUHOOK& menuhook, const PVR_MENUHOOK_DATA &item) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
|
||||
void OnSystemSleep() {
|
||||
kodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
|
||||
libKodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
|
||||
// FIXME: Disconnect?
|
||||
}
|
||||
|
||||
void OnSystemWake() {
|
||||
kodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
|
||||
libKodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
|
||||
// FIXME:Reconnect?
|
||||
}
|
||||
|
||||
@@ -187,11 +156,14 @@ void OnPowerSavingActivated() {}
|
||||
void OnPowerSavingDeactivated() {}
|
||||
|
||||
/* EPG */
|
||||
PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL& channel, time_t iStart, time_t iEnd)
|
||||
PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, int iChannelUid, time_t iStart, time_t iEnd)
|
||||
{
|
||||
return data->getEPG(handle, channel, iStart, iEnd);
|
||||
return data->getEPG(handle, iChannelUid, iStart, iEnd);
|
||||
}
|
||||
|
||||
PVR_ERROR IsEPGTagRecordable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR IsEPGTagPlayable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
|
||||
/* Channel groups */
|
||||
int GetChannelGroupsAmount(void)
|
||||
{
|
||||
@@ -223,7 +195,6 @@ PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio)
|
||||
|
||||
PVR_ERROR DeleteChannel(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR RenameChannel(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR MoveChannel(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
|
||||
@@ -234,6 +205,7 @@ PVR_ERROR DeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT
|
||||
PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR RenameRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR SetRecordingLifetime(const PVR_RECORDING*) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR SetRecordingPlayCount(const PVR_RECORDING& recording, int count) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR SetRecordingLastPlayedPosition(const PVR_RECORDING& recording, int lastplayedposition) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
int GetRecordingLastPlayedPosition(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
@@ -245,6 +217,13 @@ PVR_ERROR AddTimer(const PVR_TIMER& timer) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR DeleteTimer(const PVR_TIMER& timer, bool bForceDelete) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR UpdateTimer(const PVR_TIMER& timer) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
|
||||
/* PVR stream properties handling */
|
||||
PVR_ERROR GetStreamReadChunkSize(int* chunksize) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR GetRecordingStreamProperties(const PVR_RECORDING*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR GetEPGTagStreamProperties(const EPG_TAG*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR GetEPGTagEdl(const EPG_TAG* epgTag, PVR_EDL_ENTRY edl[], int *size) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
|
||||
/* PVR stream handling */
|
||||
/* entirely unused, as we use standard RTSP+TS mux, which can be handlded by
|
||||
* Kodi core */
|
||||
@@ -261,30 +240,24 @@ void CloseLiveStream(void) {
|
||||
}
|
||||
|
||||
long long SeekLiveStream(long long iPosition, int iWhence) { return -1; }
|
||||
long long PositionLiveStream(void) { return -1; }
|
||||
long long LengthLiveStream(void) { return -1; }
|
||||
bool IsRealTimeStream(void) { return true; }
|
||||
|
||||
bool SwitchChannel(const PVR_CHANNEL& channel) {
|
||||
CloseLiveStream();
|
||||
return OpenLiveStream(channel);
|
||||
}
|
||||
|
||||
PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS& signalStatus) {
|
||||
memset(&signalStatus, 0, sizeof(PVR_SIGNAL_STATUS));
|
||||
rtsp_fill_signal_status(signalStatus);
|
||||
return PVR_ERROR_NO_ERROR;
|
||||
}
|
||||
|
||||
const char* GetLiveStreamURL(const PVR_CHANNEL& channel) { return NULL; }
|
||||
PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES *times) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
PVR_ERROR GetDescrambleInfo(PVR_DESCRAMBLE_INFO*) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
|
||||
/* Recording stream handling */
|
||||
bool OpenRecordedStream(const PVR_RECORDING& recording) { return false; }
|
||||
void CloseRecordedStream(void) {}
|
||||
int ReadRecordedStream(unsigned char* pBuffer, unsigned int iBufferSize) { return -1; }
|
||||
long long SeekRecordedStream(long long iPosition, int iWhence) { return -1; }
|
||||
long long PositionRecordedStream(void) { return -1; }
|
||||
long long LengthRecordedStream(void) { return -1; }
|
||||
|
||||
/* PVR demuxer */
|
||||
@@ -293,10 +266,9 @@ void DemuxReset(void) {}
|
||||
void DemuxAbort(void) {}
|
||||
void DemuxFlush(void) {}
|
||||
DemuxPacket* DemuxRead(void) { return NULL; }
|
||||
void FillBuffer(bool mode) {}
|
||||
|
||||
/* Various helper functions */
|
||||
unsigned int GetChannelSwitchDelay(void) { return 0; }
|
||||
bool IsTimeshifting(void) { return false; }
|
||||
bool CanPauseStream() { return false; }
|
||||
bool CanSeekStream() { return false; }
|
||||
|
||||
@@ -306,10 +278,6 @@ bool SeekTime(double time, bool backwards, double *startpts) { return false; }
|
||||
void SetSpeed(int speed) {}
|
||||
PVR_ERROR SetEPGTimeFrame(int) { return PVR_ERROR_NOT_IMPLEMENTED; }
|
||||
|
||||
time_t GetPlayingTime() { return 0; }
|
||||
time_t GetBufferTimeStart() { return 0; }
|
||||
time_t GetBufferTimeEnd() { return 0; }
|
||||
|
||||
const char* GetBackendHostname()
|
||||
{
|
||||
return octonetAddress.c_str();
|
||||
|
||||
@@ -21,14 +21,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "libXBMC_addon.h"
|
||||
#include "libXBMC_pvr.h"
|
||||
#include "kodi/libXBMC_addon.h"
|
||||
#include "kodi/libXBMC_pvr.h"
|
||||
|
||||
#ifndef __func__
|
||||
#define __func__ __FUNCTION__
|
||||
#endif
|
||||
|
||||
extern ADDON::CHelper_libXBMC_addon *kodi;
|
||||
extern ADDON::CHelper_libXBMC_addon *libKodi;
|
||||
extern CHelper_libXBMC_pvr *pvr;
|
||||
|
||||
/* IP or hostname of the octonet to be connected to */
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "Socket.h"
|
||||
#include "client.h"
|
||||
#include <p8-platform/util/util.h>
|
||||
#include <libXBMC_addon.h>
|
||||
#include <kodi/libXBMC_addon.h>
|
||||
#include <cstring>
|
||||
#include <sstream>
|
||||
|
||||
@@ -309,13 +309,13 @@ bool rtsp_open(const string& name, const string& url_str)
|
||||
rtsp->level = 0;
|
||||
rtsp->quality = 0;
|
||||
|
||||
kodi->Log(LOG_DEBUG, "try to open '%s'", url_str.c_str());
|
||||
libKodi->Log(LOG_DEBUG, "try to open '%s'", url_str.c_str());
|
||||
|
||||
url dst = parse_url(url_str);
|
||||
kodi->Log(LOG_DEBUG, "connect to host '%s'", dst.host.c_str());
|
||||
libKodi->Log(LOG_DEBUG, "connect to host '%s'", dst.host.c_str());
|
||||
|
||||
if(!rtsp->tcp_sock.connect(dst.host, dst.port)) {
|
||||
kodi->Log(LOG_ERROR, "Failed to connect to RTSP server %s:%d", dst.host.c_str(), dst.port);
|
||||
libKodi->Log(LOG_ERROR, "Failed to connect to RTSP server %s:%d", dst.host.c_str(), dst.port);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -353,7 +353,7 @@ bool rtsp_open(const string& name, const string& url_str)
|
||||
rtsp->tcp_sock.send(setup_ss.str());
|
||||
|
||||
if (rtsp_handle() != RTSP_RESULT_OK) {
|
||||
kodi->Log(LOG_ERROR, "Failed to setup RTSP session");
|
||||
libKodi->Log(LOG_ERROR, "Failed to setup RTSP session");
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -368,7 +368,7 @@ bool rtsp_open(const string& name, const string& url_str)
|
||||
rtsp->tcp_sock.send(play_ss.str());
|
||||
|
||||
if (rtsp_handle() != RTSP_RESULT_OK) {
|
||||
kodi->Log(LOG_ERROR, "Failed to play RTSP session");
|
||||
libKodi->Log(LOG_ERROR, "Failed to play RTSP session");
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -453,7 +453,7 @@ static void rtsp_teardown() {
|
||||
rtsp->tcp_sock.send(ss.str());
|
||||
|
||||
if (rtsp_handle() != RTSP_RESULT_OK) {
|
||||
kodi->Log(LOG_ERROR, "Failed to teardown RTSP session");
|
||||
libKodi->Log(LOG_ERROR, "Failed to teardown RTSP session");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define _RTSP_CLIENT_HPP_
|
||||
|
||||
#include <string>
|
||||
#include <xbmc_pvr_types.h>
|
||||
#include <kodi/xbmc_pvr_types.h>
|
||||
|
||||
bool rtsp_open(const std::string& name, const std::string& url_str);
|
||||
void rtsp_close();
|
||||
|
||||
Reference in New Issue
Block a user