From e41d461ba60f0b9bab63ae2ae84d164084128b28 Mon Sep 17 00:00:00 2001 From: shmyga Date: Mon, 20 Apr 2026 00:18:51 +0300 Subject: [PATCH] feat(app): update nginx image source --- .../ru/m/puzzlez/source/NginxImageSource.hx | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/app/haxe/ru/m/puzzlez/source/NginxImageSource.hx b/src/app/haxe/ru/m/puzzlez/source/NginxImageSource.hx index 6ce53fc..d562604 100644 --- a/src/app/haxe/ru/m/puzzlez/source/NginxImageSource.hx +++ b/src/app/haxe/ru/m/puzzlez/source/NginxImageSource.hx @@ -25,6 +25,7 @@ class NginxImageSource implements ImageSource { public var id(default, never):String = "nginx"; private var baseUrl:String; + private var cache:Map> = new Map(); public function new(baseUrl:String) { this.baseUrl = baseUrl; @@ -36,31 +37,35 @@ class NginxImageSource implements ImageSource { public function getPage(page:Page):Promise> { var category = page.filter.get("category"); - return new JsonLoader().GET(category != null ? this.baseUrl + category + "/" : this.baseUrl) - .then((response:NginxResponse) -> { - var data:Array = []; - for (item in response) { - if (item.type == NginxResponseItemType.FILE) { - var itemId = category != null ? category + "@" + item.name : item.name; - data.push(new ImageId().setSource(id).setId(itemId)); - } + var url = category != null ? this.baseUrl + category + "/" : this.baseUrl; + if (!this.cache.exists(url)) { + this.cache.set(url, new JsonLoader().GET(url)); + } + return this.cache.get(url).then((response:NginxResponse) -> { + var data:Array = []; + for (item in response) { + if (item.type == NginxResponseItemType.FILE) { + var itemId = category != null ? category + "@" + item.name : item.name; + data.push(new ImageId().setSource(id).setId(itemId)); } - return { - page: page, - data: data, - total: response.length, - } - }); + } + data = data.slice(page.index * page.count, (page.index + 1) * page.count); + return { + page: page, + data: data, + total: response.length, + } + }); } public function load(id:String, thumb:Bool = false):Promise { var url = this.baseUrl + StringTools.replace(id, "@", "/"); - if (thumb) { - var parts = url.split("."); - var index = parts.length - 2; - parts[index] = parts[index] + "-thumbnail"; - url = parts.join("."); - } + // TODO: default size by screen width? + var width = thumb ? 360 : 1920; + var parts = url.split("."); + var index = parts.length - 2; + parts[index] = parts[index] + '-w${width}'; + url = parts.join("."); return Promise.promise(ImageValue.URL(url)); }