Fix memory leak when moodbar is disabled

Only call MoodbarLoader::Load when moodbar is enabled.
This commit is contained in:
Jonas Kvinge
2021-01-25 22:35:56 +01:00
parent 010a0cc2a7
commit 50d83dc070
4 changed files with 25 additions and 6 deletions

View File

@@ -1109,6 +1109,7 @@ void MainWindow::ReloadAllSettings() {
app_->ReloadSettings(); app_->ReloadSettings();
app_->collection()->ReloadSettings(); app_->collection()->ReloadSettings();
app_->player()->ReloadSettings(); app_->player()->ReloadSettings();
app_->moodbar_controller()->ReloadSettings();
collection_view_->ReloadSettings(); collection_view_->ReloadSettings();
ui_->playlist->view()->ReloadSettings(); ui_->playlist->view()->ReloadSettings();
app_->playlist_manager()->playlist_container()->ReloadSettings(); app_->playlist_manager()->playlist_container()->ReloadSettings();

View File

@@ -26,8 +26,8 @@
#include "core/player.h" #include "core/player.h"
#include "core/song.h" #include "core/song.h"
#include "engine/engine_fwd.h" #include "engine/engine_fwd.h"
#include "settings/moodbarsettingspage.h"
#include "playlist/playlistmanager.h" #include "playlist/playlistmanager.h"
#include "playlist/playlistitem.h"
#include "moodbarcontroller.h" #include "moodbarcontroller.h"
#include "moodbarloader.h" #include "moodbarloader.h"
@@ -35,14 +35,28 @@
MoodbarController::MoodbarController(Application* app, QObject* parent) MoodbarController::MoodbarController(Application* app, QObject* parent)
: QObject(parent), : QObject(parent),
app_(app) { app_(app),
enabled_(false) {
connect(app_->playlist_manager(), SIGNAL(CurrentSongChanged(Song)), SLOT(CurrentSongChanged(Song))); connect(app_->playlist_manager(), SIGNAL(CurrentSongChanged(Song)), SLOT(CurrentSongChanged(Song)));
connect(app_->player(), SIGNAL(Stopped()), SLOT(PlaybackStopped())); connect(app_->player(), SIGNAL(Stopped()), SLOT(PlaybackStopped()));
ReloadSettings();
} }
void MoodbarController::CurrentSongChanged(const Song& song) { void MoodbarController::ReloadSettings() {
QSettings s;
s.beginGroup(MoodbarSettingsPage::kSettingsGroup);
enabled_ = s.value("enabled", false).toBool();
s.endGroup();
}
void MoodbarController::CurrentSongChanged(const Song &song) {
if (!enabled_) return;
QByteArray data; QByteArray data;
MoodbarPipeline* pipeline = nullptr; MoodbarPipeline* pipeline = nullptr;
@@ -69,7 +83,9 @@ void MoodbarController::CurrentSongChanged(const Song& song) {
} }
void MoodbarController::PlaybackStopped() { void MoodbarController::PlaybackStopped() {
emit CurrentMoodbarDataChanged(QByteArray()); if (enabled_) {
emit CurrentMoodbarDataChanged(QByteArray());
}
} }
void MoodbarController::AsyncLoadComplete(MoodbarPipeline* pipeline, const QUrl& url) { void MoodbarController::AsyncLoadComplete(MoodbarPipeline* pipeline, const QUrl& url) {

View File

@@ -33,6 +33,8 @@ class MoodbarController : public QObject {
public: public:
explicit MoodbarController(Application* app, QObject* parent = nullptr); explicit MoodbarController(Application* app, QObject* parent = nullptr);
void ReloadSettings();
signals: signals:
void CurrentMoodbarDataChanged(const QByteArray& data); void CurrentMoodbarDataChanged(const QByteArray& data);
@@ -43,6 +45,7 @@ class MoodbarController : public QObject {
private: private:
Application* app_; Application* app_;
bool enabled_;
}; };
#endif // MOODBARCONTROLLER_H #endif // MOODBARCONTROLLER_H

View File

@@ -75,7 +75,6 @@ void MoodbarLoader::ReloadSettings() {
QSettings s; QSettings s;
s.beginGroup(MoodbarSettingsPage::kSettingsGroup); s.beginGroup(MoodbarSettingsPage::kSettingsGroup);
enabled_ = s.value("enabled", false).toBool();
save_ = s.value("save", false).toBool(); save_ = s.value("save", false).toBool();
s.endGroup(); s.endGroup();
@@ -148,7 +147,7 @@ void MoodbarLoader::MaybeTakeNextRequest() {
Q_ASSERT(QThread::currentThread() == qApp->thread()); Q_ASSERT(QThread::currentThread() == qApp->thread());
if (active_requests_.count() >= kMaxActiveRequests || queued_requests_.isEmpty() || !enabled_) { if (active_requests_.count() >= kMaxActiveRequests || queued_requests_.isEmpty()) {
return; return;
} }