mirror of
https://github.com/DigitalDevices/pvr.octonet.git
synced 2025-03-01 10:53:09 +00:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8549a31c8d | ||
|
|
0a7fb087ac | ||
|
|
5c0f000a91 | ||
|
|
2b020cec9c | ||
|
|
96a19310ca | ||
|
|
3a6f4eb7b5 | ||
|
|
2067aba378 | ||
|
|
b52f50ef30 | ||
|
|
d1f9af2225 | ||
|
|
880d313bef | ||
|
|
94eb166783 | ||
|
|
ba7e50e79c | ||
|
|
5fc6fc2ebc |
47
README.md
47
README.md
@@ -1,27 +1,40 @@
|
|||||||
# Octonet PVR
|
# Octonet PVR
|
||||||
DigitalDevices [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 |
|
||||||
|
|----------|--------|
|
||||||
|
| Linux + OS X (Travis) | [](https://travis-ci.org/julianscheel/pvr.octonet) |
|
||||||
|
| Windows (AppVeyor) | [](https://ci.appveyor.com/project/julianscheel/pvr-octonet) |
|
||||||
|
|
||||||
# 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 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"
|
||||||
|
```
|
||||||
|
|
||||||
|
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.
|
||||||
|
|||||||
7
debian/control
vendored
7
debian/control
vendored
@@ -11,13 +11,12 @@ Package: kodi-pvr-octonet
|
|||||||
Section: libs
|
Section: libs
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||||
Description: DigitalDevices Octopus NET PVR for Kodi
|
Description: Digital Devices Octopus NET PVR for Kodi
|
||||||
Digital Devices Octopus NET PVR for Kodi
|
Digital Devices Octopus NET PVR for Kodi
|
||||||
|
|
||||||
Package: kodi-pvr-octonet-dbg
|
Package: kodi-pvr-octonet-dbg
|
||||||
Section: libs
|
Section: libs
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||||
Description: debug symbols for DigitalDevices Octopus NET PVR for Kodi
|
Description: debug symbols for Digital Devices Octopus NET PVR for Kodi
|
||||||
debug symbols for DigitalDevices Octopus NET PVR for Kodi
|
debug symbols for Digital Devices Octopus NET PVR for Kodi
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<?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="0.3.6"
|
||||||
name="PVR DigitalDevices Octopus NET Client"
|
name="Digital Devices Octopus NET Client"
|
||||||
provider-name="digitaldevices">
|
provider-name="digitaldevices">
|
||||||
<requires>
|
<requires>
|
||||||
<c-pluff version="0.1" />
|
<c-pluff version="0.1" />
|
||||||
<import addon="xbmc.pvr" version="5.2.0" />
|
<import addon="xbmc.pvr" version="5.2.1" />
|
||||||
</requires>
|
</requires>
|
||||||
<extension
|
<extension
|
||||||
point="xbmc.pvrclient"
|
point="xbmc.pvrclient"
|
||||||
@@ -16,8 +16,8 @@
|
|||||||
library_windx="pvr.octonet.dll"
|
library_windx="pvr.octonet.dll"
|
||||||
library_android="libpvr.octonet.so" />
|
library_android="libpvr.octonet.so" />
|
||||||
<extension point="xbmc.addon.metadata">
|
<extension point="xbmc.addon.metadata">
|
||||||
<summary lang="de_DE">Kodi PVR Addon für DigitalDevices 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 DigitalDevices Octopus NET Streams</summary>
|
<summary lang="en_US">Kodi PVR Addon for Digital Devices Octopus NET Streams</summary>
|
||||||
<platform>all</platform>
|
<platform>all</platform>
|
||||||
</extension>
|
</extension>
|
||||||
</addon>
|
</addon>
|
||||||
|
|||||||
@@ -125,7 +125,6 @@ OctonetChannel* OctonetData::findChannel(int64_t nativeId)
|
|||||||
time_t OctonetData::parseDateTime(std::string date)
|
time_t OctonetData::parseDateTime(std::string date)
|
||||||
{
|
{
|
||||||
struct tm timeinfo;
|
struct tm timeinfo;
|
||||||
time_t time;
|
|
||||||
|
|
||||||
memset(&timeinfo, 0, sizeof(timeinfo));
|
memset(&timeinfo, 0, sizeof(timeinfo));
|
||||||
|
|
||||||
@@ -237,20 +236,23 @@ PVR_ERROR OctonetData::getChannels(ADDON_HANDLE handle, bool bRadio)
|
|||||||
|
|
||||||
PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t start, time_t end)
|
PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, time_t start, time_t end)
|
||||||
{
|
{
|
||||||
bool needs_reload = false;
|
|
||||||
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 (channel.iUniqueId != chan.id)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if(chan.epg.empty()) {
|
||||||
|
loadEPG();
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: Check if reload is needed!?
|
// FIXME: Check if reload is needed!?
|
||||||
|
|
||||||
std::vector<OctonetEpgEntry>::iterator it;
|
std::vector<OctonetEpgEntry>::iterator it;
|
||||||
time_t last_end = 0;
|
time_t last_end = 0;
|
||||||
for (it = chan.epg.begin(); it < chan.epg.end(); ++it) {
|
for (it = chan.epg.begin(); it != chan.epg.end(); ++it) {
|
||||||
if (end > last_end)
|
if (it->end > last_end)
|
||||||
last_end = end;
|
last_end = it->end;
|
||||||
|
|
||||||
if (it->end < start || it->start > end) {
|
if (it->end < start || it->start > end) {
|
||||||
continue;
|
continue;
|
||||||
@@ -271,6 +273,24 @@ PVR_ERROR OctonetData::getEPG(ADDON_HANDLE handle, const PVR_CHANNEL &channel, t
|
|||||||
|
|
||||||
if (last_end < end)
|
if (last_end < end)
|
||||||
loadEPG();
|
loadEPG();
|
||||||
|
|
||||||
|
for (it = chan.epg.begin(); it != chan.epg.end(); ++it) {
|
||||||
|
if (it->end < start || it->start > end) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
EPG_TAG entry;
|
||||||
|
memset(&entry, 0, sizeof(EPG_TAG));
|
||||||
|
|
||||||
|
entry.iChannelNumber = i;
|
||||||
|
entry.iUniqueBroadcastId = it->id;
|
||||||
|
entry.strTitle = it->title.c_str();
|
||||||
|
entry.strPlotOutline = it->subtitle.c_str();
|
||||||
|
entry.startTime = it->start;
|
||||||
|
entry.endTime = it->end;
|
||||||
|
|
||||||
|
pvr->TransferEpgEntry(handle, &entry);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return PVR_ERROR_NO_ERROR;
|
return PVR_ERROR_NO_ERROR;
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES *pCapabilities)
|
|||||||
|
|
||||||
const char* GetBackendName(void)
|
const char* GetBackendName(void)
|
||||||
{
|
{
|
||||||
return "DigitalDevices Octopus NET Client";
|
return "Digital Devices Octopus NET Client";
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* GetBackendVersion(void)
|
const char* GetBackendVersion(void)
|
||||||
@@ -271,6 +271,7 @@ bool SwitchChannel(const PVR_CHANNEL& channel) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS& signalStatus) {
|
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;
|
||||||
}
|
}
|
||||||
@@ -301,7 +302,7 @@ 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; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user