Add tasks for indexing Google Drive songs.
This commit is contained in:
parent
a3f9947444
commit
c5b74c832e
@ -36,6 +36,24 @@ public:
|
||||
bool blocks_library_scans;
|
||||
};
|
||||
|
||||
class ScopedTask {
|
||||
public:
|
||||
ScopedTask(const int task_id, TaskManager* task_manager)
|
||||
: task_id_(task_id),
|
||||
task_manager_(task_manager) {
|
||||
}
|
||||
|
||||
~ScopedTask() {
|
||||
task_manager_->SetTaskFinished(task_id_);
|
||||
}
|
||||
|
||||
private:
|
||||
const int task_id_;
|
||||
TaskManager* task_manager_;
|
||||
|
||||
Q_DISABLE_COPY(ScopedTask);
|
||||
};
|
||||
|
||||
// Everything here is thread safe
|
||||
QList<Task> GetTasks();
|
||||
|
||||
@ -56,6 +74,8 @@ private:
|
||||
QMutex mutex_;
|
||||
QMap<int, Task> tasks_;
|
||||
int next_task_id_;
|
||||
|
||||
Q_DISABLE_COPY(TaskManager);
|
||||
};
|
||||
|
||||
#endif // TASKMANAGER_H
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "core/database.h"
|
||||
#include "core/mergedproxymodel.h"
|
||||
#include "core/player.h"
|
||||
#include "core/taskmanager.h"
|
||||
#include "core/timeconstants.h"
|
||||
#include "globalsearch/globalsearch.h"
|
||||
#include "globalsearch/librarysearchprovider.h"
|
||||
@ -33,6 +34,7 @@ GoogleDriveService::GoogleDriveService(Application* app, InternetModel* parent)
|
||||
: InternetService(kServiceName, app, parent, parent),
|
||||
root_(NULL),
|
||||
client_(new google_drive::Client(this)),
|
||||
task_manager_(app->task_manager()),
|
||||
library_sort_model_(new QSortFilterProxyModel(this)) {
|
||||
library_backend_ = new LibraryBackend;
|
||||
library_backend_->moveToThread(app_->database()->thread());
|
||||
@ -127,6 +129,9 @@ void GoogleDriveService::MaybeAddFileToDatabase(const google_drive::File& file)
|
||||
return;
|
||||
}
|
||||
|
||||
const int task_id = task_manager_->StartTask(
|
||||
tr("Indexing %1").arg(file.title()));
|
||||
|
||||
// Song not in index; tag and add.
|
||||
TagReaderClient::ReplyType* reply = app_->tag_reader_client()->ReadGoogleDrive(
|
||||
file.download_url(),
|
||||
@ -136,15 +141,18 @@ void GoogleDriveService::MaybeAddFileToDatabase(const google_drive::File& file)
|
||||
client_->access_token());
|
||||
|
||||
NewClosure(reply, SIGNAL(Finished(bool)),
|
||||
this, SLOT(ReadTagsFinished(TagReaderClient::ReplyType*,google_drive::File,QString)),
|
||||
reply, file, url);
|
||||
this, SLOT(ReadTagsFinished(TagReaderClient::ReplyType*,google_drive::File,QString,int)),
|
||||
reply, file, url, task_id);
|
||||
}
|
||||
|
||||
void GoogleDriveService::ReadTagsFinished(TagReaderClient::ReplyType* reply,
|
||||
const google_drive::File& metadata,
|
||||
const QString& url) {
|
||||
const QString& url,
|
||||
const int task_id) {
|
||||
reply->deleteLater();
|
||||
|
||||
TaskManager::ScopedTask(task_id, task_manager_);
|
||||
|
||||
const pb::tagreader::ReadGoogleDriveResponse& msg =
|
||||
reply->message().read_google_drive_response();
|
||||
if (!msg.has_metadata() || !msg.metadata().filesize()) {
|
||||
|
@ -10,6 +10,7 @@ class QStandardItem;
|
||||
|
||||
class LibraryBackend;
|
||||
class LibraryModel;
|
||||
class TaskManager;
|
||||
class QSortFilterProxyModel;
|
||||
|
||||
namespace google_drive {
|
||||
@ -40,7 +41,8 @@ class GoogleDriveService : public InternetService {
|
||||
void ListFilesFinished(google_drive::ListFilesResponse* response);
|
||||
void ReadTagsFinished(TagReaderClient::ReplyType* reply,
|
||||
const google_drive::File& metadata,
|
||||
const QString& url);
|
||||
const QString& url,
|
||||
const int task_id);
|
||||
|
||||
private:
|
||||
void Connect();
|
||||
@ -53,6 +55,7 @@ class GoogleDriveService : public InternetService {
|
||||
google_drive::Client* client_;
|
||||
|
||||
NetworkAccessManager network_;
|
||||
TaskManager* task_manager_;
|
||||
|
||||
LibraryBackend* library_backend_;
|
||||
LibraryModel* library_model_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user