Show the scanning progress in the device view
This commit is contained in:
parent
6c51858554
commit
2762d80722
@ -35,9 +35,11 @@ public:
|
||||
|
||||
DeviceLister* lister() const { return lister_; }
|
||||
QString unique_id() const { return unique_id_; }
|
||||
|
||||
LibraryModel* model() const { return model_; }
|
||||
|
||||
signals:
|
||||
void TaskStarted(int id);
|
||||
|
||||
protected:
|
||||
DeviceLister* lister_;
|
||||
QString unique_id_;
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "devicedatabasebackend.h"
|
||||
#include "devicemanager.h"
|
||||
#include "devicekitlister.h"
|
||||
#include "core/taskmanager.h"
|
||||
#include "core/utilities.h"
|
||||
#include "ui/iconloader.h"
|
||||
|
||||
@ -29,7 +30,8 @@ const int DeviceManager::kDeviceIconOverlaySize = 16;
|
||||
|
||||
DeviceManager::DeviceInfo::DeviceInfo()
|
||||
: database_id_(-1),
|
||||
lister_(NULL)
|
||||
lister_(NULL),
|
||||
task_percentage_(-1)
|
||||
{
|
||||
}
|
||||
|
||||
@ -80,6 +82,8 @@ DeviceManager::DeviceManager(BackgroundThread<Database>* database,
|
||||
task_manager_(task_manager),
|
||||
not_connected_overlay_(IconLoader::Load("edit-delete"))
|
||||
{
|
||||
connect(task_manager_, SIGNAL(TasksChanged()), SLOT(TasksChanged()));
|
||||
|
||||
// Create the backend in the database thread
|
||||
backend_ = database_->CreateInThread<DeviceDatabaseBackend>();
|
||||
backend_->Init(database_->Worker());
|
||||
@ -152,6 +156,11 @@ QVariant DeviceManager::data(const QModelIndex& index, int role) const {
|
||||
return State_NotConnected;
|
||||
return State_Remembered;
|
||||
|
||||
case Role_UpdatingPercentage:
|
||||
if (info.task_percentage_ == -1)
|
||||
return QVariant();
|
||||
return info.task_percentage_;
|
||||
|
||||
default:
|
||||
return QVariant();
|
||||
}
|
||||
@ -261,8 +270,10 @@ boost::shared_ptr<ConnectedDevice> DeviceManager::Connect(int row) {
|
||||
info.database_id_ = backend_->AddDevice(info.SaveToDb());
|
||||
}
|
||||
|
||||
info.device_ = info.lister_->Connect(info.unique_id_, this, info.database_id_,
|
||||
first_time);
|
||||
info.device_ = info.lister_->Connect(
|
||||
info.unique_id_, this, info.database_id_, first_time);
|
||||
connect(info.device_.get(), SIGNAL(TaskStarted(int)), SLOT(DeviceTaskStarted(int)));
|
||||
|
||||
return info.device_;
|
||||
}
|
||||
|
||||
@ -334,3 +345,50 @@ void DeviceManager::SetDeviceIdentity(int row, const QString &friendly_name,
|
||||
if (info.database_id_ != -1)
|
||||
backend_->SetDeviceIdentity(info.database_id_, friendly_name, icon_name);
|
||||
}
|
||||
|
||||
void DeviceManager::DeviceTaskStarted(int id) {
|
||||
ConnectedDevice* device = qobject_cast<ConnectedDevice*>(sender());
|
||||
if (!device)
|
||||
return;
|
||||
|
||||
for (int i=0 ; i<devices_.count() ; ++i) {
|
||||
DeviceInfo& info = devices_[i];
|
||||
if (info.device_.get() == device) {
|
||||
active_tasks_[id] = index(i);
|
||||
info.task_percentage_ = 0;
|
||||
emit dataChanged(index(i), index(i));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DeviceManager::TasksChanged() {
|
||||
QList<TaskManager::Task> tasks = task_manager_->GetTasks();
|
||||
QList<QPersistentModelIndex> finished_tasks = active_tasks_.values();
|
||||
|
||||
foreach (const TaskManager::Task& task, tasks) {
|
||||
if (!active_tasks_.contains(task.id))
|
||||
continue;
|
||||
|
||||
QPersistentModelIndex index = active_tasks_[task.id];
|
||||
if (!index.isValid())
|
||||
continue;
|
||||
|
||||
DeviceInfo& info = devices_[index.row()];
|
||||
if (task.progress_max)
|
||||
info.task_percentage_ = float(task.progress) / task.progress_max * 100;
|
||||
else
|
||||
info.task_percentage_ = 0;
|
||||
emit dataChanged(index, index);
|
||||
finished_tasks.removeAll(index);
|
||||
}
|
||||
|
||||
foreach (const QPersistentModelIndex& index, finished_tasks) {
|
||||
if (!index.isValid())
|
||||
continue;
|
||||
|
||||
DeviceInfo& info = devices_[index.row()];
|
||||
info.task_percentage_ = -1;
|
||||
emit dataChanged(index, index);
|
||||
}
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public:
|
||||
Role_FriendlyName,
|
||||
Role_Capacity,
|
||||
Role_IconName,
|
||||
Role_UpdatingPercentage,
|
||||
};
|
||||
|
||||
enum State {
|
||||
@ -85,6 +86,8 @@ private slots:
|
||||
void PhysicalDeviceAdded(const QString& id);
|
||||
void PhysicalDeviceRemoved(const QString& id);
|
||||
void PhysicalDeviceChanged(const QString& id);
|
||||
void DeviceTaskStarted(int id);
|
||||
void TasksChanged();
|
||||
|
||||
private:
|
||||
// Devices can be in three different states:
|
||||
@ -114,6 +117,8 @@ private:
|
||||
|
||||
QString icon_name_;
|
||||
QIcon icon_;
|
||||
|
||||
int task_percentage_;
|
||||
};
|
||||
|
||||
void AddLister(DeviceLister* lister);
|
||||
@ -129,6 +134,9 @@ private:
|
||||
|
||||
QList<DeviceLister*> listers_;
|
||||
QList<DeviceInfo> devices_;
|
||||
|
||||
// Map of task ID to device index
|
||||
QMap<int, QPersistentModelIndex> active_tasks_;
|
||||
};
|
||||
|
||||
#endif // DEVICEMANAGER_H
|
||||
|
@ -81,20 +81,29 @@ void DeviceItemDelegate::paint(QPainter* p, const QStyleOptionViewItem& opt, con
|
||||
|
||||
DeviceManager::State state =
|
||||
static_cast<DeviceManager::State>(index.data(DeviceManager::Role_State).toInt());
|
||||
switch (state) {
|
||||
case DeviceManager::State_Remembered:
|
||||
p->drawText(line2, Qt::AlignLeft | Qt::AlignTop, tr("Not connected"));
|
||||
break;
|
||||
QVariant progress = index.data(DeviceManager::Role_UpdatingPercentage);
|
||||
QString status_text;
|
||||
|
||||
case DeviceManager::State_NotConnected:
|
||||
p->drawText(line2, Qt::AlignLeft | Qt::AlignTop, tr("Double click to open"));
|
||||
break;
|
||||
if (progress.isValid()) {
|
||||
status_text = tr("Updating %1%...").arg(progress.toInt());
|
||||
} else {
|
||||
switch (state) {
|
||||
case DeviceManager::State_Remembered:
|
||||
status_text = tr("Not connected");
|
||||
break;
|
||||
|
||||
case DeviceManager::State_Connected:
|
||||
p->drawText(line2, Qt::AlignLeft | Qt::AlignTop, tr("Connected"));
|
||||
break;
|
||||
case DeviceManager::State_NotConnected:
|
||||
status_text = tr("Double click to open");
|
||||
break;
|
||||
|
||||
case DeviceManager::State_Connected:
|
||||
status_text = tr("Connected");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
p->drawText(line2, Qt::AlignLeft | Qt::AlignTop, status_text);
|
||||
|
||||
p->restore();
|
||||
}
|
||||
|
||||
|
@ -55,6 +55,7 @@ FilesystemDevice::FilesystemDevice(
|
||||
backend_, SLOT(AddOrUpdateSubdirs(SubdirectoryList)));
|
||||
connect(watcher, SIGNAL(CompilationsNeedUpdating()),
|
||||
backend_, SLOT(UpdateCompilations()));
|
||||
connect(watcher, SIGNAL(ScanStarted(int)), SIGNAL(TaskStarted(int)));
|
||||
|
||||
if (first_time)
|
||||
backend_->AddDirectory(mount_point);
|
||||
|
@ -74,6 +74,7 @@ LibraryWatcher::ScanTransaction::ScanTransaction(LibraryWatcher* watcher,
|
||||
description = tr("Updating %1").arg(watcher_->device_name_);
|
||||
|
||||
task_id_ = watcher_->task_manager_->StartTask(description);
|
||||
emit watcher_->ScanStarted(task_id_);
|
||||
}
|
||||
|
||||
LibraryWatcher::ScanTransaction::~ScanTransaction() {
|
||||
|
@ -55,6 +55,8 @@ class LibraryWatcher : public QObject {
|
||||
void SubdirsMTimeUpdated(const SubdirectoryList& subdirs);
|
||||
void CompilationsNeedUpdating();
|
||||
|
||||
void ScanStarted(int task_id);
|
||||
|
||||
public slots:
|
||||
void ReloadSettings();
|
||||
void AddDirectory(const Directory& dir, const SubdirectoryList& subdirs);
|
||||
|
@ -1540,6 +1540,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1544,6 +1544,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Aktualizuji knihovnu"
|
||||
|
||||
|
@ -1547,6 +1547,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Opdaterer bibliotek"
|
||||
|
||||
|
@ -1548,6 +1548,10 @@ msgstr "Musiksammlung beim Programmstart aktualisieren"
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Aktualisiere Musiksammlung"
|
||||
|
||||
|
@ -1556,6 +1556,10 @@ msgstr "Ενημέρωση της βιβλιοθήκης κατά την εκκ
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Ενημέρωση λίστας"
|
||||
|
||||
|
@ -1545,6 +1545,10 @@ msgstr "Update the library when Clementine starts"
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Updating library"
|
||||
|
||||
|
@ -1542,6 +1542,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Updating library"
|
||||
|
||||
|
@ -1554,6 +1554,10 @@ msgstr "Actualizar la colección cuando Clementine inicia"
|
||||
msgid "Updating %1"
|
||||
msgstr "Actualizando %1"
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Actualizando colección"
|
||||
|
||||
|
@ -1542,6 +1542,10 @@ msgstr "Päivitä kirjasto Clementine käynnistyessä"
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Päivitetään kirjastoa"
|
||||
|
||||
|
@ -1550,6 +1550,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Mise à jour de la bibliothèque"
|
||||
|
||||
|
@ -1542,6 +1542,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "A actualizar a biblioteca"
|
||||
|
||||
|
@ -1555,6 +1555,10 @@ msgstr "Aggiorna la raccolta all'avvio di Clementine"
|
||||
msgid "Updating %1"
|
||||
msgstr "Aggiornamento di %1"
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Aggiornamento raccolta"
|
||||
|
||||
|
@ -1542,6 +1542,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1544,6 +1544,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Oppdaterer bibliotek"
|
||||
|
||||
|
@ -1540,6 +1540,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1542,6 +1542,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Aktualizowanie biblioteki"
|
||||
|
||||
|
@ -1552,6 +1552,10 @@ msgstr "Actualizar biblioteca ao iniciar o Clementine"
|
||||
msgid "Updating %1"
|
||||
msgstr "Actualizando %1"
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "A actualizar a biblioteca"
|
||||
|
||||
|
@ -1553,6 +1553,10 @@ msgstr "Atualizar a biblioteca quando o Clementine iniciar"
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Atualizando biblioteca"
|
||||
|
||||
|
@ -1541,6 +1541,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Se actualizează biblioteca"
|
||||
|
||||
|
@ -1547,6 +1547,10 @@ msgstr "Обновить коллекцию при старте Clementine"
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Обновление библиотеки"
|
||||
|
||||
|
@ -1551,6 +1551,10 @@ msgstr "Aktualizovať zbierku pri zapnutí Clementine"
|
||||
msgid "Updating %1"
|
||||
msgstr "Aktualizovanie %1"
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Aktualizovanie zbierky"
|
||||
|
||||
|
@ -1547,6 +1547,10 @@ msgstr "Uppdatera biblioteket när Clementine startar"
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Uppdaterar bibliotek"
|
||||
|
||||
|
@ -1542,6 +1542,10 @@ msgstr "Clementine başladığında kütüphaneyi güncelle"
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1531,6 +1531,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1551,6 +1551,10 @@ msgstr "Оновлювати фонотеку під час запуску Cleme
|
||||
msgid "Updating %1"
|
||||
msgstr "Оновлення %1"
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr "Оновлення фонотеки"
|
||||
|
||||
|
@ -1540,6 +1540,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1540,6 +1540,10 @@ msgstr ""
|
||||
msgid "Updating %1"
|
||||
msgstr ""
|
||||
|
||||
#, qt-format
|
||||
msgid "Updating %1%..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Updating library"
|
||||
msgstr ""
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user