dsh-folia 3.0.2 → 3.1.1

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 +42 -4
  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
  }
@@ -16706,6 +16717,16 @@ window.__ModuleLoader__.load({
16706
16717
  // hooks 已经跑过了;reload 只是"整页重载"的可选入口(极少数皮肤依赖启动期布局)
16707
16718
  reload: true,
16708
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
+ }
16709
16730
  // 不再整表重拉:本地标记已经对了,省掉那 600 ms 的"没反应"窗口。
16710
16731
  } else if (kind === "remove") {
16711
16732
  setNote({ kind: "ok", text: weT("已删除:") + label });
@@ -16773,9 +16794,26 @@ window.__ModuleLoader__.load({
16773
16794
  style: { margin: "4px 0 8px", display: "flex", gap: "8px", alignItems: "center", flexWrap: "wrap" },
16774
16795
  },
16775
16796
  React.createElement("span", null, weT("当前皮肤:") + activeName),
16776
- React.createElement("span", {
16777
- style: { fontSize: "11px", padding: "1px 6px", borderRadius: "999px", background: "rgba(142,230,168,0.16)", color: "#8ee6a8" },
16778
- }, weT("已应用")),
16797
+ // 谁在应用这套皮肤?判据只有一个:皮肤中心自己会给 <html> 盖 `data-dsh-skin`。
16798
+ // 属性 == 当前皮肤 ⇒ 它接管的(原生应用,完整)
16799
+ // 属性 缺失/不等 ⇒ 我们复刻兜底的(可能不全)
16800
+ // 把这层区别直接显示出来,省得"看起来不全"时无从判断该怪谁。
16801
+ (() => {
16802
+ let native = false;
16803
+ try { native = document.documentElement.getAttribute("data-dsh-skin") === active; } catch { native = false; }
16804
+ return React.createElement("span", {
16805
+ style: {
16806
+ fontSize: "11px",
16807
+ padding: "1px 6px",
16808
+ borderRadius: "999px",
16809
+ background: native ? "rgba(142,230,168,0.16)" : "rgba(255,196,120,0.16)",
16810
+ color: native ? "#8ee6a8" : "#ffd08a",
16811
+ },
16812
+ title: native
16813
+ ? weT("皮肤中心在页面加载时应用的(原生路径,完整)")
16814
+ : weT("皮肤中心没接手,用的是本插件的兜底注入(可能显示不全)"),
16815
+ }, native ? weT("皮肤中心接管") : weT("本地兜底"));
16816
+ })(),
16779
16817
  ));
16780
16818
  }
16781
16819
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-folia",
3
- "version": "3.0.2",
3
+ "version": "3.1.1",
4
4
  "description": "Folia 壁纸引擎:把本机 Wallpaper Engine 壁纸搬进 DSH 界面(场景实时渲染 / 视频 / 网页),内置液态玻璃与 Folia 吉祥物,并可从自建站点拉取壁纸。单包形态(组件已合并)。",
5
5
  "type": "module",
6
6
  "engines": {