Add new method for updating songs based on song ID
Show status updating database. Fixes #750
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QAbstractItemView>
|
||||
#include <QItemSelectionModel>
|
||||
#include <QMap>
|
||||
#include <QVariant>
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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_;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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_;
|
||||
|
||||
Reference in New Issue
Block a user