Refactoring
This commit is contained in:
@@ -38,8 +38,7 @@
|
||||
#include <QUrl>
|
||||
#include <QSqlDatabase>
|
||||
|
||||
#include "core/shared_ptr.h"
|
||||
#include "core/application.h"
|
||||
#include "includes/shared_ptr.h"
|
||||
#include "core/database.h"
|
||||
#include "core/logging.h"
|
||||
#include "core/scopedtransaction.h"
|
||||
@@ -60,10 +59,14 @@ namespace {
|
||||
constexpr int kSongTableJoins = 2;
|
||||
}
|
||||
|
||||
PlaylistBackend::PlaylistBackend(Application *app, QObject *parent)
|
||||
PlaylistBackend::PlaylistBackend(const SharedPtr<Database> database,
|
||||
const SharedPtr<TagReaderClient> tagreader_client,
|
||||
const SharedPtr<CollectionBackend> collection_backend,
|
||||
QObject *parent)
|
||||
: QObject(parent),
|
||||
app_(app),
|
||||
db_(app_->database()),
|
||||
database_(database),
|
||||
tagreader_client_(tagreader_client),
|
||||
collection_backend_(collection_backend),
|
||||
original_thread_(nullptr) {
|
||||
|
||||
setObjectName(QLatin1String(metaObject()->className()));
|
||||
@@ -74,9 +77,9 @@ PlaylistBackend::PlaylistBackend(Application *app, QObject *parent)
|
||||
|
||||
void PlaylistBackend::Close() {
|
||||
|
||||
if (db_) {
|
||||
QMutexLocker l(db_->Mutex());
|
||||
db_->Close();
|
||||
if (database_) {
|
||||
QMutexLocker l(database_->Mutex());
|
||||
database_->Close();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -108,8 +111,8 @@ PlaylistBackend::PlaylistList PlaylistBackend::GetAllFavoritePlaylists() {
|
||||
|
||||
PlaylistBackend::PlaylistList PlaylistBackend::GetPlaylists(const GetPlaylistsFlags flags) {
|
||||
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
|
||||
PlaylistList ret;
|
||||
|
||||
@@ -128,7 +131,7 @@ PlaylistBackend::PlaylistList PlaylistBackend::GetPlaylists(const GetPlaylistsFl
|
||||
SqlQuery q(db);
|
||||
q.prepare(u"SELECT ROWID, name, last_played, special_type, ui_path, is_favorite, dynamic_playlist_type, dynamic_playlist_data, dynamic_playlist_backend FROM playlists "_s + condition + u" ORDER BY ui_order"_s);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -152,15 +155,15 @@ PlaylistBackend::PlaylistList PlaylistBackend::GetPlaylists(const GetPlaylistsFl
|
||||
|
||||
PlaylistBackend::Playlist PlaylistBackend::GetPlaylist(const int id) {
|
||||
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(u"SELECT ROWID, name, last_played, special_type, ui_path, is_favorite, dynamic_playlist_type, dynamic_playlist_data, dynamic_playlist_backend FROM playlists WHERE ROWID=:id"_s);
|
||||
|
||||
q.BindValue(u":id"_s, id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return Playlist();
|
||||
}
|
||||
|
||||
@@ -187,8 +190,8 @@ PlaylistItemPtrList PlaylistBackend::GetPlaylistItems(const int playlist) {
|
||||
|
||||
{
|
||||
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
|
||||
QString query = QStringLiteral("SELECT %1, %2, p.type FROM playlist_items AS p LEFT JOIN songs ON p.collection_id = songs.ROWID WHERE p.playlist = :playlist").arg(Song::JoinSpec(QStringLiteral("songs")), Song::JoinSpec(QStringLiteral("p")));
|
||||
|
||||
@@ -198,7 +201,7 @@ PlaylistItemPtrList PlaylistBackend::GetPlaylistItems(const int playlist) {
|
||||
q.prepare(query);
|
||||
q.BindValue(u":playlist"_s, playlist);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return PlaylistItemPtrList();
|
||||
}
|
||||
|
||||
@@ -223,8 +226,8 @@ SongList PlaylistBackend::GetPlaylistSongs(const int playlist) {
|
||||
SongList songs;
|
||||
|
||||
{
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
|
||||
QString query = QStringLiteral("SELECT %1, %2, p.type FROM playlist_items AS p LEFT JOIN songs ON p.collection_id = songs.ROWID WHERE p.playlist = :playlist").arg(Song::JoinSpec(u"songs"_s), Song::JoinSpec(u"p"_s));
|
||||
|
||||
@@ -234,7 +237,7 @@ SongList PlaylistBackend::GetPlaylistSongs(const int playlist) {
|
||||
q.prepare(query);
|
||||
q.BindValue(u":playlist"_s, playlist);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return SongList();
|
||||
}
|
||||
|
||||
@@ -282,7 +285,7 @@ PlaylistItemPtr PlaylistBackend::RestoreCueData(PlaylistItemPtr item, SharedPtr<
|
||||
// We need collection to run a CueParser; also, this method applies only to file-type PlaylistItems
|
||||
if (item->source() != Song::Source::LocalFile) return item;
|
||||
|
||||
CueParser cue_parser(app_->collection_backend());
|
||||
CueParser cue_parser(tagreader_client_, collection_backend_);
|
||||
|
||||
Song song = item->Metadata();
|
||||
// We're only interested in .cue songs here
|
||||
@@ -334,8 +337,8 @@ void PlaylistBackend::SavePlaylistAsync(int playlist, const PlaylistItemPtrList
|
||||
|
||||
void PlaylistBackend::SavePlaylist(int playlist, const PlaylistItemPtrList &items, int last_played, PlaylistGeneratorPtr dynamic) {
|
||||
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
|
||||
qLog(Debug) << "Saving playlist" << playlist;
|
||||
|
||||
@@ -347,7 +350,7 @@ void PlaylistBackend::SavePlaylist(int playlist, const PlaylistItemPtrList &item
|
||||
q.prepare(u"DELETE FROM playlist_items WHERE playlist = :playlist"_s);
|
||||
q.BindValue(u":playlist"_s, playlist);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -360,7 +363,7 @@ void PlaylistBackend::SavePlaylist(int playlist, const PlaylistItemPtrList &item
|
||||
item->BindToQuery(&q);
|
||||
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -382,7 +385,7 @@ void PlaylistBackend::SavePlaylist(int playlist, const PlaylistItemPtrList &item
|
||||
}
|
||||
q.BindValue(u":playlist"_s, playlist);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -393,15 +396,15 @@ void PlaylistBackend::SavePlaylist(int playlist, const PlaylistItemPtrList &item
|
||||
|
||||
int PlaylistBackend::CreatePlaylist(const QString &name, const QString &special_type) {
|
||||
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(u"INSERT INTO playlists (name, special_type) VALUES (:name, :special_type)"_s);
|
||||
q.BindValue(u":name"_s, name);
|
||||
q.BindValue(u":special_type"_s, special_type);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -411,8 +414,8 @@ int PlaylistBackend::CreatePlaylist(const QString &name, const QString &special_
|
||||
|
||||
void PlaylistBackend::RemovePlaylist(int id) {
|
||||
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
|
||||
ScopedTransaction transaction(&db);
|
||||
|
||||
@@ -421,7 +424,7 @@ void PlaylistBackend::RemovePlaylist(int id) {
|
||||
q.prepare(u"DELETE FROM playlists WHERE ROWID=:id"_s);
|
||||
q.BindValue(u":id"_s, id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -431,7 +434,7 @@ void PlaylistBackend::RemovePlaylist(int id) {
|
||||
q.prepare(u"DELETE FROM playlist_items WHERE playlist=:id"_s);
|
||||
q.BindValue(u":id"_s, id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -442,44 +445,44 @@ void PlaylistBackend::RemovePlaylist(int id) {
|
||||
|
||||
void PlaylistBackend::RenamePlaylist(const int id, const QString &new_name) {
|
||||
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
SqlQuery q(db);
|
||||
q.prepare(u"UPDATE playlists SET name=:name WHERE ROWID=:id"_s);
|
||||
q.BindValue(u":name"_s, new_name);
|
||||
q.BindValue(u":id"_s, id);
|
||||
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void PlaylistBackend::FavoritePlaylist(const int id, const bool is_favorite) {
|
||||
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
SqlQuery q(db);
|
||||
q.prepare(u"UPDATE playlists SET is_favorite=:is_favorite WHERE ROWID=:id"_s);
|
||||
q.BindValue(u":is_favorite"_s, is_favorite ? 1 : 0);
|
||||
q.BindValue(u":id"_s, id);
|
||||
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void PlaylistBackend::SetPlaylistOrder(const QList<int> &ids) {
|
||||
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
ScopedTransaction transaction(&db);
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(u"UPDATE playlists SET ui_order=-1"_s);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -488,7 +491,7 @@ void PlaylistBackend::SetPlaylistOrder(const QList<int> &ids) {
|
||||
q.BindValue(u":index"_s, i);
|
||||
q.BindValue(u":id"_s, ids[i]);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -499,8 +502,8 @@ void PlaylistBackend::SetPlaylistOrder(const QList<int> &ids) {
|
||||
|
||||
void PlaylistBackend::SetPlaylistUiPath(const int id, const QString &path) {
|
||||
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
QMutexLocker l(database_->Mutex());
|
||||
QSqlDatabase db(database_->Connect());
|
||||
SqlQuery q(db);
|
||||
q.prepare(u"UPDATE playlists SET ui_path=:path WHERE ROWID=:id"_s);
|
||||
|
||||
@@ -509,7 +512,7 @@ void PlaylistBackend::SetPlaylistUiPath(const int id, const QString &path) {
|
||||
q.BindValue(u":path"_s, path);
|
||||
q.BindValue(u":id"_s, id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
database_->ReportErrors(q);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user