#pragma once #include "platform.h" #include namespace ks { Settings loadSettings(const std::filesystem::path &, const std::vector &); Settings decodeSettings(const Bytes &, const std::vector &); Bytes encodeSettings(const Settings &); void saveSettings(const std::filesystem::path &, const Settings &); void validateSettings(const Settings &); struct Entry { std::wstring id, preview, app; uint64_t bytes{}, at{}; bool pinned{}, image{}, files{}; int ocrState{}; // 0: legacy/not applicable, 1: pending, 2: saved, 3: failed std::wstring ocrProfile = L"windows"; }; class History { std::filesystem::path folder_; std::vector entries_; mutable std::mutex mutex_; void saveIndex(); void prune(const Settings &); public: explicit History(const std::filesystem::path &); std::vector entries() const; Clip load(const std::wstring &id) const; void add(const Clip &, const std::wstring &app, const Settings &); bool saveOcr(const std::wstring &id, const std::optional &, const Settings &); std::optional ocrText(const std::wstring &id, const std::wstring &profile = L"") const; void remove(const std::wstring &); void pin(const std::wstring &); void clear(); std::vector search(const std::wstring &) const; }; Bytes encodeClip(const Clip &); Clip decodeClip(const Bytes &); bool sameClipboardImage(const Clip &, const Clip &); } // namespace ks