Skip to content

Commit

Permalink
Switch to ExplicitDelta to be sure are needed fields are there
Browse files Browse the repository at this point in the history
  • Loading branch information
Kicer86 committed Jun 3, 2024
1 parent a8e1fc6 commit 82be041
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 19 deletions.
2 changes: 1 addition & 1 deletion src/core/task_executor_utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ template<typename R, typename E, typename T>
[[nodiscard]]
auto evaluate(E& executor, const T& task)
{
typedef std::packaged_task<R> PTask;
using PTask = std::packaged_task<R>;

PTask p_task(task);

Expand Down
34 changes: 19 additions & 15 deletions src/database/database_tools/implementation/photos_analyzer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<Photo::Field::Path>();
const QString path = data.template get<Photo::Field::Path>();
const auto info = mediaInfo.getInformation(path);

if (info.common.dimension.has_value())
{
data.insert<Photo::Field::Geometry>(info.common.dimension.value());
data.get<Photo::Field::Flags>()[Photo::FlagsE::GeometryLoaded] = GeometryFlagVersion;
data.template insert<Photo::Field::Geometry>(info.common.dimension.value());
data.template get<Photo::Field::Flags>()[Photo::FlagsE::GeometryLoaded] = GeometryFlagVersion;
}
else
throw std::make_pair(Database::CommonGeneralFlags::State, static_cast<int>(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<Photo::Field::Tags>();
const auto path = data.get<Photo::Field::Path>();
auto& tags = data.template get<Photo::Field::Tags>();
const auto path = data.template get<Photo::Field::Path>();

// 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::Field::Flags>()[Photo::FlagsE::ExifLoaded] = ExifFlagVersion;
data.template get<Photo::Field::Flags>()[Photo::FlagsE::ExifLoaded] = ExifFlagVersion;
return;
}

Expand All @@ -73,15 +75,16 @@ namespace
tags[Tag::Types::Time] = info.common.creationTime->time();
}

data.get<Photo::Field::Flags>()[Photo::FlagsE::ExifLoaded] = ExifFlagVersion;
data.template get<Photo::Field::Flags>()[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<Photo::Field::Path>();
const QString path = data.template get<Photo::Field::Path>();

// 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
Expand Down Expand Up @@ -118,7 +121,7 @@ namespace
std::memcpy(rawPHash.data(), phashMat.datastart, DataSize);

Photo::PHashT phash(rawPHash);
data.insert<Photo::Field::PHash>(phash);
data.template insert<Photo::Field::PHash>(phash);
}
}
}
Expand All @@ -135,9 +138,10 @@ namespace

void perform() override
{
auto data = evaluate<Photo::DataDelta(Database::IBackend &)>(*m_storage, [this](Database::IBackend& backend)
using namespace Photo;
auto data = evaluate<Photo::ExplicitDelta<Field::Flags, Field::PHash, Field::Path, Field::Geometry, Field::Tags>(Database::IBackend &)>(*m_storage, [this](Database::IBackend& backend)
{
return backend.getPhotoDelta<Photo::Field::Flags, Photo::Field::PHash>(m_id);
return backend.getPhotoDelta<Field::Flags, Field::PHash, Field::Path, Field::Geometry, Field::Tags>(m_id);
});

std::vector<std::tuple<Photo::Id, QString, int>> bitsToSet;
Expand All @@ -155,7 +159,7 @@ namespace
if (data.get<Photo::Field::Flags>().at(Photo::FlagsE::ExifLoaded) < ExifFlagVersion)
assignTags(m_mediaInfo, data);

if (data.has(Photo::Field::PHash) == false)
if (data.get<Photo::Field::PHash>().valid() == false)
try
{
assignPHash(data);
Expand Down
2 changes: 1 addition & 1 deletion src/database/explicit_photo_delta.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ namespace Photo
}

private:
template<typename Photo::Field... other>
template<typename Photo::Field...>
friend class ExplicitDelta;

DataDelta m_data;
Expand Down
2 changes: 1 addition & 1 deletion tr/photo_broom_en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -620,7 +620,7 @@ Error code: %1</source>
<context>
<name>PhotosAnalyzerImpl</name>
<message>
<location filename="../src/database/database_tools/implementation/photos_analyzer.cpp" line="289"/>
<location filename="../src/database/database_tools/implementation/photos_analyzer.cpp" line="293"/>
<source>Extracting data from new photos</source>
<translation type="unfinished"></translation>
</message>
Expand Down
2 changes: 1 addition & 1 deletion tr/photo_broom_pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,7 @@ Kod błędu: %1</translation>
<context>
<name>PhotosAnalyzerImpl</name>
<message>
<location filename="../src/database/database_tools/implementation/photos_analyzer.cpp" line="+289"/>
<location filename="../src/database/database_tools/implementation/photos_analyzer.cpp" line="+293"/>
<source>Extracting data from new photos</source>
<translatorcomment>Extracting data from new photos</translatorcomment>
<translation>Odczytywanie danych z nowych zdjęć</translation>
Expand Down

0 comments on commit 82be041

Please sign in to comment.