dsh-folia 3.0.1 → 3.1.0

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.
Files changed (2) hide show
  1. package/lib/client.js +32 -3
  2. package/package.json +1 -1
package/lib/client.js CHANGED
@@ -16596,6 +16596,13 @@ window.__ModuleLoader__.load({
16596
16596
  const id = await activeSkinIdFromHost();
16597
16597
  if (mine !== seq) return; // 期间又变了,放弃这次
16598
16598
  if (!id) return;
16599
+ // ⭐ 关键:如果 `html[data-dsh-skin]` 已经等于当前皮肤,说明**皮肤中心自己在启动时
16600
+ // 把它应用好了**(它会在页面加载时走完整流程:作用域化 CSS、六层、hooks、背景、
16601
+ // 校验)。那种情况下我们**什么都不做** —— 任何额外注入都只会干扰它。
16602
+ // 只有它没应用(我们拿不到它的应用路径 / 它没装)时,才用自建那套兜底。
16603
+ try {
16604
+ if (document.documentElement.getAttribute("data-dsh-skin") === id) return;
16605
+ } catch { /* 读不到属性就按"未应用"处理 */ }
16599
16606
  try { await applySkinHot(id); } catch { /* 失败就保持原生外观 */ }
16600
16607
  };
16601
16608
  try {
@@ -16677,17 +16684,21 @@ window.__ModuleLoader__.load({
16677
16684
  let applyErr = "";
16678
16685
  let bgKind = "none";
16679
16686
  let hooksInfo = { ran: false, reason: "skipped" };
16687
+ let reloadAfter = false;
16680
16688
  try {
16681
16689
  // ① 壁纸先让位:清掉 `id` 之后壁纸层撤下、`data-we-wallpaper` 消失,
16682
16690
  // 皮肤中心也不会再扣住皮肤。(反方向由 startSkinArbiter 负责。)
16683
16691
  if (typeof onClearWallpaper === "function") {
16684
16692
  try { await Promise.resolve(onClearWallpaper()); } catch { /* 清不掉也继续换肤 */ }
16685
16693
  }
16686
- // ② 应用皮肤
16694
+ // ② 让**皮肤中心自己**应用:写完 active 之后重新加载页面,它启动时会走完整流程
16695
+ // (这是唯一 100% 正确的路径)。自建那套只在"刷新没发生/它没装"时兜底。
16696
+ // 先做一次热应用,保证即使刷新被桌面壳吞掉,用户也立刻看到变化。
16687
16697
  const applied = await applySkinHot(id);
16688
16698
  info = applied.info;
16689
16699
  bgKind = applied.bg.kind;
16690
16700
  hooksInfo = applied.hooks;
16701
+ reloadAfter = true;
16691
16702
  } catch (e) {
16692
16703
  applyErr = String((e && e.message) || e);
16693
16704
  }
@@ -16700,10 +16711,22 @@ window.__ModuleLoader__.load({
16700
16711
  + ((info.source === "skin-center" || info.source === "local-scoped") ? weT("(已作用域化)") : weT("(未作用域化,可能显示不全)"))
16701
16712
  + (bgKind === "none" ? weT(",无背景媒体") : weT(",背景:") + bgKind)
16702
16713
  + (hooksInfo.ran ? weT(",动效已启动") : (hooksInfo.reason === "no-hooks" ? weT(",无动效") : weT(",动效未启动(") + hooksInfo.reason + ")"))
16714
+ + weT(",主题:") + (skinThemeNow() === "dark" ? weT("深色") : weT("浅色"))
16703
16715
  + (typeof onClearWallpaper === "function" ? weT(",壁纸已关闭") : ""),
16704
- // hooks 已经跑过了;这里只作为"整页重载"的可选入口(极少数皮肤依赖启动期布局)
16716
+ // 主题与背景变体写进提示:皮肤有 light/dark 两套素材,不写清就会"图对不上"。
16717
+ // hooks 已经跑过了;reload 只是"整页重载"的可选入口(极少数皮肤依赖启动期布局)
16705
16718
  reload: true,
16706
16719
  });
16720
+ // 刷新页面 = 把应用权交还给皮肤中心(它只在页面加载时应用)。
16721
+ // 用 replace 而非 reload:桌面壳里 reload 有时被吞掉。失败也不影响已完成的
16722
+ // 热应用 —— 用户至少能看到变化,只是缺动效那类要靠真刷新补齐。
16723
+ if (reloadAfter) {
16724
+ setTimeout(() => {
16725
+ try { window.location.replace(window.location.href); } catch {
16726
+ try { window.location.reload(); } catch { /* 两种都不可用:保留热应用结果 */ }
16727
+ }
16728
+ }, 900);
16729
+ }
16707
16730
  // 不再整表重拉:本地标记已经对了,省掉那 600 ms 的"没反应"窗口。
16708
16731
  } else if (kind === "remove") {
16709
16732
  setNote({ kind: "ok", text: weT("已删除:") + label });
@@ -16869,7 +16892,13 @@ window.__ModuleLoader__.load({
16869
16892
  if (shown.length > 0) {
16870
16893
  children.push(React.createElement("div", { key: "grid", style: SKINS_STYLE.grid },
16871
16894
  shown.map((s) => {
16872
- const previewRel = s.previewLight || s.previewDark || "";
16895
+ // 预览图**跟随当前主题**:每套皮肤都有 light / dark 两份预览(例:居家模型娘的
16896
+ // 白天房间 vs 夜晚房间)。之前一律取 light,于是"深色模式下看到的效果图"与
16897
+ // "实际渲染的 dark 变体"完全是两张画 —— 用户自然会觉得对不上。
16898
+ const darkNow = skinThemeNow() === "dark";
16899
+ const previewRel = (darkNow
16900
+ ? (s.previewDark || s.previewLight)
16901
+ : (s.previewLight || s.previewDark)) || "";
16873
16902
  const previewSrc = previewRel
16874
16903
  ? apiUrl("/skins/preview?p=" + encodeURIComponent(previewRel))
16875
16904
  : "";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-folia",
3
- "version": "3.0.1",
3
+ "version": "3.1.0",
4
4
  "description": "Folia 壁纸引擎:把本机 Wallpaper Engine 壁纸搬进 DSH 界面(场景实时渲染 / 视频 / 网页),内置液态玻璃与 Folia 吉祥物,并可从自建站点拉取壁纸。单包形态(组件已合并)。",
5
5
  "type": "module",
6
6
  "engines": {