[Backend+CMake] Added discord rich presence support.
This commit is contained in:
parent
e5f21a553f
commit
10dcc7cbad
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -18,3 +18,4 @@ sffmpeg
|
||||||
src_qml*
|
src_qml*
|
||||||
qmlcache*
|
qmlcache*
|
||||||
qrc_src*
|
qrc_src*
|
||||||
|
discord-rpc
|
||||||
|
|
|
@ -7,6 +7,8 @@ set(CMAKE_AUTOMOC ON)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -fstrict-aliasing -Wno-deprecated-declarations -Wno-unused-variable")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -fstrict-aliasing -Wno-deprecated-declarations -Wno-unused-variable")
|
||||||
|
|
||||||
option(DEVELOP "Enable runtime QML reloading for developing." OFF)
|
option(DEVELOP "Enable runtime QML reloading for developing." OFF)
|
||||||
|
option(DISCORD "Enable Discord SDK." ON)
|
||||||
|
|
||||||
|
|
||||||
find_package(Qt5Core REQUIRED)
|
find_package(Qt5Core REQUIRED)
|
||||||
find_package(Qt5Gui REQUIRED)
|
find_package(Qt5Gui REQUIRED)
|
||||||
|
@ -53,10 +55,20 @@ add_definitions(-DQRC_SOURCE_PATH="${PROJECT_SOURCE_DIR}/src/qml")
|
||||||
add_definitions(-DQT_QML_DEBUG)
|
add_definitions(-DQT_QML_DEBUG)
|
||||||
endif(DEVELOP)
|
endif(DEVELOP)
|
||||||
|
|
||||||
|
if(DISCORD)
|
||||||
|
add_definitions(-DDISCORD)
|
||||||
|
execute_process(
|
||||||
|
COMMAND git clone --depth 1 https://github.com/discordapp/discord-rpc
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
)
|
||||||
|
add_subdirectory(discord-rpc)
|
||||||
|
INCLUDE_DIRECTORIES(discord-rpc/include)
|
||||||
|
endif(DISCORD)
|
||||||
|
|
||||||
add_executable(KittehPlayer ${SOURCES} ${qml_QRC})
|
add_executable(KittehPlayer ${SOURCES} ${qml_QRC})
|
||||||
|
|
||||||
# Use the Qml/Quick modules from Qt 5.
|
# Use the Qml/Quick modules from Qt 5.
|
||||||
target_link_libraries(KittehPlayer ${MPV_LIBRARIES} ${X11_LIBRARIES} ${Xext_LIBRARIES} Qt5::X11Extras)
|
target_link_libraries(KittehPlayer ${MPV_LIBRARIES} ${X11_LIBRARIES} ${Xext_LIBRARIES} Qt5::X11Extras discord-rpc)
|
||||||
|
|
||||||
qt5_use_modules(KittehPlayer Qml Quick Core Gui Widgets X11Extras)
|
qt5_use_modules(KittehPlayer Qml Quick Core Gui Widgets X11Extras)
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,11 @@
|
||||||
#include <QSequentialIterable>
|
#include <QSequentialIterable>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#ifdef DISCORD
|
||||||
|
#include "discord_rpc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
void wakeup(void* ctx)
|
void wakeup(void* ctx)
|
||||||
|
@ -101,6 +106,12 @@ MpvPlayerBackend::MpvPlayerBackend(QQuickItem* parent)
|
||||||
if (!mpv)
|
if (!mpv)
|
||||||
throw std::runtime_error("could not create mpv context");
|
throw std::runtime_error("could not create mpv context");
|
||||||
|
|
||||||
|
#ifdef DISCORD
|
||||||
|
DiscordEventHandlers handlers;
|
||||||
|
memset(&handlers, 0, sizeof(handlers));
|
||||||
|
Discord_Initialize("511220330996432896", &handlers, 1, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
mpv_set_option_string(mpv, "terminal", "yes");
|
mpv_set_option_string(mpv, "terminal", "yes");
|
||||||
mpv_set_option_string(mpv, "msg-level", "all=v");
|
mpv_set_option_string(mpv, "msg-level", "all=v");
|
||||||
|
|
||||||
|
@ -181,6 +192,22 @@ void MpvPlayerBackend::launchAboutQt()
|
||||||
qapp->aboutQt();
|
qapp->aboutQt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DISCORD
|
||||||
|
void MpvPlayerBackend::updateDiscord()
|
||||||
|
{
|
||||||
|
char buffer[256];
|
||||||
|
DiscordRichPresence discordPresence;
|
||||||
|
memset(&discordPresence, 0, sizeof(discordPresence));
|
||||||
|
discordPresence.state = getProperty("pause").toBool() ? "Paused" : "Playing";
|
||||||
|
sprintf(buffer, "Currently Playing: Video %s", getProperty("media-title").toString().toUtf8().constData());
|
||||||
|
discordPresence.details = buffer;
|
||||||
|
discordPresence.startTimestamp = time(0);
|
||||||
|
discordPresence.endTimestamp = time(0) + (getProperty("duration").toFloat() - getProperty("time-pos").toFloat());
|
||||||
|
discordPresence.instance = 0;
|
||||||
|
Discord_UpdatePresence(&discordPresence);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
QVariant MpvPlayerBackend::getaudioDevices() const
|
QVariant MpvPlayerBackend::getaudioDevices() const
|
||||||
{
|
{
|
||||||
QVariant drivers = getProperty("audio-device-list");
|
QVariant drivers = getProperty("audio-device-list");
|
||||||
|
@ -420,6 +447,9 @@ void MpvPlayerBackend::handle_mpv_event(mpv_event* event)
|
||||||
if (prop->format == MPV_FORMAT_STRING) {
|
if (prop->format == MPV_FORMAT_STRING) {
|
||||||
char* title = *(char**)prop->data;
|
char* title = *(char**)prop->data;
|
||||||
findChild<QObject*>("titleLabel")->setProperty("text", title);
|
findChild<QObject*>("titleLabel")->setProperty("text", title);
|
||||||
|
#ifdef DISCORD
|
||||||
|
updateDiscord();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
} else if (strcmp(prop->name, "sub-text") == 0) {
|
} else if (strcmp(prop->name, "sub-text") == 0) {
|
||||||
if (prop->format == MPV_FORMAT_STRING) {
|
if (prop->format == MPV_FORMAT_STRING) {
|
||||||
|
@ -439,6 +469,9 @@ void MpvPlayerBackend::handle_mpv_event(mpv_event* event)
|
||||||
} else if (strcmp(prop->name, "pause") == 0) {
|
} else if (strcmp(prop->name, "pause") == 0) {
|
||||||
qDebug() << prop->data;
|
qDebug() << prop->data;
|
||||||
updatePlayPause(getProperty("pause"));
|
updatePlayPause(getProperty("pause"));
|
||||||
|
#ifdef DISCORD
|
||||||
|
updateDiscord();
|
||||||
|
#endif
|
||||||
} else if (strcmp(prop->name, "tracks-menu") == 0) {
|
} else if (strcmp(prop->name, "tracks-menu") == 0) {
|
||||||
QMetaObject::invokeMethod(findChild<QObject*>("menuBar"), "updateTracks");
|
QMetaObject::invokeMethod(findChild<QObject*>("menuBar"), "updateTracks");
|
||||||
} else if (strcmp(prop->name, "audio-device-list") == 0) {
|
} else if (strcmp(prop->name, "audio-device-list") == 0) {
|
||||||
|
|
|
@ -29,6 +29,9 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void launchAboutQt();
|
void launchAboutQt();
|
||||||
|
#ifdef DISCORD
|
||||||
|
void updateDiscord();
|
||||||
|
#endif
|
||||||
void togglePlayPause();
|
void togglePlayPause();
|
||||||
void toggleMute();
|
void toggleMute();
|
||||||
void nextAudioTrack();
|
void nextAudioTrack();
|
||||||
|
|
Loading…
Reference in a new issue