summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flaskapi.py22
-rw-r--r--immich.py20
2 files changed, 37 insertions, 5 deletions
diff --git a/flaskapi.py b/flaskapi.py
index 29cea7e..0791016 100644
--- a/flaskapi.py
+++ b/flaskapi.py
@@ -1,4 +1,5 @@
-from flask import Flask, Blueprint, request, send_from_directory
+from flask import Flask, Blueprint, request, send_from_directory, send_file, abort
+from flask_cors import CORS
app = Flask(__name__, static_folder="static/dist", static_url_path="/")
@@ -10,6 +11,7 @@ def home():
return send_from_directory("static/public", "index.html")
api = Blueprint("api", __name__)
+CORS(api, origins="*") # For debugging TODO remove later
@api.route("/seek")
def seek():
@@ -24,4 +26,22 @@ def seek():
"imageIndex": pd.current_texture_index,
}
+@api.route("/albums/get")
+def get_albums():
+ ic = app.config["immich_connector"]
+ keys = [ "albumName", "albumThumbnailAssetId", "id", "startDate", "endDate", "assetCount", "shared", ]
+ return [{
+ key: album[key] for key in keys
+ } for album in ic.load_all_albums() ]
+
+@api.route("/albums/thumb/<key>")
+def get_album_thumb(key):
+ # TODO ensure getting actual album thumb
+ ic = app.config["immich_connector"]
+ image_data, mimetype = ic.load_image(key, size="thumbnail")
+ if image_data is None:
+ abort(400)
+ return send_file(image_data, mimetype=mimetype)
+
+
app.register_blueprint(api, url_prefix="/api")
diff --git a/immich.py b/immich.py
index 1f1ccb8..63e6f63 100644
--- a/immich.py
+++ b/immich.py
@@ -12,6 +12,13 @@ class ImmichConnector:
def _request(self, endpoint):
return requests.get(f"{self.server_url}/api/{endpoint}", headers={ "x-api-key": self.api_key })
+ def load_all_albums(self):
+ response = self._request("albums")
+ if response.status_code != 200: return
+
+ data = response.json()
+ return data
+
def load_album_assets(self, key):
response = self._request(f"albums/{key}")
if response.status_code != 200: return
@@ -19,15 +26,20 @@ class ImmichConnector:
data = response.json()
return data["assets"]
- def load_image(self, pd, key, exif=None):
- response = self._request(f"assets/{key}/thumbnail?size=fullsize")
- if response.status_code != 200: return
+ def load_image(self, key, size="preview"):
+ response = self._request(f"assets/{key}/thumbnail?size={size}")
+ if response.status_code != 200: return None, None
image_data = BytesIO(response.content)
+ mimetype = response.headers.get("Content-Type")
+ return image_data, mimetype
+
+ def load_texture(self, pd, key, exif=None, size="preview"):
+ image_data, _ = self.load_image(key, size)
it = ImageTexture(image_data, exif)
pd.textures.append(it)
print(f"Loaded image {key}")
def idle(self, pd):
for asset in self.load_album_assets("bac029a5-972b-4519-bce0-a0d74add3969"):
- self.load_image(pd, asset["id"], asset["exifInfo"])
+ self.load_texture(pd, asset["id"], asset["exifInfo"])