Add log to organise error dialog

This commit is contained in:
Jonas Kvinge
2019-01-24 19:20:10 +01:00
parent 3483736490
commit cb844084e8
10 changed files with 57 additions and 23 deletions

View File

@@ -28,12 +28,14 @@
#include <QString> #include <QString>
#include <QStringBuilder> #include <QStringBuilder>
#include <QUrl> #include <QUrl>
#include <QStandardPaths>
#include <QtDebug> #include <QtDebug>
#include "core/logging.h" #include "core/logging.h"
#include "core/utilities.h" #include "core/utilities.h"
#include "core/taskmanager.h" #include "core/taskmanager.h"
#include "core/musicstorage.h" #include "core/musicstorage.h"
#include "core/tagreaderclient.h"
#include "organise.h" #include "organise.h"
#ifdef HAVE_GSTREAMER #ifdef HAVE_GSTREAMER
# include "transcoder/transcoder.h" # include "transcoder/transcoder.h"
@@ -88,6 +90,7 @@ void Organise::Start() {
connect(thread_, SIGNAL(started()), SLOT(ProcessSomeFiles())); connect(thread_, SIGNAL(started()), SLOT(ProcessSomeFiles()));
#ifdef HAVE_GSTREAMER #ifdef HAVE_GSTREAMER
connect(transcoder_, SIGNAL(JobComplete(QString, QString, bool)), SLOT(FileTranscoded(QString, QString, bool))); connect(transcoder_, SIGNAL(JobComplete(QString, QString, bool)), SLOT(FileTranscoded(QString, QString, bool)));
connect(transcoder_, SIGNAL(LogLine(QString)), SLOT(LogLine(QString)));
#endif #endif
moveToThread(thread_); moveToThread(thread_);
@@ -97,6 +100,7 @@ void Organise::Start() {
void Organise::ProcessSomeFiles() { void Organise::ProcessSomeFiles() {
if (!started_) { if (!started_) {
transcode_temp_name_.setFileTemplate(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/transcoder");
#ifdef HAVE_GSTREAMER #ifdef HAVE_GSTREAMER
transcode_temp_name_.open(); transcode_temp_name_.open();
#endif #endif
@@ -127,7 +131,7 @@ void Organise::ProcessSomeFiles() {
task_manager_->SetTaskFinished(task_id_); task_manager_->SetTaskFinished(task_id_);
emit Finished(files_with_errors_); emit Finished(files_with_errors_, log_);
// Move back to the original thread so deleteLater() can get called in the main thread's event loop // Move back to the original thread so deleteLater() can get called in the main thread's event loop
moveToThread(original_thread_); moveToThread(original_thread_);
@@ -151,6 +155,10 @@ void Organise::ProcessSomeFiles() {
Song song = task.song_info_.song_; Song song = task.song_info_.song_;
if (!song.is_valid()) continue; if (!song.is_valid()) continue;
// Get embedded album cover
QImage cover = TagReaderClient::Instance()->LoadEmbeddedArtBlocking(task.song_info_.song_.url().toLocalFile());
if (!cover.isNull()) song.set_image(cover);
#ifdef HAVE_GSTREAMER #ifdef HAVE_GSTREAMER
// Maybe this file is one that's been transcoded already? // Maybe this file is one that's been transcoded already?
if (!task.transcoded_filename_.isEmpty()) { if (!task.transcoded_filename_.isEmpty()) {
@@ -202,7 +210,8 @@ void Organise::ProcessSomeFiles() {
if (!destination_->CopyToStorage(job)) { if (!destination_->CopyToStorage(job)) {
files_with_errors_ << task.song_info_.song_.basefilename(); files_with_errors_ << task.song_info_.song_.basefilename();
} else { }
else {
if (job.mark_as_listened_) { if (job.mark_as_listened_) {
emit FileCopied(job.metadata_.id()); emit FileCopied(job.metadata_.id());
} }
@@ -320,3 +329,9 @@ void Organise::timerEvent(QTimerEvent *e) {
} }
void Organise::LogLine(const QString message) {
QString date(QDateTime::currentDateTime().toString(Qt::TextDate));
log_.append(QString("%1: %2").arg(date, message));
}

View File

@@ -28,14 +28,14 @@
#include <QObject> #include <QObject>
#include <QThread> #include <QThread>
#include <QTemporaryFile>
#include <QBasicTimer> #include <QBasicTimer>
#include <QList> #include <QList>
#include <QVector>
#include <QMap> #include <QMap>
#include <QSet> #include <QSet>
#include <QString> #include <QString>
#include <QStringList> #include <QStringList>
#include <QVector> #include <QTemporaryFile>
#include "core/song.h" #include "core/song.h"
#include "organiseformat.h" #include "organiseformat.h"
@@ -68,8 +68,8 @@ class Organise : public QObject {
void Start(); void Start();
signals: signals:
void Finished(const QStringList &files_with_errors); void Finished(const QStringList &files_with_errors, QStringList);
void FileCopied(int database_id); void FileCopied(int database_id);
protected: protected:
@@ -80,6 +80,7 @@ signals:
#ifdef HAVE_GSTREAMER #ifdef HAVE_GSTREAMER
void FileTranscoded(const QString &input, const QString &output, bool success); void FileTranscoded(const QString &input, const QString &output, bool success);
#endif #endif
void LogLine(const QString message);
private: private:
void SetSongProgress(float progress, bool transcoded = false); void SetSongProgress(float progress, bool transcoded = false);
@@ -136,6 +137,7 @@ signals:
int current_copy_progress_; int current_copy_progress_;
QStringList files_with_errors_; QStringList files_with_errors_;
QStringList log_;
}; };
#endif // ORGANISE_H #endif // ORGANISE_H

View File

@@ -383,18 +383,18 @@ void OrganiseDialog::accept() {
// It deletes itself when it's finished. // It deletes itself when it's finished.
const bool copy = ui_->aftercopying->currentIndex() == 0; const bool copy = ui_->aftercopying->currentIndex() == 0;
Organise *organise = new Organise(task_manager_, storage, format_, copy, ui_->overwrite->isChecked(), ui_->mark_as_listened->isChecked(), new_songs_info_, ui_->eject_after->isChecked()); Organise *organise = new Organise(task_manager_, storage, format_, copy, ui_->overwrite->isChecked(), ui_->mark_as_listened->isChecked(), new_songs_info_, ui_->eject_after->isChecked());
connect(organise, SIGNAL(Finished(QStringList)), SLOT(OrganiseFinished(QStringList))); connect(organise, SIGNAL(Finished(QStringList, QStringList)), SLOT(OrganiseFinished(QStringList, QStringList)));
connect(organise, SIGNAL(FileCopied(int)), this, SIGNAL(FileCopied(int))); connect(organise, SIGNAL(FileCopied(int)), this, SIGNAL(FileCopied(int)));
organise->Start(); organise->Start();
QDialog::accept(); QDialog::accept();
} }
void OrganiseDialog::OrganiseFinished(const QStringList &files_with_errors) { void OrganiseDialog::OrganiseFinished(const QStringList files_with_errors, const QStringList log) {
if (files_with_errors.isEmpty()) return; if (files_with_errors.isEmpty()) return;
error_dialog_.reset(new OrganiseErrorDialog); error_dialog_.reset(new OrganiseErrorDialog);
error_dialog_->Show(OrganiseErrorDialog::Type_Copy, files_with_errors); error_dialog_->Show(OrganiseErrorDialog::Type_Copy, files_with_errors, log);
} }
void OrganiseDialog::resizeEvent(QResizeEvent *e) { void OrganiseDialog::resizeEvent(QResizeEvent *e) {

View File

@@ -88,7 +88,7 @@ class OrganiseDialog : public QDialog {
void InsertTag(const QString &tag); void InsertTag(const QString &tag);
void UpdatePreviews(); void UpdatePreviews();
void OrganiseFinished(const QStringList &files_with_errors); void OrganiseFinished(const QStringList files_with_errors, const QStringList log);
private: private:
SongList LoadSongsBlocking(const QStringList &filenames); SongList LoadSongsBlocking(const QStringList &filenames);

View File

@@ -52,17 +52,17 @@ OrganiseErrorDialog::~OrganiseErrorDialog() {
delete ui_; delete ui_;
} }
void OrganiseErrorDialog::Show(OperationType type, const SongList &songs_with_errors) { void OrganiseErrorDialog::Show(OperationType type, const SongList &songs_with_errors, const QStringList &log) {
QStringList files; QStringList files;
for (const Song &song : songs_with_errors) { for (const Song &song : songs_with_errors) {
files << song.url().toLocalFile(); files << song.url().toLocalFile();
} }
Show(type, files); Show(type, files, log);
} }
void OrganiseErrorDialog::Show(OperationType type, const QStringList &files_with_errors) { void OrganiseErrorDialog::Show(OperationType type, const QStringList &files_with_errors, const QStringList &log) {
QStringList sorted_files = files_with_errors; QStringList sorted_files = files_with_errors;
std::stable_sort(sorted_files.begin(), sorted_files.end()); std::stable_sort(sorted_files.begin(), sorted_files.end());
@@ -79,7 +79,8 @@ void OrganiseErrorDialog::Show(OperationType type, const QStringList &files_with
break; break;
} }
ui_->list->addItems(sorted_files); ui_->files->addItems(sorted_files);
ui_->log->addItems(log);
show(); show();
} }

View File

@@ -45,8 +45,8 @@ class OrganiseErrorDialog : public QDialog {
Type_Delete, Type_Delete,
}; };
void Show(OperationType type, const SongList& songs_with_errors); void Show(OperationType type, const SongList &songs_with_errors, const QStringList &log = QStringList());
void Show(OperationType type, const QStringList &files_with_errors); void Show(OperationType type, const QStringList &files_with_errors, const QStringList &log = QStringList());
private: private:
Ui_OrganiseErrorDialog *ui_; Ui_OrganiseErrorDialog *ui_;

View File

@@ -12,12 +12,12 @@
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="layout_left">
<item> <item>
<widget class="QLabel" name="icon"/> <widget class="QLabel" name="icon"/>
</item> </item>
<item> <item>
<spacer name="verticalSpacer"> <spacer name="spacer_left">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>
@@ -32,12 +32,28 @@
</layout> </layout>
</item> </item>
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="layout_centre">
<item> <item>
<widget class="QLabel" name="label"/> <widget class="QLabel" name="label"/>
</item> </item>
<item> <item>
<widget class="QListWidget" name="list"/> <widget class="QListWidget" name="files"/>
</item>
<item>
<widget class="QListWidget" name="log"/>
</item>
<item>
<spacer name="spacer_bottom">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item> </item>
<item> <item>
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">

View File

@@ -303,7 +303,7 @@ void TranscodeDialog::SetFilenames(const QStringList &filenames) {
void TranscodeDialog::Remove() { qDeleteAll(ui_->files->selectedItems()); } void TranscodeDialog::Remove() { qDeleteAll(ui_->files->selectedItems()); }
void TranscodeDialog::LogLine(const QString &message) { void TranscodeDialog::LogLine(const QString message) {
QString date(QDateTime::currentDateTime().toString(Qt::TextDate)); QString date(QDateTime::currentDateTime().toString(Qt::TextDate));
log_ui_->log->appendPlainText(QString("%1: %2").arg(date, message)); log_ui_->log->appendPlainText(QString("%1: %2").arg(date, message));

View File

@@ -62,8 +62,8 @@ class TranscodeDialog : public QDialog {
void Start(); void Start();
void Cancel(); void Cancel();
void JobComplete(const QString &input, const QString &output, bool success); void JobComplete(const QString &input, const QString &output, bool success);
void LogLine(const QString &message);
void AllJobsComplete(); void AllJobsComplete();
void LogLine(const QString message);
void Options(); void Options();
void AddDestination(); void AddDestination();

View File

@@ -75,7 +75,7 @@ class Transcoder : public QObject {
void Start(); void Start();
void Cancel(); void Cancel();
signals: signals:
void JobComplete(const QString &input, const QString &output, bool success); void JobComplete(const QString &input, const QString &output, bool success);
void LogLine(const QString &message); void LogLine(const QString &message);
void AllJobsComplete(); void AllJobsComplete();