2026-08-03 10:53:27 -04:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <Arduino.h>
|
|
|
|
|
#include <vector>
|
|
|
|
|
#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<String> people;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class ImmichClient {
|
|
|
|
|
public:
|
|
|
|
|
void begin(const String& baseUrl, const String& apiKey);
|
|
|
|
|
std::vector<AlbumInfo> fetchAlbums();
|
|
|
|
|
std::vector<String> fetchAlbumAssetIds(const String& albumId);
|
2026-08-03 14:39:55 -04:00
|
|
|
std::vector<String> fetchRandomAssetIds(int count = 50);
|
2026-08-03 10:53:27 -04:00
|
|
|
std::vector<String> 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);
|
2026-08-03 14:39:55 -04:00
|
|
|
String httpPost(const String& url, const String& body);
|
|
|
|
|
char* httpGetPsram(const String& url, size_t* outLen);
|
2026-08-03 10:53:27 -04:00
|
|
|
bool httpGetBinary(const String& url, uint8_t** outBuffer, size_t* outSize);
|
|
|
|
|
};
|