From 92a81948447be94ca691ba0a613c62a83b3b6def Mon Sep 17 00:00:00 2001 From: emeric Date: Tue, 5 Aug 2025 23:01:07 +0200 Subject: [PATCH] Added hopefully more details in image parsing errors, ref #723 --- approot/messages.xml | 4 ++-- approot/messages_es.xml | 4 ++-- approot/messages_fr.xml | 4 ++-- approot/messages_it.xml | 4 ++-- approot/messages_pl.xml | 4 ++-- src/libs/image/impl/graphicsmagick/RawImage.cpp | 10 +++++----- src/libs/image/impl/stb/Exception.cpp | 15 +++++++++------ src/libs/image/impl/stb/Exception.hpp | 3 --- .../impl/scanners/AudioFileScanOperation.cpp | 2 +- .../scanner/impl/scanners/ImageFileScanner.cpp | 2 +- .../scanner/impl/steps/ScanErrorLogger.cpp | 4 ++-- .../include/services/scanner/ScanErrors.hpp | 14 +++++++++++--- src/lms/ui/admin/ScannerReportResource.cpp | 4 ++-- 13 files changed, 41 insertions(+), 33 deletions(-) diff --git a/approot/messages.xml b/approot/messages.xml index 070c40f2..58700fbd 100644 --- a/approot/messages.xml +++ b/approot/messages.xml @@ -101,11 +101,11 @@ Cannot get track duration -Unable to read the image at index {1} +Unable to read the image at index {1}: {2} Cannot parse artist info file Cannot parse audio file Cannot read file ({1}) -Cannot parse image file +Cannot parse image file: {1} Cannot parse lyrics file Cannot parse playlist file Compact the database. Caution: this may take a while and will block the whole application during the compact step! diff --git a/approot/messages_es.xml b/approot/messages_es.xml index 0bce3785..a0b1bdc5 100644 --- a/approot/messages_es.xml +++ b/approot/messages_es.xml @@ -101,11 +101,11 @@ No ha sido posible obtener la duración de la pista -No se puede leer la imagen en el índice {1} +No se puede leer la imagen en el índice {1} : {2} No ha sido posible analizar el fichero de información sobre el artista No ha sido posible analizar el fichero de audio No ha sido posible leer el fichero ({1}) -No ha sido posible analizar del fichero de imagen +No ha sido posible analizar del fichero de imagen : {1} No ha sido posible analizar el fichero de letras No ha sido posible analizar el fichero de la lista de distribución Compactar la base de datos. ¡Atención!: esta operación puede tardar bastante tiempo y la aplicación se bloqueará mientras dura la operación de compactación diff --git a/approot/messages_fr.xml b/approot/messages_fr.xml index c8c654b0..5ed3d408 100644 --- a/approot/messages_fr.xml +++ b/approot/messages_fr.xml @@ -101,11 +101,11 @@ Impossible de récupérer la durée de la piste -Impossible de lire l'image à l'indice {1} +Impossible de lire l'image à l'indice {1} : {2} Impossible d'analyser le fichier d'informations sur l'artiste Impossible d'analyser le fichier audio Impossible de lire le fichier ({1}) -Impossible d'analyser le fichier image +Impossible d'analyser le fichier image : {1} Impossible d'analyser le fichier de paroles Impossible d'analyser le fichier de liste de lecture Compacter la base de données. Attention : cette opération peut prendre du temps et va vérouiller l'application pendant toute l'étape de compactage! diff --git a/approot/messages_it.xml b/approot/messages_it.xml index 42a157a5..6fadb396 100644 --- a/approot/messages_it.xml +++ b/approot/messages_it.xml @@ -101,11 +101,11 @@ Non sono stato in grado di determinare la durata della traccia -Impossibile leggere l'immagine all'indice {1} +Impossibile leggere l'immagine all'indice {1} : {2} Impossibile analizzare il file delle informazioni sull'artista Impossibile analizzare il file audio Non in grado di leggere il file ({1}) -Impossibile analizzare il file immagine +Impossibile analizzare il file immagine : {1} Impossibile analizzare il file dei testi Impossibile analizzare il file della playlist Compatta il database. Attenzione: ciò potrebbe richiedere del tempo e bloccherà l'intera applicazione durante il passaggio di compattazione! diff --git a/approot/messages_pl.xml b/approot/messages_pl.xml index 5adcdb87..1f1b811c 100644 --- a/approot/messages_pl.xml +++ b/approot/messages_pl.xml @@ -102,11 +102,11 @@ Nie udało się ustalić długości ścieżki -Nie można odczytać obrazu pod indeksem {1} +Nie można odczytać obrazu pod indeksem {1} : {2} Nie można przetworzyć pliku z informacjami o artyście" Nie można przeanalizować pliku audio Nie udało się odczytać pliku ({1}) -Nie można przeanalizować pliku obrazu +Nie można przeanalizować pliku obrazu : {1} Nie można przetworzyć pliku z tekstem Nie można przeanalizować pliku playlisty Sprasuj bazę danych. Uwaga: może to trochę zająć, a cała aplikacja będzie w tym czasie zablokowana! diff --git a/src/libs/image/impl/graphicsmagick/RawImage.cpp b/src/libs/image/impl/graphicsmagick/RawImage.cpp index eec24463..8dff9e4d 100644 --- a/src/libs/image/impl/graphicsmagick/RawImage.cpp +++ b/src/libs/image/impl/graphicsmagick/RawImage.cpp @@ -41,12 +41,12 @@ namespace lms::image::GraphicsMagick catch (Magick::Warning& e) { LMS_LOG(COVER, WARNING, "Caught Magick warning: " << e.what()); - throw Exception{ std::string{ "Magick read warning: " } + e.what() }; + throw Exception{ std::string{ "Read warning: " } + e.what() }; } catch (Magick::Exception& e) { LMS_LOG(COVER, ERROR, "Caught Magick exception: " << e.what()); - throw Exception{ std::string{ "Magick read error: " } + e.what() }; + throw Exception{ std::string{ "Read error: " } + e.what() }; } } @@ -63,12 +63,12 @@ namespace lms::image::GraphicsMagick catch (Magick::Warning& e) { LMS_LOG(COVER, WARNING, "Caught Magick warning: " << e.what()); - throw Exception{ std::string{ "Magick read warning: " } + e.what() }; + throw Exception{ std::string{ "Read warning: " } + e.what() }; } catch (Magick::Exception& e) { LMS_LOG(COVER, ERROR, "Caught Magick exception: " << e.what()); - throw Exception{ std::string{ "Magick read error: " } + e.what() }; + throw Exception{ std::string{ "Read error: " } + e.what() }; } } @@ -93,7 +93,7 @@ namespace lms::image::GraphicsMagick catch (Magick::Exception& e) { LMS_LOG(COVER, ERROR, "Caught Magick exception while resizing: " << e.what()); - throw Exception{ std::string{ "Magick resize error: " } + e.what() }; + throw Exception{ std::string{ "Resize error: " } + e.what() }; } } diff --git a/src/libs/image/impl/stb/Exception.cpp b/src/libs/image/impl/stb/Exception.cpp index 4554e39e..91cfb11c 100644 --- a/src/libs/image/impl/stb/Exception.cpp +++ b/src/libs/image/impl/stb/Exception.cpp @@ -23,14 +23,17 @@ namespace lms::image { - StbiException::StbiException(std::string_view desc) - : Exception{ std::string{ desc } + ": " + getLastFailureReason() } + namespace { - } + std::string getLastStbiFailureReason() + { + const char* failureReason{ ::stbi_failure_reason() }; + return failureReason ? failureReason : "unknown reason"; + } + } // namespace - std::string StbiException::getLastFailureReason() + StbiException::StbiException(std::string_view desc) + : Exception{ std::string{ desc } + ": " + getLastStbiFailureReason() } { - const char* failureReason{ ::stbi_failure_reason() }; - return failureReason ? failureReason : "unknown reason"; } } // namespace lms::image \ No newline at end of file diff --git a/src/libs/image/impl/stb/Exception.hpp b/src/libs/image/impl/stb/Exception.hpp index 0de16d49..01718c16 100644 --- a/src/libs/image/impl/stb/Exception.hpp +++ b/src/libs/image/impl/stb/Exception.hpp @@ -29,8 +29,5 @@ namespace lms::image { public: StbiException(std::string_view desc); - - private: - static std::string getLastFailureReason(); }; } // namespace lms::image \ No newline at end of file diff --git a/src/libs/services/scanner/impl/scanners/AudioFileScanOperation.cpp b/src/libs/services/scanner/impl/scanners/AudioFileScanOperation.cpp index 02671a43..284c713e 100644 --- a/src/libs/services/scanner/impl/scanners/AudioFileScanOperation.cpp +++ b/src/libs/services/scanner/impl/scanners/AudioFileScanOperation.cpp @@ -526,7 +526,7 @@ namespace lms::scanner } catch (const image::Exception& e) { - addError(getFilePath(), index); + addError(getFilePath(), index, e.what()); } index++; diff --git a/src/libs/services/scanner/impl/scanners/ImageFileScanner.cpp b/src/libs/services/scanner/impl/scanners/ImageFileScanner.cpp index b84e4672..166a43fd 100644 --- a/src/libs/services/scanner/impl/scanners/ImageFileScanner.cpp +++ b/src/libs/services/scanner/impl/scanners/ImageFileScanner.cpp @@ -62,7 +62,7 @@ namespace lms::scanner catch (const image::Exception& e) { _parsedImageProperties.reset(); - addError(getFilePath()); + addError(getFilePath(), e.what()); } } diff --git a/src/libs/services/scanner/impl/steps/ScanErrorLogger.cpp b/src/libs/services/scanner/impl/steps/ScanErrorLogger.cpp index c42b8523..c82aa81e 100644 --- a/src/libs/services/scanner/impl/steps/ScanErrorLogger.cpp +++ b/src/libs/services/scanner/impl/steps/ScanErrorLogger.cpp @@ -43,7 +43,7 @@ namespace lms::scanner void ScanErrorLogger::visit(const scanner::EmbeddedImageScanError& error) { - LMS_LOG(DBUPDATER, ERROR, "Failed to parse image in track file " << error.path << " at index " << error.index); + LMS_LOG(DBUPDATER, ERROR, "Failed to parse image in track file " << error.path << " at index " << error.index << ": " << error.errorMsg); } void ScanErrorLogger::visit(const scanner::NoAudioTrackFoundError& error) @@ -68,7 +68,7 @@ namespace lms::scanner void ScanErrorLogger::visit(const scanner::ImageFileScanError& error) { - LMS_LOG(DBUPDATER, ERROR, "Failed to read image file " << error.path); + LMS_LOG(DBUPDATER, ERROR, "Failed to read image file " << error.path << ": " << error.errorMsg); } void ScanErrorLogger::visit(const scanner::LyricsFileScanError& error) diff --git a/src/libs/services/scanner/include/services/scanner/ScanErrors.hpp b/src/libs/services/scanner/include/services/scanner/ScanErrors.hpp index b57c44f6..abf4ee14 100644 --- a/src/libs/services/scanner/include/services/scanner/ScanErrors.hpp +++ b/src/libs/services/scanner/include/services/scanner/ScanErrors.hpp @@ -95,9 +95,12 @@ namespace lms::scanner struct EmbeddedImageScanError : public AudioFileScanError { - EmbeddedImageScanError(const std::filesystem::path& p, unsigned i) + EmbeddedImageScanError(const std::filesystem::path& p, unsigned i, std::string_view e) : AudioFileScanError{ p } - , index{ i } {} + , index{ i } + , errorMsg{ e } + { + } void accept(ScanErrorVisitor& visitor) const override { @@ -105,6 +108,7 @@ namespace lms::scanner } unsigned index; + std::string errorMsg; }; struct NoAudioTrackFoundError : public AudioFileScanError @@ -149,12 +153,16 @@ namespace lms::scanner struct ImageFileScanError : public ScanError { - using ScanError::ScanError; + ImageFileScanError(const std::filesystem::path& p, std::string_view e) + : ScanError{ p } + , errorMsg{ e } {} void accept(ScanErrorVisitor& visitor) const override { visitor.visit(*this); } + + std::string errorMsg; }; struct LyricsFileScanError : public ScanError diff --git a/src/lms/ui/admin/ScannerReportResource.cpp b/src/lms/ui/admin/ScannerReportResource.cpp index 5279d1a8..da29fc53 100644 --- a/src/lms/ui/admin/ScannerReportResource.cpp +++ b/src/lms/ui/admin/ScannerReportResource.cpp @@ -55,7 +55,7 @@ namespace lms::ui } void visit(const scanner::EmbeddedImageScanError& error) override { - _os << error.path << ": " << Wt::WString::tr("Lms.Admin.ScannerController.bad-embedded-image").arg(error.index).toUTF8() << '\n'; + _os << error.path << ": " << Wt::WString::tr("Lms.Admin.ScannerController.bad-embedded-image").arg(error.index).arg(Wt::WString::fromUTF8(error.errorMsg)).toUTF8() << '\n'; } void visit(const scanner::NoAudioTrackFoundError& error) override { @@ -75,7 +75,7 @@ namespace lms::ui } void visit(const scanner::ImageFileScanError& error) override { - _os << error.path << ": " << Wt::WString::tr("Lms.Admin.ScannerController.cannot-read-image-file").toUTF8() << '\n'; + _os << error.path << ": " << Wt::WString::tr("Lms.Admin.ScannerController.cannot-read-image-file").arg(Wt::WString::fromUTF8(error.errorMsg)).toUTF8() << '\n'; } void visit(const scanner::LyricsFileScanError& error) override {