Files
MuditaOS/module-apps/application-settings-new/models/QuotesRepository.hpp
Wiktor S. Ovalle Correa 3b141041e9 [EGD-5737] Merge master into experimental
Keep experimental up to date with changes from master
2021-02-17 17:09:37 +01:00

60 lines
1.8 KiB
C++

// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
#include <json/json11.hpp>
#include <list>
#include <functional>
#include <filesystem>
#include <module-apps/Application.hpp>
namespace app
{
struct QuoteRecord
{
int id = 0;
std::string quote;
std::string author;
[[nodiscard]] auto to_json() const -> json11::Json
{
return json11::Json::object{{"quote", quote}, {"author", author}};
}
};
class QuotesRepository
{
public:
using OnGetCallback = std::function<bool(const std::list<QuoteRecord> &, unsigned int)>;
virtual ~QuotesRepository() noexcept = default;
virtual void get(std::uint32_t offset, std::uint32_t limit, const OnGetCallback &callback) = 0;
virtual void save(const QuoteRecord &quote) = 0;
virtual void remove(const QuoteRecord &quote) = 0;
};
class QuotesJsonRepository : public QuotesRepository
{
public:
QuotesJsonRepository(const std::string &path);
void get(std::uint32_t offset, std::uint32_t limit, const OnGetCallback &callback) override;
void save(const QuoteRecord &quote) override;
void remove(const QuoteRecord &quote) override;
private:
void writeQuotes(const std::filesystem::path &path);
void readQuotes(const std::filesystem::path &fn);
std::string readFileToString(const std::filesystem::path &fn);
std::list<QuoteRecord> quotes;
std::string repositoryPath;
};
} // namespace app