Skip to content

Commit

Permalink
Ensure media items are owned by C++
Browse files Browse the repository at this point in the history
  • Loading branch information
vicr123 committed Dec 1, 2024
1 parent 52a5b81 commit 95a4142
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 11 deletions.
23 changes: 16 additions & 7 deletions libthebeat/statemanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,15 @@
#include "visualisationmanager.h"

struct StateManagerPrivate {
Playlist* playlist;
SourceManager* sources;
BurnManager* burn;
VisualisationManager* visualisation;
ControlStripManager* controlStrip;
UrlManager* url;
Playlist* playlist;
SourceManager* sources;
BurnManager* burn;
VisualisationManager* visualisation;
ControlStripManager* controlStrip;
UrlManager* url;

QQuickWindow* mainWindow = nullptr;
QQuickWindow* mainWindow = nullptr;
QQmlEngine* qmlEngine = nullptr;
};

StateManager::StateManager(QObject* parent) :
Expand Down Expand Up @@ -85,3 +86,11 @@ void StateManager::setMainWindow(QQuickWindow* mainWindow) {
d->mainWindow = mainWindow;
emit mainWindowAvailable(mainWindow);
}

QQmlEngine* StateManager::qmlEngine() {
return d->qmlEngine;
}

void StateManager::setQmlEngine(QQmlEngine* qmlEngine) {
d->qmlEngine = qmlEngine;
}
4 changes: 4 additions & 0 deletions libthebeat/statemanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

#include "libthebeat_global.h"
#include <QObject>
#include <QQmlEngine>

class Playlist;
class SourceManager;
Expand Down Expand Up @@ -49,6 +50,9 @@ class LIBTHEBEAT_EXPORT StateManager : public QObject {
QQuickWindow* mainWindow();
void setMainWindow(QQuickWindow* mainWindow);

QQmlEngine* qmlEngine();
void setQmlEngine(QQmlEngine* qmlEngine);

signals:
void mainWindowAvailable(QQuickWindow* mainWindow);

Expand Down
4 changes: 3 additions & 1 deletion plugins/MacIntegration/cd/cdchecker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,9 @@ QVariant CdChecker::data(const QModelIndex& index, int role) const {
}

MediaItem* CdChecker::mediaItem(int row) {
return new MacCdMediaItem(d->directory, d->trackInfo.at(row));
auto item = new MacCdMediaItem(d->directory, d->trackInfo.at(row));
StateManager::instance()->qmlEngine()->setObjectOwnership(item, QQmlEngine::CppOwnership);
return item;
}

QHash<int, QByteArray> CdChecker::roleNames() const {
Expand Down
5 changes: 4 additions & 1 deletion plugins/ParanoiaPlugin/paranoiacdcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <statemanager.h>

#include <QAudioSink>
#include <QQmlEngine>

#include <cdio++/cdio.hpp>

Expand Down Expand Up @@ -82,7 +83,9 @@ QCoro::Task<> ParanoiaCdController::eject() {
}

MediaItem* ParanoiaCdController::mediaItem(int row) {
return new ParanoiaMediaItem(d->player, row, d->sink, d->trackInfo.at(row));
auto item = new ParanoiaMediaItem(d->player, row, d->sink, d->trackInfo.at(row));
StateManager::instance()->qmlEngine()->setObjectOwnership(item, QQmlEngine::CppOwnership);
return item;
}

void ParanoiaCdController::readCd() {
Expand Down
2 changes: 1 addition & 1 deletion plugins/ParanoiaPlugin/paranoiamediaitem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ quint64 ParanoiaMediaItem::duration() {
}

QImage ParanoiaMediaItem::albumArt() {
return {};
return QImage();
}

QString ParanoiaMediaItem::lyrics() {
Expand Down
4 changes: 3 additions & 1 deletion plugins/WinIntegration/cdplayback/cdchecker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,9 @@ QCoro::Task<> CdChecker::eject() {

MediaItem* CdChecker::mediaItem(int row) {
winrt::CDLib::IAudioCDTrack track = d->drive.InsertedMedia().Tracks().GetAt(row);
return new WinCdMediaItem(d->drive.DriveLetter().Value(), track);
auto item = new WinCdMediaItem(d->drive.DriveLetter().Value(), track);
StateManager::instance()->qmlEngine()->setObjectOwnership(item, QQmlEngine::CppOwnership);
return item;
}

int CdChecker::rowCount(const QModelIndex& parent) const {
Expand Down

0 comments on commit 95a4142

Please sign in to comment.