// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include #include #include class AbstractSimContactsRepository { public: using OnReadCallback = std::function; using OnDupplicatesCheckCallback = std::function; using OnSaveCallback = std::function; virtual ~AbstractSimContactsRepository() noexcept = default; virtual const std::vector &getImportedRecords() = 0; virtual const std::vector &getDuplicatedRecords() = 0; virtual void read(OnReadCallback callback) = 0; virtual void clear() = 0; virtual void save(const std::vector &selectedContacts, bool duplicatesFound, OnSaveCallback callback) = 0; virtual void findDuplicates(const std::vector &selectedContacts, OnDupplicatesCheckCallback callback) = 0; }; class SimContactsRepository : public AbstractSimContactsRepository, public app::AsyncCallbackReceiver { public: using NotificationData = std::pair; explicit SimContactsRepository(app::ApplicationCommon *application); const std::vector &getImportedRecords() override; const std::vector &getDuplicatedRecords() override; void read(OnReadCallback callback) override; void clear() override; void save(const std::vector &selectedContacts, bool duplicatesFound, OnSaveCallback callback) override; void findDuplicates(const std::vector &selectedContacts, OnDupplicatesCheckCallback callback) override; void updateImportedRecords(const std::vector &simData); protected: void sendNotification(const NotificationData ¬ificationData); private: std::vector importedRecords; std::vector uniqueRecords; std::vector duplicatedRecords; app::ApplicationCommon *application; #if DEBUG_SIM_IMPORT_DATA == 1 void printRecordsData(const std::string &name, const std::vector &data); #endif };