mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
KODIVideoChecker Fix (#138)
* Update KODIVideoChecker.h * Update KODIVideoChecker.cpp * Update KODIVideoChecker.cpp
This commit is contained in:
parent
5bd8c33529
commit
01ec4a3655
@ -112,6 +112,9 @@ private:
|
|||||||
|
|
||||||
/// The JSON-RPC message to check the kodi version
|
/// The JSON-RPC message to check the kodi version
|
||||||
QString _getKodiVersion;
|
QString _getKodiVersion;
|
||||||
|
|
||||||
|
/// The JSON-RPC message to check the current Playback State
|
||||||
|
const QString _getCurrentPlaybackState;
|
||||||
|
|
||||||
/// The QT TCP Socket with connection to KODI
|
/// The QT TCP Socket with connection to KODI
|
||||||
QTcpSocket _socket;
|
QTcpSocket _socket;
|
||||||
@ -142,6 +145,12 @@ private:
|
|||||||
|
|
||||||
/// Previous emitted video mode
|
/// Previous emitted video mode
|
||||||
VideoMode _previousVideoMode;
|
VideoMode _previousVideoMode;
|
||||||
|
|
||||||
|
/// Current Playback State
|
||||||
|
bool _currentPlaybackState;
|
||||||
|
|
||||||
|
/// Current Kodi PlayerID
|
||||||
|
int _currentPlayerID;
|
||||||
|
|
||||||
/// KODI version number
|
/// KODI version number
|
||||||
int _kodiVersion;
|
int _kodiVersion;
|
||||||
|
@ -48,6 +48,7 @@ KODIVideoChecker::KODIVideoChecker(const std::string & address, uint16_t port, b
|
|||||||
, _checkScreensaverRequest(R"({"id":668,"jsonrpc":"2.0","method":"XBMC.GetInfoBooleans","params":{"booleans":["System.ScreenSaverActive"]}})")
|
, _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})")
|
, _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})")
|
, _getKodiVersion(R"({"jsonrpc":"2.0","method":"Application.GetProperties","params":{"properties":["version"]},"id":670})")
|
||||||
|
, _getCurrentPlaybackState(R"({"id":671,"jsonrpc":"2.0","method":"Player.GetProperties","params":{"playerid":%1,"properties":["speed"]}})")
|
||||||
, _socket()
|
, _socket()
|
||||||
, _grabVideo(grabVideo)
|
, _grabVideo(grabVideo)
|
||||||
, _grabPhoto(grabPhoto)
|
, _grabPhoto(grabPhoto)
|
||||||
@ -58,6 +59,8 @@ KODIVideoChecker::KODIVideoChecker(const std::string & address, uint16_t port, b
|
|||||||
, _enable3DDetection(enable3DDetection)
|
, _enable3DDetection(enable3DDetection)
|
||||||
, _previousGrabbingMode(GRABBINGMODE_INVALID)
|
, _previousGrabbingMode(GRABBINGMODE_INVALID)
|
||||||
, _previousVideoMode(VIDEO_2D)
|
, _previousVideoMode(VIDEO_2D)
|
||||||
|
, _currentPlaybackState(false)
|
||||||
|
, _currentPlayerID(0)
|
||||||
, _kodiVersion(0)
|
, _kodiVersion(0)
|
||||||
, _log(Logger::getInstance("KODI"))
|
, _log(Logger::getInstance("KODI"))
|
||||||
, _active(false)
|
, _active(false)
|
||||||
@ -143,31 +146,57 @@ void KODIVideoChecker::receiveReply()
|
|||||||
emit videoMode(VIDEO_2D);
|
emit videoMode(VIDEO_2D);
|
||||||
|
|
||||||
QString type = resultArray[0].toObject()["type"].toString();
|
QString type = resultArray[0].toObject()["type"].toString();
|
||||||
int playerid = resultArray[0].toObject()["playerid"].toInt();
|
_currentPlayerID = resultArray[0].toObject()["playerid"].toInt();
|
||||||
|
|
||||||
if (type == "video")
|
if (type == "video")
|
||||||
{
|
{
|
||||||
// video is playing
|
if (_currentPlaybackState)
|
||||||
setGrabbingMode(_grabVideo ? GRABBINGMODE_VIDEO : GRABBINGMODE_OFF);
|
{
|
||||||
|
// video is playing
|
||||||
|
setGrabbingMode(_grabVideo ? GRABBINGMODE_VIDEO : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setGrabbingMode(_grabPause ? GRABBINGMODE_PAUSE : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
|
|
||||||
// request info of the playing item
|
// request info of the playing item
|
||||||
_socket.write(_currentPlayingItemRequest.arg(playerid).toUtf8());
|
_socket.write(_currentPlayingItemRequest.arg(_currentPlayerID).toUtf8());
|
||||||
}
|
}
|
||||||
else if (type == "picture")
|
else if (type == "picture")
|
||||||
{
|
{
|
||||||
// picture viewer is playing
|
if (_currentPlaybackState)
|
||||||
setGrabbingMode(_grabPhoto ? GRABBINGMODE_PHOTO : GRABBINGMODE_OFF);
|
{
|
||||||
|
// picture is playing
|
||||||
|
setGrabbingMode(_grabPhoto ? GRABBINGMODE_PHOTO : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setGrabbingMode(_grabPause ? GRABBINGMODE_PAUSE : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (type == "audio")
|
else if (type == "audio")
|
||||||
{
|
{
|
||||||
// audio is playing
|
// audio is playing
|
||||||
setGrabbingMode(_grabAudio ? GRABBINGMODE_AUDIO : GRABBINGMODE_OFF);
|
if (_currentPlaybackState)
|
||||||
|
{
|
||||||
|
// audio is playing
|
||||||
|
setGrabbingMode(_grabAudio ? GRABBINGMODE_AUDIO : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setGrabbingMode(_grabPause ? GRABBINGMODE_PAUSE : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
// Nothing is playing.
|
// Nothing is playing.
|
||||||
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 667:
|
case 667:
|
||||||
@ -190,6 +219,10 @@ void KODIVideoChecker::receiveReply()
|
|||||||
else
|
else
|
||||||
setVideoMode(VIDEO_2D);
|
setVideoMode(VIDEO_2D);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -212,6 +245,10 @@ void KODIVideoChecker::receiveReply()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 669:
|
case 669:
|
||||||
@ -225,6 +262,10 @@ void KODIVideoChecker::receiveReply()
|
|||||||
else if (mode == "split_horizontal")
|
else if (mode == "split_horizontal")
|
||||||
setVideoMode(VIDEO_3DTAB);
|
setVideoMode(VIDEO_3DTAB);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 670:
|
case 670:
|
||||||
@ -234,6 +275,23 @@ void KODIVideoChecker::receiveReply()
|
|||||||
// kodi major version
|
// kodi major version
|
||||||
_kodiVersion = doc.object()["result"].toObject()["version"].toObject()["major"].toInt();
|
_kodiVersion = doc.object()["result"].toObject()["version"].toObject()["major"].toInt();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 671:
|
||||||
|
{
|
||||||
|
if (doc.object()["result"].toObject().contains("speed"))
|
||||||
|
{
|
||||||
|
// result of Player.PlayPause
|
||||||
|
_currentPlaybackState = static_cast<bool>(doc.object()["result"].toObject()["speed"].toInt());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setGrabbingMode(_grabMenu ? GRABBINGMODE_MENU : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -245,6 +303,9 @@ void KODIVideoChecker::receiveReply()
|
|||||||
QString method = doc.object()["method"].toString();
|
QString method = doc.object()["method"].toString();
|
||||||
if (method == "Player.OnPlay")
|
if (method == "Player.OnPlay")
|
||||||
{
|
{
|
||||||
|
if (doc.object()["params"].toObject()["data"].toObject()["player"].toObject().contains("speed"))
|
||||||
|
_currentPlaybackState = static_cast<bool>(doc.object()["params"].toObject()["data"].toObject()["player"].toObject()["speed"].toInt());
|
||||||
|
|
||||||
// send a request for the current player state
|
// send a request for the current player state
|
||||||
_socket.write(_activePlayerRequest.toUtf8());
|
_socket.write(_activePlayerRequest.toUtf8());
|
||||||
return;
|
return;
|
||||||
@ -256,8 +317,13 @@ void KODIVideoChecker::receiveReply()
|
|||||||
setVideoMode(VIDEO_2D);
|
setVideoMode(VIDEO_2D);
|
||||||
}
|
}
|
||||||
else if (method == "Player.OnPause")
|
else if (method == "Player.OnPause")
|
||||||
|
{
|
||||||
|
if (doc.object()["params"].toObject()["data"].toObject()["player"].toObject().contains("speed"))
|
||||||
|
_currentPlaybackState = static_cast<bool>(doc.object()["params"].toObject()["data"].toObject()["player"].toObject()["speed"].toInt());
|
||||||
|
|
||||||
// player at pause
|
// player at pause
|
||||||
setGrabbingMode(_grabPause ? GRABBINGMODE_PAUSE : GRABBINGMODE_OFF);
|
setGrabbingMode(_grabPause ? GRABBINGMODE_PAUSE : GRABBINGMODE_OFF);
|
||||||
|
}
|
||||||
else if (method == "GUI.OnScreensaverActivated")
|
else if (method == "GUI.OnScreensaverActivated")
|
||||||
setGrabbingMode(_grabScreensaver ? GRABBINGMODE_SCREENSAVER : GRABBINGMODE_OFF);
|
setGrabbingMode(_grabScreensaver ? GRABBINGMODE_SCREENSAVER : GRABBINGMODE_OFF);
|
||||||
else if (method == "GUI.OnScreensaverDeactivated")
|
else if (method == "GUI.OnScreensaverDeactivated")
|
||||||
@ -272,6 +338,14 @@ void KODIVideoChecker::receiveReply()
|
|||||||
setGrabbingMode(_grabPhoto ? GRABBINGMODE_PHOTO : GRABBINGMODE_OFF);
|
setGrabbingMode(_grabPhoto ? GRABBINGMODE_PHOTO : GRABBINGMODE_OFF);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (method == "Input.OnInputFinished")
|
||||||
|
{
|
||||||
|
// This Event is fired when Kodi Login
|
||||||
|
_socket.write(_activePlayerRequest.toUtf8());
|
||||||
|
_socket.write(_checkScreensaverRequest.toUtf8());
|
||||||
|
if (_currentPlayerID != 0)
|
||||||
|
_socket.write(_getCurrentPlaybackState.arg(_currentPlayerID).toUtf8());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -286,6 +360,8 @@ void KODIVideoChecker::connected()
|
|||||||
// send a request for the current player state
|
// send a request for the current player state
|
||||||
_socket.write(_activePlayerRequest.toUtf8());
|
_socket.write(_activePlayerRequest.toUtf8());
|
||||||
_socket.write(_checkScreensaverRequest.toUtf8());
|
_socket.write(_checkScreensaverRequest.toUtf8());
|
||||||
|
if (_currentPlayerID != 0)
|
||||||
|
_socket.write(_getCurrentPlaybackState.arg(_currentPlayerID).toUtf8());
|
||||||
}
|
}
|
||||||
|
|
||||||
void KODIVideoChecker::disconnected()
|
void KODIVideoChecker::disconnected()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user