#pragma once #include #include #include "settings.h" struct AlbumInfo { String id; String title; int assetCount; }; struct AssetInfo { String id; String originalFileName; String dateTime; String city; String camera; bool isFavorite; bool isPortrait; std::vector people; }; struct RandomAsset { String id; String dateTime; }; class ImmichClient { public: void begin(const String& baseUrl, const String& apiKey); std::vector fetchAlbums(); std::vector fetchAlbumAssetIds(const String& albumId); std::vector fetchRandomAssetIds(int count = 50); std::vector fetchRandomAssets(int count = 50); std::vector fetchFavoriteAssetIds(); AssetInfo fetchAssetInfo(const String& assetId); bool downloadAsset(const String& assetId, ImageQuality quality, uint8_t** outBuffer, size_t* outSize); private: String _baseUrl; String _apiKey; String buildUrl(const String& path); String httpGet(const String& url); String httpPost(const String& url, const String& body); char* httpGetPsram(const String& url, size_t* outLen); bool httpGetBinary(const String& url, uint8_t** outBuffer, size_t* outSize); };