Add a cover manager for the Google Drive library.
This commit is contained in:
parent
a7ca176d31
commit
07abe82ef3
@ -13,10 +13,12 @@
|
||||
#include "core/player.h"
|
||||
#include "core/taskmanager.h"
|
||||
#include "core/timeconstants.h"
|
||||
#include "ui/albumcovermanager.h"
|
||||
#include "globalsearch/globalsearch.h"
|
||||
#include "globalsearch/librarysearchprovider.h"
|
||||
#include "library/librarybackend.h"
|
||||
#include "library/librarymodel.h"
|
||||
#include "playlist/playlist.h"
|
||||
#include "ui/iconloader.h"
|
||||
#include "googledriveclient.h"
|
||||
#include "googledriveurlhandler.h"
|
||||
@ -39,7 +41,8 @@ GoogleDriveService::GoogleDriveService(Application* app, InternetModel* parent)
|
||||
root_(NULL),
|
||||
client_(new google_drive::Client(this)),
|
||||
task_manager_(app->task_manager()),
|
||||
library_sort_model_(new QSortFilterProxyModel(this)) {
|
||||
library_sort_model_(new QSortFilterProxyModel(this)),
|
||||
playlist_manager_(app->playlist_manager()) {
|
||||
library_backend_ = new LibraryBackend;
|
||||
library_backend_->moveToThread(app_->database()->thread());
|
||||
library_backend_->Init(app_->database(), kSongsTable,
|
||||
@ -245,6 +248,11 @@ void GoogleDriveService::ShowContextMenu(const QPoint& global_pos) {
|
||||
QIcon(":/providers/googledrive.png"), tr("Open in Google Drive"),
|
||||
this, SLOT(OpenWithDrive()));
|
||||
context_menu_->addSeparator();
|
||||
context_menu_->addAction(
|
||||
IconLoader::Load("download"),
|
||||
tr("Cover Manager"),
|
||||
this,
|
||||
SLOT(ShowCoverManager()));
|
||||
context_menu_->addAction(IconLoader::Load("configure"),
|
||||
tr("Configure..."),
|
||||
this, SLOT(ShowSettingsDialog()));
|
||||
@ -285,3 +293,18 @@ void GoogleDriveService::OpenWithDrive() {
|
||||
void GoogleDriveService::ShowSettingsDialog() {
|
||||
app_->OpenSettingsDialogAtPage(SettingsDialog::Page_GoogleDrive);
|
||||
}
|
||||
|
||||
void GoogleDriveService::ShowCoverManager() {
|
||||
if (!cover_manager_) {
|
||||
cover_manager_.reset(new AlbumCoverManager(app_, library_backend_));
|
||||
cover_manager_->Init();
|
||||
connect(cover_manager_.get(), SIGNAL(AddToPlaylist(QMimeData*)), SLOT(AddToPlaylist(QMimeData*)));
|
||||
}
|
||||
|
||||
cover_manager_->show();
|
||||
}
|
||||
|
||||
void GoogleDriveService::AddToPlaylist(QMimeData* mime) {
|
||||
playlist_manager_->current()->dropMimeData(
|
||||
mime, Qt::CopyAction, -1, 0, QModelIndex());
|
||||
}
|
||||
|
@ -8,8 +8,10 @@
|
||||
|
||||
class QStandardItem;
|
||||
|
||||
class AlbumCoverManager;
|
||||
class LibraryBackend;
|
||||
class LibraryModel;
|
||||
class PlaylistManager;
|
||||
class TaskManager;
|
||||
class QSortFilterProxyModel;
|
||||
|
||||
@ -56,6 +58,8 @@ class GoogleDriveService : public InternetService {
|
||||
|
||||
void OpenWithDrive();
|
||||
void ShowSettingsDialog();
|
||||
void ShowCoverManager();
|
||||
void AddToPlaylist(QMimeData* mime);
|
||||
|
||||
private:
|
||||
void EnsureConnected();
|
||||
@ -73,11 +77,14 @@ class GoogleDriveService : public InternetService {
|
||||
LibraryBackend* library_backend_;
|
||||
LibraryModel* library_model_;
|
||||
QSortFilterProxyModel* library_sort_model_;
|
||||
PlaylistManager* playlist_manager_;
|
||||
|
||||
int indexing_task_id_;
|
||||
|
||||
boost::scoped_ptr<QMenu> context_menu_;
|
||||
QAction* open_in_drive_action_;
|
||||
|
||||
boost::scoped_ptr<AlbumCoverManager> cover_manager_;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -51,6 +51,7 @@
|
||||
const char* AlbumCoverManager::kSettingsGroup = "CoverManager";
|
||||
|
||||
AlbumCoverManager::AlbumCoverManager(Application* app,
|
||||
LibraryBackend* library_backend,
|
||||
QWidget* parent,
|
||||
QNetworkAccessManager* network)
|
||||
: QMainWindow(parent),
|
||||
@ -63,7 +64,8 @@ AlbumCoverManager::AlbumCoverManager(Application* app,
|
||||
all_artists_icon_(IconLoader::Load("x-clementine-album")),
|
||||
context_menu_(new QMenu(this)),
|
||||
progress_bar_(new QProgressBar(this)),
|
||||
jobs_(0)
|
||||
jobs_(0),
|
||||
library_backend_(library_backend)
|
||||
{
|
||||
ui_->setupUi(this);
|
||||
ui_->albums->set_cover_manager(this);
|
||||
@ -110,7 +112,7 @@ AlbumCoverManager::~AlbumCoverManager() {
|
||||
}
|
||||
|
||||
LibraryBackend* AlbumCoverManager::backend() const {
|
||||
return app_->library_backend();
|
||||
return library_backend_;
|
||||
}
|
||||
|
||||
void AlbumCoverManager::Init() {
|
||||
@ -244,7 +246,7 @@ void AlbumCoverManager::Reset() {
|
||||
new QListWidgetItem(all_artists_icon_, tr("All artists"), ui_->artists, All_Artists);
|
||||
new QListWidgetItem(artist_icon_, tr("Various artists"), ui_->artists, Various_Artists);
|
||||
|
||||
QStringList artists(app_->library_backend()->GetAllArtistsWithAlbums());
|
||||
QStringList artists(library_backend_->GetAllArtistsWithAlbums());
|
||||
qStableSort(artists.begin(), artists.end(), CompareNocase);
|
||||
|
||||
foreach (const QString& artist, artists) {
|
||||
@ -275,10 +277,10 @@ void AlbumCoverManager::ArtistChanged(QListWidgetItem* current) {
|
||||
// selected in the artist list.
|
||||
LibraryBackend::AlbumList albums;
|
||||
switch (current->type()) {
|
||||
case Various_Artists: albums = app_->library_backend()->GetCompilationAlbums(); break;
|
||||
case Specific_Artist: albums = app_->library_backend()->GetAlbumsByArtist(current->text()); break;
|
||||
case Various_Artists: albums = library_backend_->GetCompilationAlbums(); break;
|
||||
case Specific_Artist: albums = library_backend_->GetAlbumsByArtist(current->text()); break;
|
||||
case All_Artists:
|
||||
default: albums = app_->library_backend()->GetAllAlbums(); break;
|
||||
default: albums = library_backend_->GetAllAlbums(); break;
|
||||
}
|
||||
|
||||
// Sort by album name. The list is already sorted by sqlite but it was done
|
||||
@ -634,7 +636,7 @@ SongList AlbumCoverManager::GetSongsInAlbum(const QModelIndex& index) const {
|
||||
if (!artist.isEmpty())
|
||||
q.AddWhere("artist", artist);
|
||||
|
||||
if (!app_->library_backend()->ExecQuery(&q))
|
||||
if (!library_backend_->ExecQuery(&q))
|
||||
return ret;
|
||||
|
||||
while (q.Next()) {
|
||||
@ -659,7 +661,7 @@ SongMimeData* AlbumCoverManager::GetMimeDataForAlbums(const QModelIndexList& ind
|
||||
return NULL;
|
||||
|
||||
SongMimeData* data = new SongMimeData;
|
||||
data->backend = app_->library_backend();
|
||||
data->backend = library_backend_;
|
||||
data->songs = songs;
|
||||
return data;
|
||||
}
|
||||
@ -691,7 +693,7 @@ void AlbumCoverManager::SaveAndSetCover(QListWidgetItem *item, const QImage &ima
|
||||
QString path = album_cover_choice_controller_->SaveCoverInCache(artist, album, image);
|
||||
|
||||
// Save the image in the database
|
||||
app_->library_backend()->UpdateManualAlbumArtAsync(artist, album, path);
|
||||
library_backend_->UpdateManualAlbumArtAsync(artist, album, path);
|
||||
|
||||
// Update the icon in our list
|
||||
quint64 id = app_->album_cover_loader()->LoadImageAsync(
|
||||
|
@ -45,6 +45,7 @@ class AlbumCoverManager : public QMainWindow {
|
||||
Q_OBJECT
|
||||
public:
|
||||
AlbumCoverManager(Application* app,
|
||||
LibraryBackend* library_backend,
|
||||
QWidget* parent = 0,
|
||||
QNetworkAccessManager* network = 0);
|
||||
~AlbumCoverManager();
|
||||
@ -168,6 +169,8 @@ class AlbumCoverManager : public QMainWindow {
|
||||
QProgressBar* progress_bar_;
|
||||
int jobs_;
|
||||
|
||||
LibraryBackend* library_backend_;
|
||||
|
||||
FRIEND_TEST(AlbumCoverManagerTest, HidesItemsWithCover);
|
||||
FRIEND_TEST(AlbumCoverManagerTest, HidesItemsWithoutCover);
|
||||
FRIEND_TEST(AlbumCoverManagerTest, HidesItemsWithFilter);
|
||||
|
@ -1902,7 +1902,7 @@ void MainWindow::ChangeLibraryQueryMode(QAction* action) {
|
||||
|
||||
void MainWindow::ShowCoverManager() {
|
||||
if (!cover_manager_) {
|
||||
cover_manager_.reset(new AlbumCoverManager(app_));
|
||||
cover_manager_.reset(new AlbumCoverManager(app_, app_->library_backend()));
|
||||
cover_manager_->Init();
|
||||
|
||||
// Cover manager connections
|
||||
|
Loading…
x
Reference in New Issue
Block a user