dsh-folia 2.5.8 → 2.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/routes/inventory.js +11 -3
- package/package.json +1 -1
package/lib/routes/inventory.js
CHANGED
|
@@ -126,6 +126,10 @@ const FOLIA_API_CATEGORY = 'wallpaper';
|
|
|
126
126
|
/** 明确**不是**壁纸的分类。没列进来的(含未来新增的)一律放行 —— 宁可多显示,不静默丢。 */
|
|
127
127
|
const FOLIA_NON_WALLPAPER_CATEGORIES = ['boot-animation', 'skin-pack', 'skin', 'pet', 'pets', 'assistant-skin'];
|
|
128
128
|
/** 分页上限:防止站点游标异常时无限翻页(每页 12~24,20 页足够几百条)。 */
|
|
129
|
+
/** 每次请求要多少条:接口支持 `?limit=`(实测 limit=5 生效),一次要 100 条能把
|
|
130
|
+
* 几百张图的清单压到个位数请求。 */
|
|
131
|
+
const FOLIA_API_LIMIT = 100;
|
|
132
|
+
/** 条目总数上限(防止站点数据异常时无限翻页)。100 × 20 = 2000 条。 */
|
|
129
133
|
const FOLIA_API_MAX_PAGES = 20;
|
|
130
134
|
const FOLIA_CATALOG_PATH = '/data/catalog.json';
|
|
131
135
|
const FOLIA_MANIFEST_PATH = '/manifest.json';
|
|
@@ -208,7 +212,11 @@ function foliaItemFromCatalog(it, base) {
|
|
|
208
212
|
const slug = String((it && (it.slug || it.id)) || '');
|
|
209
213
|
// 站点图片的预览走宿主缩略图代理:卡片只下 ~10 KB,不再下 500 KB 原图。
|
|
210
214
|
// (视频没有封面,保持 null —— 卡片会显示「无预览」,不会去拉整段视频。)
|
|
211
|
-
|
|
215
|
+
// 预览优先级:**站点自己给的 preview 最高**(省掉宿主这一跳,也最省流量);
|
|
216
|
+
// 站点没给才退回宿主缩略图代理。只有预览走小图,`media` 永远是原图 ——
|
|
217
|
+
// 应用壁纸用的是 `media`,所以画质不受影响。
|
|
218
|
+
const sitePreview = foliaAbs(base, it && (it.preview || it.poster)) || null;
|
|
219
|
+
const thumb = sitePreview ? null : (type === 'image' ? '/folia/site-thumb?u=' + encodeURIComponent(media) : null);
|
|
212
220
|
const extHit = String(media).match(/\.([a-z0-9]{2,5})(?:[?#]|$)/i);
|
|
213
221
|
const num = (v) => (Number.isFinite(Number(v)) && Number(v) > 0 ? Number(v) : undefined);
|
|
214
222
|
return {
|
|
@@ -220,7 +228,7 @@ function foliaItemFromCatalog(it, base) {
|
|
|
220
228
|
media, // 绝对 URL
|
|
221
229
|
mediaExt: '.' + (extHit ? extHit[1].toLowerCase() : (type === 'video' ? 'mp4' : 'jpg')),
|
|
222
230
|
// 站点目录可能带 preview/poster;图片没封面时用自己当预览,视频没有就留空(卡片会是黑块)
|
|
223
|
-
preview:
|
|
231
|
+
preview: sitePreview || thumb || null,
|
|
224
232
|
frameUrl: null,
|
|
225
233
|
schemeColor: null,
|
|
226
234
|
sceneLiveSrc: null,
|
|
@@ -326,7 +334,7 @@ async function foliaRemote(force = false) {
|
|
|
326
334
|
const out = [];
|
|
327
335
|
let cursor = null;
|
|
328
336
|
for (let page = 0; page < FOLIA_API_MAX_PAGES; page++) {
|
|
329
|
-
const scope = '?category=' + encodeURIComponent(FOLIA_API_CATEGORY);
|
|
337
|
+
const scope = '?category=' + encodeURIComponent(FOLIA_API_CATEGORY) + '&limit=' + FOLIA_API_LIMIT;
|
|
330
338
|
const qs = cursor ? FOLIA_API_PATH + scope + '&cursor=' + encodeURIComponent(cursor) : FOLIA_API_PATH + scope;
|
|
331
339
|
const { doc, error } = await fetchJson(qs);
|
|
332
340
|
if (!doc || !doc.ok || !doc.data) return { items: out, error: error || 'api-shape' };
|