mirror of
				https://github.com/DigitalDevices/pvr.octonet.git
				synced 2025-03-01 10:53:09 +00:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			1.1.0-1-Ma
			...
			0.3.7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | d4077a142c | ||
|  | 6ee28476fa | ||
|  | de0a0f9a81 | ||
|  | 1b0c31654a | ||
|  | f260cb07e9 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,2 +1 @@ | |||||||
| /build | /build | ||||||
| pvr.octonet/addon.xml |  | ||||||
|   | |||||||
| @@ -36,10 +36,10 @@ before_install: | |||||||
| # | # | ||||||
| before_script: | before_script: | ||||||
|   - cd $TRAVIS_BUILD_DIR/.. |   - cd $TRAVIS_BUILD_DIR/.. | ||||||
|   - git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git |   - git clone --depth=1 https://github.com/xbmc/xbmc.git -b Krypton | ||||||
|   - mkdir -p xbmc/cmake/addons/addons/pvr.octonet |   - mkdir -p xbmc/project/cmake/addons/addons/pvr.octonet | ||||||
|   - echo "pvr.octonet https://github.com/DigitalDevices/pvr.octonet master" > xbmc/cmake/addons/addons/pvr.octonet/pvr.octonet.txt |   - 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 |   - 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/cmake/addons |   - 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 | ||||||
|  |  | ||||||
| script: make | script: make | ||||||
|   | |||||||
| @@ -6,10 +6,12 @@ list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) | |||||||
| enable_language(CXX) | enable_language(CXX) | ||||||
|  |  | ||||||
| find_package(Kodi REQUIRED) | find_package(Kodi REQUIRED) | ||||||
|  | find_package(kodiplatform REQUIRED) | ||||||
| find_package(p8-platform REQUIRED) | find_package(p8-platform REQUIRED) | ||||||
| find_package(JsonCpp REQUIRED) | find_package(JsonCpp REQUIRED) | ||||||
|  |  | ||||||
| include_directories( | include_directories( | ||||||
|  | 	${kodiplatform_INCLUDE_DIRS} | ||||||
| 	${p8-platform_INCLUDE_DIRS} | 	${p8-platform_INCLUDE_DIRS} | ||||||
| 	${KODI_INCLUDE_DIR} | 	${KODI_INCLUDE_DIR} | ||||||
| 	${JSONCPP_INCLUDE_DIRS}) | 	${JSONCPP_INCLUDE_DIRS}) | ||||||
| @@ -24,19 +26,10 @@ set(OCTONET_SOURCES | |||||||
| 	src/Socket.cpp | 	src/Socket.cpp | ||||||
| 	src/rtsp_client.cpp) | 	src/rtsp_client.cpp) | ||||||
|  |  | ||||||
| set(OCTONET_HEADERS |  | ||||||
| 	src/client.h |  | ||||||
| 	src/OctonetData.h |  | ||||||
| 	src/Socket.h) |  | ||||||
|  |  | ||||||
| build_addon(pvr.octonet OCTONET DEPLIBS) | build_addon(pvr.octonet OCTONET DEPLIBS) | ||||||
|  |  | ||||||
| if(WIN32) | if(WIN32) | ||||||
| 	if(NOT CMAKE_SYSTEM_NAME STREQUAL WindowsStore) | 	target_link_libraries(pvr.octonet wsock32 ws2_32) | ||||||
| 		target_link_libraries(pvr.octonet wsock32 ws2_32) |  | ||||||
| 	else() |  | ||||||
| 		target_link_libraries(pvr.octonet ws2_32) |  | ||||||
| 	endif() |  | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| include(CPack) | include(CPack) | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| buildPlugin(version: "Matrix") |  | ||||||
| @@ -20,14 +20,17 @@ $ git clone https://github.com/DigitalDevices/pvr.octonet.git | |||||||
| Clone the Kodi repository: | Clone the Kodi repository: | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| $ git clone --branch master https://github.com/xbmc/xbmc.git | $ git clone 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 | $ cd pvr.octonet | ||||||
| $ mkdir build | $ mkdir build | ||||||
| $ cd 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/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/project/cmake/addons" | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| On Windows, you should add `-G "NMake Makefiles"` to the CMake invocation. Make sure that | On Windows, you should add `-G "NMake Makefiles"` to the CMake invocation. Make sure that | ||||||
|   | |||||||
| @@ -29,12 +29,12 @@ artifacts: | |||||||
| build_script: | build_script: | ||||||
|   - cd .. |   - cd .. | ||||||
|   - set ROOT=%cd% |   - set ROOT=%cd% | ||||||
|   - git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git |   - git clone --depth=1 https://github.com/xbmc/xbmc.git -b Krypton | ||||||
|   - mkdir xbmc\cmake\addons\addons\pvr.octonet |   - mkdir xbmc\project\cmake\addons\addons\pvr.octonet | ||||||
|   - echo pvr.octonet https://github.com/DigitalDevices/pvr.octonet master > xbmc\cmake\addons\addons\pvr.octonet\pvr.octonet.txt |   - echo pvr.octonet https://github.com/DigitalDevices/pvr.octonet master > xbmc\project\cmake\addons\addons\pvr.octonet\pvr.octonet.txt | ||||||
|   - cd %ADDON% |   - cd %ADDON% | ||||||
|   - mkdir build |   - mkdir build | ||||||
|   - cd build |   - cd build | ||||||
|   # Must use absolute path for cmake to build depends correctly |   # 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\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\project\cmake\addons | ||||||
|   - cmake --build . --config %CONFIG% |   - cmake --build . --config %CONFIG% | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +1,8 @@ | |||||||
| Source: kodi-pvr-octonet | Source: kodi-pvr-octonet | ||||||
| Priority: extra | Priority: extra | ||||||
| Maintainer: Julian Scheel <julian@jusst.de> | Maintainer: Julian Scheel <julian@jusst.de> | ||||||
| Build-Depends: debhelper (>= 9.0.0), cmake, libjsoncpp-dev, | Build-Depends: debhelper (>= 9.0.0), cmake, libjsoncpp-dev, kodi-pvr-dev, | ||||||
|                libp8-platform-dev, kodi-addon-dev |                libkodiplatform-dev (>= 16.0.0), kodi-addon-dev | ||||||
| Standards-Version: 3.9.4 | Standards-Version: 3.9.4 | ||||||
| Section: libs | Section: libs | ||||||
| Homepage: https://github.com/DigitalDevices/pvr.octonet | Homepage: https://github.com/DigitalDevices/pvr.octonet | ||||||
|   | |||||||
| @@ -1,10 +1,7 @@ | |||||||
| project(jsoncpp) | project(jsoncpp) | ||||||
|  |  | ||||||
| cmake_minimum_required(VERSION 3.1) | cmake_minimum_required(VERSION 2.6) | ||||||
| enable_language(CXX) | 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 | set(SOURCES src/lib_json/json_reader.cpp | ||||||
|             src/lib_json/json_value.cpp |             src/lib_json/json_value.cpp | ||||||
|   | |||||||
| @@ -1 +0,0 @@ | |||||||
| 3671ba6051e0f30849942cc66d1798fdf0362d089343a83f704c09ee7156604f |  | ||||||
| @@ -1 +1 @@ | |||||||
| jsoncpp http://mirrors.kodi.tv/build-deps/sources/jsoncpp-1.8.3.tar.gz | jsoncpp http://mirrors.kodi.tv/build-deps/sources/jsoncpp-src-0.5.0.tar.gz | ||||||
|   | |||||||
| @@ -1,16 +1,23 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
| <addon | <addon | ||||||
| 	id="pvr.octonet" | 	id="pvr.octonet" | ||||||
| 	version="1.1.0" | 	version="0.3.7" | ||||||
| 	name="Digital Devices Octopus NET Client" | 	name="Digital Devices Octopus NET Client" | ||||||
| 	provider-name="digitaldevices"> | 	provider-name="digitaldevices"> | ||||||
| 	<requires>@ADDON_DEPENDS@</requires> | 	<requires> | ||||||
|  | 		<c-pluff version="0.1" /> | ||||||
|  | 		<import addon="xbmc.pvr" version="5.2.1" /> | ||||||
|  | 	</requires> | ||||||
| 	<extension | 	<extension | ||||||
| 		point="xbmc.pvrclient" | 		point="xbmc.pvrclient" | ||||||
| 		library_@PLATFORM@="@LIBRARY_FILENAME@"/> | 		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" /> | ||||||
| 	<extension point="xbmc.addon.metadata"> | 	<extension point="xbmc.addon.metadata"> | ||||||
| 		<summary lang="de_DE">Kodi PVR Addon für Digital Devices Octopus NET Streams</summary> | 		<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> | 		<summary lang="en_US">Kodi PVR Addon for Digital Devices Octopus NET Streams</summary> | ||||||
| 		<platform>@PLATFORM@</platform> | 		<platform>all</platform> | ||||||
| 	</extension> | 	</extension> | ||||||
| </addon> | </addon> | ||||||
| @@ -26,6 +26,7 @@ | |||||||
| #include <json/json.h> | #include <json/json.h> | ||||||
|  |  | ||||||
| #include "OctonetData.h" | #include "OctonetData.h" | ||||||
|  | #include "p8-platform/util/StringUtils.h" | ||||||
|  |  | ||||||
| #ifdef __WINDOWS__ | #ifdef __WINDOWS__ | ||||||
| #define timegm _mkgmtime | #define timegm _mkgmtime | ||||||
| @@ -41,7 +42,7 @@ OctonetData::OctonetData() | |||||||
| 	lastEpgLoad = 0; | 	lastEpgLoad = 0; | ||||||
|  |  | ||||||
| 	if (!loadChannelList()) | 	if (!loadChannelList()) | ||||||
| 		libKodi->QueueNotification(QUEUE_ERROR, libKodi->GetLocalizedString(30001), channels.size()); | 		kodi->QueueNotification(QUEUE_ERROR, kodi->GetLocalizedString(30001), channels.size()); | ||||||
| } | } | ||||||
|  |  | ||||||
| OctonetData::~OctonetData(void) | OctonetData::~OctonetData(void) | ||||||
| @@ -61,15 +62,15 @@ int64_t OctonetData::parseID(std::string id) | |||||||
| bool OctonetData::loadChannelList() | bool OctonetData::loadChannelList() | ||||||
| { | { | ||||||
| 	std::string jsonContent; | 	std::string jsonContent; | ||||||
| 	void *f = libKodi->OpenFile(("http://" + serverAddress + "/channellist.lua?select=json").c_str(), 0); | 	void *f = kodi->OpenFile(("http://" + serverAddress + "/channellist.lua?select=json").c_str(), 0); | ||||||
| 	if (!f) | 	if (!f) | ||||||
| 		return false; | 		return false; | ||||||
|  |  | ||||||
| 	char buf[1024]; | 	char buf[1024]; | ||||||
| 	while (int read = libKodi->ReadFile(f, buf, 1024)) | 	while (int read = kodi->ReadFile(f, buf, 1024)) | ||||||
| 		jsonContent.append(buf, read); | 		jsonContent.append(buf, read); | ||||||
|  |  | ||||||
| 	libKodi->CloseFile(f); | 	kodi->CloseFile(f); | ||||||
|  |  | ||||||
| 	Json::Value root; | 	Json::Value root; | ||||||
| 	Json::Reader reader; | 	Json::Reader reader; | ||||||
| @@ -146,15 +147,15 @@ bool OctonetData::loadEPG(void) | |||||||
| 		return false; | 		return false; | ||||||
|  |  | ||||||
| 	std::string jsonContent; | 	std::string jsonContent; | ||||||
| 	void *f = libKodi->OpenFile(("http://" + serverAddress + "/epg.lua?;#|encoding=gzip").c_str(), 0); | 	void *f = kodi->OpenFile(("http://" + serverAddress + "/epg.lua?;#|encoding=gzip").c_str(), 0); | ||||||
| 	if (!f) | 	if (!f) | ||||||
| 		return false; | 		return false; | ||||||
|  |  | ||||||
| 	char buf[1024]; | 	char buf[1024]; | ||||||
| 	while (int read = libKodi->ReadFile(f, buf, 1024)) | 	while (int read = kodi->ReadFile(f, buf, 1024)) | ||||||
| 		jsonContent.append(buf, read); | 		jsonContent.append(buf, read); | ||||||
|  |  | ||||||
| 	libKodi->CloseFile(f); | 	kodi->CloseFile(f); | ||||||
|  |  | ||||||
| 	Json::Value root; | 	Json::Value root; | ||||||
| 	Json::Reader reader; | 	Json::Reader reader; | ||||||
| @@ -183,7 +184,7 @@ bool OctonetData::loadEPG(void) | |||||||
| 			channel = findChannel(entry.channelId); | 			channel = findChannel(entry.channelId); | ||||||
|  |  | ||||||
| 		if (channel == NULL) { | 		if (channel == NULL) { | ||||||
| 			libKodi->Log(LOG_ERROR, "EPG for unknown channel."); | 			kodi->Log(LOG_ERROR, "EPG for unknown channel."); | ||||||
| 			continue; | 			continue; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -227,12 +228,12 @@ PVR_ERROR OctonetData::getChannels(ADDON_HANDLE handle, bool bRadio) | |||||||
| 	return PVR_ERROR_NO_ERROR; | 	return PVR_ERROR_NO_ERROR; | ||||||
| } | } | ||||||
|  |  | ||||||
| PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, int iChannelUid, time_t start, time_t end) | PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t start, time_t end) | ||||||
| { | { | ||||||
| 	for (unsigned int i = 0; i < channels.size(); i++) | 	for (unsigned int i = 0; i < channels.size(); i++) | ||||||
| 	{ | 	{ | ||||||
| 		OctonetChannel &chan = channels.at(i); | 		OctonetChannel &chan = channels.at(i); | ||||||
| 		if (iChannelUid != chan.id) | 		if (channel.iUniqueId != chan.id) | ||||||
| 			continue; | 			continue; | ||||||
|  |  | ||||||
| 		if(chan.epg.empty()) { | 		if(chan.epg.empty()) { | ||||||
| @@ -254,7 +255,7 @@ PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, int iChannelUid, time_t start | |||||||
| 			EPG_TAG entry; | 			EPG_TAG entry; | ||||||
| 			memset(&entry, 0, sizeof(EPG_TAG)); | 			memset(&entry, 0, sizeof(EPG_TAG)); | ||||||
|  |  | ||||||
| 			entry.iUniqueChannelId = chan.id; | 			entry.iChannelNumber = i; | ||||||
| 			entry.iUniqueBroadcastId = it->id; | 			entry.iUniqueBroadcastId = it->id; | ||||||
| 			entry.strTitle = it->title.c_str(); | 			entry.strTitle = it->title.c_str(); | ||||||
| 			entry.strPlotOutline = it->subtitle.c_str(); | 			entry.strPlotOutline = it->subtitle.c_str(); | ||||||
| @@ -275,7 +276,7 @@ PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, int iChannelUid, time_t start | |||||||
| 			EPG_TAG entry; | 			EPG_TAG entry; | ||||||
| 			memset(&entry, 0, sizeof(EPG_TAG)); | 			memset(&entry, 0, sizeof(EPG_TAG)); | ||||||
|  |  | ||||||
| 			entry.iUniqueChannelId = chan.id; | 			entry.iChannelNumber = i; | ||||||
| 			entry.iUniqueBroadcastId = it->id; | 			entry.iUniqueBroadcastId = it->id; | ||||||
| 			entry.strTitle = it->title.c_str(); | 			entry.strTitle = it->title.c_str(); | ||||||
| 			entry.strPlotOutline = it->subtitle.c_str(); | 			entry.strPlotOutline = it->subtitle.c_str(); | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ | |||||||
| #include <vector> | #include <vector> | ||||||
|  |  | ||||||
| #include "p8-platform/threads/threads.h" | #include "p8-platform/threads/threads.h" | ||||||
|  | #include "p8-platform/util/StdString.h" | ||||||
| #include "client.h" | #include "client.h" | ||||||
|  |  | ||||||
| struct OctonetEpgEntry | struct OctonetEpgEntry | ||||||
| @@ -68,7 +69,7 @@ class OctonetData : public P8PLATFORM::CThread | |||||||
| 		virtual PVR_ERROR getGroups(ADDON_HANDLE handle, bool bRadio); | 		virtual PVR_ERROR getGroups(ADDON_HANDLE handle, bool bRadio); | ||||||
| 		virtual PVR_ERROR getGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group); | 		virtual PVR_ERROR getGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group); | ||||||
|  |  | ||||||
| 		virtual PVR_ERROR getEPG(ADDON_HANDLE handle, int iChannelUid, time_t start, time_t end); | 		virtual PVR_ERROR getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t start, time_t end); | ||||||
| 		const std::string& getUrl(int id) const; | 		const std::string& getUrl(int id) const; | ||||||
| 		const std::string& getName(int id) const; | 		const std::string& getName(int id) const; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -196,13 +196,13 @@ int Socket::send ( const char* data, const unsigned int len ) | |||||||
|  |  | ||||||
|   if (result < 0) |   if (result < 0) | ||||||
|   { |   { | ||||||
|     libKodi->Log(LOG_ERROR, "Socket::send  - select failed"); |     kodi->Log(LOG_ERROR, "Socket::send  - select failed"); | ||||||
|     close(); |     close(); | ||||||
|     return 0; |     return 0; | ||||||
|   } |   } | ||||||
|   if (FD_ISSET(_sd, &set_w)) |   if (FD_ISSET(_sd, &set_w)) | ||||||
|   { |   { | ||||||
|     libKodi->Log(LOG_ERROR, "Socket::send  - failed to send data"); |     kodi->Log(LOG_ERROR, "Socket::send  - failed to send data"); | ||||||
|     close(); |     close(); | ||||||
|     return 0; |     return 0; | ||||||
|   } |   } | ||||||
| @@ -212,7 +212,7 @@ int Socket::send ( const char* data, const unsigned int len ) | |||||||
|   if (status == -1) |   if (status == -1) | ||||||
|   { |   { | ||||||
|     errormessage( getLastError(), "Socket::send"); |     errormessage( getLastError(), "Socket::send"); | ||||||
|     libKodi->Log(LOG_ERROR, "Socket::send  - failed to send data"); |     kodi->Log(LOG_ERROR, "Socket::send  - failed to send data"); | ||||||
|     close(); |     close(); | ||||||
|     return 0; |     return 0; | ||||||
|   } |   } | ||||||
| @@ -296,7 +296,7 @@ bool Socket::ReadLine (string& line) | |||||||
|  |  | ||||||
|     if (result < 0) |     if (result < 0) | ||||||
|     { |     { | ||||||
|       libKodi->Log(LOG_DEBUG, "%s: select failed", __FUNCTION__); |       kodi->Log(LOG_DEBUG, "%s: select failed", __FUNCTION__); | ||||||
|       errormessage(getLastError(), __FUNCTION__); |       errormessage(getLastError(), __FUNCTION__); | ||||||
|       close(); |       close(); | ||||||
|       return false; |       return false; | ||||||
| @@ -306,11 +306,11 @@ bool Socket::ReadLine (string& line) | |||||||
|     { |     { | ||||||
|       if (retries != 0) |       if (retries != 0) | ||||||
|       { |       { | ||||||
|          libKodi->Log(LOG_DEBUG, "%s: timeout waiting for response, retrying... (%i)", __FUNCTION__, retries); |          kodi->Log(LOG_DEBUG, "%s: timeout waiting for response, retrying... (%i)", __FUNCTION__, retries); | ||||||
|          retries--; |          retries--; | ||||||
|         continue; |         continue; | ||||||
|       } else { |       } else { | ||||||
|          libKodi->Log(LOG_DEBUG, "%s: timeout waiting for response. Aborting after 10 retries.", __FUNCTION__); |          kodi->Log(LOG_DEBUG, "%s: timeout waiting for response. Aborting after 10 retries.", __FUNCTION__); | ||||||
|          return false; |          return false; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @@ -318,7 +318,7 @@ bool Socket::ReadLine (string& line) | |||||||
|     result = recv(_sd, buffer, sizeof(buffer) - 1, 0); |     result = recv(_sd, buffer, sizeof(buffer) - 1, 0); | ||||||
|     if (result < 0) |     if (result < 0) | ||||||
|     { |     { | ||||||
|       libKodi->Log(LOG_DEBUG, "%s: recv failed", __FUNCTION__); |       kodi->Log(LOG_DEBUG, "%s: recv failed", __FUNCTION__); | ||||||
|       errormessage(getLastError(), __FUNCTION__); |       errormessage(getLastError(), __FUNCTION__); | ||||||
|       close(); |       close(); | ||||||
|       return false; |       return false; | ||||||
| @@ -389,7 +389,7 @@ bool Socket::connect ( const std::string& host, const unsigned short port ) | |||||||
|  |  | ||||||
|   if ( !setHostname( host ) ) |   if ( !setHostname( host ) ) | ||||||
|   { |   { | ||||||
|     libKodi->Log(LOG_ERROR, "Socket::setHostname(%s) failed.\n", host.c_str()); |     kodi->Log(LOG_ERROR, "Socket::setHostname(%s) failed.\n", host.c_str()); | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   _port = port; |   _port = port; | ||||||
| @@ -438,7 +438,7 @@ bool Socket::connect ( const std::string& host, const unsigned short port ) | |||||||
|  |  | ||||||
|   if (address == NULL) |   if (address == NULL) | ||||||
|   { |   { | ||||||
|     libKodi->Log(LOG_ERROR, "Socket::connect %s:%u\n", host.c_str(), port); |     kodi->Log(LOG_ERROR, "Socket::connect %s:%u\n", host.c_str(), port); | ||||||
|     errormessage(getLastError(), "Socket::connect"); |     errormessage(getLastError(), "Socket::connect"); | ||||||
|     close(); |     close(); | ||||||
|     return false; |     return false; | ||||||
| @@ -474,7 +474,7 @@ bool Socket::set_non_blocking ( const bool b ) | |||||||
|  |  | ||||||
|   if (ioctlsocket(_sd, FIONBIO, &iMode) == -1) |   if (ioctlsocket(_sd, FIONBIO, &iMode) == -1) | ||||||
|   { |   { | ||||||
|     libKodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket condition to: %i", iMode); |     kodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket condition to: %i", iMode); | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -565,7 +565,7 @@ void Socket::errormessage( int errnum, const char* functionname) const | |||||||
|   default: |   default: | ||||||
|     errmsg = "WSA Error"; |     errmsg = "WSA Error"; | ||||||
|   } |   } | ||||||
|   libKodi->Log(LOG_ERROR, "%s: (Winsock error=%i) %s\n", functionname, errnum, errmsg); |   kodi->Log(LOG_ERROR, "%s: (Winsock error=%i) %s\n", functionname, errnum, errmsg); | ||||||
| } | } | ||||||
|  |  | ||||||
| int Socket::getLastError() const | int Socket::getLastError() const | ||||||
| @@ -623,7 +623,7 @@ bool Socket::set_non_blocking ( const bool b ) | |||||||
|  |  | ||||||
|   if(fcntl (_sd , F_SETFL, opts) == -1) |   if(fcntl (_sd , F_SETFL, opts) == -1) | ||||||
|   { |   { | ||||||
|     libKodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket flags to: %i", opts); |     kodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket flags to: %i", opts); | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|   return true; |   return true; | ||||||
| @@ -699,7 +699,7 @@ void Socket::errormessage( int errnum, const char* functionname) const | |||||||
|       break; |       break; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   libKodi->Log(LOG_ERROR, "%s: (errno=%i) %s\n", functionname, errnum, errmsg); |   kodi->Log(LOG_ERROR, "%s: (errno=%i) %s\n", functionname, errnum, errmsg); | ||||||
| } | } | ||||||
|  |  | ||||||
| int Socket::getLastError() const | int Socket::getLastError() const | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ std::string octonetAddress = ""; | |||||||
|  |  | ||||||
| /* internal state variables */ | /* internal state variables */ | ||||||
| ADDON_STATUS addonStatus = ADDON_STATUS_UNKNOWN; | ADDON_STATUS addonStatus = ADDON_STATUS_UNKNOWN; | ||||||
| CHelper_libXBMC_addon *libKodi = NULL; | CHelper_libXBMC_addon *kodi = NULL; | ||||||
| CHelper_libXBMC_pvr *pvr = NULL; | CHelper_libXBMC_pvr *pvr = NULL; | ||||||
|  |  | ||||||
| OctonetData *data = NULL; | OctonetData *data = NULL; | ||||||
| @@ -49,7 +49,7 @@ extern "C" { | |||||||
| void ADDON_ReadSettings(void) | void ADDON_ReadSettings(void) | ||||||
| { | { | ||||||
| 	char buffer[2048]; | 	char buffer[2048]; | ||||||
| 	if (libKodi->GetSetting("octonetAddress", &buffer)) | 	if (kodi->GetSetting("octonetAddress", &buffer)) | ||||||
| 		octonetAddress = buffer; | 		octonetAddress = buffer; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -59,22 +59,22 @@ ADDON_STATUS ADDON_Create(void *callbacks, void* props) | |||||||
| 		return ADDON_STATUS_UNKNOWN; | 		return ADDON_STATUS_UNKNOWN; | ||||||
|  |  | ||||||
| 	PVR_PROPERTIES *pvrprops = (PVR_PROPERTIES*)props; | 	PVR_PROPERTIES *pvrprops = (PVR_PROPERTIES*)props; | ||||||
| 	libKodi = new CHelper_libXBMC_addon; | 	kodi = new CHelper_libXBMC_addon; | ||||||
| 	if (!libKodi->RegisterMe(callbacks)) { | 	if (!kodi->RegisterMe(callbacks)) { | ||||||
| 		libKodi->Log(LOG_ERROR, "%s: Failed to register octonet addon", __func__); | 		kodi->Log(LOG_ERROR, "%s: Failed to register octonet addon", __func__); | ||||||
| 		SAFE_DELETE(libKodi); | 		SAFE_DELETE(kodi); | ||||||
| 		return ADDON_STATUS_PERMANENT_FAILURE; | 		return ADDON_STATUS_PERMANENT_FAILURE; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	pvr = new CHelper_libXBMC_pvr; | 	pvr = new CHelper_libXBMC_pvr; | ||||||
| 	if (!pvr->RegisterMe(callbacks)) { | 	if (!pvr->RegisterMe(callbacks)) { | ||||||
| 		libKodi->Log(LOG_ERROR, "%s: Failed to register octonet pvr addon", __func__); | 		kodi->Log(LOG_ERROR, "%s: Failed to register octonet pvr addon", __func__); | ||||||
| 		SAFE_DELETE(pvr); | 		SAFE_DELETE(pvr); | ||||||
| 		SAFE_DELETE(libKodi); | 		SAFE_DELETE(kodi); | ||||||
| 		return ADDON_STATUS_PERMANENT_FAILURE; | 		return ADDON_STATUS_PERMANENT_FAILURE; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	libKodi->Log(LOG_DEBUG, "%s: Creating octonet pvr addon", __func__); | 	kodi->Log(LOG_DEBUG, "%s: Creating octonet pvr addon", __func__); | ||||||
| 	ADDON_ReadSettings(); | 	ADDON_ReadSettings(); | ||||||
|  |  | ||||||
| 	data = new OctonetData; | 	data = new OctonetData; | ||||||
| @@ -83,10 +83,12 @@ ADDON_STATUS ADDON_Create(void *callbacks, void* props) | |||||||
| 	return addonStatus; | 	return addonStatus; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void ADDON_Stop() {} /* no-op */ | ||||||
|  |  | ||||||
| void ADDON_Destroy() | void ADDON_Destroy() | ||||||
| { | { | ||||||
| 	delete pvr; | 	delete pvr; | ||||||
| 	delete libKodi; | 	delete kodi; | ||||||
| 	addonStatus = ADDON_STATUS_UNKNOWN; | 	addonStatus = ADDON_STATUS_UNKNOWN; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -95,6 +97,16 @@ ADDON_STATUS ADDON_GetStatus() | |||||||
| 	return addonStatus; | 	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) | ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue) | ||||||
| { | { | ||||||
| 	/* For simplicity do a full addon restart whenever settings are | 	/* For simplicity do a full addon restart whenever settings are | ||||||
| @@ -102,6 +114,9 @@ ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue) | |||||||
| 	return ADDON_STATUS_NEED_RESTART; | 	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 */ | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -110,16 +125,32 @@ ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue) | |||||||
| extern "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) | PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES *pCapabilities) | ||||||
| { | { | ||||||
| 	pCapabilities->bSupportsTV = true; | 	pCapabilities->bSupportsTV = true; | ||||||
| 	pCapabilities->bSupportsRadio = true; | 	pCapabilities->bSupportsRadio = true; | ||||||
| 	pCapabilities->bSupportsChannelGroups = true; | 	pCapabilities->bSupportsChannelGroups = true; | ||||||
| 	pCapabilities->bSupportsEPG = true; | 	pCapabilities->bSupportsEPG = true; | ||||||
| 	pCapabilities->bSupportsRecordings = false; |  | ||||||
| 	pCapabilities->bSupportsRecordingsRename = false; |  | ||||||
| 	pCapabilities->bSupportsRecordingsLifetimeChange = false; |  | ||||||
| 	pCapabilities->bSupportsDescrambleInfo = false; |  | ||||||
|  |  | ||||||
| 	return PVR_ERROR_NO_ERROR; | 	return PVR_ERROR_NO_ERROR; | ||||||
| } | } | ||||||
| @@ -131,7 +162,7 @@ const char* GetBackendName(void) | |||||||
|  |  | ||||||
| const char* GetBackendVersion(void) | const char* GetBackendVersion(void) | ||||||
| { | { | ||||||
| 	return STR(OCTONET_VERSION); | 	return XBMC_PVR_API_VERSION; | ||||||
| } | } | ||||||
|  |  | ||||||
| const char* GetConnectionString(void) | const char* GetConnectionString(void) | ||||||
| @@ -143,12 +174,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; } | PVR_ERROR CallMenuHook(const PVR_MENUHOOK& menuhook, const PVR_MENUHOOK_DATA &item) { return PVR_ERROR_NOT_IMPLEMENTED; } | ||||||
|  |  | ||||||
| void OnSystemSleep() { | void OnSystemSleep() { | ||||||
| 	libKodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__); | 	kodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__); | ||||||
| 	// FIXME: Disconnect? | 	// FIXME: Disconnect? | ||||||
| } | } | ||||||
|  |  | ||||||
| void OnSystemWake() { | void OnSystemWake() { | ||||||
| 	libKodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__); | 	kodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__); | ||||||
| 	// FIXME:Reconnect? | 	// FIXME:Reconnect? | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -156,14 +187,11 @@ void OnPowerSavingActivated() {} | |||||||
| void OnPowerSavingDeactivated() {} | void OnPowerSavingDeactivated() {} | ||||||
|  |  | ||||||
| /* EPG */ | /* EPG */ | ||||||
| PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, int iChannelUid, time_t iStart, time_t iEnd) | PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL& channel, time_t iStart, time_t iEnd) | ||||||
| { | { | ||||||
| 	return data->getEPG(handle, iChannelUid, iStart, iEnd); | 	return data->getEPG(handle, channel, 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 */ | /* Channel groups */ | ||||||
| int GetChannelGroupsAmount(void) | int GetChannelGroupsAmount(void) | ||||||
| { | { | ||||||
| @@ -195,6 +223,7 @@ PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio) | |||||||
|  |  | ||||||
| PVR_ERROR DeleteChannel(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; } | 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 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 OpenDialogChannelSettings(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; } | ||||||
| PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; } | PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; } | ||||||
|  |  | ||||||
| @@ -205,7 +234,6 @@ 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 UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } | ||||||
| PVR_ERROR DeleteAllRecordingsFromTrash() { 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 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 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; } | 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; } | int GetRecordingLastPlayedPosition(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; } | ||||||
| @@ -217,13 +245,6 @@ 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 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_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 */ | /* PVR stream handling */ | ||||||
| /* entirely unused, as we use standard RTSP+TS mux, which can be handlded by | /* entirely unused, as we use standard RTSP+TS mux, which can be handlded by | ||||||
|  * Kodi core */ |  * Kodi core */ | ||||||
| @@ -240,24 +261,30 @@ void CloseLiveStream(void) { | |||||||
| } | } | ||||||
|  |  | ||||||
| long long SeekLiveStream(long long iPosition, int iWhence) { return -1; } | long long SeekLiveStream(long long iPosition, int iWhence) { return -1; } | ||||||
|  | long long PositionLiveStream(void) { return -1; } | ||||||
| long long LengthLiveStream(void) { return -1; } | long long LengthLiveStream(void) { return -1; } | ||||||
| bool IsRealTimeStream(void) { return true; } | bool IsRealTimeStream(void) { return true; } | ||||||
|  |  | ||||||
|  | bool SwitchChannel(const PVR_CHANNEL& channel) { | ||||||
|  | 	CloseLiveStream(); | ||||||
|  | 	return OpenLiveStream(channel); | ||||||
|  | } | ||||||
|  |  | ||||||
| PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS& signalStatus) { | PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS& signalStatus) { | ||||||
| 	memset(&signalStatus, 0, sizeof(PVR_SIGNAL_STATUS)); | 	memset(&signalStatus, 0, sizeof(PVR_SIGNAL_STATUS)); | ||||||
| 	rtsp_fill_signal_status(signalStatus); | 	rtsp_fill_signal_status(signalStatus); | ||||||
| 	return PVR_ERROR_NO_ERROR; | 	return PVR_ERROR_NO_ERROR; | ||||||
| } | } | ||||||
|  |  | ||||||
| PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES *times) { return PVR_ERROR_NOT_IMPLEMENTED; } | const char* GetLiveStreamURL(const PVR_CHANNEL& channel) { return NULL; } | ||||||
| PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) { 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 */ | /* Recording stream handling */ | ||||||
| bool OpenRecordedStream(const PVR_RECORDING& recording) { return false; } | bool OpenRecordedStream(const PVR_RECORDING& recording) { return false; } | ||||||
| void CloseRecordedStream(void) {} | void CloseRecordedStream(void) {} | ||||||
| int ReadRecordedStream(unsigned char* pBuffer, unsigned int iBufferSize) { return -1; } | int ReadRecordedStream(unsigned char* pBuffer, unsigned int iBufferSize) { return -1; } | ||||||
| long long SeekRecordedStream(long long iPosition, int iWhence) { return -1; } | long long SeekRecordedStream(long long iPosition, int iWhence) { return -1; } | ||||||
|  | long long PositionRecordedStream(void) { return -1; } | ||||||
| long long LengthRecordedStream(void) { return -1; } | long long LengthRecordedStream(void) { return -1; } | ||||||
|  |  | ||||||
| /* PVR demuxer */ | /* PVR demuxer */ | ||||||
| @@ -266,9 +293,10 @@ void DemuxReset(void) {} | |||||||
| void DemuxAbort(void) {} | void DemuxAbort(void) {} | ||||||
| void DemuxFlush(void) {} | void DemuxFlush(void) {} | ||||||
| DemuxPacket* DemuxRead(void) { return NULL; } | DemuxPacket* DemuxRead(void) { return NULL; } | ||||||
| void FillBuffer(bool mode) {} |  | ||||||
|  |  | ||||||
| /* Various helper functions */ | /* Various helper functions */ | ||||||
|  | unsigned int GetChannelSwitchDelay(void) { return 0; } | ||||||
|  | bool IsTimeshifting(void) { return false; } | ||||||
| bool CanPauseStream() { return false; } | bool CanPauseStream() { return false; } | ||||||
| bool CanSeekStream() { return false; } | bool CanSeekStream() { return false; } | ||||||
|  |  | ||||||
| @@ -278,6 +306,10 @@ bool SeekTime(double time, bool backwards, double *startpts) { return false; } | |||||||
| void SetSpeed(int speed) {} | void SetSpeed(int speed) {} | ||||||
| PVR_ERROR SetEPGTimeFrame(int) { return PVR_ERROR_NOT_IMPLEMENTED; } | 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() | const char* GetBackendHostname() | ||||||
| { | { | ||||||
| 	return octonetAddress.c_str(); | 	return octonetAddress.c_str(); | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ | |||||||
| #define __func__ __FUNCTION__ | #define __func__ __FUNCTION__ | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| extern ADDON::CHelper_libXBMC_addon *libKodi; | extern ADDON::CHelper_libXBMC_addon *kodi; | ||||||
| extern CHelper_libXBMC_pvr *pvr; | extern CHelper_libXBMC_pvr *pvr; | ||||||
|  |  | ||||||
| /* IP or hostname of the octonet to be connected to */ | /* IP or hostname of the octonet to be connected to */ | ||||||
|   | |||||||
| @@ -309,13 +309,13 @@ bool rtsp_open(const string& name, const string& url_str) | |||||||
| 	rtsp->level = 0; | 	rtsp->level = 0; | ||||||
| 	rtsp->quality = 0; | 	rtsp->quality = 0; | ||||||
|  |  | ||||||
| 	libKodi->Log(LOG_DEBUG, "try to open '%s'", url_str.c_str()); | 	kodi->Log(LOG_DEBUG, "try to open '%s'", url_str.c_str()); | ||||||
|  |  | ||||||
| 	url dst = parse_url(url_str); | 	url dst = parse_url(url_str); | ||||||
| 	libKodi->Log(LOG_DEBUG, "connect to host '%s'", dst.host.c_str()); | 	kodi->Log(LOG_DEBUG, "connect to host '%s'", dst.host.c_str()); | ||||||
|  |  | ||||||
| 	if(!rtsp->tcp_sock.connect(dst.host, dst.port)) { | 	if(!rtsp->tcp_sock.connect(dst.host, dst.port)) { | ||||||
| 		libKodi->Log(LOG_ERROR, "Failed to connect to RTSP server %s:%d", dst.host.c_str(), dst.port); | 		kodi->Log(LOG_ERROR, "Failed to connect to RTSP server %s:%d", dst.host.c_str(), dst.port); | ||||||
| 		goto error; | 		goto error; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -353,7 +353,7 @@ bool rtsp_open(const string& name, const string& url_str) | |||||||
| 	rtsp->tcp_sock.send(setup_ss.str()); | 	rtsp->tcp_sock.send(setup_ss.str()); | ||||||
|  |  | ||||||
| 	if (rtsp_handle() != RTSP_RESULT_OK) { | 	if (rtsp_handle() != RTSP_RESULT_OK) { | ||||||
| 		libKodi->Log(LOG_ERROR, "Failed to setup RTSP session"); | 		kodi->Log(LOG_ERROR, "Failed to setup RTSP session"); | ||||||
| 		goto error; | 		goto error; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -368,7 +368,7 @@ bool rtsp_open(const string& name, const string& url_str) | |||||||
| 	rtsp->tcp_sock.send(play_ss.str()); | 	rtsp->tcp_sock.send(play_ss.str()); | ||||||
|  |  | ||||||
| 	if (rtsp_handle() != RTSP_RESULT_OK) { | 	if (rtsp_handle() != RTSP_RESULT_OK) { | ||||||
| 		libKodi->Log(LOG_ERROR, "Failed to play RTSP session"); | 		kodi->Log(LOG_ERROR, "Failed to play RTSP session"); | ||||||
| 		goto error; | 		goto error; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -453,7 +453,7 @@ static void rtsp_teardown() { | |||||||
| 		rtsp->tcp_sock.send(ss.str()); | 		rtsp->tcp_sock.send(ss.str()); | ||||||
|  |  | ||||||
| 		if (rtsp_handle() != RTSP_RESULT_OK) { | 		if (rtsp_handle() != RTSP_RESULT_OK) { | ||||||
| 			libKodi->Log(LOG_ERROR, "Failed to teardown RTSP session"); | 			kodi->Log(LOG_ERROR, "Failed to teardown RTSP session"); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user