Show the scanning progress in the device view

This commit is contained in:
David Sansome 2010-07-04 15:56:08 +00:00
parent 6c51858554
commit 2762d80722
34 changed files with 203 additions and 14 deletions

View File

@ -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_;

View File

@ -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);
}
}

View File

@ -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

View File

@ -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();
}

View File

@ -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);

View File

@ -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() {

View File

@ -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);

View File

@ -1540,6 +1540,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr ""

View File

@ -1544,6 +1544,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr "Aktualizuji knihovnu"

View File

@ -1547,6 +1547,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr "Opdaterer bibliotek"

View File

@ -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"

View File

@ -1556,6 +1556,10 @@ msgstr "Ενημέρωση της βιβλιοθήκης κατά την εκκ
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr "Ενημέρωση λίστας"

View File

@ -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"

View File

@ -1542,6 +1542,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr "Updating library"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -1542,6 +1542,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr "A actualizar a biblioteca"

View File

@ -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"

View File

@ -1542,6 +1542,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr ""

View File

@ -1544,6 +1544,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr "Oppdaterer bibliotek"

View File

@ -1540,6 +1540,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr ""

View File

@ -1542,6 +1542,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr "Aktualizowanie biblioteki"

View File

@ -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"

View File

@ -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"

View File

@ -1541,6 +1541,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr "Se actualizează biblioteca"

View File

@ -1547,6 +1547,10 @@ msgstr "Обновить коллекцию при старте Clementine"
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr "Обновление библиотеки"

View File

@ -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"

View File

@ -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"

View File

@ -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 ""

View File

@ -1531,6 +1531,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr ""

View File

@ -1551,6 +1551,10 @@ msgstr "Оновлювати фонотеку під час запуску Cleme
msgid "Updating %1"
msgstr "Оновлення %1"
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr "Оновлення фонотеки"

View File

@ -1540,6 +1540,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr ""

View File

@ -1540,6 +1540,10 @@ msgstr ""
msgid "Updating %1"
msgstr ""
#, qt-format
msgid "Updating %1%..."
msgstr ""
msgid "Updating library"
msgstr ""