mirror of
				https://github.com/DigitalDevices/pvr.octonet.git
				synced 2025-03-01 10:53:09 +00:00 
			
		
		
		
	Compare commits
	
		
			22 Commits
		
	
	
		
			0.3.5
			...
			1.0.0-1-Ma
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					203f800eaa | ||
| 
						 | 
					153dfeb3d5 | ||
| 
						 | 
					1e44819300 | ||
| 
						 | 
					54680a38bd | ||
| 
						 | 
					689afbf4cd | ||
| 
						 | 
					c4af00a4fe | ||
| 
						 | 
					f1f8d44b78 | ||
| 
						 | 
					e9b4c05de5 | ||
| 
						 | 
					a77cf111bb | ||
| 
						 | 
					020dd98e7b | ||
| 
						 | 
					d7bb865329 | ||
| 
						 | 
					9bbd7cf3c4 | ||
| 
						 | 
					7b9ec7d884 | ||
| 
						 | 
					37abebb540 | ||
| 
						 | 
					3494c4c470 | ||
| 
						 | 
					ff41fc9acc | ||
| 
						 | 
					1ced6b3fa4 | ||
| 
						 | 
					cd774b6edc | ||
| 
						 | 
					2a63777b6d | ||
| 
						 | 
					e9f0d6bf76 | ||
| 
						 | 
					8549a31c8d | ||
| 
						 | 
					0a7fb087ac | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1 +1,2 @@
 | 
				
			|||||||
/build
 | 
					/build
 | 
				
			||||||
 | 
					pvr.octonet/addon.xml
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,9 +37,9 @@ before_install:
 | 
				
			|||||||
before_script:
 | 
					before_script:
 | 
				
			||||||
  - cd $TRAVIS_BUILD_DIR/..
 | 
					  - cd $TRAVIS_BUILD_DIR/..
 | 
				
			||||||
  - git clone --depth=1 https://github.com/xbmc/xbmc.git
 | 
					  - git clone --depth=1 https://github.com/xbmc/xbmc.git
 | 
				
			||||||
  - mkdir -p xbmc/project/cmake/addons/addons/pvr.octonet
 | 
					  - mkdir -p xbmc/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
 | 
					  - echo "pvr.octonet https://github.com/DigitalDevices/pvr.octonet master" > xbmc/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/project/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/cmake/addons
 | 
				
			||||||
 | 
					
 | 
				
			||||||
script: make
 | 
					script: make
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,10 +26,19 @@ 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)
 | 
				
			||||||
	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()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include(CPack)
 | 
					include(CPack)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Jenkinsfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					buildPlugin()
 | 
				
			||||||
@@ -30,7 +30,7 @@ If you already have a local Kodi checkout, you can use that one. Just make sure
 | 
				
			|||||||
$ 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/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
 | 
					On Windows, you should add `-G "NMake Makefiles"` to the CMake invocation. Make sure that
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								appveyor.yml
									
									
									
									
									
								
							@@ -21,15 +21,20 @@ environment:
 | 
				
			|||||||
    - GENERATOR: "Visual Studio 14"
 | 
					    - GENERATOR: "Visual Studio 14"
 | 
				
			||||||
      CONFIG: Release
 | 
					      CONFIG: Release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					artifacts:
 | 
				
			||||||
 | 
					  - path: build/install/
 | 
				
			||||||
 | 
					    name: pvr.octonet
 | 
				
			||||||
 | 
					    type: zip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
build_script:
 | 
					build_script:
 | 
				
			||||||
  - cd ..
 | 
					  - cd ..
 | 
				
			||||||
  - set ROOT=%cd%
 | 
					  - set ROOT=%cd%
 | 
				
			||||||
  - git clone --depth=1 https://github.com/xbmc/xbmc.git
 | 
					  - git clone --depth=1 https://github.com/xbmc/xbmc.git
 | 
				
			||||||
  - mkdir xbmc\project\cmake\addons\addons\pvr.octonet
 | 
					  - mkdir xbmc\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
 | 
					  - echo pvr.octonet https://github.com/DigitalDevices/pvr.octonet master > xbmc\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=%ROOT%\xbmc\addons -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%
 | 
					  - cmake --build . --config %CONFIG%
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							@@ -1,7 +1,7 @@
 | 
				
			|||||||
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, kodi-pvr-dev,
 | 
					Build-Depends: debhelper (>= 9.0.0), cmake, libjsoncpp-dev,
 | 
				
			||||||
               libkodiplatform-dev (>= 16.0.0), 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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,10 @@
 | 
				
			|||||||
project(jsoncpp)
 | 
					project(jsoncpp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cmake_minimum_required(VERSION 2.6)
 | 
					cmake_minimum_required(VERSION 3.1)
 | 
				
			||||||
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 +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"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<addon
 | 
					<addon
 | 
				
			||||||
	id="pvr.octonet"
 | 
						id="pvr.octonet"
 | 
				
			||||||
	version="0.3.5"
 | 
						version="0.7.0"
 | 
				
			||||||
	name="Digital Devices Octopus NET Client"
 | 
						name="Digital Devices Octopus NET Client"
 | 
				
			||||||
	provider-name="digitaldevices">
 | 
						provider-name="digitaldevices">
 | 
				
			||||||
	<requires>
 | 
						<requires>@ADDON_DEPENDS@</requires>
 | 
				
			||||||
		<c-pluff version="0.1" />
 | 
					 | 
				
			||||||
		<import addon="xbmc.pvr" version="5.2.0" />
 | 
					 | 
				
			||||||
	</requires>
 | 
					 | 
				
			||||||
	<extension
 | 
						<extension
 | 
				
			||||||
		point="xbmc.pvrclient"
 | 
							point="xbmc.pvrclient"
 | 
				
			||||||
		library_linux="pvr.octonet.so"
 | 
							library_@PLATFORM@="@LIBRARY_FILENAME@"/>
 | 
				
			||||||
		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>all</platform>
 | 
							<platform>@PLATFORM@</platform>
 | 
				
			||||||
	</extension>
 | 
						</extension>
 | 
				
			||||||
</addon>
 | 
					</addon>
 | 
				
			||||||
@@ -42,7 +42,7 @@ OctonetData::OctonetData()
 | 
				
			|||||||
	lastEpgLoad = 0;
 | 
						lastEpgLoad = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!loadChannelList())
 | 
						if (!loadChannelList())
 | 
				
			||||||
		kodi->QueueNotification(QUEUE_ERROR, kodi->GetLocalizedString(30001), channels.size());
 | 
							libKodi->QueueNotification(QUEUE_ERROR, libKodi->GetLocalizedString(30001), channels.size());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OctonetData::~OctonetData(void)
 | 
					OctonetData::~OctonetData(void)
 | 
				
			||||||
@@ -53,14 +53,8 @@ OctonetData::~OctonetData(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int64_t OctonetData::parseID(std::string id)
 | 
					int64_t OctonetData::parseID(std::string id)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int64_t nativeId;
 | 
						std::hash<std::string> hash_fn;
 | 
				
			||||||
	size_t strip;
 | 
						int64_t nativeId = hash_fn(id);
 | 
				
			||||||
	/* Strip colons from id */
 | 
					 | 
				
			||||||
	while ((strip = id.find(":")) != std::string::npos)
 | 
					 | 
				
			||||||
		id.erase(strip, 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	std::stringstream ids(id);
 | 
					 | 
				
			||||||
	ids >> nativeId;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nativeId;
 | 
						return nativeId;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -68,15 +62,15 @@ int64_t OctonetData::parseID(std::string id)
 | 
				
			|||||||
bool OctonetData::loadChannelList()
 | 
					bool OctonetData::loadChannelList()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	std::string jsonContent;
 | 
						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)
 | 
						if (!f)
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	char buf[1024];
 | 
						char buf[1024];
 | 
				
			||||||
	while (int read = kodi->ReadFile(f, buf, 1024))
 | 
						while (int read = libKodi->ReadFile(f, buf, 1024))
 | 
				
			||||||
		jsonContent.append(buf, read);
 | 
							jsonContent.append(buf, read);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kodi->CloseFile(f);
 | 
						libKodi->CloseFile(f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Json::Value root;
 | 
						Json::Value root;
 | 
				
			||||||
	Json::Reader reader;
 | 
						Json::Reader reader;
 | 
				
			||||||
@@ -153,15 +147,15 @@ bool OctonetData::loadEPG(void)
 | 
				
			|||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	std::string jsonContent;
 | 
						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)
 | 
						if (!f)
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	char buf[1024];
 | 
						char buf[1024];
 | 
				
			||||||
	while (int read = kodi->ReadFile(f, buf, 1024))
 | 
						while (int read = libKodi->ReadFile(f, buf, 1024))
 | 
				
			||||||
		jsonContent.append(buf, read);
 | 
							jsonContent.append(buf, read);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kodi->CloseFile(f);
 | 
						libKodi->CloseFile(f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Json::Value root;
 | 
						Json::Value root;
 | 
				
			||||||
	Json::Reader reader;
 | 
						Json::Reader reader;
 | 
				
			||||||
@@ -190,7 +184,7 @@ bool OctonetData::loadEPG(void)
 | 
				
			|||||||
			channel = findChannel(entry.channelId);
 | 
								channel = findChannel(entry.channelId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (channel == NULL) {
 | 
							if (channel == NULL) {
 | 
				
			||||||
			kodi->Log(LOG_ERROR, "EPG for unknown channel.");
 | 
								libKodi->Log(LOG_ERROR, "EPG for unknown channel.");
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -261,7 +255,7 @@ PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, t
 | 
				
			|||||||
			EPG_TAG entry;
 | 
								EPG_TAG entry;
 | 
				
			||||||
			memset(&entry, 0, sizeof(EPG_TAG));
 | 
								memset(&entry, 0, sizeof(EPG_TAG));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			entry.iChannelNumber = i;
 | 
								entry.iUniqueChannelId = chan.id;
 | 
				
			||||||
			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();
 | 
				
			||||||
@@ -282,7 +276,7 @@ PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, t
 | 
				
			|||||||
			EPG_TAG entry;
 | 
								EPG_TAG entry;
 | 
				
			||||||
			memset(&entry, 0, sizeof(EPG_TAG));
 | 
								memset(&entry, 0, sizeof(EPG_TAG));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			entry.iChannelNumber = i;
 | 
								entry.iUniqueChannelId = chan.id;
 | 
				
			||||||
			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();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -196,13 +196,13 @@ int Socket::send ( const char* data, const unsigned int len )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  if (result < 0)
 | 
					  if (result < 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    kodi->Log(LOG_ERROR, "Socket::send  - select failed");
 | 
					    libKodi->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))
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    kodi->Log(LOG_ERROR, "Socket::send  - failed to send data");
 | 
					    libKodi->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");
 | 
				
			||||||
    kodi->Log(LOG_ERROR, "Socket::send  - failed to send data");
 | 
					    libKodi->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)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      kodi->Log(LOG_DEBUG, "%s: select failed", __FUNCTION__);
 | 
					      libKodi->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)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
         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--;
 | 
					         retries--;
 | 
				
			||||||
        continue;
 | 
					        continue;
 | 
				
			||||||
      } else {
 | 
					      } 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;
 | 
					         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)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      kodi->Log(LOG_DEBUG, "%s: recv failed", __FUNCTION__);
 | 
					      libKodi->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 ) )
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    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;
 | 
					    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)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    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");
 | 
					    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)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    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;
 | 
					    return false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -565,7 +565,7 @@ void Socket::errormessage( int errnum, const char* functionname) const
 | 
				
			|||||||
  default:
 | 
					  default:
 | 
				
			||||||
    errmsg = "WSA Error";
 | 
					    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
 | 
					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)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    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 false;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
@@ -699,7 +699,7 @@ void Socket::errormessage( int errnum, const char* functionname) const
 | 
				
			|||||||
      break;
 | 
					      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
 | 
					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 *kodi = NULL;
 | 
					CHelper_libXBMC_addon *libKodi = 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 (kodi->GetSetting("octonetAddress", &buffer))
 | 
						if (libKodi->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;
 | 
				
			||||||
	kodi = new CHelper_libXBMC_addon;
 | 
						libKodi = new CHelper_libXBMC_addon;
 | 
				
			||||||
	if (!kodi->RegisterMe(callbacks)) {
 | 
						if (!libKodi->RegisterMe(callbacks)) {
 | 
				
			||||||
		kodi->Log(LOG_ERROR, "%s: Failed to register octonet addon", __func__);
 | 
							libKodi->Log(LOG_ERROR, "%s: Failed to register octonet addon", __func__);
 | 
				
			||||||
		SAFE_DELETE(kodi);
 | 
							SAFE_DELETE(libKodi);
 | 
				
			||||||
		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)) {
 | 
				
			||||||
		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(pvr);
 | 
				
			||||||
		SAFE_DELETE(kodi);
 | 
							SAFE_DELETE(libKodi);
 | 
				
			||||||
		return ADDON_STATUS_PERMANENT_FAILURE;
 | 
							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();
 | 
						ADDON_ReadSettings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data = new OctonetData;
 | 
						data = new OctonetData;
 | 
				
			||||||
@@ -83,12 +83,10 @@ 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 kodi;
 | 
						delete libKodi;
 | 
				
			||||||
	addonStatus = ADDON_STATUS_UNKNOWN;
 | 
						addonStatus = ADDON_STATUS_UNKNOWN;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -97,16 +95,6 @@ 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
 | 
				
			||||||
@@ -114,9 +102,6 @@ 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 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -125,32 +110,16 @@ void ADDON_Announce(const char *flag, const char *sender, const char *message, c
 | 
				
			|||||||
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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -162,7 +131,7 @@ const char* GetBackendName(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const char* GetBackendVersion(void)
 | 
					const char* GetBackendVersion(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return XBMC_PVR_API_VERSION;
 | 
						return STR(OCTONET_VERSION);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char* GetConnectionString(void)
 | 
					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; }
 | 
					PVR_ERROR CallMenuHook(const PVR_MENUHOOK& menuhook, const PVR_MENUHOOK_DATA &item) { return PVR_ERROR_NOT_IMPLEMENTED; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void OnSystemSleep() {
 | 
					void OnSystemSleep() {
 | 
				
			||||||
	kodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
 | 
						libKodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
 | 
				
			||||||
	// FIXME: Disconnect?
 | 
						// FIXME: Disconnect?
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void OnSystemWake() {
 | 
					void OnSystemWake() {
 | 
				
			||||||
	kodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
 | 
						libKodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
 | 
				
			||||||
	// FIXME:Reconnect?
 | 
						// FIXME:Reconnect?
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -192,6 +161,9 @@ PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL& channel, time
 | 
				
			|||||||
	return data->getEPG(handle, channel, 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)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -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 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; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -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 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; }
 | 
				
			||||||
@@ -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 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 */
 | 
				
			||||||
@@ -261,30 +240,24 @@ 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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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 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 */
 | 
				
			||||||
@@ -295,7 +268,6 @@ void DemuxFlush(void) {}
 | 
				
			|||||||
DemuxPacket* DemuxRead(void) { return NULL; }
 | 
					DemuxPacket* DemuxRead(void) { return NULL; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Various helper functions */
 | 
					/* Various helper functions */
 | 
				
			||||||
unsigned int GetChannelSwitchDelay(void) { return 0; }
 | 
					 | 
				
			||||||
bool IsTimeshifting(void) { return false; }
 | 
					bool IsTimeshifting(void) { return false; }
 | 
				
			||||||
bool CanPauseStream() { return false; }
 | 
					bool CanPauseStream() { return false; }
 | 
				
			||||||
bool CanSeekStream() { return false; }
 | 
					bool CanSeekStream() { return false; }
 | 
				
			||||||
@@ -306,10 +278,6 @@ 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 *kodi;
 | 
					extern ADDON::CHelper_libXBMC_addon *libKodi;
 | 
				
			||||||
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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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);
 | 
						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)) {
 | 
						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;
 | 
							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) {
 | 
				
			||||||
		kodi->Log(LOG_ERROR, "Failed to setup RTSP session");
 | 
							libKodi->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) {
 | 
				
			||||||
		kodi->Log(LOG_ERROR, "Failed to play RTSP session");
 | 
							libKodi->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) {
 | 
				
			||||||
			kodi->Log(LOG_ERROR, "Failed to teardown RTSP session");
 | 
								libKodi->Log(LOG_ERROR, "Failed to teardown RTSP session");
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user