Refactoring

This commit is contained in:
Jonas Kvinge
2024-10-22 18:12:33 +02:00
parent dfcf715291
commit 8da2b9cd94
623 changed files with 9071 additions and 5126 deletions

View File

@@ -70,7 +70,6 @@
#include <QSettings>
#include <QMimeData>
#include "core/application.h"
#include "core/iconloader.h"
#include "core/logging.h"
#include "core/settings.h"
@@ -110,16 +109,28 @@ constexpr int kSmallImageSize = 128;
const char EditTagDialog::kTagsDifferentHintText[] = QT_TR_NOOP("(different across multiple songs)");
const char EditTagDialog::kArtDifferentHintText[] = QT_TR_NOOP("Different art across multiple songs.");
EditTagDialog::EditTagDialog(Application *app, QWidget *parent)
EditTagDialog::EditTagDialog(const SharedPtr<NetworkAccessManager> network,
const SharedPtr<TagReaderClient> tagreader_client,
const SharedPtr<CollectionBackend> collection_backend,
const SharedPtr<AlbumCoverLoader> albumcover_loader,
const SharedPtr<CurrentAlbumCoverLoader> current_albumcover_loader,
const SharedPtr<CoverProviders> cover_providers,
const SharedPtr<LyricsProviders> lyrics_providers,
const SharedPtr<StreamingServices> streaming_services,
QWidget *parent)
: QDialog(parent),
ui_(new Ui_EditTagDialog),
app_(app),
tagreader_client_(tagreader_client),
collection_backend_(collection_backend),
albumcover_loader_(albumcover_loader),
current_albumcover_loader_(current_albumcover_loader),
cover_providers_(cover_providers),
album_cover_choice_controller_(new AlbumCoverChoiceController(this)),
#ifdef HAVE_MUSICBRAINZ
tag_fetcher_(new TagFetcher(app->network(), this)),
results_dialog_(new TrackSelectionDialog(this)),
tag_fetcher_(new TagFetcher(network, this)),
results_dialog_(new TrackSelectionDialog(tagreader_client, this)),
#endif
lyrics_fetcher_(new LyricsFetcher(app->lyrics_providers(), this)),
lyrics_fetcher_(new LyricsFetcher(lyrics_providers, this)),
cover_menu_(new QMenu(this)),
image_no_cover_thumbnail_(ImageUtils::GenerateNoCoverImage(QSize(128, 128), devicePixelRatioF())),
loading_(false),
@@ -130,7 +141,7 @@ EditTagDialog::EditTagDialog(Application *app, QWidget *parent)
save_tag_pending_(0),
lyrics_id_(-1) {
QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &EditTagDialog::AlbumCoverLoaded);
QObject::connect(&*albumcover_loader_, &AlbumCoverLoader::AlbumCoverLoaded, this, &EditTagDialog::AlbumCoverLoaded);
#ifdef HAVE_MUSICBRAINZ
QObject::connect(tag_fetcher_, &TagFetcher::ResultAvailable, results_dialog_, &TrackSelectionDialog::FetchTagFinished, Qt::QueuedConnection);
@@ -140,7 +151,7 @@ EditTagDialog::EditTagDialog(Application *app, QWidget *parent)
#endif
QObject::connect(lyrics_fetcher_, &LyricsFetcher::LyricsFetched, this, &EditTagDialog::UpdateLyrics);
album_cover_choice_controller_->Init(app_);
album_cover_choice_controller_->Init(network, tagreader_client, collection_backend, albumcover_loader, current_albumcover_loader, cover_providers, streaming_services);
ui_->setupUi(this);
ui_->splitter->setSizes(QList<int>() << 200 << width() - 200);
@@ -259,13 +270,13 @@ EditTagDialog::EditTagDialog(Application *app, QWidget *parent)
QKeySequence(QKeySequence::Forward).toString(QKeySequence::NativeText),
QKeySequence(QKeySequence::MoveToNextPage).toString(QKeySequence::NativeText)));
new TagCompleter(app_->collection_backend(), Playlist::Column::Artist, ui_->artist);
new TagCompleter(app_->collection_backend(), Playlist::Column::Album, ui_->album);
new TagCompleter(app_->collection_backend(), Playlist::Column::AlbumArtist, ui_->albumartist);
new TagCompleter(app_->collection_backend(), Playlist::Column::Genre, ui_->genre);
new TagCompleter(app_->collection_backend(), Playlist::Column::Composer, ui_->composer);
new TagCompleter(app_->collection_backend(), Playlist::Column::Performer, ui_->performer);
new TagCompleter(app_->collection_backend(), Playlist::Column::Grouping, ui_->grouping);
new TagCompleter(collection_backend, Playlist::Column::Artist, ui_->artist);
new TagCompleter(collection_backend, Playlist::Column::Album, ui_->album);
new TagCompleter(collection_backend, Playlist::Column::AlbumArtist, ui_->albumartist);
new TagCompleter(collection_backend, Playlist::Column::Genre, ui_->genre);
new TagCompleter(collection_backend, Playlist::Column::Composer, ui_->composer);
new TagCompleter(collection_backend, Playlist::Column::Performer, ui_->performer);
new TagCompleter(collection_backend, Playlist::Column::Grouping, ui_->grouping);
}
@@ -393,7 +404,7 @@ bool EditTagDialog::SetLoading(const QString &message) {
}
QList<EditTagDialog::Data> EditTagDialog::LoadData(const SongList &songs) {
QList<EditTagDialog::Data> EditTagDialog::LoadData(const SongList &songs) const {
QList<Data> ret;
@@ -401,7 +412,7 @@ QList<EditTagDialog::Data> EditTagDialog::LoadData(const SongList &songs) {
if (song.IsEditable()) {
// Try reloading the tags from file
Song copy(song);
const TagReaderResult result = TagReaderClient::Instance()->ReadFileBlocking(copy.url().toLocalFile(), &copy);
const TagReaderResult result = tagreader_client_->ReadFileBlocking(copy.url().toLocalFile(), &copy);
if (result.success() && copy.is_valid()) {
copy.MergeUserSetData(song, false, false);
ret << Data(copy);
@@ -424,7 +435,7 @@ void EditTagDialog::SetSongs(const SongList &s, const PlaylistItemPtrList &items
collection_songs_.clear();
// Reload tags in the background
QFuture<QList<Data>> future = QtConcurrent::run(&EditTagDialog::LoadData, s);
QFuture<QList<Data>> future = QtConcurrent::run(&EditTagDialog::LoadData, this, s);
QFutureWatcher<QList<Data>> *watcher = new QFutureWatcher<QList<Data>>();
QObject::connect(watcher, &QFutureWatcher<QList<Data>>::finished, this, &EditTagDialog::SetSongsFinished);
watcher->setFuture(future);
@@ -725,7 +736,7 @@ void EditTagDialog::SelectionChanged() {
album_cover_choice_controller_->cover_to_file_action()->setEnabled(first_song.has_valid_art() && !first_song.art_unset());
album_cover_choice_controller_->cover_from_file_action()->setEnabled(enable_change_art);
album_cover_choice_controller_->cover_from_url_action()->setEnabled(enable_change_art);
album_cover_choice_controller_->search_for_cover_action()->setEnabled(app_->cover_providers()->HasAnyProviders() && enable_change_art);
album_cover_choice_controller_->search_for_cover_action()->setEnabled(cover_providers_->HasAnyProviders() && enable_change_art);
album_cover_choice_controller_->unset_cover_action()->setEnabled(enable_change_art && !first_song.art_unset());
album_cover_choice_controller_->clear_cover_action()->setEnabled(enable_change_art && (!first_song.art_manual().isEmpty() || first_song.art_unset()));
album_cover_choice_controller_->delete_cover_action()->setEnabled(enable_change_art && (first_song.art_embedded() || !first_song.art_automatic().isEmpty() || !first_song.art_manual().isEmpty()));
@@ -734,10 +745,10 @@ void EditTagDialog::SelectionChanged() {
cover_options.desired_scaled_size = QSize(kSmallImageSize, kSmallImageSize);
cover_options.device_pixel_ratio = devicePixelRatioF();
if (data_.value(indexes.first().row()).cover_action_ == UpdateCoverAction::None) {
tags_cover_art_id_ = app_->album_cover_loader()->LoadImageAsync(cover_options, first_song);
tags_cover_art_id_ = albumcover_loader_->LoadImageAsync(cover_options, first_song);
}
else {
tags_cover_art_id_ = app_->album_cover_loader()->LoadImageAsync(cover_options, data_[indexes.first().row()].cover_result_);
tags_cover_art_id_ = albumcover_loader_->LoadImageAsync(cover_options, data_[indexes.first().row()].cover_result_);
}
}
@@ -788,7 +799,7 @@ void EditTagDialog::UpdateSummaryTab(const Song &song) {
cover_options.types = cover_types_;
cover_options.desired_scaled_size = QSize(kSmallImageSize, kSmallImageSize);
cover_options.device_pixel_ratio = devicePixelRatioF();
summary_cover_art_id_ = app_->album_cover_loader()->LoadImageAsync(cover_options, song);
summary_cover_art_id_ = albumcover_loader_->LoadImageAsync(cover_options, song);
ui_->summary->setText(u"<p><b>"_s + song.PrettyTitleWithArtist().toHtmlEscaped() + u"</b></p>"_s);
@@ -1299,7 +1310,7 @@ void EditTagDialog::SaveData() {
if (save_embedded_cover) {
save_tags_options |= TagReaderClient::SaveOption::Cover;
}
TagReaderReplyPtr reply = TagReaderClient::Instance()->WriteFileAsync(ref.current_.url().toLocalFile(), ref.current_, save_tags_options, save_tag_cover_data);
TagReaderReplyPtr reply = tagreader_client_->WriteFileAsync(ref.current_.url().toLocalFile(), ref.current_, save_tags_options, save_tag_cover_data);
QObject::connect(&*reply, &TagReaderReply::Finished, this, [this, reply, ref]() { SongSaveTagsComplete(reply, ref.current_.url().toLocalFile(), ref.current_, ref.cover_action_); }, Qt::QueuedConnection);
}
// If the cover was changed, but no tags written, make sure to update the collection.
@@ -1307,8 +1318,8 @@ void EditTagDialog::SaveData() {
if (ref.current_.is_collection_song()) {
collection_songs_.insert(ref.current_.id(), ref.current_);
}
if (ref.current_ == app_->current_albumcover_loader()->last_song()) {
app_->current_albumcover_loader()->LoadAlbumCover(ref.current_);
if (ref.current_ == current_albumcover_loader_->last_song()) {
current_albumcover_loader_->LoadAlbumCover(ref.current_);
}
}
@@ -1321,7 +1332,7 @@ void EditTagDialog::SaveData() {
void EditTagDialog::SaveDataFinished() {
if (!collection_songs_.isEmpty()) {
app_->collection_backend()->AddOrUpdateSongsAsync(collection_songs_.values());
collection_backend_->AddOrUpdateSongsAsync(collection_songs_.values());
collection_songs_.clear();
}
@@ -1483,8 +1494,8 @@ void EditTagDialog::SongSaveTagsComplete(TagReaderReplyPtr reply, const QString
}
collection_songs_.insert(song.id(), song);
}
if (cover_action != UpdateCoverAction::None && song == app_->current_albumcover_loader()->last_song()) {
app_->current_albumcover_loader()->LoadAlbumCover(song);
if (cover_action != UpdateCoverAction::None && song == current_albumcover_loader_->last_song()) {
current_albumcover_loader_->LoadAlbumCover(song);
}
}
else {