Begin rewriting Player in C++

This commit is contained in:
Dark Steveneq
2025-10-16 19:21:35 +02:00
parent 1f821d58cc
commit 01a3775ac7
11 changed files with 184 additions and 3 deletions

3
.gitignore vendored
View File

@@ -89,3 +89,6 @@ out/
dist
CMakePresets.json
CMakeUserPresets.json
ext/*
!ext/.gitkeep

6
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"files.associations": {
"flake.lock": "json",
"qobject": "cpp"
}
}

View File

@@ -1,15 +1,22 @@
cmake_minimum_required(VERSION 3.16)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
project(qyouradio VERSION 0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 REQUIRED COMPONENTS Quick Multimedia)
find_package(Qt6 REQUIRED COMPONENTS Core Quick Multimedia)
find_package(DiscordSDK)
qt_standard_project_setup(REQUIRES 6.8)
configure_file(buildFlags.h.in buildFlags.h)
qt_add_executable(appqyouradio
main.cpp
buildFlags.h
player.cpp player.h
resources/qyouradio.rc
resources/resource.h
)
@@ -28,7 +35,7 @@ qt_add_qml_module(appqyouradio
VERSION 1.0
QML_FILES
Main.qml
Player.qml
# Player.qml
ViewPlayer.qml
ViewSettings.qml
)
@@ -44,10 +51,18 @@ set_target_properties(appqyouradio PROPERTIES
WIN32_EXECUTABLE TRUE
)
target_include_directories(appqyouradio PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
target_link_libraries(appqyouradio
PUBLIC Qt6::Quick Qt6::Multimedia
)
if (DiscordSDK_FOUND)
target_link_libraries(appqyouradio
PRIVATE DiscordSDK::DiscordSDK
)
endif()
include(GNUInstallDirs)
install(TARGETS appqyouradio
BUNDLE DESTINATION .

View File

@@ -1,5 +1,7 @@
{ stdenv
, lib
, alsa-lib
, xorg
, clang
, qtbase
, qtdeclarative
@@ -18,6 +20,10 @@ stdenv.mkDerivation {
src = ./.;
buildInputs = [
# alsa-lib
# xorg.libX11
# xorg.libXext
qtbase
qtdeclarative
qtlocation

1
buildFlags.h.in Normal file
View File

@@ -0,0 +1 @@
#cmakedefine01 DiscordSDK_FOUND

103
cmake/FindDiscordSDK.cmake Normal file
View File

@@ -0,0 +1,103 @@
# Locate Discord Social SDK library and headers.
#
# Copyright (c) 2025 hat_kid
# https://github.com/thehatkid/DiscordSocialSDKExample
#
# Usage of this module as follows:
# find_package(DiscordSDK)
#
# Variables defined by this module:
# DISCORDSDK_FOUND Whether was found library and headers.
# DISCORDSDK_INCLUDE_DIR SDK include path.
# DISCORDSDK_LIBRARY SDK shared library path.
# DISCORDSDK_IMPLIB Win32: SDK object library path to link.
# Set SDK root directory path (You can change it to different path)
set(DISCORDSDK_ROOT_DIR "${CMAKE_SOURCE_DIR}/ext/discord_social_sdk" CACHE PATH "Discord Social SDK root path")
# Set SDK library build variant
set(DISCORDSDK_VARIANT "release" CACHE STRING "Discord Social SDK library variant")
set_property(CACHE DISCORDSDK_VARIANT PROPERTY STRINGS "release" "debug")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(DISCORDSDK_VARIANT "debug")
endif()
# Find SDK include directory path
find_path(
DISCORDSDK_INCLUDE_DIR
NAMES cdiscord.h discordpp.h
PATHS ${DISCORDSDK_ROOT_DIR}/include
DOC "Discord Social SDK include directory"
NO_DEFAULT_PATH
)
# Find SDK library path
if(WIN32)
find_file(
DISCORDSDK_LIBRARY
NAMES discord_partner_sdk.dll
PATHS ${DISCORDSDK_ROOT_DIR}/bin/${DISCORDSDK_VARIANT}
DOC "Discord Social SDK Windows Dynamic Link Library (.dll)"
NO_DEFAULT_PATH
)
find_file(
DISCORDSDK_IMPLIB
NAMES discord_partner_sdk.lib
PATHS ${DISCORDSDK_ROOT_DIR}/lib/${DISCORDSDK_VARIANT}
DOC "Discord Social SDK Windows Object Library (.lib)"
NO_DEFAULT_PATH
)
else()
find_library(
DISCORDSDK_LIBRARY
NAMES libdiscord_partner_sdk discord_partner_sdk
PATHS ${DISCORDSDK_ROOT_DIR}/lib/${DISCORDSDK_VARIANT}
DOC "Discord Social SDK shared library"
NO_DEFAULT_PATH
)
endif()
mark_as_advanced(
DISCORDSDK_ROOT_DIR
DISCORDSDK_VARIANT
DISCORDSDK_INCLUDE_DIR
DISCORDSDK_LIBRARY
)
include(FindPackageHandleStandardArgs)
if(WIN32)
find_package_handle_standard_args(
DiscordSDK
REQUIRED_VARS DISCORDSDK_IMPLIB DISCORDSDK_LIBRARY DISCORDSDK_INCLUDE_DIR
)
mark_as_advanced(DISCORDSDK_IMPLIB)
else()
find_package_handle_standard_args(
DiscordSDK
REQUIRED_VARS DISCORDSDK_LIBRARY DISCORDSDK_INCLUDE_DIR
)
endif()
if(NOT DiscordSDK_FOUND)
message("Could NOT find Discord Social SDK redistributable! Please check for SDK files in ${DISCORDSDK_ROOT_DIR}")
else()
# Add imported shared library as DiscordSDK::DiscordSDK
add_library(DiscordSDK::DiscordSDK SHARED IMPORTED)
set_target_properties(
DiscordSDK::DiscordSDK PROPERTIES
IMPORTED_LOCATION ${DISCORDSDK_LIBRARY}
INTERFACE_COMPILE_DEFINITIONS DISCORDPP_IMPLEMENTATION
INTERFACE_INCLUDE_DIRECTORIES ${DISCORDSDK_INCLUDE_DIR}
)
if(WIN32)
set_target_properties(
DiscordSDK::DiscordSDK PROPERTIES
IMPORTED_IMPLIB ${DISCORDSDK_IMPLIB}
)
endif()
endif()

0
ext/.gitkeep Normal file
View File

View File

@@ -1,7 +1,9 @@
#include <QIcon>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QDebug>
#include "buildFlags.h"
int main(int argc, char *argv[])
{
@@ -15,5 +17,11 @@ int main(int argc, char *argv[])
app.setWindowIcon(QIcon(":/resources/logo.png"));
#if DiscordSDK_FOUND
qInfo("Has Discord Social SDK: true");
#else
qInfo("Has Discord Social SDK: false");
#endif
return app.exec();
}

21
player.cpp Normal file
View File

@@ -0,0 +1,21 @@
#include "player.h"
Player::Player(QObject *parent) : QObject(parent)
{
qDebug("Player::Player(): Constructed");
}
Player::~Player()
{
qDebug("Player::~Player(): Destructed");
}
void Player::startPlaying(int index)
{
qDebug("Player::startPlaying(): Success, I can call between both environments!");
}
void Player::stopPlaying()
{
qDebug("Player::stopPlaying(): Success, I can even tell C++ to stop!");
}

18
player.h Normal file
View File

@@ -0,0 +1,18 @@
#pragma once
#include <QDebug>
#include <QObject>
#include <QtQmlIntegration/qqmlintegration.h>
class Player : public QObject
{
Q_OBJECT
QML_SINGLETON
QML_ELEMENT
public:
Player(QObject *parent = nullptr);
~Player();
Q_INVOKABLE void startPlaying(int index);
Q_INVOKABLE void stopPlaying();
};