mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
Kodi checker rework (+enable option) (#96)
* big kodichecker rework - use new logger - 'enable' flag in config - startable on runtime (atm not stoppable and no reconfigure) - rename xbmc to kodi * remove unnecceasry checks for kodi * make kodichecker stoppable and add reconfigure * tune config
This commit is contained in:
parent
d4635bba4e
commit
3ac0781c1f
@ -213,8 +213,9 @@
|
||||
},
|
||||
|
||||
/// The configuration of the Kodi connection used to enable and disable the frame-grabber. Contains the following fields:
|
||||
/// * xbmcAddress : The IP address of the Kodi-host
|
||||
/// * xbmcTcpPort : The TCP-port of the Kodi-server
|
||||
/// * enable : enable/disable Kodi-Checker
|
||||
/// * kodiAddress : The IP address of the Kodi-host
|
||||
/// * kodiTcpPort : The TCP-port of the Kodi-server
|
||||
/// * grabVideo : Flag indicating that the frame-grabber is on(true) during video playback
|
||||
/// * grabPictures : Flag indicating that the frame-grabber is on(true) during picture show
|
||||
/// * grabAudio : Flag indicating that the frame-grabber is on(true) during audio playback
|
||||
@ -222,10 +223,11 @@
|
||||
/// * grabPause : Flag indicating that the frame-grabber is on(true) at player state "pause"
|
||||
/// * grabScreensaver : Flag indicating that the frame-grabber is on(true) when Kodi is on screensaver
|
||||
/// * enable3DDetection : Flag indicating that the frame-grabber should switch to a 3D compatible modus if a 3D video is playing
|
||||
"xbmcVideoChecker" :
|
||||
"kodiVideoChecker" :
|
||||
{
|
||||
"xbmcAddress" : "127.0.0.1",
|
||||
"xbmcTcpPort" : 9090,
|
||||
"enable" : true,
|
||||
"kodiAddress" : "127.0.0.1",
|
||||
"kodiTcpPort" : 9090,
|
||||
"grabVideo" : true,
|
||||
"grabPictures" : true,
|
||||
"grabAudio" : true,
|
||||
|
@ -126,10 +126,11 @@
|
||||
"mode" : "default"
|
||||
},
|
||||
|
||||
"xbmcVideoChecker" :
|
||||
"kodiVideoChecker" :
|
||||
{
|
||||
"xbmcAddress" : "localhost",
|
||||
"xbmcTcpPort" : 9090,
|
||||
"enable" : true,
|
||||
"kodiAddress" : "localhost",
|
||||
"kodiTcpPort" : 9090,
|
||||
"grabVideo" : true,
|
||||
"grabPictures" : true,
|
||||
"grabAudio" : true,
|
||||
|
@ -17,26 +17,36 @@
|
||||
// Utils includes
|
||||
#include <utils/GrabbingMode.h>
|
||||
#include <utils/VideoMode.h>
|
||||
#include <utils/Logger.h>
|
||||
|
||||
///
|
||||
/// This class will check if XBMC is playing something. When it does not, this class will send all black data to Hyperion.
|
||||
/// This allows grabbed screen data to be overriden while in the XBMC menus.
|
||||
/// This class will check if KODI is playing something. When it does not, this class will send all black data to Hyperion.
|
||||
/// This allows grabbed screen data to be overriden while in the KODI menus.
|
||||
///
|
||||
/// Note: The json TCP server needs to be enabled manually in XBMC in System/Settings/Network/Services
|
||||
/// Note: The json TCP server needs to be enabled manually in KODI in System/Settings/Network/Services
|
||||
///
|
||||
class XBMCVideoChecker : public QObject
|
||||
class KODIVideoChecker : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
static XBMCVideoChecker* initInstance(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection);
|
||||
static XBMCVideoChecker* getInstance();
|
||||
static KODIVideoChecker* initInstance(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection);
|
||||
static KODIVideoChecker* getInstance();
|
||||
|
||||
~KODIVideoChecker();
|
||||
void setConfig(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection);
|
||||
|
||||
public slots:
|
||||
///
|
||||
/// Start polling XBMC
|
||||
/// Start polling KODI
|
||||
///
|
||||
void start();
|
||||
|
||||
///
|
||||
/// Stop polling KODI
|
||||
///
|
||||
void stop();
|
||||
|
||||
signals:
|
||||
/// Signal emitted when the grabbing mode changes
|
||||
void grabbingMode(GrabbingMode grabbingMode);
|
||||
@ -45,16 +55,16 @@ signals:
|
||||
void videoMode(VideoMode videoMode);
|
||||
|
||||
private slots:
|
||||
/// Receive a reply from XBMC
|
||||
/// Receive a reply from KODI
|
||||
void receiveReply();
|
||||
|
||||
/// Called when connected to XBMC
|
||||
/// Called when connected to KODI
|
||||
void connected();
|
||||
|
||||
/// Called when disconnected from XBMC
|
||||
/// Called when disconnected from KODI
|
||||
void disconnected();
|
||||
|
||||
/// reconnect to XBMC
|
||||
/// reconnect to KODI
|
||||
void reconnect();
|
||||
|
||||
/// Called when a connection error was encountered
|
||||
@ -64,16 +74,16 @@ private:
|
||||
///
|
||||
/// Constructor
|
||||
///
|
||||
/// @param address Network address of the XBMC instance
|
||||
/// @param port Port number to use (XBMC default = 9090)
|
||||
/// @param grabVideo Whether or not to grab when the XBMC video player is playing
|
||||
/// @param grabPhoto Whether or not to grab when the XBMC photo player is playing
|
||||
/// @param grabAudio Whether or not to grab when the XBMC audio player is playing
|
||||
/// @param grabMenu Whether or not to grab when nothing is playing (in XBMC menu)
|
||||
/// @param grabScreensaver Whether or not to grab when the XBMC screensaver is activated
|
||||
/// @param address Network address of the KODI instance
|
||||
/// @param port Port number to use (KODI default = 9090)
|
||||
/// @param grabVideo Whether or not to grab when the KODI video player is playing
|
||||
/// @param grabPhoto Whether or not to grab when the KODI photo player is playing
|
||||
/// @param grabAudio Whether or not to grab when the KODI audio player is playing
|
||||
/// @param grabMenu Whether or not to grab when nothing is playing (in KODI menu)
|
||||
/// @param grabScreensaver Whether or not to grab when the KODI screensaver is activated
|
||||
/// @param enable3DDetection Wheter or not to enable the detection of 3D movies playing
|
||||
///
|
||||
XBMCVideoChecker(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection);
|
||||
KODIVideoChecker(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection);
|
||||
|
||||
/// Set the grabbing mode
|
||||
void setGrabbingMode(GrabbingMode grabbingMode);
|
||||
@ -84,11 +94,11 @@ private:
|
||||
void setVideoMode(VideoMode videoMode);
|
||||
|
||||
private:
|
||||
/// The network address of the XBMC instance
|
||||
const QString _address;
|
||||
/// The network address of the KODI instance
|
||||
QString _address;
|
||||
|
||||
/// The port number of XBMC
|
||||
const uint16_t _port;
|
||||
/// The port number of KODI
|
||||
uint16_t _port;
|
||||
|
||||
/// The JSON-RPC message to check the active player
|
||||
const QString _activePlayerRequest;
|
||||
@ -102,34 +112,34 @@ private:
|
||||
/// The JSON-RPC message to check the active stereoscopicmode
|
||||
const QString _getStereoscopicMode;
|
||||
|
||||
/// The JSON-RPC message to check the xbmc version
|
||||
const QString _getXbmcVersion;
|
||||
/// The JSON-RPC message to check the kodi version
|
||||
QString _getKodiVersion;
|
||||
|
||||
/// The QT TCP Socket with connection to XBMC
|
||||
/// The QT TCP Socket with connection to KODI
|
||||
QTcpSocket _socket;
|
||||
|
||||
/// Flag indicating whether or not to grab when the XBMC video player is playing
|
||||
const bool _grabVideo;
|
||||
/// Flag indicating whether or not to grab when the KODI video player is playing
|
||||
bool _grabVideo;
|
||||
|
||||
/// Flag indicating whether or not to grab when the XBMC photo player is playing
|
||||
const bool _grabPhoto;
|
||||
/// Flag indicating whether or not to grab when the KODI photo player is playing
|
||||
bool _grabPhoto;
|
||||
|
||||
/// Flag indicating whether or not to grab when the XBMC audio player is playing
|
||||
const bool _grabAudio;
|
||||
/// Flag indicating whether or not to grab when the KODI audio player is playing
|
||||
bool _grabAudio;
|
||||
|
||||
/// Flag indicating whether or not to grab when XBMC is playing nothing (in menu)
|
||||
const bool _grabMenu;
|
||||
/// Flag indicating whether or not to grab when KODI is playing nothing (in menu)
|
||||
bool _grabMenu;
|
||||
|
||||
/// Flag indicating whether or not to grab when the XBMC videoplayer is at pause state
|
||||
const bool _grabPause;
|
||||
/// Flag indicating whether or not to grab when the KODI videoplayer is at pause state
|
||||
bool _grabPause;
|
||||
|
||||
/// Flag indicating whether or not to grab when the XBMC screensaver is activated
|
||||
const bool _grabScreensaver;
|
||||
/// Flag indicating whether or not to grab when the KODI screensaver is activated
|
||||
bool _grabScreensaver;
|
||||
|
||||
/// Flag indicating wheter or not to enable the detection of 3D movies playing
|
||||
const bool _enable3DDetection;
|
||||
bool _enable3DDetection;
|
||||
|
||||
/// Flag indicating if XBMC is on screensaver
|
||||
/// Flag indicating if KODI is on screensaver
|
||||
bool _previousScreensaverMode;
|
||||
|
||||
/// Previous emitted grab mode
|
||||
@ -138,8 +148,14 @@ private:
|
||||
/// Previous emitted video mode
|
||||
VideoMode _previousVideoMode;
|
||||
|
||||
/// XBMC version number
|
||||
int _xbmcVersion;
|
||||
/// KODI version number
|
||||
int _kodiVersion;
|
||||
|
||||
static XBMCVideoChecker* _kodichecker;
|
||||
/// Logger Instance
|
||||
Logger * _log;
|
||||
|
||||
/// flag indicating state
|
||||
bool _active;
|
||||
|
||||
static KODIVideoChecker* _kodichecker;
|
||||
};
|
@ -92,7 +92,7 @@ private slots:
|
||||
signals:
|
||||
|
||||
///
|
||||
/// XBMC Video Checker Message
|
||||
/// KODI Video Checker Message
|
||||
///
|
||||
void setGrabbingMode(const GrabbingMode mode);
|
||||
void setVideoMode(const VideoMode videoMode);
|
||||
|
@ -21,7 +21,7 @@ public:
|
||||
|
||||
signals:
|
||||
///
|
||||
/// Forwarding XBMC Video Checker Message
|
||||
/// Forwarding KODI Video Checker Message
|
||||
///
|
||||
void setGrabbingMode(const GrabbingMode mode);
|
||||
void setVideoMode(const VideoMode videoMode);
|
||||
|
@ -54,7 +54,7 @@ public slots:
|
||||
|
||||
signals:
|
||||
///
|
||||
/// Forwarding XBMC Checker
|
||||
/// Forwarding KODI Checker
|
||||
///
|
||||
void grabbingMode(const GrabbingMode mode);
|
||||
void videoMode(const VideoMode VideoMode);
|
||||
|
@ -12,7 +12,7 @@ add_subdirectory(boblightserver)
|
||||
add_subdirectory(udplistener)
|
||||
add_subdirectory(leddevice)
|
||||
add_subdirectory(utils)
|
||||
add_subdirectory(xbmcvideochecker)
|
||||
add_subdirectory(kodivideochecker)
|
||||
add_subdirectory(effectengine)
|
||||
add_subdirectory(grabber)
|
||||
add_subdirectory(webconfig)
|
||||
|
@ -227,16 +227,16 @@
|
||||
},
|
||||
"additionalProperties" : false
|
||||
},
|
||||
"xbmcVideoChecker" :
|
||||
"kodiVideoChecker" :
|
||||
{
|
||||
"type" : "object",
|
||||
"required" : false,
|
||||
"properties" : {
|
||||
"xbmcAddress" : {
|
||||
"kodiAddress" : {
|
||||
"type" : "string",
|
||||
"required" : true
|
||||
},
|
||||
"xbmcTcpPort" : {
|
||||
"kodiTcpPort" : {
|
||||
"type" : "integer",
|
||||
"required" : true
|
||||
},
|
||||
|
@ -259,16 +259,16 @@
|
||||
},
|
||||
"additionalProperties" : false
|
||||
},
|
||||
"xbmcVideoChecker" :
|
||||
"kodiVideoChecker" :
|
||||
{
|
||||
"type" : "object",
|
||||
"required" : false,
|
||||
"properties" : {
|
||||
"xbmcAddress" : {
|
||||
"kodiAddress" : {
|
||||
"type" : "string",
|
||||
"required" : true
|
||||
},
|
||||
"xbmcTcpPort" : {
|
||||
"kodiTcpPort" : {
|
||||
"type" : "integer",
|
||||
"required" : true
|
||||
},
|
||||
|
29
libsrc/kodivideochecker/CMakeLists.txt
Normal file
29
libsrc/kodivideochecker/CMakeLists.txt
Normal file
@ -0,0 +1,29 @@
|
||||
|
||||
# Define the current source locations
|
||||
SET(CURRENT_HEADER_DIR ${CMAKE_SOURCE_DIR}/include/kodivideochecker)
|
||||
SET(CURRENT_SOURCE_DIR ${CMAKE_SOURCE_DIR}/libsrc/kodivideochecker)
|
||||
|
||||
# Group the headers that go through the MOC compiler
|
||||
SET(KODIVideoChecker_QT_HEADERS
|
||||
${CURRENT_HEADER_DIR}/KODIVideoChecker.h
|
||||
)
|
||||
|
||||
SET(KODIVideoChecker_HEADERS
|
||||
)
|
||||
|
||||
SET(KODIVideoChecker_SOURCES
|
||||
${CURRENT_SOURCE_DIR}/KODIVideoChecker.cpp
|
||||
)
|
||||
|
||||
QT5_WRAP_CPP(KODIVideoChecker_HEADERS_MOC ${KODIVideoChecker_QT_HEADERS})
|
||||
|
||||
add_library(kodivideochecker
|
||||
${KODIVideoChecker_HEADERS}
|
||||
${KODIVideoChecker_QT_HEADERS}
|
||||
${KODIVideoChecker_HEADERS_MOC}
|
||||
${KODIVideoChecker_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries(kodivideochecker
|
||||
hyperion
|
||||
${QT_LIBRARIES})
|
@ -3,23 +3,23 @@
|
||||
#include <QRegExp>
|
||||
#include <QStringRef>
|
||||
|
||||
#include <xbmcvideochecker/XBMCVideoChecker.h>
|
||||
#include <kodivideochecker/KODIVideoChecker.h>
|
||||
|
||||
|
||||
XBMCVideoChecker* XBMCVideoChecker::_kodichecker = nullptr;
|
||||
KODIVideoChecker* KODIVideoChecker::_kodichecker = nullptr;
|
||||
|
||||
XBMCVideoChecker* XBMCVideoChecker::initInstance(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection)
|
||||
KODIVideoChecker* KODIVideoChecker::initInstance(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection)
|
||||
{
|
||||
if ( XBMCVideoChecker::_kodichecker != nullptr )
|
||||
throw std::runtime_error("XBMCVideoChecker::initInstance can be called only one time");
|
||||
XBMCVideoChecker::_kodichecker = new XBMCVideoChecker(address, port, grabVideo, grabPhoto, grabAudio, grabMenu, grabPause, grabScreensaver, enable3DDetection);
|
||||
if ( KODIVideoChecker::_kodichecker != nullptr )
|
||||
throw std::runtime_error("KODIVideoChecker::initInstance can be called only one time");
|
||||
KODIVideoChecker::_kodichecker = new KODIVideoChecker(address, port, grabVideo, grabPhoto, grabAudio, grabMenu, grabPause, grabScreensaver, enable3DDetection);
|
||||
|
||||
return XBMCVideoChecker::_kodichecker;
|
||||
return KODIVideoChecker::_kodichecker;
|
||||
}
|
||||
|
||||
XBMCVideoChecker* XBMCVideoChecker::getInstance()
|
||||
KODIVideoChecker* KODIVideoChecker::getInstance()
|
||||
{
|
||||
return XBMCVideoChecker::_kodichecker;
|
||||
return KODIVideoChecker::_kodichecker;
|
||||
}
|
||||
|
||||
|
||||
@ -39,27 +39,29 @@ XBMCVideoChecker* XBMCVideoChecker::getInstance()
|
||||
// {"jsonrpc":"2.0","method":"GUI.GetProperties","params":{"properties":["stereoscopicmode"]},"id":669}
|
||||
// {"id":669,"jsonrpc":"2.0","result":{"stereoscopicmode":{"label":"Nebeneinander","mode":"split_vertical"}}}
|
||||
|
||||
XBMCVideoChecker::XBMCVideoChecker(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection) :
|
||||
QObject(),
|
||||
_address(QString::fromStdString(address)),
|
||||
_port(port),
|
||||
_activePlayerRequest(R"({"jsonrpc":"2.0","method":"Player.GetActivePlayers", "id":666})"),
|
||||
_currentPlayingItemRequest(R"({"id":667,"jsonrpc":"2.0","method":"Player.GetItem","params":{"playerid":%1,"properties":["file"]}})"),
|
||||
_checkScreensaverRequest(R"({"id":668,"jsonrpc":"2.0","method":"XBMC.GetInfoBooleans","params":{"booleans":["System.ScreenSaverActive"]}})"),
|
||||
_getStereoscopicMode(R"({"jsonrpc":"2.0","method":"GUI.GetProperties","params":{"properties":["stereoscopicmode"]},"id":669})"),
|
||||
_getXbmcVersion(R"({"jsonrpc":"2.0","method":"Application.GetProperties","params":{"properties":["version"]},"id":670})"),
|
||||
_socket(),
|
||||
_grabVideo(grabVideo),
|
||||
_grabPhoto(grabPhoto),
|
||||
_grabAudio(grabAudio),
|
||||
_grabMenu(grabMenu),
|
||||
_grabPause(grabPause),
|
||||
_grabScreensaver(grabScreensaver),
|
||||
_enable3DDetection(enable3DDetection),
|
||||
_previousScreensaverMode(false),
|
||||
_previousGrabbingMode(GRABBINGMODE_INVALID),
|
||||
_previousVideoMode(VIDEO_2D),
|
||||
_xbmcVersion(0)
|
||||
KODIVideoChecker::KODIVideoChecker(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection)
|
||||
: QObject()
|
||||
, _address(QString::fromStdString(address))
|
||||
, _port(port)
|
||||
, _activePlayerRequest(R"({"jsonrpc":"2.0","method":"Player.GetActivePlayers", "id":666})")
|
||||
, _currentPlayingItemRequest(R"({"id":667,"jsonrpc":"2.0","method":"Player.GetItem","params":{"playerid":%1,"properties":["file"]}})")
|
||||
, _checkScreensaverRequest(R"({"id":668,"jsonrpc":"2.0","method":"XBMC.GetInfoBooleans","params":{"booleans":["System.ScreenSaverActive"]}})")
|
||||
, _getStereoscopicMode(R"({"jsonrpc":"2.0","method":"GUI.GetProperties","params":{"properties":["stereoscopicmode"]},"id":669})")
|
||||
, _getKodiVersion(R"({"jsonrpc":"2.0","method":"Application.GetProperties","params":{"properties":["version"]},"id":670})")
|
||||
, _socket()
|
||||
, _grabVideo(grabVideo)
|
||||
, _grabPhoto(grabPhoto)
|
||||
, _grabAudio(grabAudio)
|
||||
, _grabMenu(grabMenu)
|
||||
, _grabPause(grabPause)
|
||||
, _grabScreensaver(grabScreensaver)
|
||||
, _enable3DDetection(enable3DDetection)
|
||||
, _previousScreensaverMode(false)
|
||||
, _previousGrabbingMode(GRABBINGMODE_INVALID)
|
||||
, _previousVideoMode(VIDEO_2D)
|
||||
, _kodiVersion(0)
|
||||
, _log(Logger::getInstance("KODI"))
|
||||
, _active(false)
|
||||
{
|
||||
// setup socket
|
||||
connect(&_socket, SIGNAL(readyRead()), this, SLOT(receiveReply()));
|
||||
@ -68,17 +70,56 @@ XBMCVideoChecker::XBMCVideoChecker(const std::string & address, uint16_t port, b
|
||||
connect(&_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(connectionError(QAbstractSocket::SocketError)));
|
||||
}
|
||||
|
||||
void XBMCVideoChecker::start()
|
||||
KODIVideoChecker::~KODIVideoChecker()
|
||||
{
|
||||
stop();
|
||||
}
|
||||
|
||||
|
||||
void KODIVideoChecker::setConfig(const std::string & address, uint16_t port, bool grabVideo, bool grabPhoto, bool grabAudio, bool grabMenu, bool grabPause, bool grabScreensaver, bool enable3DDetection)
|
||||
{
|
||||
_address = QString::fromStdString(address);
|
||||
_port = port;
|
||||
_grabVideo = grabVideo;
|
||||
_grabPhoto = grabPhoto;
|
||||
_grabAudio = grabAudio;
|
||||
_grabMenu = grabMenu;
|
||||
_grabPause = grabPause;
|
||||
_grabScreensaver = grabScreensaver;
|
||||
_enable3DDetection = enable3DDetection;
|
||||
_previousScreensaverMode = false;
|
||||
_previousGrabbingMode = GRABBINGMODE_INVALID;
|
||||
_previousVideoMode = VIDEO_2D;
|
||||
_kodiVersion = 0;
|
||||
|
||||
// restart if active
|
||||
if (_active)
|
||||
{
|
||||
stop();
|
||||
QTimer::singleShot(2000, this, SLOT(()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void KODIVideoChecker::start()
|
||||
{
|
||||
Info(_log, "started");
|
||||
_active = true;
|
||||
reconnect();
|
||||
}
|
||||
|
||||
void XBMCVideoChecker::receiveReply()
|
||||
void KODIVideoChecker::stop()
|
||||
{
|
||||
Info(_log, "stopped");
|
||||
_active = false;
|
||||
_socket.close();
|
||||
}
|
||||
|
||||
void KODIVideoChecker::receiveReply()
|
||||
{
|
||||
// expect that the reply is received as a single message. Probably oke considering the size of the expected reply
|
||||
QString reply(_socket.readAll());
|
||||
// silence - no "debug" code should be at the log
|
||||
// std::cout << "KODICHECK INFO: Kodi Message: " << reply.toStdString() << std::endl;
|
||||
Debug(_log, "message: %s", reply.toStdString().c_str());
|
||||
|
||||
if (reply.contains("\"method\":\"Player.OnPlay\""))
|
||||
{
|
||||
@ -147,7 +188,7 @@ void XBMCVideoChecker::receiveReply()
|
||||
}
|
||||
else if (reply.contains("\"id\":667"))
|
||||
{
|
||||
if (_xbmcVersion >= 13)
|
||||
if (_kodiVersion >= 13)
|
||||
{
|
||||
// check of active stereoscopicmode
|
||||
_socket.write(_getStereoscopicMode.toUtf8());
|
||||
@ -182,12 +223,12 @@ void XBMCVideoChecker::receiveReply()
|
||||
bool active = reply.contains("\"System.ScreenSaverActive\":true");
|
||||
setScreensaverMode(!_grabScreensaver && active);
|
||||
|
||||
// check here xbmc version
|
||||
// check here kodi version
|
||||
if (_socket.state() == QTcpSocket::ConnectedState)
|
||||
{
|
||||
if (_xbmcVersion == 0)
|
||||
if (_kodiVersion == 0)
|
||||
{
|
||||
_socket.write(_getXbmcVersion.toUtf8());
|
||||
_socket.write(_getKodiVersion.toUtf8());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -214,7 +255,7 @@ void XBMCVideoChecker::receiveReply()
|
||||
int pos = regex.indexIn(reply);
|
||||
if (pos > 0)
|
||||
{
|
||||
_xbmcVersion = regex.cap(1).toInt();
|
||||
_kodiVersion = regex.cap(1).toInt();
|
||||
}
|
||||
}
|
||||
else if (reply.contains("picture") && reply.contains("\"method\":\"Playlist.OnAdd\""))
|
||||
@ -224,33 +265,34 @@ void XBMCVideoChecker::receiveReply()
|
||||
}
|
||||
}
|
||||
|
||||
void XBMCVideoChecker::connected()
|
||||
void KODIVideoChecker::connected()
|
||||
{
|
||||
std::cout << "KODICHECK INFO: Kodi Connected" << std::endl;
|
||||
Info(_log, "Connected");
|
||||
|
||||
// send a request for the current player state
|
||||
_socket.write(_activePlayerRequest.toUtf8());
|
||||
_socket.write(_checkScreensaverRequest.toUtf8());
|
||||
}
|
||||
|
||||
void XBMCVideoChecker::disconnected()
|
||||
void KODIVideoChecker::disconnected()
|
||||
{
|
||||
std::cout << "KODICHECK INFO: Kodi Disconnected" << std::endl;
|
||||
Info(_log, "Disconnected");
|
||||
reconnect();
|
||||
}
|
||||
|
||||
void XBMCVideoChecker::reconnect()
|
||||
void KODIVideoChecker::reconnect()
|
||||
{
|
||||
if (_socket.state() == QTcpSocket::ConnectedState)
|
||||
if (_socket.state() == QTcpSocket::ConnectedState || ! _active )
|
||||
{
|
||||
return;
|
||||
}
|
||||
Debug(_log, "try reconnect");
|
||||
|
||||
// try to connect
|
||||
switch (_socket.state())
|
||||
{
|
||||
case QTcpSocket::ConnectingState:
|
||||
// Somehow when XBMC restarts we get stuck in connecting state
|
||||
// Somehow when KODI restarts we get stuck in connecting state
|
||||
// If we get here we tried to connect already for 5 seconds. abort and try again in 1 second.
|
||||
_socket.reset();
|
||||
_socket.waitForDisconnected(50);
|
||||
@ -266,15 +308,15 @@ void XBMCVideoChecker::reconnect()
|
||||
}
|
||||
}
|
||||
|
||||
void XBMCVideoChecker::connectionError(QAbstractSocket::SocketError error)
|
||||
void KODIVideoChecker::connectionError(QAbstractSocket::SocketError error)
|
||||
{
|
||||
std::cout << "KODICHECK ERROR: Kodi Connection error (" << error << ")" << std::endl;
|
||||
Error(_log,"Connection error (%s)", error);
|
||||
|
||||
// close the socket
|
||||
_socket.close();
|
||||
}
|
||||
|
||||
void XBMCVideoChecker::setGrabbingMode(GrabbingMode newGrabbingMode)
|
||||
void KODIVideoChecker::setGrabbingMode(GrabbingMode newGrabbingMode)
|
||||
{
|
||||
if (newGrabbingMode == _previousGrabbingMode)
|
||||
{
|
||||
@ -285,25 +327,25 @@ void XBMCVideoChecker::setGrabbingMode(GrabbingMode newGrabbingMode)
|
||||
switch (newGrabbingMode)
|
||||
{
|
||||
case GRABBINGMODE_VIDEO:
|
||||
std::cout << "KODICHECK INFO: switching to VIDEO mode" << std::endl;
|
||||
Info(_log, "switching to VIDEO mode");
|
||||
break;
|
||||
case GRABBINGMODE_PHOTO:
|
||||
std::cout << "KODICHECK INFO: switching to PHOTO mode" << std::endl;
|
||||
Info(_log, "switching to PHOTO mode");
|
||||
break;
|
||||
case GRABBINGMODE_AUDIO:
|
||||
std::cout << "KODICHECK INFO: switching to AUDIO mode" << std::endl;
|
||||
Info(_log, "switching to AUDIO mode");
|
||||
break;
|
||||
case GRABBINGMODE_MENU:
|
||||
std::cout << "KODICHECK INFO: switching to MENU mode" << std::endl;
|
||||
Info(_log, "switching to MENU mode");
|
||||
break;
|
||||
case GRABBINGMODE_PAUSE:
|
||||
std::cout << "KODICHECK INFO: switching to PAUSE mode" << std::endl;
|
||||
Info(_log, "switching to PAUSE mode");
|
||||
break;
|
||||
case GRABBINGMODE_OFF:
|
||||
std::cout << "KODICHECK INFO: switching to OFF mode" << std::endl;
|
||||
Info(_log, "switching to OFF mode");
|
||||
break;
|
||||
case GRABBINGMODE_INVALID:
|
||||
std::cout << "KODICHECK INFO: switching to INVALID mode" << std::endl;
|
||||
default:
|
||||
Warning(_log, "switching to INVALID mode");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -315,7 +357,7 @@ void XBMCVideoChecker::setGrabbingMode(GrabbingMode newGrabbingMode)
|
||||
_previousGrabbingMode = newGrabbingMode;
|
||||
}
|
||||
|
||||
void XBMCVideoChecker::setScreensaverMode(bool isOnScreensaver)
|
||||
void KODIVideoChecker::setScreensaverMode(bool isOnScreensaver)
|
||||
{
|
||||
if (isOnScreensaver == _previousScreensaverMode)
|
||||
{
|
||||
@ -327,7 +369,7 @@ void XBMCVideoChecker::setScreensaverMode(bool isOnScreensaver)
|
||||
_previousScreensaverMode = isOnScreensaver;
|
||||
}
|
||||
|
||||
void XBMCVideoChecker::setVideoMode(VideoMode newVideoMode)
|
||||
void KODIVideoChecker::setVideoMode(VideoMode newVideoMode)
|
||||
{
|
||||
if (newVideoMode == _previousVideoMode)
|
||||
{
|
||||
@ -338,13 +380,13 @@ void XBMCVideoChecker::setVideoMode(VideoMode newVideoMode)
|
||||
switch (newVideoMode)
|
||||
{
|
||||
case VIDEO_2D:
|
||||
std::cout << "KODICHECK INFO: switching to 2D mode" << std::endl;
|
||||
Info(_log, "KODICHECK INFO: switching to 2D mode");
|
||||
break;
|
||||
case VIDEO_3DSBS:
|
||||
std::cout << "KODICHECK INFO: switching to 3D SBS mode" << std::endl;
|
||||
Info(_log, "KODICHECK INFO: switching to 3D SBS mode");
|
||||
break;
|
||||
case VIDEO_3DTAB:
|
||||
std::cout << "KODICHECK INFO: switching to 3D TAB mode" << std::endl;
|
||||
Info(_log, "KODICHECK INFO: switching to 3D TAB mode");
|
||||
break;
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ public:
|
||||
|
||||
public slots:
|
||||
///
|
||||
/// Send XBMC Video Checker message to connected client
|
||||
/// Send KODI Video Checker message to connected client
|
||||
///
|
||||
void setGrabbingMode(const GrabbingMode mode);
|
||||
void setVideoMode(const VideoMode videoMode);
|
||||
|
@ -65,7 +65,7 @@ void ProtoServer::newConnection()
|
||||
connect(connection, SIGNAL(connectionClosed(ProtoClientConnection*)), this, SLOT(closedConnection(ProtoClientConnection*)));
|
||||
connect(connection, SIGNAL(newMessage(const proto::HyperionRequest*)), this, SLOT(newMessage(const proto::HyperionRequest*)));
|
||||
|
||||
// register forward signal for xbmc checker
|
||||
// register forward signal for kodi checker
|
||||
connect(this, SIGNAL(grabbingMode(GrabbingMode)), connection, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
connect(this, SIGNAL(videoMode(VideoMode)), connection, SLOT(setVideoMode(VideoMode)));
|
||||
|
||||
|
@ -76,9 +76,9 @@ message HyperionReply {
|
||||
// string indicating the reason for failure (if applicable)
|
||||
optional string error = 3;
|
||||
|
||||
// XBMC Video Checker Proto Messages for Grabbing mode
|
||||
// KODI Video Checker Proto Messages for Grabbing mode
|
||||
optional int32 grabbing = 4;
|
||||
|
||||
// XBMC Video Checker Proto Messages for Video mode
|
||||
// KODI Video Checker Proto Messages for Video mode
|
||||
optional int32 video = 5;
|
||||
}
|
||||
|
@ -1,29 +0,0 @@
|
||||
|
||||
# Define the current source locations
|
||||
SET(CURRENT_HEADER_DIR ${CMAKE_SOURCE_DIR}/include/xbmcvideochecker)
|
||||
SET(CURRENT_SOURCE_DIR ${CMAKE_SOURCE_DIR}/libsrc/xbmcvideochecker)
|
||||
|
||||
# Group the headers that go through the MOC compiler
|
||||
SET(XBMCVideoChecker_QT_HEADERS
|
||||
${CURRENT_HEADER_DIR}/XBMCVideoChecker.h
|
||||
)
|
||||
|
||||
SET(XBMCVideoChecker_HEADERS
|
||||
)
|
||||
|
||||
SET(XBMCVideoChecker_SOURCES
|
||||
${CURRENT_SOURCE_DIR}/XBMCVideoChecker.cpp
|
||||
)
|
||||
|
||||
QT5_WRAP_CPP(XBMCVideoChecker_HEADERS_MOC ${XBMCVideoChecker_QT_HEADERS})
|
||||
|
||||
add_library(xbmcvideochecker
|
||||
${XBMCVideoChecker_HEADERS}
|
||||
${XBMCVideoChecker_QT_HEADERS}
|
||||
${XBMCVideoChecker_HEADERS_MOC}
|
||||
${XBMCVideoChecker_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries(xbmcvideochecker
|
||||
hyperion
|
||||
${QT_LIBRARIES})
|
@ -104,7 +104,7 @@ int main(int argc, char ** argv)
|
||||
// Connect the screen capturing to the proto processing
|
||||
QObject::connect(&x11Wrapper, SIGNAL(sig_screenshot(const Image<ColorRgb> &)), &protoWrapper, SLOT(receiveImage(Image<ColorRgb>)));
|
||||
|
||||
// Connect the XBMC Video Checker to the proto processing
|
||||
// Connect the KODI Video Checker to the proto processing
|
||||
QObject::connect(&protoWrapper, SIGNAL(setGrabbingMode(GrabbingMode)), &x11Wrapper, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
QObject::connect(&protoWrapper, SIGNAL(setVideoMode(VideoMode)), &x11Wrapper, SLOT(setVideoMode(VideoMode)));
|
||||
|
||||
|
@ -5,7 +5,7 @@ add_executable(hyperiond
|
||||
target_link_libraries(hyperiond
|
||||
getoptPlusPlus
|
||||
hyperion
|
||||
xbmcvideochecker
|
||||
kodivideochecker
|
||||
effectengine
|
||||
jsonserver
|
||||
boblightserver
|
||||
|
@ -29,7 +29,7 @@
|
||||
HyperionDaemon::HyperionDaemon(std::string configFile, QObject *parent)
|
||||
: QObject(parent)
|
||||
, _log(Logger::getInstance("MAIN"))
|
||||
, _xbmcVideoChecker(nullptr)
|
||||
, _kodiVideoChecker(nullptr)
|
||||
, _jsonServer(nullptr)
|
||||
, _protoServer(nullptr)
|
||||
, _boblightServer(nullptr)
|
||||
@ -73,7 +73,7 @@ HyperionDaemon::~HyperionDaemon()
|
||||
delete _fbGrabber;
|
||||
delete _osxGrabber;
|
||||
delete _v4l2Grabber;
|
||||
delete _xbmcVideoChecker;
|
||||
delete _kodiVideoChecker;
|
||||
delete _jsonServer;
|
||||
delete _protoServer;
|
||||
delete _boblightServer;
|
||||
@ -85,7 +85,7 @@ HyperionDaemon::~HyperionDaemon()
|
||||
void HyperionDaemon::run()
|
||||
{
|
||||
startInitialEffect();
|
||||
createXBMCVideoChecker();
|
||||
createKODIVideoChecker();
|
||||
|
||||
// ---- network services -----
|
||||
startNetworkServices();
|
||||
@ -193,31 +193,33 @@ void HyperionDaemon::startInitialEffect()
|
||||
}
|
||||
|
||||
|
||||
// create XBMC video checker if the _configuration is present
|
||||
void HyperionDaemon::createXBMCVideoChecker()
|
||||
// create KODI video checker if the _configuration is present
|
||||
void HyperionDaemon::createKODIVideoChecker()
|
||||
{
|
||||
if (_config.isMember("xbmcVideoChecker"))
|
||||
{
|
||||
const Json::Value & videoCheckerConfig = _config["xbmcVideoChecker"];
|
||||
_xbmcVideoChecker = XBMCVideoChecker::initInstance(
|
||||
videoCheckerConfig["xbmcAddress"].asString(),
|
||||
videoCheckerConfig["xbmcTcpPort"].asUInt(),
|
||||
videoCheckerConfig["grabVideo"].asBool(),
|
||||
videoCheckerConfig["grabPictures"].asBool(),
|
||||
videoCheckerConfig["grabAudio"].asBool(),
|
||||
videoCheckerConfig["grabMenu"].asBool(),
|
||||
videoCheckerConfig.get("grabPause", true).asBool(),
|
||||
videoCheckerConfig.get("grabScreensaver", true).asBool(),
|
||||
videoCheckerConfig.get("enable3DDetection", true).asBool());
|
||||
bool kodiCheckerConfigured = _config.isMember("kodiVideoChecker");
|
||||
|
||||
_xbmcVideoChecker->start();
|
||||
Info(_log, "Kodi checker created and started");
|
||||
const Json::Value & videoCheckerConfig = _config["kodiVideoChecker"];
|
||||
_kodiVideoChecker = KODIVideoChecker::initInstance(
|
||||
videoCheckerConfig.get("kodiAddress","127.0.0.1").asString(),
|
||||
videoCheckerConfig.get("kodiTcpPort",9090).asUInt(),
|
||||
videoCheckerConfig.get("grabVideo",true).asBool(),
|
||||
videoCheckerConfig.get("grabPictures",true).asBool(),
|
||||
videoCheckerConfig.get("grabAudio",true).asBool(),
|
||||
videoCheckerConfig.get("grabMenu",false).asBool(),
|
||||
videoCheckerConfig.get("grabPause", true).asBool(),
|
||||
videoCheckerConfig.get("grabScreensaver", false).asBool(),
|
||||
videoCheckerConfig.get("enable3DDetection", true).asBool());
|
||||
Debug(_log, "KODI checker created ");
|
||||
|
||||
if( kodiCheckerConfigured && videoCheckerConfig.get("enable", true).asBool() )
|
||||
{
|
||||
_kodiVideoChecker->start();
|
||||
}
|
||||
}
|
||||
|
||||
void HyperionDaemon::startNetworkServices()
|
||||
{
|
||||
XBMCVideoChecker* xbmcVideoChecker = XBMCVideoChecker::getInstance();
|
||||
KODIVideoChecker* kodiVideoChecker = KODIVideoChecker::getInstance();
|
||||
|
||||
// Create Json server if configuration is present
|
||||
unsigned int jsonPort = 19444;
|
||||
@ -241,10 +243,10 @@ void HyperionDaemon::startNetworkServices()
|
||||
}
|
||||
|
||||
_protoServer = new ProtoServer(protoPort );
|
||||
if (xbmcVideoChecker != nullptr)
|
||||
if (kodiVideoChecker != nullptr)
|
||||
{
|
||||
QObject::connect(xbmcVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _protoServer, SIGNAL(grabbingMode(GrabbingMode)));
|
||||
QObject::connect(xbmcVideoChecker, SIGNAL(videoMode(VideoMode)), _protoServer, SIGNAL(videoMode(VideoMode)));
|
||||
QObject::connect(kodiVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _protoServer, SIGNAL(grabbingMode(GrabbingMode)));
|
||||
QObject::connect(kodiVideoChecker, SIGNAL(videoMode(VideoMode)), _protoServer, SIGNAL(videoMode(VideoMode)));
|
||||
}
|
||||
Info(_log, "Proto server created and started on port %d", _protoServer->getPort());
|
||||
|
||||
@ -335,12 +337,8 @@ void HyperionDaemon::createGrabberDispmanx()
|
||||
frameGrabberConfig.get("cropTop", 0).asInt(),
|
||||
frameGrabberConfig.get("cropBottom", 0).asInt());
|
||||
|
||||
if (_xbmcVideoChecker != nullptr)
|
||||
{
|
||||
QObject::connect(_xbmcVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _dispmanx, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
QObject::connect(_xbmcVideoChecker, SIGNAL(videoMode(VideoMode)), _dispmanx, SLOT(setVideoMode(VideoMode)));
|
||||
}
|
||||
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _dispmanx, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(videoMode(VideoMode)), _dispmanx, SLOT(setVideoMode(VideoMode)));
|
||||
QObject::connect(_dispmanx, SIGNAL(emitImage(int, const Image<ColorRgb>&, const int)), _protoServer, SLOT(sendImageToProtoSlaves(int, const Image<ColorRgb>&, const int)) );
|
||||
|
||||
_dispmanx->start();
|
||||
@ -405,12 +403,8 @@ void HyperionDaemon::createGrabberAmlogic()
|
||||
grabberConfig["frequency_Hz"].asUInt(),
|
||||
grabberConfig.get("priority",900).asInt());
|
||||
|
||||
if (_xbmcVideoChecker != nullptr)
|
||||
{
|
||||
QObject::connect(_xbmcVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _amlGrabber, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
QObject::connect(_xbmcVideoChecker, SIGNAL(videoMode(VideoMode)), _amlGrabber, SLOT(setVideoMode(VideoMode)));
|
||||
}
|
||||
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _amlGrabber, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(videoMode(VideoMode)), _amlGrabber, SLOT(setVideoMode(VideoMode)));
|
||||
QObject::connect(_amlGrabber, SIGNAL(emitImage(int, const Image<ColorRgb>&, const int)), _protoServer, SLOT(sendImageToProtoSlaves(int, const Image<ColorRgb>&, const int)) );
|
||||
|
||||
_amlGrabber->start();
|
||||
@ -436,12 +430,8 @@ void HyperionDaemon::createGrabberFramebuffer()
|
||||
grabberConfig["frequency_Hz"].asUInt(),
|
||||
grabberConfig.get("priority",900).asInt());
|
||||
|
||||
if (_xbmcVideoChecker != nullptr)
|
||||
{
|
||||
QObject::connect(_xbmcVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _fbGrabber, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
QObject::connect(_xbmcVideoChecker, SIGNAL(videoMode(VideoMode)), _fbGrabber, SLOT(setVideoMode(VideoMode)));
|
||||
}
|
||||
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _fbGrabber, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(videoMode(VideoMode)), _fbGrabber, SLOT(setVideoMode(VideoMode)));
|
||||
QObject::connect(_fbGrabber, SIGNAL(emitImage(int, const Image<ColorRgb>&, const int)), _protoServer, SLOT(sendImageToProtoSlaves(int, const Image<ColorRgb>&, const int)) );
|
||||
|
||||
_fbGrabber->start();
|
||||
@ -467,12 +457,8 @@ void HyperionDaemon::createGrabberOsx()
|
||||
grabberConfig["frequency_Hz"].asUInt(),
|
||||
grabberConfig.get("priority",900).asInt());
|
||||
|
||||
if (_xbmcVideoChecker != nullptr)
|
||||
{
|
||||
QObject::connect(_xbmcVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _osxGrabber, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
QObject::connect(_xbmcVideoChecker, SIGNAL(videoMode(VideoMode)), _osxGrabber, SLOT(setVideoMode(VideoMode)));
|
||||
}
|
||||
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(grabbingMode(GrabbingMode)), _osxGrabber, SLOT(setGrabbingMode(GrabbingMode)));
|
||||
QObject::connect(_kodiVideoChecker, SIGNAL(videoMode(VideoMode)), _osxGrabber, SLOT(setVideoMode(VideoMode)));
|
||||
QObject::connect(_osxGrabber, SIGNAL(emitImage(int, const Image<ColorRgb>&, const int)), _protoServer, SLOT(sendImageToProtoSlaves(int, const Image<ColorRgb>&, const int)) );
|
||||
|
||||
_osxGrabber->start();
|
||||
|
@ -34,7 +34,7 @@
|
||||
|
||||
#include <utils/Logger.h>
|
||||
|
||||
#include <xbmcvideochecker/XBMCVideoChecker.h>
|
||||
#include <kodivideochecker/KODIVideoChecker.h>
|
||||
#include <jsonserver/JsonServer.h>
|
||||
#include <protoserver/ProtoServer.h>
|
||||
#include <boblightserver/BoblightServer.h>
|
||||
@ -51,7 +51,7 @@ public:
|
||||
void run();
|
||||
|
||||
void startInitialEffect();
|
||||
void createXBMCVideoChecker();
|
||||
void createKODIVideoChecker();
|
||||
void startNetworkServices();
|
||||
|
||||
// grabber creators
|
||||
@ -64,7 +64,7 @@ public:
|
||||
private:
|
||||
Logger* _log;
|
||||
Json::Value _config;
|
||||
XBMCVideoChecker* _xbmcVideoChecker;
|
||||
KODIVideoChecker* _kodiVideoChecker;
|
||||
JsonServer* _jsonServer;
|
||||
ProtoServer* _protoServer;
|
||||
BoblightServer* _boblightServer;
|
||||
|
Loading…
Reference in New Issue
Block a user