Add new method for updating songs based on song ID

Show status updating database.

Fixes #750
This commit is contained in:
Jonas Kvinge
2021-09-19 15:41:36 +02:00
parent 120b18b399
commit d2d7f32c45
44 changed files with 650 additions and 194 deletions

View File

@@ -26,6 +26,7 @@
#include <QSortFilterProxyModel>
#include <QAbstractItemView>
#include <QItemSelectionModel>
#include <QMap>
#include <QVariant>
#include <QString>
#include <QUrl>

View File

@@ -28,6 +28,7 @@
#include <QAbstractItemModel>
#include <QAbstractItemView>
#include <QSet>
#include <QMap>
#include <QString>
#include <QPixmap>
@@ -86,7 +87,7 @@ class InternetCollectionView : public AutoExpandingTreeView {
void TotalArtistCountUpdated_();
void TotalAlbumCountUpdated_();
void Error(QString);
void RemoveSongs(SongList);
void RemoveSongs(SongList songs);
protected:
// QWidget

View File

@@ -26,6 +26,7 @@
#include <QMimeData>
#include <QList>
#include <QSet>
#include <QMap>
#include <QVariant>
#include <QString>
#include <QPixmap>
@@ -392,12 +393,11 @@ MimeData *InternetSearchModel::LoadTracks(const InternetSearchView::ResultList &
return nullptr;
}
SongList songs;
SongMap songs;
QList<QUrl> urls;
songs.reserve(results.count());
urls.reserve(results.count());
for (const InternetSearchView::Result &result : results) {
songs << result.metadata_;
songs.insert(result.metadata_.song_id(), result.metadata_);
urls << result.metadata_.url();
}

View File

@@ -487,7 +487,7 @@ void InternetSearchView::SearchAsync(const int id, const QString &query, const S
}
void InternetSearchView::SearchDone(const int service_id, const SongList &songs, const QString &error) {
void InternetSearchView::SearchDone(const int service_id, const SongMap &songs, const QString &error) {
if (!pending_searches_.contains(service_id)) return;
@@ -758,7 +758,7 @@ void InternetSearchView::AddArtists() {
MimeData *mimedata = SelectedMimeData();
if (!mimedata) return;
if (const InternetSongMimeData *internet_song_data = qobject_cast<const InternetSongMimeData*>(mimedata)) {
emit AddArtistsSignal(internet_song_data->songs);
emit AddArtistsSignal(internet_song_data->songs.values());
}
}
@@ -768,7 +768,7 @@ void InternetSearchView::AddAlbums() {
MimeData *mimedata = SelectedMimeData();
if (!mimedata) return;
if (const InternetSongMimeData *internet_song_data = qobject_cast<const InternetSongMimeData*>(mimedata)) {
emit AddAlbumsSignal(internet_song_data->songs);
emit AddAlbumsSignal(internet_song_data->songs.values());
}
}

View File

@@ -140,13 +140,13 @@ class InternetSearchView : public QWidget {
void AddToPlaylist(QMimeData*);
void AddArtistsSignal(SongList);
void AddAlbumsSignal(SongList);
void AddSongsSignal(SongList);
void AddSongsSignal(SongMap);
private slots:
void SwapModels();
void TextEdited(const QString &text);
void StartSearch(const QString &query);
void SearchDone(const int service_id, const SongList &songs, const QString &error);
void SearchDone(const int service_id, const SongMap &songs, const QString &error);
void UpdateStatus(const int service_id, const QString &text);
void ProgressSetMaximum(const int service_id, const int max);

View File

@@ -23,6 +23,7 @@
#include <QtGlobal>
#include <QObject>
#include <QMetaType>
#include <QMap>
#include <QString>
#include <QUrl>
#include <QIcon>
@@ -95,38 +96,39 @@ class InternetService : public QObject {
void TestComplete(bool success, QString error = QString());
void Error(QString error);
void Results(SongList songs, QString error);
void Results(SongMap songs, QString error);
void UpdateStatus(QString text);
void ProgressSetMaximum(int max);
void UpdateProgress(int max);
void ArtistsResults(SongList songs, QString error);
void ArtistsResults(SongMap songs, QString error);
void ArtistsUpdateStatus(QString text);
void ArtistsProgressSetMaximum(int max);
void ArtistsUpdateProgress(int max);
void AlbumsResults(SongList songs, QString error);
void AlbumsResults(SongMap songs, QString error);
void AlbumsUpdateStatus(QString text);
void AlbumsProgressSetMaximum(int max);
void AlbumsUpdateProgress(int max);
void SongsResults(SongList songs, QString error);
void SongsResults(SongMap songs, QString error);
void SongsUpdateStatus(QString text);
void SongsProgressSetMaximum(int max);
void SongsUpdateProgress(int max);
void SearchResults(int id, SongList songs, QString error);
void SearchResults(int id, SongMap songs, QString error);
void SearchUpdateStatus(int id, QString text);
void SearchProgressSetMaximum(int id, int max);
void SearchUpdateProgress(int id, int max);
void AddArtists(SongList);
void AddAlbums(SongList);
void AddSongs(SongList);
void AddArtists(SongList songs);
void AddAlbums(SongList songs);
void AddSongs(SongMap songs);
void RemoveArtists(SongList);
void RemoveAlbums(SongList);
void RemoveSongs(SongList);
void RemoveArtists(SongList songs);
void RemoveAlbums(SongList songs);
void RemoveSongs(SongList songs);
void RemoveSongs(SongMap songs);
void StreamURLFinished(QUrl original_url, QUrl stream_url, Song::FileType filetype, int samplerate, int bit_depth, qint64 duration, QString error = QString());

View File

@@ -21,6 +21,8 @@
#ifndef INTERNETSONGMIMEDATA_H
#define INTERNETSONGMIMEDATA_H
#include <QMap>
#include "core/mimedata.h"
#include "core/song.h"
@@ -33,7 +35,7 @@ class InternetSongMimeData : public MimeData {
explicit InternetSongMimeData(InternetService *_service, QObject* = nullptr) : service(_service) {}
InternetService *service;
SongList songs;
SongMap songs;
};
#endif // INTERNETSONGMIMEDATA_H

View File

@@ -21,6 +21,7 @@
#include <QtGlobal>
#include <QWidget>
#include <QMap>
#include <QString>
#include <QStackedWidget>
#include <QContextMenuEvent>
@@ -62,7 +63,7 @@ InternetSongsView::InternetSongsView(Application *app, InternetService *service,
ui_->filter_widget->AddMenuAction(action_configure);
QObject::connect(ui_->view, &InternetCollectionView::GetSongs, this, &InternetSongsView::GetSongs);
QObject::connect(ui_->view, &InternetCollectionView::RemoveSongs, service_, &InternetService::RemoveSongs);
QObject::connect(ui_->view, &InternetCollectionView::RemoveSongs, service_, QOverload<SongList>::of(&InternetService::RemoveSongs));
QObject::connect(ui_->refresh, &QPushButton::clicked, this, &InternetSongsView::GetSongs);
QObject::connect(ui_->close, &QPushButton::clicked, this, &InternetSongsView::AbortGetSongs);
@@ -121,7 +122,7 @@ void InternetSongsView::AbortGetSongs() {
}
void InternetSongsView::SongsFinished(const SongList &songs, const QString &error) {
void InternetSongsView::SongsFinished(const SongMap &songs, const QString &error) {
if (songs.isEmpty() && !error.isEmpty()) {
ui_->status->setText(error);
@@ -131,10 +132,9 @@ void InternetSongsView::SongsFinished(const SongList &songs, const QString &erro
ui_->close->show();
}
else {
service_->songs_collection_backend()->DeleteAll();
ui_->stacked->setCurrentWidget(ui_->internetcollection_page);
ui_->status->clear();
service_->songs_collection_backend()->AddOrUpdateSongsAsync(songs);
service_->songs_collection_backend()->UpdateSongsBySongIDAsync(songs);
}
}

View File

@@ -24,6 +24,7 @@
#include <QObject>
#include <QWidget>
#include <QMap>
#include <QString>
#include "core/song.h"
@@ -51,7 +52,7 @@ class InternetSongsView : public QWidget {
void OpenSettingsDialog();
void GetSongs();
void AbortGetSongs();
void SongsFinished(const SongList &songs, const QString &error);
void SongsFinished(const SongMap &songs, const QString &error);
private:
Application *app_;

View File

@@ -21,6 +21,7 @@
#include <QtGlobal>
#include <QWidget>
#include <QMap>
#include <QVariant>
#include <QString>
#include <QLabel>
@@ -137,7 +138,7 @@ InternetTabsView::InternetTabsView(Application *app, InternetService *service, c
ui_->songs_collection->filter_widget()->AddMenuAction(action_configure);
QObject::connect(ui_->songs_collection->view(), &InternetCollectionView::GetSongs, this, &InternetTabsView::GetSongs);
QObject::connect(ui_->songs_collection->view(), &InternetCollectionView::RemoveSongs, service_, &InternetService::RemoveSongs);
QObject::connect(ui_->songs_collection->view(), &InternetCollectionView::RemoveSongs, service_, QOverload<SongList>::of(&InternetService::RemoveSongs));
QObject::connect(ui_->songs_collection->button_refresh(), &QPushButton::clicked, this, &InternetTabsView::GetSongs);
QObject::connect(ui_->songs_collection->button_close(), &QPushButton::clicked, this, &InternetTabsView::AbortGetSongs);
@@ -230,7 +231,7 @@ void InternetTabsView::AbortGetArtists() {
}
void InternetTabsView::ArtistsFinished(const SongList &songs, const QString &error) {
void InternetTabsView::ArtistsFinished(const SongMap &songs, const QString &error) {
if (songs.isEmpty() && !error.isEmpty()) {
ui_->artists_collection->status()->setText(error);
@@ -240,10 +241,9 @@ void InternetTabsView::ArtistsFinished(const SongList &songs, const QString &err
ui_->artists_collection->button_close()->show();
}
else {
service_->artists_collection_backend()->DeleteAll();
ui_->artists_collection->stacked()->setCurrentWidget(ui_->artists_collection->internetcollection_page());
ui_->artists_collection->status()->clear();
service_->artists_collection_backend()->AddOrUpdateSongsAsync(songs);
service_->artists_collection_backend()->UpdateSongsBySongIDAsync(songs);
}
}
@@ -273,7 +273,7 @@ void InternetTabsView::AbortGetAlbums() {
}
void InternetTabsView::AlbumsFinished(const SongList &songs, const QString &error) {
void InternetTabsView::AlbumsFinished(const SongMap &songs, const QString &error) {
if (songs.isEmpty() && !error.isEmpty()) {
ui_->albums_collection->status()->setText(error);
@@ -283,10 +283,9 @@ void InternetTabsView::AlbumsFinished(const SongList &songs, const QString &erro
ui_->albums_collection->button_close()->show();
}
else {
service_->albums_collection_backend()->DeleteAll();
ui_->albums_collection->stacked()->setCurrentWidget(ui_->albums_collection->internetcollection_page());
ui_->albums_collection->status()->clear();
service_->albums_collection_backend()->AddOrUpdateSongsAsync(songs);
service_->albums_collection_backend()->UpdateSongsBySongIDAsync(songs);
}
}
@@ -316,7 +315,7 @@ void InternetTabsView::AbortGetSongs() {
}
void InternetTabsView::SongsFinished(const SongList &songs, const QString &error) {
void InternetTabsView::SongsFinished(const SongMap &songs, const QString &error) {
if (songs.isEmpty() && !error.isEmpty()) {
ui_->songs_collection->status()->setText(error);
@@ -326,10 +325,9 @@ void InternetTabsView::SongsFinished(const SongList &songs, const QString &error
ui_->songs_collection->button_close()->show();
}
else {
service_->songs_collection_backend()->DeleteAll();
ui_->songs_collection->stacked()->setCurrentWidget(ui_->songs_collection->internetcollection_page());
ui_->songs_collection->status()->clear();
service_->songs_collection_backend()->AddOrUpdateSongsAsync(songs);
service_->songs_collection_backend()->UpdateSongsBySongIDAsync(songs);
}
}

View File

@@ -24,6 +24,7 @@
#include <QObject>
#include <QWidget>
#include <QMap>
#include <QString>
#include "settings/settingsdialog.h"
@@ -60,9 +61,9 @@ class InternetTabsView : public QWidget {
void AbortGetArtists();
void AbortGetAlbums();
void AbortGetSongs();
void ArtistsFinished(const SongList &songs, const QString &error);
void AlbumsFinished(const SongList &songs, const QString &error);
void SongsFinished(const SongList &songs, const QString &error);
void ArtistsFinished(const SongMap &songs, const QString &error);
void AlbumsFinished(const SongMap &songs, const QString &error);
void SongsFinished(const SongMap &songs, const QString &error);
private:
Application *app_;