mirror of
				https://github.com/DigitalDevices/pvr.octonet.git
				synced 2025-03-01 10:53:09 +00:00 
			
		
		
		
	Compare commits
	
		
			68 Commits
		
	
	
		
			0.3.3
			...
			1.2.6-Matr
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | b01e24b0a2 | ||
|  | 5f9342abdd | ||
|  | cc34e52369 | ||
|  | 360fb03145 | ||
|  | ace4891f78 | ||
|  | 3d47c712fd | ||
|  | 3f04265d51 | ||
|  | d4d6628d57 | ||
|  | cbef814f8f | ||
|  | 50386e13b2 | ||
|  | cd1c5d4171 | ||
|  | 83fbcfb360 | ||
|  | bed39d0575 | ||
|  | 0bdcb49d69 | ||
|  | 5024fd99c1 | ||
|  | a19fef8af8 | ||
|  | 38f8f54c9f | ||
|  | 01c41d8ea1 | ||
|  | 237362e65a | ||
|  | c3f4d61b38 | ||
|  | c37cede8dc | ||
|  | aa4f7c0b0d | ||
|  | 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 | ||
|  | 8549a31c8d | ||
|  | 0a7fb087ac | ||
|  | 5c0f000a91 | ||
|  | 2b020cec9c | ||
|  | 96a19310ca | ||
|  | 3a6f4eb7b5 | 
							
								
								
									
										51
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1 +1,50 @@ | |||||||
| /build | # build artifacts | ||||||
|  | build/ | ||||||
|  | pvr.*/addon.xml | ||||||
|  |  | ||||||
|  | # Debian build files | ||||||
|  | debian/changelog | ||||||
|  | debian/files | ||||||
|  | debian/*.log | ||||||
|  | debian/*.substvars | ||||||
|  | debian/.debhelper/ | ||||||
|  | debian/tmp/ | ||||||
|  | debian/kodi-pvr-*/ | ||||||
|  | obj-x86_64-linux-gnu/ | ||||||
|  |  | ||||||
|  | # commonly used editors | ||||||
|  | # vim | ||||||
|  | *.swp | ||||||
|  |  | ||||||
|  | # Eclipse | ||||||
|  | *.project | ||||||
|  | *.cproject | ||||||
|  | .classpath | ||||||
|  | *.sublime-* | ||||||
|  | .settings/ | ||||||
|  |  | ||||||
|  | # KDevelop 4 | ||||||
|  | *.kdev4 | ||||||
|  |  | ||||||
|  | # gedit | ||||||
|  | *~ | ||||||
|  |  | ||||||
|  | # CLion | ||||||
|  | /.idea | ||||||
|  |  | ||||||
|  | # clion | ||||||
|  | .idea/ | ||||||
|  |  | ||||||
|  | # to prevent add after a "git format-patch VALUE" and "git add ." call | ||||||
|  | /*.patch | ||||||
|  |  | ||||||
|  | # Visual Studio Code | ||||||
|  | .vscode | ||||||
|  |  | ||||||
|  | # to prevent add if project code opened by Visual Studio over CMake file | ||||||
|  | .vs/ | ||||||
|  |  | ||||||
|  | # General MacOS | ||||||
|  | .DS_Store | ||||||
|  | .AppleDouble | ||||||
|  | .LSOverride | ||||||
|   | |||||||
							
								
								
									
										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 | # Linux. We need Trusty in order to get up to date versions of | ||||||
| # cmake and g++. | # cmake and g++. | ||||||
| # | # | ||||||
|  | env: | ||||||
|  |   global: | ||||||
|  |     - app_id=pvr.octonet | ||||||
|  |  | ||||||
| matrix: | matrix: | ||||||
|   include: |   include: | ||||||
|     - os: linux |     - os: linux | ||||||
|       dist: trusty |       dist: xenial | ||||||
|       sudo: required |       sudo: required | ||||||
|       compiler: gcc |       compiler: gcc | ||||||
|     - os: linux |     - os: linux | ||||||
|       dist: trusty |       dist: xenial | ||||||
|       sudo: required |       sudo: required | ||||||
|       compiler: clang |       compiler: clang | ||||||
|     - os: osx |     - os: osx | ||||||
|       osx_image: xcode7.3 |       osx_image: xcode10.2 | ||||||
|     - 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 |  | ||||||
|  |  | ||||||
| # | # | ||||||
| # The addon source is automatically checked out in $TRAVIS_BUILD_DIR, | # The addon source is automatically checked out in $TRAVIS_BUILD_DIR, | ||||||
| @@ -36,10 +30,10 @@ 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 --branch master --depth=1 https://github.com/xbmc/xbmc.git | ||||||
|   - mkdir -p xbmc/project/cmake/addons/addons/pvr.octonet |   - cd ${app_id} && mkdir build && cd build | ||||||
|   - echo "pvr.octonet https://github.com/DigitalDevices/pvr.octonet master" > xbmc/project/cmake/addons/addons/pvr.octonet/pvr.octonet.txt |   - mkdir -p definition/${app_id} | ||||||
|   - cd $TRAVIS_BUILD_DIR && mkdir build && cd build |   - echo ${app_id} $TRAVIS_BUILD_DIR $TRAVIS_COMMIT > definition/${app_id}/${app_id}.txt | ||||||
|   - 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=${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 | script: make | ||||||
|   | |||||||
| @@ -1,19 +1,15 @@ | |||||||
|  | cmake_minimum_required(VERSION 3.5) | ||||||
| project(pvr.octonet) | project(pvr.octonet) | ||||||
|  |  | ||||||
| cmake_minimum_required(VERSION 2.6) |  | ||||||
|  |  | ||||||
| list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) | list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) | ||||||
| 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}/.. # Hack way with "/..", need bigger Kodi cmake rework to match right include ways | ||||||
| 	${JSONCPP_INCLUDE_DIRS}) | 	${JSONCPP_INCLUDE_DIRS}) | ||||||
|  |  | ||||||
| set(DEPLIBS | set(DEPLIBS | ||||||
| @@ -26,10 +22,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(version: "Matrix") | ||||||
							
								
								
									
										264
									
								
								LICENSE.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										264
									
								
								LICENSE.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,264 @@ | |||||||
|  | The GNU General Public License, Version 2, June 1991 (GPLv2) | ||||||
|  | ============================================================ | ||||||
|  |  | ||||||
|  | > Copyright (C) 1989, 1991 Free Software Foundation, Inc. | ||||||
|  | > 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA | ||||||
|  |  | ||||||
|  | Everyone is permitted to copy and distribute verbatim copies of this license | ||||||
|  | document, but changing it is not allowed. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Preamble | ||||||
|  | -------- | ||||||
|  |  | ||||||
|  | The licenses for most software are designed to take away your freedom to share | ||||||
|  | and change it. By contrast, the GNU General Public License is intended to | ||||||
|  | guarantee your freedom to share and change free software--to make sure the | ||||||
|  | software is free for all its users. This General Public License applies to most | ||||||
|  | of the Free Software Foundation's software and to any other program whose | ||||||
|  | authors commit to using it. (Some other Free Software Foundation software is | ||||||
|  | covered by the GNU Lesser General Public License instead.) You can apply it to | ||||||
|  | your programs, too. | ||||||
|  |  | ||||||
|  | When we speak of free software, we are referring to freedom, not price. Our | ||||||
|  | General Public Licenses are designed to make sure that you have the freedom to | ||||||
|  | distribute copies of free software (and charge for this service if you wish), | ||||||
|  | that you receive source code or can get it if you want it, that you can change | ||||||
|  | the software or use pieces of it in new free programs; and that you know you can | ||||||
|  | do these things. | ||||||
|  |  | ||||||
|  | To protect your rights, we need to make restrictions that forbid anyone to deny | ||||||
|  | you these rights or to ask you to surrender the rights. These restrictions | ||||||
|  | translate to certain responsibilities for you if you distribute copies of the | ||||||
|  | software, or if you modify it. | ||||||
|  |  | ||||||
|  | For example, if you distribute copies of such a program, whether gratis or for a | ||||||
|  | fee, you must give the recipients all the rights that you have. You must make | ||||||
|  | sure that they, too, receive or can get the source code. And you must show them | ||||||
|  | these terms so they know their rights. | ||||||
|  |  | ||||||
|  | We protect your rights with two steps: (1) copyright the software, and (2) offer | ||||||
|  | you this license which gives you legal permission to copy, distribute and/or | ||||||
|  | modify the software. | ||||||
|  |  | ||||||
|  | Also, for each author's protection and ours, we want to make certain that | ||||||
|  | everyone understands that there is no warranty for this free software. If the | ||||||
|  | software is modified by someone else and passed on, we want its recipients to | ||||||
|  | know that what they have is not the original, so that any problems introduced by | ||||||
|  | others will not reflect on the original authors' reputations. | ||||||
|  |  | ||||||
|  | Finally, any free program is threatened constantly by software patents. We wish | ||||||
|  | to avoid the danger that redistributors of a free program will individually | ||||||
|  | obtain patent licenses, in effect making the program proprietary. To prevent | ||||||
|  | this, we have made it clear that any patent must be licensed for everyone's free | ||||||
|  | use or not licensed at all. | ||||||
|  |  | ||||||
|  | The precise terms and conditions for copying, distribution and modification | ||||||
|  | follow. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Terms And Conditions For Copying, Distribution And Modification | ||||||
|  | --------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | **0.** This License applies to any program or other work which contains a notice | ||||||
|  | placed by the copyright holder saying it may be distributed under the terms of | ||||||
|  | this General Public License. The "Program", below, refers to any such program or | ||||||
|  | work, and a "work based on the Program" means either the Program or any | ||||||
|  | derivative work under copyright law: that is to say, a work containing the | ||||||
|  | Program or a portion of it, either verbatim or with modifications and/or | ||||||
|  | translated into another language. (Hereinafter, translation is included without | ||||||
|  | limitation in the term "modification".) Each licensee is addressed as "you". | ||||||
|  |  | ||||||
|  | Activities other than copying, distribution and modification are not covered by | ||||||
|  | this License; they are outside its scope. The act of running the Program is not | ||||||
|  | restricted, and the output from the Program is covered only if its contents | ||||||
|  | constitute a work based on the Program (independent of having been made by | ||||||
|  | running the Program). Whether that is true depends on what the Program does. | ||||||
|  |  | ||||||
|  | **1.** You may copy and distribute verbatim copies of the Program's source code | ||||||
|  | as you receive it, in any medium, provided that you conspicuously and | ||||||
|  | appropriately publish on each copy an appropriate copyright notice and | ||||||
|  | disclaimer of warranty; keep intact all the notices that refer to this License | ||||||
|  | and to the absence of any warranty; and give any other recipients of the Program | ||||||
|  | a copy of this License along with the Program. | ||||||
|  |  | ||||||
|  | You may charge a fee for the physical act of transferring a copy, and you may at | ||||||
|  | your option offer warranty protection in exchange for a fee. | ||||||
|  |  | ||||||
|  | **2.** You may modify your copy or copies of the Program or any portion of it, | ||||||
|  | thus forming a work based on the Program, and copy and distribute such | ||||||
|  | modifications or work under the terms of Section 1 above, provided that you also | ||||||
|  | meet all of these conditions: | ||||||
|  |  | ||||||
|  | *   **a)** You must cause the modified files to carry prominent notices stating | ||||||
|  |     that you changed the files and the date of any change. | ||||||
|  |  | ||||||
|  | *   **b)** You must cause any work that you distribute or publish, that in whole | ||||||
|  |     or in part contains or is derived from the Program or any part thereof, to | ||||||
|  |     be licensed as a whole at no charge to all third parties under the terms of | ||||||
|  |     this License. | ||||||
|  |  | ||||||
|  | *   **c)** If the modified program normally reads commands interactively when | ||||||
|  |     run, you must cause it, when started running for such interactive use in the | ||||||
|  |     most ordinary way, to print or display an announcement including an | ||||||
|  |     appropriate copyright notice and a notice that there is no warranty (or | ||||||
|  |     else, saying that you provide a warranty) and that users may redistribute | ||||||
|  |     the program under these conditions, and telling the user how to view a copy | ||||||
|  |     of this License. (Exception: if the Program itself is interactive but does | ||||||
|  |     not normally print such an announcement, your work based on the Program is | ||||||
|  |     not required to print an announcement.) | ||||||
|  |  | ||||||
|  | These requirements apply to the modified work as a whole. If identifiable | ||||||
|  | sections of that work are not derived from the Program, and can be reasonably | ||||||
|  | considered independent and separate works in themselves, then this License, and | ||||||
|  | its terms, do not apply to those sections when you distribute them as separate | ||||||
|  | works. But when you distribute the same sections as part of a whole which is a | ||||||
|  | work based on the Program, the distribution of the whole must be on the terms of | ||||||
|  | this License, whose permissions for other licensees extend to the entire whole, | ||||||
|  | and thus to each and every part regardless of who wrote it. | ||||||
|  |  | ||||||
|  | Thus, it is not the intent of this section to claim rights or contest your | ||||||
|  | rights to work written entirely by you; rather, the intent is to exercise the | ||||||
|  | right to control the distribution of derivative or collective works based on the | ||||||
|  | Program. | ||||||
|  |  | ||||||
|  | In addition, mere aggregation of another work not based on the Program with the | ||||||
|  | Program (or with a work based on the Program) on a volume of a storage or | ||||||
|  | distribution medium does not bring the other work under the scope of this | ||||||
|  | License. | ||||||
|  |  | ||||||
|  | **3.** You may copy and distribute the Program (or a work based on it, under | ||||||
|  | Section 2) in object code or executable form under the terms of Sections 1 and 2 | ||||||
|  | above provided that you also do one of the following: | ||||||
|  |  | ||||||
|  | *   **a)** Accompany it with the complete corresponding machine-readable source | ||||||
|  |     code, which must be distributed under the terms of Sections 1 and 2 above on | ||||||
|  |     a medium customarily used for software interchange; or, | ||||||
|  |  | ||||||
|  | *   **b)** Accompany it with a written offer, valid for at least three years, to | ||||||
|  |     give any third party, for a charge no more than your cost of physically | ||||||
|  |     performing source distribution, a complete machine-readable copy of the | ||||||
|  |     corresponding source code, to be distributed under the terms of Sections 1 | ||||||
|  |     and 2 above on a medium customarily used for software interchange; or, | ||||||
|  |  | ||||||
|  | *   **c)** Accompany it with the information you received as to the offer to | ||||||
|  |     distribute corresponding source code. (This alternative is allowed only for | ||||||
|  |     noncommercial distribution and only if you received the program in object | ||||||
|  |     code or executable form with such an offer, in accord with Subsection b | ||||||
|  |     above.) | ||||||
|  |  | ||||||
|  | The source code for a work means the preferred form of the work for making | ||||||
|  | modifications to it. For an executable work, complete source code means all the | ||||||
|  | source code for all modules it contains, plus any associated interface | ||||||
|  | definition files, plus the scripts used to control compilation and installation | ||||||
|  | of the executable. However, as a special exception, the source code distributed | ||||||
|  | need not include anything that is normally distributed (in either source or | ||||||
|  | binary form) with the major components (compiler, kernel, and so on) of the | ||||||
|  | operating system on which the executable runs, unless that component itself | ||||||
|  | accompanies the executable. | ||||||
|  |  | ||||||
|  | If distribution of executable or object code is made by offering access to copy | ||||||
|  | from a designated place, then offering equivalent access to copy the source code | ||||||
|  | from the same place counts as distribution of the source code, even though third | ||||||
|  | parties are not compelled to copy the source along with the object code. | ||||||
|  |  | ||||||
|  | **4.** You may not copy, modify, sublicense, or distribute the Program except as | ||||||
|  | expressly provided under this License. Any attempt otherwise to copy, modify, | ||||||
|  | sublicense or distribute the Program is void, and will automatically terminate | ||||||
|  | your rights under this License. However, parties who have received copies, or | ||||||
|  | rights, from you under this License will not have their licenses terminated so | ||||||
|  | long as such parties remain in full compliance. | ||||||
|  |  | ||||||
|  | **5.** You are not required to accept this License, since you have not signed | ||||||
|  | it. However, nothing else grants you permission to modify or distribute the | ||||||
|  | Program or its derivative works. These actions are prohibited by law if you do | ||||||
|  | not accept this License. Therefore, by modifying or distributing the Program (or | ||||||
|  | any work based on the Program), you indicate your acceptance of this License to | ||||||
|  | do so, and all its terms and conditions for copying, distributing or modifying | ||||||
|  | the Program or works based on it. | ||||||
|  |  | ||||||
|  | **6.** Each time you redistribute the Program (or any work based on the | ||||||
|  | Program), the recipient automatically receives a license from the original | ||||||
|  | licensor to copy, distribute or modify the Program subject to these terms and | ||||||
|  | conditions. You may not impose any further restrictions on the recipients' | ||||||
|  | exercise of the rights granted herein. You are not responsible for enforcing | ||||||
|  | compliance by third parties to this License. | ||||||
|  |  | ||||||
|  | **7.** If, as a consequence of a court judgment or allegation of patent | ||||||
|  | infringement or for any other reason (not limited to patent issues), conditions | ||||||
|  | are imposed on you (whether by court order, agreement or otherwise) that | ||||||
|  | contradict the conditions of this License, they do not excuse you from the | ||||||
|  | conditions of this License. If you cannot distribute so as to satisfy | ||||||
|  | simultaneously your obligations under this License and any other pertinent | ||||||
|  | obligations, then as a consequence you may not distribute the Program at all. | ||||||
|  | For example, if a patent license would not permit royalty-free redistribution of | ||||||
|  | the Program by all those who receive copies directly or indirectly through you, | ||||||
|  | then the only way you could satisfy both it and this License would be to refrain | ||||||
|  | entirely from distribution of the Program. | ||||||
|  |  | ||||||
|  | If any portion of this section is held invalid or unenforceable under any | ||||||
|  | particular circumstance, the balance of the section is intended to apply and the | ||||||
|  | section as a whole is intended to apply in other circumstances. | ||||||
|  |  | ||||||
|  | It is not the purpose of this section to induce you to infringe any patents or | ||||||
|  | other property right claims or to contest validity of any such claims; this | ||||||
|  | section has the sole purpose of protecting the integrity of the free software | ||||||
|  | distribution system, which is implemented by public license practices. Many | ||||||
|  | people have made generous contributions to the wide range of software | ||||||
|  | distributed through that system in reliance on consistent application of that | ||||||
|  | system; it is up to the author/donor to decide if he or she is willing to | ||||||
|  | distribute software through any other system and a licensee cannot impose that | ||||||
|  | choice. | ||||||
|  |  | ||||||
|  | This section is intended to make thoroughly clear what is believed to be a | ||||||
|  | consequence of the rest of this License. | ||||||
|  |  | ||||||
|  | **8.** If the distribution and/or use of the Program is restricted in certain | ||||||
|  | countries either by patents or by copyrighted interfaces, the original copyright | ||||||
|  | holder who places the Program under this License may add an explicit | ||||||
|  | geographical distribution limitation excluding those countries, so that | ||||||
|  | distribution is permitted only in or among countries not thus excluded. In such | ||||||
|  | case, this License incorporates the limitation as if written in the body of this | ||||||
|  | License. | ||||||
|  |  | ||||||
|  | **9.** The Free Software Foundation may publish revised and/or new versions of | ||||||
|  | the General Public License from time to time. Such new versions will be similar | ||||||
|  | in spirit to the present version, but may differ in detail to address new | ||||||
|  | problems or concerns. | ||||||
|  |  | ||||||
|  | Each version is given a distinguishing version number. If the Program specifies | ||||||
|  | a version number of this License which applies to it and "any later version", | ||||||
|  | you have the option of following the terms and conditions either of that version | ||||||
|  | or of any later version published by the Free Software Foundation. If the | ||||||
|  | Program does not specify a version number of this License, you may choose any | ||||||
|  | version ever published by the Free Software Foundation. | ||||||
|  |  | ||||||
|  | **10.** If you wish to incorporate parts of the Program into other free programs | ||||||
|  | whose distribution conditions are different, write to the author to ask for | ||||||
|  | permission. For software which is copyrighted by the Free Software Foundation, | ||||||
|  | write to the Free Software Foundation; we sometimes make exceptions for this. | ||||||
|  | Our decision will be guided by the two goals of preserving the free status of | ||||||
|  | all derivatives of our free software and of promoting the sharing and reuse of | ||||||
|  | software generally. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | No Warranty | ||||||
|  | ----------- | ||||||
|  |  | ||||||
|  | **11.** BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR | ||||||
|  | THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE | ||||||
|  | STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM | ||||||
|  | "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, | ||||||
|  | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | ||||||
|  | PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE | ||||||
|  | PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF | ||||||
|  | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | ||||||
|  |  | ||||||
|  | **12.** IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | ||||||
|  | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE | ||||||
|  | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY | ||||||
|  | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR | ||||||
|  | INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA | ||||||
|  | BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A | ||||||
|  | FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER | ||||||
|  | OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. | ||||||
							
								
								
									
										39
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | |||||||
| # Octonet PVR | # Octonet PVR | ||||||
| Digital Devices [Octonet] (http://www.digital-devices.eu/shop/de/netzwerk-tv/) PVR client addon for [Kodi] (http://kodi.tv) | Digital Devices [Octonet](http://www.digital-devices.eu/shop/de/netzwerk-tv/) PVR client addon for [Kodi](http://kodi.tv) | ||||||
|  |  | ||||||
| | Platform | Status | | | Platform | Status | | ||||||
| |----------|--------| | |----------|--------| | ||||||
| @@ -8,25 +8,30 @@ Digital Devices [Octonet] (http://www.digital-devices.eu/shop/de/netzwerk-tv/) P | |||||||
|  |  | ||||||
| # Building | # Building | ||||||
|  |  | ||||||
| ## Windows | These instructions work on all supported platforms for the most part. Obviously, paths need to be | ||||||
| 1. Create a file `project/cmake/addons/addons/kodi.pvr.octonet/kodi.pvr.octonet.txt` containing a | adjusted according to your OS (`/` vs `\`). We use Linux paths here as an example. | ||||||
|    single line `kodi.pvr.octonet file://C:\some\path`. The path doesn't matter and doesn't need to |  | ||||||
|    actually exist. |  | ||||||
|  |  | ||||||
| 2. Use a shell that has environment variables setup by Visual Studio for the native x86 toolchain. | Clone the `pvr.octonet` repository: | ||||||
|    Run the following in a new build directory and adjust paths accordingly: |  | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| cmake -G "NMake Makefiles" ^ | $ git clone https://github.com/DigitalDevices/pvr.octonet.git | ||||||
|     -DCMAKE_BUILD_TYPE=Release ^ |  | ||||||
|     -DADDONS_TO_BUILD="kodi.pvr.octonet" ^ |  | ||||||
|     -DADDON_SRC_PREFIX="path_to_where_kodi.pvr.octonet_is" ^ |  | ||||||
|     -DCMAKE_INSTALL_PREFIX="some_subdirectory" ^ |  | ||||||
|     -DPACKAGE_ZIP=ON ^ |  | ||||||
|     "path_to_kodi\project\cmake\addons" |  | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Make sure `ADDON_SRC_PREFIX` points to the parent directory of `kodi.pvr.octonet`. | Clone the Kodi repository: | ||||||
|  |  | ||||||
| 4. Build the addon by running `nmake`. Run `nmake package-addons` to package a zip file of the | ``` | ||||||
|    addon. | $ git clone --branch master https://github.com/xbmc/xbmc.git | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | $ 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/cmake/addons" | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | On Windows, you should add `-G "NMake Makefiles"` to the CMake invocation. Make sure that | ||||||
|  | `ADDON_SRC_PREFIX` does _not_ point directly to `pvr.octonet` but instead to its parent directory. | ||||||
|  |  | ||||||
|  | Finally, build the plugin with `make` (or `nmake` on Windows). The plugin should be in an `install` | ||||||
|  | subdirectory. | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								appveyor.yml
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								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 --branch master --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% | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							| @@ -1,9 +1,9 @@ | |||||||
| 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 |                libp8-platform-dev, kodi-addon-dev | ||||||
| Standards-Version: 3.9.4 | Standards-Version: 4.1.2 | ||||||
| Section: libs | Section: libs | ||||||
| Homepage: https://github.com/DigitalDevices/pvr.octonet | Homepage: https://github.com/DigitalDevices/pvr.octonet | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
								
							| @@ -5,7 +5,7 @@ Source: https://github.com/DigitalDevices/pvr.octonet | |||||||
| Files: * | Files: * | ||||||
| Copyright: 2015-2016 Julian Scheel | Copyright: 2015-2016 Julian Scheel | ||||||
|            2015-2016 jusst technologies GmbH |            2015-2016 jusst technologies GmbH | ||||||
|            2005-2013 Team XBMC |            2005-2020 Team Kodi | ||||||
| License: GPL-2+ | License: GPL-2+ | ||||||
|  This package is free software; you can redistribute it and/or modify |  This package is free software; you can redistribute it and/or modify | ||||||
|  it under the terms of the GNU General Public License as published by |  it under the terms of the GNU General Public License as published by | ||||||
| @@ -24,7 +24,8 @@ License: GPL-2+ | |||||||
|  Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". |  Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". | ||||||
|  |  | ||||||
| Files: debian/* | Files: debian/* | ||||||
| Copyright: 2016 Julian Scheel <julian@jusst.de> | Copyright: 2020 Team Kodi | ||||||
|  |            2016 Julian Scheel <julian@jusst.de> | ||||||
|            2015 Jean-Luc Barriere |            2015 Jean-Luc Barriere | ||||||
|            2015 wsnipex <wsnipex@a1.net> |            2015 wsnipex <wsnipex@a1.net> | ||||||
| License: GPL-2+ | License: GPL-2+ | ||||||
|   | |||||||
| @@ -1,7 +1,9 @@ | |||||||
|  | cmake_minimum_required(VERSION 3.5) | ||||||
| project(jsoncpp) | project(jsoncpp) | ||||||
|  |  | ||||||
| cmake_minimum_required(VERSION 2.6) | SET(CMAKE_CXX_STANDARD 11) | ||||||
| enable_language(CXX) | 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
									
								
								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
									
								
								depends/common/p8-platform/p8-platform.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								depends/common/p8-platform/p8-platform.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | p8-platform https://github.com/xbmc/platform.git cee64e9dc0b69e8d286dc170a78effaabfa09c44 | ||||||
							
								
								
									
										1
									
								
								depends/windowsstore/p8-platform/p8-platform.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								depends/windowsstore/p8-platform/p8-platform.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | p8-platform https://github.com/afedchin/platform.git win10 | ||||||
| @@ -1,23 +1,18 @@ | |||||||
| <?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.2" | 	version="1.2.6" | ||||||
| 	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> | ||||||
|  | 		<license>GPL-2.0-or-later</license> | ||||||
|  | 		<source>https://github.com/DigitalDevices/pvr.octonet</source> | ||||||
| 	</extension> | 	</extension> | ||||||
| </addon> | </addon> | ||||||
| @@ -1,22 +1,10 @@ | |||||||
| /* | /* | ||||||
|  * Copyright (C) 2015 Julian Scheel <julian@jusst.de> |  *  Copyright (C) 2015 Julian Scheel <julian@jusst.de> | ||||||
|  * Copyright (C) 2015 jusst technologies GmbH |  *  Copyright (C) 2015 jusst technologies GmbH | ||||||
|  * Copyright (C) 2015 Digital Devices GmbH |  *  Copyright (C) 2015 Digital Devices GmbH | ||||||
|  * |  * | ||||||
|  * This program is free software; you can redistribute it and/or |  *  SPDX-License-Identifier: GPL-2.0-or-later | ||||||
|  * modify it under the terms of the GNU General Public License |  *  See LICENSE.md for more information. | ||||||
|  * as published by the Free Software Foundation; either version 2 |  | ||||||
|  * of the License, or (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with this program; if not, write to the Free Software |  | ||||||
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, |  | ||||||
|  * USA. |  | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| @@ -26,7 +14,6 @@ | |||||||
| #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 | ||||||
| @@ -42,7 +29,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 +40,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 +49,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 +134,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 +171,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; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -234,12 +215,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, 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++) | 	for (unsigned int i = 0; i < channels.size(); i++) | ||||||
| 	{ | 	{ | ||||||
| 		OctonetChannel &chan = channels.at(i); | 		OctonetChannel &chan = channels.at(i); | ||||||
| 		if (channel.iUniqueId != chan.id) | 		if (iChannelUid != chan.id) | ||||||
| 			continue; | 			continue; | ||||||
|  |  | ||||||
| 		if(chan.epg.empty()) { | 		if(chan.epg.empty()) { | ||||||
| @@ -260,8 +241,11 @@ 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.iSeriesNumber = EPG_TAG_INVALID_SERIES_EPISODE; | ||||||
|  | 			entry.iEpisodeNumber = EPG_TAG_INVALID_SERIES_EPISODE; | ||||||
|  | 			entry.iEpisodePartNumber = EPG_TAG_INVALID_SERIES_EPISODE; | ||||||
|  |  | ||||||
| 			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(); | ||||||
| @@ -281,8 +265,11 @@ 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.iSeriesNumber = EPG_TAG_INVALID_SERIES_EPISODE; | ||||||
|  | 			entry.iEpisodeNumber = EPG_TAG_INVALID_SERIES_EPISODE; | ||||||
|  | 			entry.iEpisodePartNumber = EPG_TAG_INVALID_SERIES_EPISODE; | ||||||
|  |  | ||||||
| 			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(); | ||||||
|   | |||||||
| @@ -1,31 +1,18 @@ | |||||||
| #pragma once |  | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Copyright (C) 2015 Julian Scheel <julian@jusst.de> |  *  Copyright (C) 2015 Julian Scheel <julian@jusst.de> | ||||||
|  * Copyright (C) 2015 jusst technologies GmbH |  *  Copyright (C) 2015 jusst technologies GmbH | ||||||
|  * Copyright (C) 2015 Digital Devices GmbH |  *  Copyright (C) 2015 Digital Devices GmbH | ||||||
|  * |  * | ||||||
|  * This program is free software; you can redistribute it and/or |  *  SPDX-License-Identifier: GPL-2.0-or-later | ||||||
|  * modify it under the terms of the GNU General Public License |  *  See LICENSE.md for more information. | ||||||
|  * as published by the Free Software Foundation; either version 2 |  | ||||||
|  * of the License, or (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with this program; if not, write to the Free Software |  | ||||||
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, |  | ||||||
|  * USA. |  | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| #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 | ||||||
| @@ -69,7 +56,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, 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& getUrl(int id) const; | ||||||
| 		const std::string& getName(int id) const; | 		const std::string& getName(int id) const; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,22 +1,12 @@ | |||||||
| /* | /* | ||||||
|  *      Copyright (C) 2005-2011 Team XBMC |  *  Copyright (C) 2005-2020 Team Kodi | ||||||
|  *      http://www.xbmc.org |  *  https://kodi.tv | ||||||
|  * |  | ||||||
|  *  This program is free software: you can redistribute it and/or modify |  | ||||||
|  *  it under the terms of the GNU General Public License as published by |  | ||||||
|  *  the Free Software Foundation, either version 2 of the License, or |  | ||||||
|  *  (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  *  This program is distributed in the hope that it will be useful, |  | ||||||
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  *  GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  *  You should have received a copy of the GNU General Public License |  | ||||||
|  *  along with this program.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  * |  * | ||||||
|  |  *  SPDX-License-Identifier: GPL-2.0-or-later | ||||||
|  |  *  See LICENSE.md for more information. | ||||||
|  */ |  */ | ||||||
| #include "libXBMC_addon.h" |  | ||||||
|  | #include "kodi/libXBMC_addon.h" | ||||||
| #include <string> | #include <string> | ||||||
| #include "p8-platform/os.h" | #include "p8-platform/os.h" | ||||||
| #include "client.h" | #include "client.h" | ||||||
| @@ -196,13 +186,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 +202,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 +286,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 +296,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 +308,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 +379,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 +428,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 +464,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 +555,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 +613,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 +689,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 | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								src/Socket.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/Socket.h
									
									
									
									
									
								
							| @@ -1,21 +1,11 @@ | |||||||
| /* | /* | ||||||
|  *      Copyright (C) 2005-2011 Team XBMC |  *  Copyright (C) 2005-2020 Team Kodi | ||||||
|  *      http://www.xbmc.org |  *  https://kodi.tv | ||||||
|  * |  | ||||||
|  *  This Program is free software; you can redistribute it and/or modify |  | ||||||
|  *  it under the terms of the GNU General Public License as published by |  | ||||||
|  *  the Free Software Foundation; either version 2, or (at your option) |  | ||||||
|  *  any later version. |  | ||||||
|  * |  | ||||||
|  *  This Program is distributed in the hope that it will be useful, |  | ||||||
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |  | ||||||
|  *  GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  *  You should have received a copy of the GNU General Public License |  | ||||||
|  *  along with this program.  If not, see <http://www.gnu.org/licenses/>. |  | ||||||
|  * |  * | ||||||
|  |  *  SPDX-License-Identifier: GPL-2.0-or-later | ||||||
|  |  *  See LICENSE.md for more information. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
| //Include platform specific datatypes, header files, defines and constants: | //Include platform specific datatypes, header files, defines and constants: | ||||||
|   | |||||||
							
								
								
									
										136
									
								
								src/client.cpp
									
									
									
									
									
								
							
							
						
						
									
										136
									
								
								src/client.cpp
									
									
									
									
									
								
							| @@ -1,30 +1,17 @@ | |||||||
| /* | /* | ||||||
|  * Copyright (C) 2015 Julian Scheel <julian@jusst.de> |  *  Copyright (C) 2015 Julian Scheel <julian@jusst.de> | ||||||
|  * Copyright (C) 2015 jusst technologies GmbH |  *  Copyright (C) 2015 jusst technologies GmbH | ||||||
|  * Copyright (C) 2015 Digital Devices GmbH |  *  Copyright (C) 2015 Digital Devices GmbH | ||||||
|  * |  * | ||||||
|  * This program is free software; you can redistribute it and/or |  *  SPDX-License-Identifier: GPL-2.0-or-later | ||||||
|  * modify it under the terms of the GNU General Public License |  *  See LICENSE.md for more information. | ||||||
|  * as published by the Free Software Foundation; either version 2 |  | ||||||
|  * of the License, or (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with this program; if not, write to the Free Software |  | ||||||
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, |  | ||||||
|  * USA. |  | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include "client.h" | #include "client.h" | ||||||
| #include <xbmc_pvr_dll.h> | #include <kodi/xbmc_pvr_dll.h> | ||||||
| #include <libXBMC_addon.h> | #include <kodi/libXBMC_addon.h> | ||||||
| #include <p8-platform/util/util.h> | #include <p8-platform/util/util.h> | ||||||
| #include <libKODI_guilib.h> |  | ||||||
|  |  | ||||||
| #include "OctonetData.h" | #include "OctonetData.h" | ||||||
| #include "rtsp_client.hpp" | #include "rtsp_client.hpp" | ||||||
| @@ -36,7 +23,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 +36,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; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -58,23 +45,23 @@ ADDON_STATUS ADDON_Create(void *callbacks, void* props) | |||||||
| 	if (callbacks == NULL || props == NULL) | 	if (callbacks == NULL || props == NULL) | ||||||
| 		return ADDON_STATUS_UNKNOWN; | 		return ADDON_STATUS_UNKNOWN; | ||||||
|  |  | ||||||
| 	PVR_PROPERTIES *pvrprops = (PVR_PROPERTIES*)props; | 	AddonProperties_PVR *pvrprops = (AddonProperties_PVR*)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 +70,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 +82,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 +89,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 +97,16 @@ void ADDON_Announce(const char *flag, const char *sender, const char *message, c | |||||||
| extern "C" | extern "C" | ||||||
| { | { | ||||||
|  |  | ||||||
| const char* GetPVRAPIVersion(void) | PVR_ERROR GetCapabilities(PVR_ADDON_CAPABILITIES *pCapabilities) | ||||||
| { |  | ||||||
| 	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->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 +118,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 +130,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? | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -187,11 +143,14 @@ void OnPowerSavingActivated() {} | |||||||
| void OnPowerSavingDeactivated() {} | void OnPowerSavingDeactivated() {} | ||||||
|  |  | ||||||
| /* EPG */ | /* 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 */ | /* Channel groups */ | ||||||
| int GetChannelGroupsAmount(void) | int GetChannelGroupsAmount(void) | ||||||
| { | { | ||||||
| @@ -223,7 +182,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,10 +192,12 @@ 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; } | ||||||
| PVR_ERROR GetRecordingEdl(const PVR_RECORDING&, PVR_EDL_ENTRY edl[], int *size) { return PVR_ERROR_NOT_IMPLEMENTED; } | PVR_ERROR GetRecordingEdl(const PVR_RECORDING&, PVR_EDL_ENTRY edl[], int *size) { return PVR_ERROR_NOT_IMPLEMENTED; } | ||||||
|  | PVR_ERROR GetRecordingSize(const PVR_RECORDING* recording, int64_t* sizeInBytes) { return PVR_ERROR_NOT_IMPLEMENTED; } | ||||||
| PVR_ERROR GetTimerTypes(PVR_TIMER_TYPE types[], int *size) { return PVR_ERROR_NOT_IMPLEMENTED; } | PVR_ERROR GetTimerTypes(PVR_TIMER_TYPE types[], int *size) { return PVR_ERROR_NOT_IMPLEMENTED; } | ||||||
| int GetTimersAmount(void) { return PVR_ERROR_NOT_IMPLEMENTED; } | int GetTimersAmount(void) { return PVR_ERROR_NOT_IMPLEMENTED; } | ||||||
| PVR_ERROR GetTimers(ADDON_HANDLE handle) { return PVR_ERROR_NOT_IMPLEMENTED; } | PVR_ERROR GetTimers(ADDON_HANDLE handle) { return PVR_ERROR_NOT_IMPLEMENTED; } | ||||||
| @@ -245,6 +205,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 +228,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) { | PVR_ERROR GetSignalStatus(int channelUid, PVR_SIGNAL_STATUS* signalStatus) { | ||||||
| 	CloseLiveStream(); | 	memset(signalStatus, 0, sizeof(PVR_SIGNAL_STATUS)); | ||||||
| 	return OpenLiveStream(channel); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS& signalStatus) { |  | ||||||
| 	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(int, 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 */ | ||||||
| @@ -293,23 +254,18 @@ 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; } | ||||||
|  |  | ||||||
| /* Callbacks */ | /* Callbacks */ | ||||||
| void PauseStream(bool bPaused) {} | void PauseStream(bool bPaused) {} | ||||||
| bool SeekTime(int time, bool backwards, double *startpts) { return false; } | 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(); | ||||||
|   | |||||||
							
								
								
									
										31
									
								
								src/client.h
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								src/client.h
									
									
									
									
									
								
							| @@ -1,34 +1,23 @@ | |||||||
| #pragma once |  | ||||||
| /* | /* | ||||||
|  * Copyright (C) 2015 Julian Scheel <julian@jusst.de> |  *  Copyright (C) 2015 Julian Scheel <julian@jusst.de> | ||||||
|  * Copyright (C) 2015 jusst technologies GmbH |  *  Copyright (C) 2015 jusst technologies GmbH | ||||||
|  * Copyright (C) 2015 Digital Devices GmbH |  *  Copyright (C) 2015 Digital Devices GmbH | ||||||
|  * |  * | ||||||
|  * This program is free software; you can redistribute it and/or |  *  SPDX-License-Identifier: GPL-2.0-or-later | ||||||
|  * modify it under the terms of the GNU General Public License |  *  See LICENSE.md for more information. | ||||||
|  * as published by the Free Software Foundation; either version 2 |  | ||||||
|  * of the License, or (at your option) any later version. |  | ||||||
|  * |  | ||||||
|  * This program is distributed in the hope that it will be useful, |  | ||||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of |  | ||||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the |  | ||||||
|  * GNU General Public License for more details. |  | ||||||
|  * |  | ||||||
|  * You should have received a copy of the GNU General Public License |  | ||||||
|  * along with this program; if not, write to the Free Software |  | ||||||
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, |  | ||||||
|  * USA. |  | ||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| #include "libXBMC_addon.h" | #pragma once | ||||||
| #include "libXBMC_pvr.h" |  | ||||||
|  | #include "kodi/libXBMC_addon.h" | ||||||
|  | #include "kodi/libXBMC_pvr.h" | ||||||
|  |  | ||||||
| #ifndef __func__ | #ifndef __func__ | ||||||
| #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 */ | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #include "Socket.h" | #include "Socket.h" | ||||||
| #include "client.h" | #include "client.h" | ||||||
| #include <p8-platform/util/util.h> | #include <p8-platform/util/util.h> | ||||||
| #include <libXBMC_addon.h> | #include <kodi/libXBMC_addon.h> | ||||||
| #include <cstring> | #include <cstring> | ||||||
| #include <sstream> | #include <sstream> | ||||||
|  |  | ||||||
| @@ -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; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -471,10 +471,10 @@ void rtsp_close() | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| void rtsp_fill_signal_status(PVR_SIGNAL_STATUS& signal_status) { | void rtsp_fill_signal_status(PVR_SIGNAL_STATUS* signal_status) { | ||||||
| 	if(rtsp) { | 	if(rtsp) { | ||||||
| 		strncpy(signal_status.strServiceName, rtsp->name.c_str(), PVR_ADDON_NAME_STRING_LENGTH - 1); | 		strncpy(signal_status->strServiceName, rtsp->name.c_str(), PVR_ADDON_NAME_STRING_LENGTH - 1); | ||||||
| 		signal_status.iSNR = 0x1111 * rtsp->quality; | 		signal_status->iSNR = 0x1111 * rtsp->quality; | ||||||
| 		signal_status.iSignal = 0x101 * rtsp->level; | 		signal_status->iSignal = 0x101 * rtsp->level; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -2,11 +2,11 @@ | |||||||
| #define _RTSP_CLIENT_HPP_ | #define _RTSP_CLIENT_HPP_ | ||||||
|  |  | ||||||
| #include <string> | #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); | bool rtsp_open(const std::string& name, const std::string& url_str); | ||||||
| void rtsp_close(); | void rtsp_close(); | ||||||
| int rtsp_read(void *buf, unsigned buf_size); | int rtsp_read(void *buf, unsigned buf_size); | ||||||
| void rtsp_fill_signal_status(PVR_SIGNAL_STATUS& signal_status); | void rtsp_fill_signal_status(PVR_SIGNAL_STATUS* signal_status); | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user