Skip to content

Commit

Permalink
Cosmin/persistence refactory polished (#71)
Browse files Browse the repository at this point in the history
* dev: Change Image factory from singleton to regular class.

* dev: Add ImageFactory usage.

* dev: Replace the old persistence system.

* dev: Replace GetNewImagePath.

* dev: Comment tests, add not implemented exception.

* dev: Replace ImageView with ProjectManagementSystem.

* tests: Fix tests.

* dev: Remove unused files.

* dev: Fix warnings.
  • Loading branch information
cosmin42 authored Sep 15, 2024
1 parent e120015 commit d555e20
Show file tree
Hide file tree
Showing 72 changed files with 448 additions and 1,743 deletions.
22 changes: 1 addition & 21 deletions PB/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,10 @@ add_library(${PBLIB_LIBRARY_NAME} STATIC
include/pb/ImportFoldersLogic.h
include/pb/ImageToPaperService.h
include/pb/ImageToPaperTask.h
include/pb/image/Image.h
include/pb/image/ImageFactory.h
include/pb/ImageMetadataLogic.h
include/pb/image/ImageOperations.h
include/pb/image/ImageReader.h
include/pb/image/ImageSetWriter.h
include/pb/image/RegularImage.h
include/pb/image/VirtualImage.h
include/pb/image/TextImage.h
Expand All @@ -118,11 +116,7 @@ add_library(${PBLIB_LIBRARY_NAME} STATIC
include/pb/MetadataReader.h
include/pb/OGLEngine.h
include/pb/FileComparator.h
include/pb/persistence/FilePersistence.h
include/pb/persistence/Persistence.h
include/pb/persistence/SerializationStrategy.h
include/pb/persistence/SQLPersistence.h
include/pb/persistence/PersistenceService.h
include/pb/PhotoBook.h
include/pb/PhotobookListener.h
include/pb/Platform.h
Expand All @@ -135,14 +129,11 @@ add_library(${PBLIB_LIBRARY_NAME} STATIC
include/pb/RowProcessingData.h
include/pb/RuntimeUUID.h
include/pb/SkiaResources.h
include/pb/tasks/Tasks.h
include/pb/tasks/PicturesSearchConfig.h
include/pb/tasks/ParallelTaskConsumer.h
include/pb/tasks/SequentialTaskConsumer.h
include/pb/tasks/ThumbnailsProcessor.h
include/pb/StagedImages.h
include/pb/SVGInflater.h
include/pb/util/Util.h
include/pb/util/Concepts.h
include/pb/util/Error.h
include/pb/util/FileInfo.h
Expand All @@ -153,7 +144,6 @@ add_library(${PBLIB_LIBRARY_NAME} STATIC
include/pb/ThreadScheduler.h
include/pb/TSQueue.h
include/pb/Visitor.h
include/pb/WorkersManager.h

src/CollageLibraryAssistant.cpp
src/Command.cpp
Expand All @@ -172,14 +162,12 @@ add_library(${PBLIB_LIBRARY_NAME} STATIC
src/GPUAcceleratedImageOperations.cpp
src/PicturesSearchConfig.cpp
src/FileComparator.cpp
src/FilePersistence.cpp
src/Html.cpp
src/ImageFactory.cpp
src/ImageReader.cpp
src/ImageMetadataLogic.cpp
src/ImageMonitor.cpp
src/ImageOperations.cpp
src/ImageSetWriter.cpp
src/ImageToPaperService.cpp
src/ImageToPaperTask.cpp
src/ImportImageTask.cpp
Expand All @@ -193,30 +181,25 @@ add_library(${PBLIB_LIBRARY_NAME} STATIC
src/Pdf.cpp
src/PdfPoDoFo.cpp
src/PdfLibharu.cpp
src/Persistence.cpp
src/Photobook.cpp
src/ProgressManager.cpp
src/Project.cpp
src/ProjectMetadata.cpp
src/ProjectManagementSystem.cpp
src/ProjectSerializerService.cpp
src/PersistenceService.cpp
src/RegularImage.cpp
src/RuntimeUUID.cpp
src/ThumbnailsProcessor.cpp
src/SerializationStrategy.cpp
src/SkiaResources.cpp
src/SQLPersistence.cpp
src/StagedImages.cpp
src/SVGInflater.cpp
src/util/FileInfo.cpp
src/util/Timer.cpp
src/util/SequentialTaskConsumer.cpp
src/util/ParallelTaskConsumer.cpp
src/TaskCruncher.cpp
src/TextImage.cpp
src/VirtualImage.cpp
src/WorkersManager.cpp)
src/VirtualImage.cpp)

target_include_directories(${PBLIB_LIBRARY_NAME} PUBLIC
include
Expand All @@ -242,16 +225,13 @@ set_target_properties(${PBLIB_LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE CXX)
add_executable(${PBLIB_TESTS_LIBRARY_NAME}
tests/MockListeners.h
tests/MockListeners.cpp
tests/TestPersistence.cpp
tests/TestIteratorWithState.cpp
tests/TestComparator.cpp
tests/TestErrors.cpp
tests/TestFolderImport.cpp
tests/TestImageMonitor.cpp
tests/TestParallelTaskConsumer.cpp
tests/TestPersistenceService.cpp
tests/TestPhotobook.cpp
tests/TestPersistenceService.cpp
tests/TestRuntimeUUID.cpp
tests/TestStagedImages.cpp
tests/TestThirdPartyLinks.cpp
Expand Down
2 changes: 1 addition & 1 deletion PB/include/pb/Command.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma once

#include <pb/util/Util.h>
#include <pb/util/Traits.h>

namespace PB {
struct Command {};
Expand Down
18 changes: 0 additions & 18 deletions PB/include/pb/DataManager.h
Original file line number Diff line number Diff line change
@@ -1,24 +1,6 @@
#pragma once

#include <ranges>
#include <unordered_map>
#include <unordered_set>

#include <pb/Config.h>
#include <pb/ImageMonitor.h>
#include <pb/StagedImages.h>
#include <pb/image/Image.h>
#include <pb/util/Util.h>

namespace PB {
class ImageViews final {
public:
ImageMonitor &imageMonitor() { return mImageMonitor; }
StagedImages &stagedImages() { return mStagedImages; }

private:
ImageMonitor mImageMonitor;
StagedImages mStagedImages;
};

} // namespace PB
2 changes: 1 addition & 1 deletion PB/include/pb/DatabaseService.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class DatabaseService final {

while (sqlite3_step(stmt) == SQLITE_ROW) {
std::vector<std::string> row;
for (auto i = 1; i < expectedColumnsCount+1; ++i) {
for (unsigned int i = 1; i < expectedColumnsCount + 1; ++i) {
const char *data =
reinterpret_cast<const char *>(sqlite3_column_text(stmt, i));
row.push_back(data);
Expand Down
2 changes: 0 additions & 2 deletions PB/include/pb/DurableHashService.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@

#include <pb/util/Traits.h>

DECLARE_STRONG_UUID(ProjectId)

namespace PB {
class DurableHashService final {
public:
Expand Down
6 changes: 3 additions & 3 deletions PB/include/pb/ImageMonitor.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#pragma once

#include <memory>
#include <unordered_map>
#include <unordered_set>

#include <boost/bimap/bimap.hpp>

#include <pb/Config.h>
#include <pb/RowProcessingData.h>
#include <pb/image/Image.h>
#include <pb/util/Util.h>
#include <pb/image/VirtualImage.h>
#include <pb/util/IteratorWithState.h>

namespace PB {
class ImageMonitorListener {
Expand Down
19 changes: 7 additions & 12 deletions PB/include/pb/ImageToPaperService.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include <pb/ImageToPaperTask.h>
#include <pb/Platform.h>
#include <pb/ProjectManagementSystem.h>
#include <pb/TaskCruncher.h>
#include <pb/image/VirtualImage.h>

Expand All @@ -24,15 +25,10 @@ class ImageToPaperService final {
mTaskCruncher = taskCruncher;
}

void configurePersistenceService(
std::shared_ptr<PersistenceService> persistenceService)
void configureProjectManagementSystem(
std::shared_ptr<ProjectManagementSystem> projectManagementSystem)
{
mPersistenceService = persistenceService;
}

void configureProject(std::shared_ptr<Project> project)
{
mProject = project;
mProjectManagementSystem = projectManagementSystem;
}

void setImageToPaperServiceListener(ImageToPaperServiceListener *listener)
Expand All @@ -53,10 +49,9 @@ class ImageToPaperService final {
void removeTask(PBDev::ImageToPaperServiceId id);

private:
std::shared_ptr<PlatformInfo> mPlatformInfo = nullptr;
std::shared_ptr<TaskCruncher> mTaskCruncher = nullptr;
std::shared_ptr<PersistenceService> mPersistenceService = nullptr;
std::shared_ptr<Project> mProject = nullptr;
std::shared_ptr<PlatformInfo> mPlatformInfo = nullptr;
std::shared_ptr<TaskCruncher> mTaskCruncher = nullptr;
std::shared_ptr<ProjectManagementSystem> mProjectManagementSystem = nullptr;
std::unordered_map<PBDev::ImageToPaperServiceId, ImageToPaperTask,
boost::hash<PBDev::ImageToPaperServiceId>>
mTasks;
Expand Down
56 changes: 17 additions & 39 deletions PB/include/pb/ImageToPaperTask.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
#include <pb/MapReducer.h>
#include <pb/Platform.h>
#include <pb/image/ImageReader.h>
#include <pb/image/RegularImage.h>
#include <pb/image/VirtualImage.h>
#include <pb/persistence/PersistenceService.h>
#include <pb/project/Project.h>
#include <pb/tasks/ThumbnailsProcessor.h>

Expand All @@ -25,10 +25,12 @@ class ImageToPaperServiceListener {
class ImageToPaperTask final : public MapReducer {
public:
explicit ImageToPaperTask(
PBDev::ProjectId projectId, PaperSettings paperSettings,
std::unordered_map<PBDev::ImageToPaperId, std::shared_ptr<VirtualImage>,
boost::hash<PBDev::ImageToPaperId>>
originalImages)
: MapReducer(), mOriginalImages(originalImages)
: MapReducer(), mOriginalImages(originalImages),
mPaperSettings(paperSettings), mProjectId(projectId)
{
for (const auto &[id, image] : originalImages) {
mImageIds.push_back(id);
Expand All @@ -42,17 +44,6 @@ class ImageToPaperTask final : public MapReducer {
mPlatformInfo = platformInfo;
}

void configureProject(std::shared_ptr<Project> project)
{
mProject = project;
}

void configurePersistenceService(
std::shared_ptr<PersistenceService> persistenceService)
{
mPersistenceService = persistenceService;
}

void setImageToPaperServiceListener(ImageToPaperServiceListener *listener)
{
mListener = listener;
Expand Down Expand Up @@ -80,11 +71,11 @@ class ImageToPaperTask final : public MapReducer {
unsigned taskCount() const override { return (unsigned)mImageIds.size(); }

private:
std::shared_ptr<PlatformInfo> mPlatformInfo = nullptr;
std::shared_ptr<PersistenceService> mPersistenceService = nullptr;
std::shared_ptr<Project> mProject = nullptr;
std::vector<PBDev::ImageToPaperId> mImageIds;
unsigned mImageIndex = 0;
std::shared_ptr<PlatformInfo> mPlatformInfo = nullptr;
std::vector<PBDev::ImageToPaperId> mImageIds;
unsigned mImageIndex = 0;
PBDev::ProjectId mProjectId;
PaperSettings mPaperSettings;

ImageToPaperServiceListener *mListener = nullptr;

Expand Down Expand Up @@ -116,30 +107,18 @@ class ImageToPaperTask final : public MapReducer {
}};
}

Path GetNewImagePath()
{
std::string newImageName =
boost::uuids::to_string(boost::uuids::random_generator()()) + ".png";

Path projectThumbnailsRoot =
mPlatformInfo->localStatePath / "th" /
boost::uuids::to_string(mPersistenceService->currentProjectUUID());

return projectThumbnailsRoot / newImageName;
}

std::shared_ptr<VirtualImage>
CreatePaperImage(std::shared_ptr<VirtualImage> image)
{
auto hashPath = GetNewImagePath();
auto hash = boost::uuids::to_string(boost::uuids::random_generator()());
auto hashPath = mPlatformInfo->thumbnailByHash(*mProjectId, hash, ".png");

auto imageData = ImageReader().read(
image->frontend().full, true,
{mProject->paperSettings.width, mProject->paperSettings.height});
auto imageData =
ImageReader().read(image->frontend().full, true,
{mPaperSettings.width, mPaperSettings.height});

std::shared_ptr<cv::Mat> singleColorImage = PB::Process::singleColorImage(
mProject->paperSettings.width, mProject->paperSettings.height,
{255, 255, 255})();
mPaperSettings.width, mPaperSettings.height, {255, 255, 255})();

PBDev::basicAssert(imageData != nullptr);

Expand All @@ -148,12 +127,11 @@ class ImageToPaperTask final : public MapReducer {

auto [smallPath, mediumPath] = ThumbnailsProcessor::assembleOutputPaths(
mPlatformInfo->localStatePath, 0, hashPath.stem().string(),
boost::uuids::to_string(mPersistenceService->currentProjectUUID()));
boost::uuids::to_string(*mProjectId));

Process::writeImageOnDisk(singleColorImage, hashPath);

Process::imageWriteThumbnail(mProject->paperSettings.width,
mProject->paperSettings.height,
Process::imageWriteThumbnail(mPaperSettings.width, mPaperSettings.height,
singleColorImage, mediumPath, smallPath);

ImageResources imageResources = {hashPath, mediumPath, smallPath,
Expand Down
4 changes: 2 additions & 2 deletions PB/include/pb/ImportFoldersLogic.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
#include <unordered_map>

#include <pb/Config.h>
#include <pb/ProjectManagementSystem.h>
#include <pb/RowProcessingData.h>
#include <pb/TaskCruncher.h>
#include <pb/ThreadScheduler.h>
#include <pb/tasks/PicturesSearchConfig.h>
#include <pb/tasks/ThumbnailsProcessor.h>
#include <pb/util/Error.h>

namespace PB {

Expand All @@ -33,8 +35,6 @@ class ImportFoldersLogic final : public PicturesSearchConfigListener {
void configure(ImportFoldersLogicListener *listener);
void configure(PBDev::ThreadScheduler *scheduler);

void configure(std::shared_ptr<Project> project);

void setTaskCruncher(std::shared_ptr<TaskCruncher> taskCruncher);

std::optional<PBDev::Error> addImportFolder(Path path);
Expand Down
Loading

0 comments on commit d555e20

Please sign in to comment.