Compare commits

..

62 Commits

Author SHA1 Message Date
Kai Sommerfeld
b01e24b0a2 Merge pull request #41 from AlwinEsch/Matrix-change
[Matrix] API change updates
2020-04-30 23:15:16 +02:00
Alwin Esch
5f9342abdd increase version to 1.2.6 2020-04-30 19:06:50 +02:00
Alwin Esch
cc34e52369 [API related] change SignalStatus and GetDescrambleInfo (channelUid added) 2020-04-29 20:47:22 +02:00
Alwin Esch
360fb03145 [API related] rename GetAddonCapabilities to GetCapabilities 2020-04-29 20:44:00 +02:00
Alwin Esch
ace4891f78 [API related] change PVR_PROPERTIES to AddonProperties_PVR 2020-04-29 20:43:46 +02:00
Alwin Esch
3d47c712fd remove not used GUI addon interface include 2020-04-27 11:16:50 +02:00
Kai Sommerfeld
3f04265d51 Merge pull request #40 from AlwinEsch/Matrix-change
[Matrix] API change update / cleanups
2020-04-24 19:09:49 +02:00
Alwin Esch
d4d6628d57 increase version to 1.2.5 2020-04-24 18:10:56 +02:00
Alwin Esch
cbef814f8f correct license on addon.xml 2020-03-31 05:38:50 +02:00
Kai Sommerfeld
50386e13b2 Merge pull request #39 from phunkyfish/pvr-api
PVR API 6.3.0
2020-03-26 21:15:37 +01:00
phunkyfish
cd1c5d4171 PVR API 6.3.0 2020-03-26 19:43:26 +00:00
Kai Sommerfeld
83fbcfb360 Merge pull request #38 from AlwinEsch/Matrix-change
[Matrix] cleanups, addon.xml update and LICENSE add / update
2020-03-25 22:29:16 +01:00
Alwin Esch
bed39d0575 increase version to 1.2.3 2020-03-25 20:58:12 +01:00
Alwin Esch
0bdcb49d69 update .gitignore 2020-03-25 20:58:07 +01:00
Alwin Esch
5024fd99c1 add license and source url to addon.xml 2020-03-25 20:56:17 +01:00
Alwin Esch
a19fef8af8 update source license to use SPDX 2020-03-25 20:53:37 +01:00
Alwin Esch
38f8f54c9f add GPL2 as LICENSE.md to addon 2020-03-25 20:53:25 +01:00
Alwin Esch
01c41d8ea1 update debian build code 2020-03-25 05:36:06 +01:00
Kai Sommerfeld
237362e65a Merge pull request #37 from phunkyfish/season-invalid
Update PVR API 6.2.0
2020-03-17 18:19:46 +01:00
phunkyfish
c3f4d61b38 Update PVR API 6.2.0 2020-03-17 09:47:45 +00:00
Kai Sommerfeld
c37cede8dc Merge pull request #36 from AlwinEsch/Matrix-change
add p8-platform to addon itself as depends
2020-02-26 13:18:25 +01:00
Alwin Esch
aa4f7c0b0d add p8-platform to addon itself as depends
This is intended to significantly speed up the construction times for those who do not use these dependencies (most addons without this).

This will also happen to all other PVRs that need it and also allows you to add your own versions if necessary.

After converting this will be removed from Kodi.
Only used on the Matrix branches, the others remain with Kodi.
2020-02-23 07:21:06 +01:00
Kai Sommerfeld
8032f085fd Merge pull request #33 from AlwinEsch/Matrix-change
[Matrix] update CMakeLists.txt to 3.5 and change include way
2019-09-23 12:21:19 +02:00
Alwin Esch
0f6cd141c4 increase version to 1.2.1 2019-09-21 00:43:42 +02:00
Alwin Esch
d5ec59e00e change header include to start with "kodi/"
This needed for reworked header checks by Kodi's addon build system.
2019-09-21 00:42:34 +02:00
Alwin Esch
e2a73af36e update .travis.yml 2019-09-21 00:42:34 +02:00
Alwin Esch
a55552e768 update CMakeLists.txt to 3.5 2019-09-21 00:42:34 +02:00
Kai Sommerfeld
14d3e9d225 Merge pull request #35 from phunkyfish/api-change
Recompile for 6.1.0 PVR Addon API compatibility
2019-09-03 19:58:50 +02:00
phunkyfish
cf9ee98727 Recompile for 6.1.0 PVR Addon API compatibility 2019-09-03 16:56:33 +01:00
Kai Sommerfeld
9d98f2bba4 Merge pull request #29 from enen92/Matrix
[pvr.octonet] 1.1.0
2019-08-08 18:12:31 +02:00
enen92
ca692f14be [pvr.octonet] 1.1.0 2019-08-07 22:39:55 +01:00
Kai Sommerfeld
69da8dbd0c Merge pull request #28 from ksooo/fixWindows-matrix
Fix windows matrix
2019-05-10 23:37:27 +02:00
Rechi
6d4f3847c7 [cleanup] remove unused includes
this fixes windows build failures
2019-05-10 23:36:06 +02:00
Rechi
38e25e1f1c [depends] jsoncpp: add checksum file 2019-05-10 23:36:06 +02:00
Kai Sommerfeld
472dc2beae Merge pull request #27 from olafhering/kodiplatform
[cmake] remove usage of kodi-platform
2019-05-10 23:31:20 +02:00
Olaf Hering
ec08c20540 [cmake] remove usage of kodi-platform
The pvr.octonet binary addon does not use kodi-platform.
Remove existing references from CMakeLists.txt and debian/control.
Add dependency to libp8-platform-dev because libkodiplatform-dev
pulled that dependency in as a side effect. Fix that bug too by
adding an explicit dependency.

Signed-off-by: Olaf Hering <olaf@aepfle.de>
2019-04-28 12:34:56 +00:00
Kai Sommerfeld
63ef363522 Merge pull request #26 from ksooo/pvr-api-6-0-0
Implement PVR addon API v6.0.0
2019-04-24 21:05:25 +02:00
Kai Sommerfeld
c91061f84b Implement PVR addon API v6.0.0 2019-04-23 23:30:46 +02:00
Kai Sommerfeld
414e756912 build with Kodi master API 2019-04-21 17:40:25 +02:00
Kai Sommerfeld
9de3166203 build with Kodi Matrix API 2019-04-21 17:25:16 +02:00
Kai Sommerfeld
df1b033f14 Merge pull request #25 from ksooo/Leia
build with Kodi Leia API
2019-04-16 06:39:23 +02:00
ksooo
0295717be2 build with Kodi Leia API 2019-04-16 06:37:32 +02:00
Kai Sommerfeld
203f800eaa Merge pull request #22 from ksooo/jenkinsfile
Add Jenkinsfile to allow Kodi CI to build this addon.
2018-10-16 13:50:33 +02:00
Kai Sommerfeld
153dfeb3d5 Add Jenkinsfile to allow Kodi CI to build this addon. 2018-10-16 13:44:19 +02:00
Kai Sommerfeld
1e44819300 PVR API 5.10.0 2018-06-09 11:07:51 +02:00
René Bühlmann
54680a38bd PVR API 5.9.0 2018-04-11 14:42:04 +02:00
Kai Sommerfeld
689afbf4cd PVR API 5.8.0 2018-01-15 07:27:07 +01:00
Rechi
c4af00a4fe [depends] bump jsoncpp to 1.8.3 2017-11-15 12:41:33 +01:00
Anton Fedchin
f1f8d44b78 win10: fix linkage to deprecated wsock32 api. 2017-11-02 09:06:58 +01:00
Kai Sommerfeld
e9b4c05de5 Update to PVR API version 5.7.0 2017-09-26 14:17:23 +02:00
Kai Sommerfeld
a77cf111bb Added minimalistic support for PVR Addon API 5.3.0 2017-07-10 08:55:26 +02:00
Julian Scheel
020dd98e7b OctonetData: Use hash for channel nativeId
We previously assumed that the channelId provided by the Octonet would
only contain numbers and colons, which unfortunately is not true. The
satellite names could contain arbitrary characters, which then caused
the conversion to a numeric value to fail, stopping channels from being
distinguishable. This caused all EPG events to be mapped to the first
channel.

Signed-off-by: Julian Scheel <julian@jusst.de>
2017-07-06 14:32:14 +02:00
Julian Scheel
d7bb865329 AppVeyor: Provide built addon as artifact
Allow users to fetch the builds generated by AppVeyor.

Signed-off-by: Julian Scheel <julian@jusst.de>
2017-07-06 14:32:04 +02:00
Julian Scheel
9bbd7cf3c4 README: Update build path
Reflect relocation of cmake script in Kodi master.

Signed-off-by: Julian Scheel <julian@jusst.de>
2017-05-26 11:04:27 +02:00
Julian Scheel
7b9ec7d884 Travis: Update build instructions for Kodi master
The cmake build files for addons have been moved inside the kodi tree.
Update the Travis build script to reflect this.

Signed-off-by: Julian Scheel <julian@jusst.de>
2017-05-26 10:59:36 +02:00
Julian Scheel
37abebb540 AppVeyor: Update build instructions for Kodi master
The cmake build files for addons have been moved inside the kodi tree.
Update the AppVeyor build script to reflect this.

Signed-off-by: Julian Scheel <julian@jusst.de>
2017-05-26 10:58:35 +02:00
Alwin Esch
3494c4c470 Update on kodi to addon interface 2017-05-23 12:23:33 +02:00
Alwin Esch
ff41fc9acc update debian control 2017-05-18 12:04:46 +02:00
Alwin Esch
1ced6b3fa4 remove no more needed version functions 2017-05-18 12:04:46 +02:00
Alwin Esch
cd774b6edc change to automatic depends set on addon.xml 2017-05-18 12:04:46 +02:00
Alwin Esch
2a63777b6d libXBMC_codec.h removed and changed to libXBMC_pvr.h also fix compile fault after last request 2017-05-03 09:48:00 +02:00
Alwin Esch
e9f0d6bf76 Remove not used part 2017-05-03 09:47:39 +02:00
23 changed files with 495 additions and 280 deletions

51
.gitignore vendored
View File

@@ -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

View File

@@ -7,28 +7,22 @@ language: cpp
# Linux. We need Trusty in order to get up to date versions of
# cmake and g++.
#
env:
global:
- app_id=pvr.octonet
matrix:
include:
- os: linux
dist: trusty
dist: xenial
sudo: required
compiler: gcc
- os: linux
dist: trusty
dist: xenial
sudo: required
compiler: clang
- os: osx
osx_image: xcode7.3
- os: osx
osx_image: xcode6.1
#
# Some of the OS X images don't have cmake, contrary to what people
# on the Internet say
#
before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then which cmake || brew update ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then which cmake || brew install cmake ; fi
osx_image: xcode10.2
#
# The addon source is automatically checked out in $TRAVIS_BUILD_DIR,
@@ -36,10 +30,10 @@ before_install:
#
before_script:
- cd $TRAVIS_BUILD_DIR/..
- git clone --depth=1 https://github.com/xbmc/xbmc.git
- mkdir -p xbmc/project/cmake/addons/addons/pvr.octonet
- echo "pvr.octonet https://github.com/DigitalDevices/pvr.octonet master" > xbmc/project/cmake/addons/addons/pvr.octonet/pvr.octonet.txt
- cd $TRAVIS_BUILD_DIR && mkdir build && cd build
- cmake -DADDONS_TO_BUILD=pvr.octonet -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/project/cmake/addons
- git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git
- cd ${app_id} && mkdir build && cd build
- mkdir -p definition/${app_id}
- echo ${app_id} $TRAVIS_BUILD_DIR $TRAVIS_COMMIT > definition/${app_id}/${app_id}.txt
- cmake -DADDONS_TO_BUILD=${app_id} -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DADDONS_DEFINITION_DIR=$TRAVIS_BUILD_DIR/build/definition -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons
script: make

View File

@@ -1,19 +1,15 @@
cmake_minimum_required(VERSION 3.5)
project(pvr.octonet)
cmake_minimum_required(VERSION 2.6)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
enable_language(CXX)
find_package(Kodi REQUIRED)
find_package(kodiplatform REQUIRED)
find_package(p8-platform REQUIRED)
find_package(JsonCpp REQUIRED)
include_directories(
${kodiplatform_INCLUDE_DIRS}
${p8-platform_INCLUDE_DIRS}
${KODI_INCLUDE_DIR}
${KODI_INCLUDE_DIR}/.. # Hack way with "/..", need bigger Kodi cmake rework to match right include ways
${JSONCPP_INCLUDE_DIRS})
set(DEPLIBS
@@ -26,10 +22,19 @@ set(OCTONET_SOURCES
src/Socket.cpp
src/rtsp_client.cpp)
set(OCTONET_HEADERS
src/client.h
src/OctonetData.h
src/Socket.h)
build_addon(pvr.octonet OCTONET DEPLIBS)
if(WIN32)
target_link_libraries(pvr.octonet wsock32 ws2_32)
if(NOT CMAKE_SYSTEM_NAME STREQUAL WindowsStore)
target_link_libraries(pvr.octonet wsock32 ws2_32)
else()
target_link_libraries(pvr.octonet ws2_32)
endif()
endif()
include(CPack)

1
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1 @@
buildPlugin(version: "Matrix")

264
LICENSE.md Normal file
View 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.

View File

@@ -20,17 +20,14 @@ $ git clone https://github.com/DigitalDevices/pvr.octonet.git
Clone the Kodi repository:
```
$ git clone https://github.com/xbmc/xbmc.git
$ git clone --branch master https://github.com/xbmc/xbmc.git
```
If you already have a local Kodi checkout, you can use that one. Just make sure it is recent enough
(Kodi 17 Beta 5 or later should work).
```
$ cd pvr.octonet
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release -DADDONS_TO_BUILD="pvr.octonet" -DADDON_SRC_PREFIX="path to parent of pvr.octonet" -DCMAKE_INSTALL_PREFIX="install" -DPACKAGE_ZIP=ON "path to kodi/project/cmake/addons"
$ cmake -DCMAKE_BUILD_TYPE=Release -DADDONS_TO_BUILD="pvr.octonet" -DADDON_SRC_PREFIX="path to parent of pvr.octonet" -DCMAKE_INSTALL_PREFIX="install" -DPACKAGE_ZIP=ON "path to kodi/cmake/addons"
```
On Windows, you should add `-G "NMake Makefiles"` to the CMake invocation. Make sure that

View File

@@ -21,15 +21,20 @@ environment:
- GENERATOR: "Visual Studio 14"
CONFIG: Release
artifacts:
- path: build/install/
name: pvr.octonet
type: zip
build_script:
- cd ..
- set ROOT=%cd%
- git clone --depth=1 https://github.com/xbmc/xbmc.git
- mkdir xbmc\project\cmake\addons\addons\pvr.octonet
- echo pvr.octonet https://github.com/DigitalDevices/pvr.octonet master > xbmc\project\cmake\addons\addons\pvr.octonet\pvr.octonet.txt
- git clone --branch master --depth=1 https://github.com/xbmc/xbmc.git
- mkdir xbmc\cmake\addons\addons\pvr.octonet
- echo pvr.octonet https://github.com/DigitalDevices/pvr.octonet master > xbmc\cmake\addons\addons\pvr.octonet\pvr.octonet.txt
- cd %ADDON%
- mkdir build
- cd build
# Must use absolute path for cmake to build depends correctly
- cmake -G "%GENERATOR%" -DADDONS_TO_BUILD=%ADDON% -DCMAKE_BUILD_TYPE=%CONFIG% -DADDON_SRC_PREFIX=%ROOT% -DCMAKE_INSTALL_PREFIX=%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%

6
debian/control vendored
View File

@@ -1,9 +1,9 @@
Source: kodi-pvr-octonet
Priority: extra
Maintainer: Julian Scheel <julian@jusst.de>
Build-Depends: debhelper (>= 9.0.0), cmake, libjsoncpp-dev, kodi-pvr-dev,
libkodiplatform-dev (>= 16.0.0), kodi-addon-dev
Standards-Version: 3.9.4
Build-Depends: debhelper (>= 9.0.0), cmake, libjsoncpp-dev,
libp8-platform-dev, kodi-addon-dev
Standards-Version: 4.1.2
Section: libs
Homepage: https://github.com/DigitalDevices/pvr.octonet

5
debian/copyright vendored
View File

@@ -5,7 +5,7 @@ Source: https://github.com/DigitalDevices/pvr.octonet
Files: *
Copyright: 2015-2016 Julian Scheel
2015-2016 jusst technologies GmbH
2005-2013 Team XBMC
2005-2020 Team Kodi
License: GPL-2+
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
@@ -24,7 +24,8 @@ License: GPL-2+
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
Files: debian/*
Copyright: 2016 Julian Scheel <julian@jusst.de>
Copyright: 2020 Team Kodi
2016 Julian Scheel <julian@jusst.de>
2015 Jean-Luc Barriere
2015 wsnipex <wsnipex@a1.net>
License: GPL-2+

View File

@@ -1,7 +1,9 @@
cmake_minimum_required(VERSION 3.5)
project(jsoncpp)
cmake_minimum_required(VERSION 2.6)
enable_language(CXX)
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_CXX_EXTENSIONS OFF)
set(SOURCES src/lib_json/json_reader.cpp
src/lib_json/json_value.cpp

View File

@@ -0,0 +1 @@
3671ba6051e0f30849942cc66d1798fdf0362d089343a83f704c09ee7156604f

View File

@@ -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

View File

@@ -0,0 +1 @@
p8-platform https://github.com/xbmc/platform.git cee64e9dc0b69e8d286dc170a78effaabfa09c44

View File

@@ -0,0 +1 @@
p8-platform https://github.com/afedchin/platform.git win10

View File

@@ -1,23 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon
id="pvr.octonet"
version="0.3.6"
version="1.2.6"
name="Digital Devices Octopus NET Client"
provider-name="digitaldevices">
<requires>
<c-pluff version="0.1" />
<import addon="xbmc.pvr" version="5.2.1" />
</requires>
<requires>@ADDON_DEPENDS@</requires>
<extension
point="xbmc.pvrclient"
library_linux="pvr.octonet.so"
library_osx="pvr.octonet.dylib"
library_freebsd="pvr.octonet.so"
library_windx="pvr.octonet.dll"
library_android="libpvr.octonet.so" />
library_@PLATFORM@="@LIBRARY_FILENAME@"/>
<extension point="xbmc.addon.metadata">
<summary lang="de_DE">Kodi PVR Addon für Digital Devices Octopus NET Streams</summary>
<summary lang="en_US">Kodi PVR Addon for Digital Devices Octopus NET Streams</summary>
<platform>all</platform>
<platform>@PLATFORM@</platform>
<license>GPL-2.0-or-later</license>
<source>https://github.com/DigitalDevices/pvr.octonet</source>
</extension>
</addon>

View File

@@ -1,22 +1,10 @@
/*
* Copyright (C) 2015 Julian Scheel <julian@jusst.de>
* Copyright (C) 2015 jusst technologies GmbH
* Copyright (C) 2015 Digital Devices GmbH
* Copyright (C) 2015 Julian Scheel <julian@jusst.de>
* Copyright (C) 2015 jusst technologies GmbH
* Copyright (C) 2015 Digital Devices GmbH
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
* SPDX-License-Identifier: GPL-2.0-or-later
* See LICENSE.md for more information.
*
*/
@@ -26,7 +14,6 @@
#include <json/json.h>
#include "OctonetData.h"
#include "p8-platform/util/StringUtils.h"
#ifdef __WINDOWS__
#define timegm _mkgmtime
@@ -42,7 +29,7 @@ OctonetData::OctonetData()
lastEpgLoad = 0;
if (!loadChannelList())
kodi->QueueNotification(QUEUE_ERROR, kodi->GetLocalizedString(30001), channels.size());
libKodi->QueueNotification(QUEUE_ERROR, libKodi->GetLocalizedString(30001), channels.size());
}
OctonetData::~OctonetData(void)
@@ -53,14 +40,8 @@ OctonetData::~OctonetData(void)
int64_t OctonetData::parseID(std::string id)
{
int64_t nativeId;
size_t strip;
/* Strip colons from id */
while ((strip = id.find(":")) != std::string::npos)
id.erase(strip, 1);
std::stringstream ids(id);
ids >> nativeId;
std::hash<std::string> hash_fn;
int64_t nativeId = hash_fn(id);
return nativeId;
}
@@ -68,15 +49,15 @@ int64_t OctonetData::parseID(std::string id)
bool OctonetData::loadChannelList()
{
std::string jsonContent;
void *f = kodi->OpenFile(("http://" + serverAddress + "/channellist.lua?select=json").c_str(), 0);
void *f = libKodi->OpenFile(("http://" + serverAddress + "/channellist.lua?select=json").c_str(), 0);
if (!f)
return false;
char buf[1024];
while (int read = kodi->ReadFile(f, buf, 1024))
while (int read = libKodi->ReadFile(f, buf, 1024))
jsonContent.append(buf, read);
kodi->CloseFile(f);
libKodi->CloseFile(f);
Json::Value root;
Json::Reader reader;
@@ -153,15 +134,15 @@ bool OctonetData::loadEPG(void)
return false;
std::string jsonContent;
void *f = kodi->OpenFile(("http://" + serverAddress + "/epg.lua?;#|encoding=gzip").c_str(), 0);
void *f = libKodi->OpenFile(("http://" + serverAddress + "/epg.lua?;#|encoding=gzip").c_str(), 0);
if (!f)
return false;
char buf[1024];
while (int read = kodi->ReadFile(f, buf, 1024))
while (int read = libKodi->ReadFile(f, buf, 1024))
jsonContent.append(buf, read);
kodi->CloseFile(f);
libKodi->CloseFile(f);
Json::Value root;
Json::Reader reader;
@@ -190,7 +171,7 @@ bool OctonetData::loadEPG(void)
channel = findChannel(entry.channelId);
if (channel == NULL) {
kodi->Log(LOG_ERROR, "EPG for unknown channel.");
libKodi->Log(LOG_ERROR, "EPG for unknown channel.");
continue;
}
@@ -234,12 +215,12 @@ PVR_ERROR OctonetData::getChannels(ADDON_HANDLE handle, bool bRadio)
return PVR_ERROR_NO_ERROR;
}
PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t start, time_t end)
PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, int iChannelUid, time_t start, time_t end)
{
for (unsigned int i = 0; i < channels.size(); i++)
{
OctonetChannel &chan = channels.at(i);
if (channel.iUniqueId != chan.id)
if (iChannelUid != chan.id)
continue;
if(chan.epg.empty()) {
@@ -260,8 +241,11 @@ PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, t
EPG_TAG entry;
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.strTitle = it->title.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;
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.strTitle = it->title.c_str();
entry.strPlotOutline = it->subtitle.c_str();

View File

@@ -1,31 +1,18 @@
#pragma once
/*
* Copyright (C) 2015 Julian Scheel <julian@jusst.de>
* Copyright (C) 2015 jusst technologies GmbH
* Copyright (C) 2015 Digital Devices GmbH
* Copyright (C) 2015 Julian Scheel <julian@jusst.de>
* Copyright (C) 2015 jusst technologies GmbH
* Copyright (C) 2015 Digital Devices GmbH
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
* SPDX-License-Identifier: GPL-2.0-or-later
* See LICENSE.md for more information.
*
*/
#pragma once
#include <vector>
#include "p8-platform/threads/threads.h"
#include "p8-platform/util/StdString.h"
#include "client.h"
struct OctonetEpgEntry
@@ -69,7 +56,7 @@ class OctonetData : public P8PLATFORM::CThread
virtual PVR_ERROR getGroups(ADDON_HANDLE handle, bool bRadio);
virtual PVR_ERROR getGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group);
virtual PVR_ERROR getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t start, time_t end);
virtual PVR_ERROR getEPG(ADDON_HANDLE handle, int iChannelUid, time_t start, time_t end);
const std::string& getUrl(int id) const;
const std::string& getName(int id) const;

View File

@@ -1,22 +1,12 @@
/*
* Copyright (C) 2005-2011 Team XBMC
* http://www.xbmc.org
*
* 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/>.
* Copyright (C) 2005-2020 Team Kodi
* https://kodi.tv
*
* 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 "p8-platform/os.h"
#include "client.h"
@@ -196,13 +186,13 @@ int Socket::send ( const char* data, const unsigned int len )
if (result < 0)
{
kodi->Log(LOG_ERROR, "Socket::send - select failed");
libKodi->Log(LOG_ERROR, "Socket::send - select failed");
close();
return 0;
}
if (FD_ISSET(_sd, &set_w))
{
kodi->Log(LOG_ERROR, "Socket::send - failed to send data");
libKodi->Log(LOG_ERROR, "Socket::send - failed to send data");
close();
return 0;
}
@@ -212,7 +202,7 @@ int Socket::send ( const char* data, const unsigned int len )
if (status == -1)
{
errormessage( getLastError(), "Socket::send");
kodi->Log(LOG_ERROR, "Socket::send - failed to send data");
libKodi->Log(LOG_ERROR, "Socket::send - failed to send data");
close();
return 0;
}
@@ -296,7 +286,7 @@ bool Socket::ReadLine (string& line)
if (result < 0)
{
kodi->Log(LOG_DEBUG, "%s: select failed", __FUNCTION__);
libKodi->Log(LOG_DEBUG, "%s: select failed", __FUNCTION__);
errormessage(getLastError(), __FUNCTION__);
close();
return false;
@@ -306,11 +296,11 @@ bool Socket::ReadLine (string& line)
{
if (retries != 0)
{
kodi->Log(LOG_DEBUG, "%s: timeout waiting for response, retrying... (%i)", __FUNCTION__, retries);
libKodi->Log(LOG_DEBUG, "%s: timeout waiting for response, retrying... (%i)", __FUNCTION__, retries);
retries--;
continue;
} else {
kodi->Log(LOG_DEBUG, "%s: timeout waiting for response. Aborting after 10 retries.", __FUNCTION__);
libKodi->Log(LOG_DEBUG, "%s: timeout waiting for response. Aborting after 10 retries.", __FUNCTION__);
return false;
}
}
@@ -318,7 +308,7 @@ bool Socket::ReadLine (string& line)
result = recv(_sd, buffer, sizeof(buffer) - 1, 0);
if (result < 0)
{
kodi->Log(LOG_DEBUG, "%s: recv failed", __FUNCTION__);
libKodi->Log(LOG_DEBUG, "%s: recv failed", __FUNCTION__);
errormessage(getLastError(), __FUNCTION__);
close();
return false;
@@ -389,7 +379,7 @@ bool Socket::connect ( const std::string& host, const unsigned short port )
if ( !setHostname( host ) )
{
kodi->Log(LOG_ERROR, "Socket::setHostname(%s) failed.\n", host.c_str());
libKodi->Log(LOG_ERROR, "Socket::setHostname(%s) failed.\n", host.c_str());
return false;
}
_port = port;
@@ -438,7 +428,7 @@ bool Socket::connect ( const std::string& host, const unsigned short port )
if (address == NULL)
{
kodi->Log(LOG_ERROR, "Socket::connect %s:%u\n", host.c_str(), port);
libKodi->Log(LOG_ERROR, "Socket::connect %s:%u\n", host.c_str(), port);
errormessage(getLastError(), "Socket::connect");
close();
return false;
@@ -474,7 +464,7 @@ bool Socket::set_non_blocking ( const bool b )
if (ioctlsocket(_sd, FIONBIO, &iMode) == -1)
{
kodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket condition to: %i", iMode);
libKodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket condition to: %i", iMode);
return false;
}
@@ -565,7 +555,7 @@ void Socket::errormessage( int errnum, const char* functionname) const
default:
errmsg = "WSA Error";
}
kodi->Log(LOG_ERROR, "%s: (Winsock error=%i) %s\n", functionname, errnum, errmsg);
libKodi->Log(LOG_ERROR, "%s: (Winsock error=%i) %s\n", functionname, errnum, errmsg);
}
int Socket::getLastError() const
@@ -623,7 +613,7 @@ bool Socket::set_non_blocking ( const bool b )
if(fcntl (_sd , F_SETFL, opts) == -1)
{
kodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket flags to: %i", opts);
libKodi->Log(LOG_ERROR, "Socket::set_non_blocking - Can't set socket flags to: %i", opts);
return false;
}
return true;
@@ -699,7 +689,7 @@ void Socket::errormessage( int errnum, const char* functionname) const
break;
}
kodi->Log(LOG_ERROR, "%s: (errno=%i) %s\n", functionname, errnum, errmsg);
libKodi->Log(LOG_ERROR, "%s: (errno=%i) %s\n", functionname, errnum, errmsg);
}
int Socket::getLastError() const

View File

@@ -1,21 +1,11 @@
/*
* Copyright (C) 2005-2011 Team XBMC
* http://www.xbmc.org
*
* 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/>.
* Copyright (C) 2005-2020 Team Kodi
* https://kodi.tv
*
* SPDX-License-Identifier: GPL-2.0-or-later
* See LICENSE.md for more information.
*/
#pragma once
//Include platform specific datatypes, header files, defines and constants:

View File

@@ -1,30 +1,17 @@
/*
* Copyright (C) 2015 Julian Scheel <julian@jusst.de>
* Copyright (C) 2015 jusst technologies GmbH
* Copyright (C) 2015 Digital Devices GmbH
* Copyright (C) 2015 Julian Scheel <julian@jusst.de>
* Copyright (C) 2015 jusst technologies GmbH
* Copyright (C) 2015 Digital Devices GmbH
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
* SPDX-License-Identifier: GPL-2.0-or-later
* See LICENSE.md for more information.
*
*/
#include "client.h"
#include <xbmc_pvr_dll.h>
#include <libXBMC_addon.h>
#include <kodi/xbmc_pvr_dll.h>
#include <kodi/libXBMC_addon.h>
#include <p8-platform/util/util.h>
#include <libKODI_guilib.h>
#include "OctonetData.h"
#include "rtsp_client.hpp"
@@ -36,7 +23,7 @@ std::string octonetAddress = "";
/* internal state variables */
ADDON_STATUS addonStatus = ADDON_STATUS_UNKNOWN;
CHelper_libXBMC_addon *kodi = NULL;
CHelper_libXBMC_addon *libKodi = NULL;
CHelper_libXBMC_pvr *pvr = NULL;
OctonetData *data = NULL;
@@ -49,7 +36,7 @@ extern "C" {
void ADDON_ReadSettings(void)
{
char buffer[2048];
if (kodi->GetSetting("octonetAddress", &buffer))
if (libKodi->GetSetting("octonetAddress", &buffer))
octonetAddress = buffer;
}
@@ -58,23 +45,23 @@ ADDON_STATUS ADDON_Create(void *callbacks, void* props)
if (callbacks == NULL || props == NULL)
return ADDON_STATUS_UNKNOWN;
PVR_PROPERTIES *pvrprops = (PVR_PROPERTIES*)props;
kodi = new CHelper_libXBMC_addon;
if (!kodi->RegisterMe(callbacks)) {
kodi->Log(LOG_ERROR, "%s: Failed to register octonet addon", __func__);
SAFE_DELETE(kodi);
AddonProperties_PVR *pvrprops = (AddonProperties_PVR*)props;
libKodi = new CHelper_libXBMC_addon;
if (!libKodi->RegisterMe(callbacks)) {
libKodi->Log(LOG_ERROR, "%s: Failed to register octonet addon", __func__);
SAFE_DELETE(libKodi);
return ADDON_STATUS_PERMANENT_FAILURE;
}
pvr = new CHelper_libXBMC_pvr;
if (!pvr->RegisterMe(callbacks)) {
kodi->Log(LOG_ERROR, "%s: Failed to register octonet pvr addon", __func__);
libKodi->Log(LOG_ERROR, "%s: Failed to register octonet pvr addon", __func__);
SAFE_DELETE(pvr);
SAFE_DELETE(kodi);
SAFE_DELETE(libKodi);
return ADDON_STATUS_PERMANENT_FAILURE;
}
kodi->Log(LOG_DEBUG, "%s: Creating octonet pvr addon", __func__);
libKodi->Log(LOG_DEBUG, "%s: Creating octonet pvr addon", __func__);
ADDON_ReadSettings();
data = new OctonetData;
@@ -83,12 +70,10 @@ ADDON_STATUS ADDON_Create(void *callbacks, void* props)
return addonStatus;
}
void ADDON_Stop() {} /* no-op */
void ADDON_Destroy()
{
delete pvr;
delete kodi;
delete libKodi;
addonStatus = ADDON_STATUS_UNKNOWN;
}
@@ -97,16 +82,6 @@ ADDON_STATUS ADDON_GetStatus()
return addonStatus;
}
bool ADDON_HasSettings()
{
return true;
}
unsigned int ADDON_GetSettings(ADDON_StructSetting ***sSet)
{
return 0;
}
ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue)
{
/* For simplicity do a full addon restart whenever settings are
@@ -114,9 +89,6 @@ ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue)
return ADDON_STATUS_NEED_RESTART;
}
void ADDON_FreeSettings() {} /* no-op */
void ADDON_Announce(const char *flag, const char *sender, const char *message, const void *data) {} /* no-op */
}
@@ -125,32 +97,16 @@ void ADDON_Announce(const char *flag, const char *sender, const char *message, c
extern "C"
{
const char* GetPVRAPIVersion(void)
{
return XBMC_PVR_API_VERSION;
}
const char* GetMininumPVRAPIVersion(void)
{
return XBMC_PVR_MIN_API_VERSION;
}
const char* GetGUIAPIVersion(void)
{
return KODI_GUILIB_API_VERSION;
}
const char* GetMininumGUIAPIVersion(void)
{
return KODI_GUILIB_MIN_API_VERSION;
}
PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES *pCapabilities)
PVR_ERROR GetCapabilities(PVR_ADDON_CAPABILITIES *pCapabilities)
{
pCapabilities->bSupportsTV = true;
pCapabilities->bSupportsRadio = true;
pCapabilities->bSupportsChannelGroups = true;
pCapabilities->bSupportsEPG = true;
pCapabilities->bSupportsRecordings = false;
pCapabilities->bSupportsRecordingsRename = false;
pCapabilities->bSupportsRecordingsLifetimeChange = false;
pCapabilities->bSupportsDescrambleInfo = false;
return PVR_ERROR_NO_ERROR;
}
@@ -162,7 +118,7 @@ const char* GetBackendName(void)
const char* GetBackendVersion(void)
{
return XBMC_PVR_API_VERSION;
return STR(OCTONET_VERSION);
}
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; }
void OnSystemSleep() {
kodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
libKodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
// FIXME: Disconnect?
}
void OnSystemWake() {
kodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
libKodi->Log(LOG_INFO, "Received event: %s", __FUNCTION__);
// FIXME:Reconnect?
}
@@ -187,11 +143,14 @@ void OnPowerSavingActivated() {}
void OnPowerSavingDeactivated() {}
/* EPG */
PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL& channel, time_t iStart, time_t iEnd)
PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, int iChannelUid, time_t iStart, time_t iEnd)
{
return data->getEPG(handle, channel, iStart, iEnd);
return data->getEPG(handle, iChannelUid, iStart, iEnd);
}
PVR_ERROR IsEPGTagRecordable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR IsEPGTagPlayable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; }
/* Channel groups */
int GetChannelGroupsAmount(void)
{
@@ -223,7 +182,6 @@ PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio)
PVR_ERROR DeleteChannel(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR RenameChannel(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR MoveChannel(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR OpenDialogChannelSettings(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR OpenDialogChannelAdd(const PVR_CHANNEL& channel) { return PVR_ERROR_NOT_IMPLEMENTED; }
@@ -234,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 DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR RenameRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR SetRecordingLifetime(const PVR_RECORDING*) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR SetRecordingPlayCount(const PVR_RECORDING& recording, int count) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR SetRecordingLastPlayedPosition(const PVR_RECORDING& recording, int lastplayedposition) { return PVR_ERROR_NOT_IMPLEMENTED; }
int GetRecordingLastPlayedPosition(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; }
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; }
int GetTimersAmount(void) { 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 UpdateTimer(const PVR_TIMER& timer) { return PVR_ERROR_NOT_IMPLEMENTED; }
/* PVR stream properties handling */
PVR_ERROR GetStreamReadChunkSize(int* chunksize) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR GetRecordingStreamProperties(const PVR_RECORDING*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR GetEPGTagStreamProperties(const EPG_TAG*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR GetEPGTagEdl(const EPG_TAG* epgTag, PVR_EDL_ENTRY edl[], int *size) { return PVR_ERROR_NOT_IMPLEMENTED; }
/* PVR stream handling */
/* entirely unused, as we use standard RTSP+TS mux, which can be handlded by
* Kodi core */
@@ -261,30 +228,24 @@ void CloseLiveStream(void) {
}
long long SeekLiveStream(long long iPosition, int iWhence) { return -1; }
long long PositionLiveStream(void) { return -1; }
long long LengthLiveStream(void) { return -1; }
bool IsRealTimeStream(void) { return true; }
bool SwitchChannel(const PVR_CHANNEL& channel) {
CloseLiveStream();
return OpenLiveStream(channel);
}
PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS& signalStatus) {
memset(&signalStatus, 0, sizeof(PVR_SIGNAL_STATUS));
PVR_ERROR GetSignalStatus(int channelUid, PVR_SIGNAL_STATUS* signalStatus) {
memset(signalStatus, 0, sizeof(PVR_SIGNAL_STATUS));
rtsp_fill_signal_status(signalStatus);
return PVR_ERROR_NO_ERROR;
}
const char* GetLiveStreamURL(const PVR_CHANNEL& channel) { return NULL; }
PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES *times) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) { return PVR_ERROR_NOT_IMPLEMENTED; }
PVR_ERROR GetDescrambleInfo(int, PVR_DESCRAMBLE_INFO*) { return PVR_ERROR_NOT_IMPLEMENTED; }
/* Recording stream handling */
bool OpenRecordedStream(const PVR_RECORDING& recording) { return false; }
void CloseRecordedStream(void) {}
int ReadRecordedStream(unsigned char* pBuffer, unsigned int iBufferSize) { return -1; }
long long SeekRecordedStream(long long iPosition, int iWhence) { return -1; }
long long PositionRecordedStream(void) { return -1; }
long long LengthRecordedStream(void) { return -1; }
/* PVR demuxer */
@@ -293,10 +254,9 @@ void DemuxReset(void) {}
void DemuxAbort(void) {}
void DemuxFlush(void) {}
DemuxPacket* DemuxRead(void) { return NULL; }
void FillBuffer(bool mode) {}
/* Various helper functions */
unsigned int GetChannelSwitchDelay(void) { return 0; }
bool IsTimeshifting(void) { return false; }
bool CanPauseStream() { return false; }
bool CanSeekStream() { return false; }
@@ -306,10 +266,6 @@ bool SeekTime(double time, bool backwards, double *startpts) { return false; }
void SetSpeed(int speed) {}
PVR_ERROR SetEPGTimeFrame(int) { return PVR_ERROR_NOT_IMPLEMENTED; }
time_t GetPlayingTime() { return 0; }
time_t GetBufferTimeStart() { return 0; }
time_t GetBufferTimeEnd() { return 0; }
const char* GetBackendHostname()
{
return octonetAddress.c_str();

View File

@@ -1,34 +1,23 @@
#pragma once
/*
* Copyright (C) 2015 Julian Scheel <julian@jusst.de>
* Copyright (C) 2015 jusst technologies GmbH
* Copyright (C) 2015 Digital Devices GmbH
* Copyright (C) 2015 Julian Scheel <julian@jusst.de>
* Copyright (C) 2015 jusst technologies GmbH
* Copyright (C) 2015 Digital Devices GmbH
*
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
* SPDX-License-Identifier: GPL-2.0-or-later
* See LICENSE.md for more information.
*
*/
#include "libXBMC_addon.h"
#include "libXBMC_pvr.h"
#pragma once
#include "kodi/libXBMC_addon.h"
#include "kodi/libXBMC_pvr.h"
#ifndef __func__
#define __func__ __FUNCTION__
#endif
extern ADDON::CHelper_libXBMC_addon *kodi;
extern ADDON::CHelper_libXBMC_addon *libKodi;
extern CHelper_libXBMC_pvr *pvr;
/* IP or hostname of the octonet to be connected to */

View File

@@ -5,7 +5,7 @@
#include "Socket.h"
#include "client.h"
#include <p8-platform/util/util.h>
#include <libXBMC_addon.h>
#include <kodi/libXBMC_addon.h>
#include <cstring>
#include <sstream>
@@ -309,13 +309,13 @@ bool rtsp_open(const string& name, const string& url_str)
rtsp->level = 0;
rtsp->quality = 0;
kodi->Log(LOG_DEBUG, "try to open '%s'", url_str.c_str());
libKodi->Log(LOG_DEBUG, "try to open '%s'", url_str.c_str());
url dst = parse_url(url_str);
kodi->Log(LOG_DEBUG, "connect to host '%s'", dst.host.c_str());
libKodi->Log(LOG_DEBUG, "connect to host '%s'", dst.host.c_str());
if(!rtsp->tcp_sock.connect(dst.host, dst.port)) {
kodi->Log(LOG_ERROR, "Failed to connect to RTSP server %s:%d", dst.host.c_str(), dst.port);
libKodi->Log(LOG_ERROR, "Failed to connect to RTSP server %s:%d", dst.host.c_str(), dst.port);
goto error;
}
@@ -353,7 +353,7 @@ bool rtsp_open(const string& name, const string& url_str)
rtsp->tcp_sock.send(setup_ss.str());
if (rtsp_handle() != RTSP_RESULT_OK) {
kodi->Log(LOG_ERROR, "Failed to setup RTSP session");
libKodi->Log(LOG_ERROR, "Failed to setup RTSP session");
goto error;
}
@@ -368,7 +368,7 @@ bool rtsp_open(const string& name, const string& url_str)
rtsp->tcp_sock.send(play_ss.str());
if (rtsp_handle() != RTSP_RESULT_OK) {
kodi->Log(LOG_ERROR, "Failed to play RTSP session");
libKodi->Log(LOG_ERROR, "Failed to play RTSP session");
goto error;
}
@@ -453,7 +453,7 @@ static void rtsp_teardown() {
rtsp->tcp_sock.send(ss.str());
if (rtsp_handle() != RTSP_RESULT_OK) {
kodi->Log(LOG_ERROR, "Failed to teardown RTSP session");
libKodi->Log(LOG_ERROR, "Failed to teardown RTSP session");
return;
}
}
@@ -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) {
strncpy(signal_status.strServiceName, rtsp->name.c_str(), PVR_ADDON_NAME_STRING_LENGTH - 1);
signal_status.iSNR = 0x1111 * rtsp->quality;
signal_status.iSignal = 0x101 * rtsp->level;
strncpy(signal_status->strServiceName, rtsp->name.c_str(), PVR_ADDON_NAME_STRING_LENGTH - 1);
signal_status->iSNR = 0x1111 * rtsp->quality;
signal_status->iSignal = 0x101 * rtsp->level;
}
}

View File

@@ -2,11 +2,11 @@
#define _RTSP_CLIENT_HPP_
#include <string>
#include <xbmc_pvr_types.h>
#include <kodi/xbmc_pvr_types.h>
bool rtsp_open(const std::string& name, const std::string& url_str);
void rtsp_close();
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