diff --git a/src/core/task_executor_utils.hpp b/src/core/task_executor_utils.hpp index a52c848abb..63e0a01e2b 100644 --- a/src/core/task_executor_utils.hpp +++ b/src/core/task_executor_utils.hpp @@ -50,16 +50,14 @@ class CORE_EXPORT WorkState // Helper function. // Run a task and wait for it to be finished. -template +template [[nodiscard]] auto evaluate(E& executor, const T& task) { - typedef std::packaged_task PTask; - - PTask p_task(task); + std::packaged_task p_task(task); auto result_future = p_task.get_future(); - ExecutorTraits::exec(executor, std::move(p_task)); + ExecutorTraits::exec(executor, std::move(p_task)); result_future.wait(); diff --git a/src/database/database_tools/implementation/photos_analyzer.cpp b/src/database/database_tools/implementation/photos_analyzer.cpp index fdf02f2ade..e3e095f462 100644 --- a/src/database/database_tools/implementation/photos_analyzer.cpp +++ b/src/database/database_tools/implementation/photos_analyzer.cpp @@ -37,30 +37,32 @@ using namespace PhotosAnalyzerConsts; namespace { - void assignGeometry(IMediaInformation& mediaInfo, Photo::DataDelta& data) + // TODO: put some nice concept here which will detect if T is ExplicitDelta and has required fields + void assignGeometry(IMediaInformation& mediaInfo, auto& data) { - const QString path = data.get(); + const QString path = data.template get(); const auto info = mediaInfo.getInformation(path); if (info.common.dimension.has_value()) { - data.insert(info.common.dimension.value()); - data.get()[Photo::FlagsE::GeometryLoaded] = GeometryFlagVersion; + data.template insert(info.common.dimension.value()); + data.template get()[Photo::FlagsE::GeometryLoaded] = GeometryFlagVersion; } else throw std::make_pair(Database::CommonGeneralFlags::State, static_cast(Database::CommonGeneralFlags::StateType::Broken)); } - void assignTags(IMediaInformation& mediaInfo, Photo::DataDelta& data) + // TODO: put some nice concept here which will detect if T is ExplicitDelta and has required fields + void assignTags(IMediaInformation& mediaInfo, auto& data) { - auto& tags = data.get(); - const auto path = data.get(); + auto& tags = data.template get(); + const auto path = data.template get(); // If media already has date or time update, do not override it. // Just update ExifLoaded flag. It could be set to previous version, so bump it if (tags.contains(Tag::Types::Date) || tags.contains(Tag::Types::Time)) { - data.get()[Photo::FlagsE::ExifLoaded] = ExifFlagVersion; + data.template get()[Photo::FlagsE::ExifLoaded] = ExifFlagVersion; return; } @@ -73,15 +75,16 @@ namespace tags[Tag::Types::Time] = info.common.creationTime->time(); } - data.get()[Photo::FlagsE::ExifLoaded] = ExifFlagVersion; + data.template get()[Photo::FlagsE::ExifLoaded] = ExifFlagVersion; } - void assignPHash(Photo::DataDelta& data) + // TODO: put some nice concept here which will detect if T is ExplicitDelta and has required fields + void assignPHash(auto& data) { // based on: // https://docs.opencv.org/3.4/d4/d93/group__img__hash.html - const QString path = data.get(); + const QString path = data.template get(); // NOTE: cv::imread could be used here, however it would be better to have a unique mechanism // of reading images, so if an image can be displayed in gui, then we also know how to @@ -118,7 +121,7 @@ namespace std::memcpy(rawPHash.data(), phashMat.datastart, DataSize); Photo::PHashT phash(rawPHash); - data.insert(phash); + data.template insert(phash); } } } @@ -135,9 +138,10 @@ namespace void perform() override { - auto data = evaluate(*m_storage, [this](Database::IBackend& backend) + auto data = evaluate(*m_storage, [this](Database::IBackend& backend) { - return backend.getPhotoDelta(m_id); + using namespace Photo; + return backend.getPhotoDelta(m_id); }); std::vector> bitsToSet; @@ -155,7 +159,7 @@ namespace if (data.get().at(Photo::FlagsE::ExifLoaded) < ExifFlagVersion) assignTags(m_mediaInfo, data); - if (data.has(Photo::Field::PHash) == false) + if (data.get().valid() == false) try { assignPHash(data); diff --git a/src/database/database_tools/implementation/series_detector.cpp b/src/database/database_tools/implementation/series_detector.cpp index f0e3283f6b..e1d3c0c5e1 100644 --- a/src/database/database_tools/implementation/series_detector.cpp +++ b/src/database/database_tools/implementation/series_detector.cpp @@ -371,7 +371,7 @@ std::vector SeriesDetector::listCandidates(const Rules& rules) c timer.start(); const std::deque candidates = - evaluate(Database::IBackend &)>(m_db, [](Database::IBackend& backend) + evaluate(m_db, [](Database::IBackend& backend) { std::vector result; diff --git a/src/database/explicit_photo_delta.hpp b/src/database/explicit_photo_delta.hpp index 12be1014bb..6a78b46ca5 100644 --- a/src/database/explicit_photo_delta.hpp +++ b/src/database/explicit_photo_delta.hpp @@ -120,7 +120,7 @@ namespace Photo } private: - template + template friend class ExplicitDelta; DataDelta m_data; diff --git a/src/gui/desktop/quick_items/context_menu_manager.cpp b/src/gui/desktop/quick_items/context_menu_manager.cpp index 0a44f135c4..4a5da9a8a4 100644 --- a/src/gui/desktop/quick_items/context_menu_manager.cpp +++ b/src/gui/desktop/quick_items/context_menu_manager.cpp @@ -169,7 +169,7 @@ void ContextMenuManager::manageGroupsAction() { Database::IDatabase& db = m_project->getDatabase(); - const std::vector groupMembers = evaluate(Database::IBackend &)>(db, [this](Database::IBackend& backend) + const std::vector groupMembers = evaluate(db, [this](Database::IBackend& backend) { std::vector members; diff --git a/src/gui/desktop/utils/people_editor.cpp b/src/gui/desktop/utils/people_editor.cpp index e3f44a54d5..2da7007e8c 100644 --- a/src/gui/desktop/utils/people_editor.cpp +++ b/src/gui/desktop/utils/people_editor.cpp @@ -58,7 +58,7 @@ namespace bool wasPhotoAnalyzedAndHasNoFaces(Database::IDatabase& db, const Photo::Id& ph_id) { - return evaluate(db, [ph_id](Database::IBackend& backend) + return evaluate(db, [ph_id](Database::IBackend& backend) { const auto analysisState = backend.get(ph_id, FacesAnalysisState); @@ -68,7 +68,7 @@ namespace QString pathFor(Database::IDatabase& db, const Photo::Id& id) { - return evaluate(db, [id](Database::IBackend& backend) + return evaluate(db, [id](Database::IBackend& backend) { auto photo = backend.getPhotoDelta(id, {Photo::Field::Path}); @@ -173,7 +173,7 @@ class Recognizer: public IRecognizePerson { typedef std::tuple, std::vector> Result; - evaluate(db, [this](Database::IBackend& backend) + evaluate(db, [this](Database::IBackend& backend) { std::vector people_fingerprints; std::vector people; @@ -238,7 +238,7 @@ FaceEditor::PeopleData FaceEditor::findFaces(const OrientedImage& image, const P // photo not analyzed yet (no records in db) or analyzed and we have data in db if (facesNotFound == false) { - result = evaluate(m_db, [id](Database::IBackend& backend) + result = evaluate(m_db, [id](Database::IBackend& backend) { return backend.getPhotoDelta(id); }); @@ -262,7 +262,7 @@ FaceEditor::PeopleData FaceEditor::findFaces(const OrientedImage& image, const P else { // store face location and fingerprint in db and update ids - evaluate(m_db, [&result](Database::IBackend& backend) + evaluate(m_db, [&result](Database::IBackend& backend) { backend.update({result}); diff --git a/src/gui/desktop/utils/thumbnail_manager.cpp b/src/gui/desktop/utils/thumbnail_manager.cpp index 0b28c223b1..ce1a54e19d 100644 --- a/src/gui/desktop/utils/thumbnail_manager.cpp +++ b/src/gui/desktop/utils/thumbnail_manager.cpp @@ -67,7 +67,7 @@ void ThumbnailManager::fetch(const Photo::Id& id, const QSize& desired_size, con QByteArray dbThumb; if (m_db) // load thumbnail from db - dbThumb = evaluate(*m_db, [id](Database::IBackend& backend) + dbThumb = evaluate(*m_db, [id](Database::IBackend& backend) { return backend.readBlob(id, BlobType); }); @@ -78,7 +78,7 @@ void ThumbnailManager::fetch(const Photo::Id& id, const QSize& desired_size, con if (dbThumb.isNull()) { // load path to photo - const Photo::DataDelta photoData = evaluate(*m_db, [id](Database::IBackend& backend) + const Photo::DataDelta photoData = evaluate(*m_db, [id](Database::IBackend& backend) { return backend.getPhotoDelta(id); }); diff --git a/tr/photo_broom_en.ts b/tr/photo_broom_en.ts index 4befd85b27..b5a49f3a68 100644 --- a/tr/photo_broom_en.ts +++ b/tr/photo_broom_en.ts @@ -620,7 +620,7 @@ Error code: %1 PhotosAnalyzerImpl - + Extracting data from new photos diff --git a/tr/photo_broom_pl.ts b/tr/photo_broom_pl.ts index d035231ed5..718b36ea73 100644 --- a/tr/photo_broom_pl.ts +++ b/tr/photo_broom_pl.ts @@ -648,7 +648,7 @@ Kod błędu: %1 PhotosAnalyzerImpl - + Extracting data from new photos Extracting data from new photos Odczytywanie danych z nowych zdjęć