@forward-widget/danmu-universe 0.15.1 → 0.15.2

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/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # 通用弹幕插件 (Danmu Universe)
2
2
 
3
3
  [![NPM Version](https://img.shields.io/npm/v/@forward-widget/danmu-universe)](https://www.npmjs.com/package/@forward-widget/danmu-universe)
4
- [![License](https://img.shields.io/npm/l/@forward-widget/danmu-universe)](https://github.com/baranwang/forward-widgets)
4
+ [![License](https://img.shields.io/npm/l/@forward-widget/danmu-universe)](https://github.com/baranwang/forward-widget)
5
5
 
6
6
  一个通用的弹幕聚合插件,支持从多个主流视频平台获取弹幕数据,为 Forward 生态系统提供跨平台的弹幕服务
7
7
 
@@ -25,10 +25,16 @@
25
25
 
26
26
  在Forward Widget的模块管理中导入以下URL:
27
27
 
28
- ```bash
29
- https://unpkg.com/@forward-widget/danmu-universe # 完整版
28
+ #### 完整版
29
+
30
+ ```
31
+ https://unpkg.com/@forward-widget/danmu-universe
32
+ ```
33
+
34
+ #### 精简版
30
35
 
31
- https://unpkg.com/@forward-widget/danmu-universe/lite # 精简版
36
+ ```
37
+ https://unpkg.com/@forward-widget/danmu-universe/lite
32
38
  ```
33
39
 
34
40
  ## 开发
@@ -1016,8 +1016,8 @@ var compat_ZodFirstPartyTypeKind, __webpack_modules__ = {
1016
1016
  var n = t + r, i = e[n];
1017
1017
  e[n] = (i << 8 | i >>> 24) & 0x00ff00ff | (i << 24 | i >>> 8) & 0xff00ff00;
1018
1018
  }
1019
- var o = this._hash.words, a = e[t + 0], l = e[t + 1], p = e[t + 2], h = e[t + 3], m = e[t + 4], g = e[t + 5], v = e[t + 6], y = e[t + 7], b = e[t + 8], w = e[t + 9], _ = e[t + 10], x = e[t + 11], k = e[t + 12], S = e[t + 13], O = e[t + 14], P = e[t + 15], z = o[0], I = o[1], E = o[2], j = o[3];
1020
- z = u(z, I, E, j, a, 7, s[0]), j = u(j, z, I, E, l, 12, s[1]), E = u(E, j, z, I, p, 17, s[2]), I = u(I, E, j, z, h, 22, s[3]), z = u(z, I, E, j, m, 7, s[4]), j = u(j, z, I, E, g, 12, s[5]), E = u(E, j, z, I, v, 17, s[6]), I = u(I, E, j, z, y, 22, s[7]), z = u(z, I, E, j, b, 7, s[8]), j = u(j, z, I, E, w, 12, s[9]), E = u(E, j, z, I, _, 17, s[10]), I = u(I, E, j, z, x, 22, s[11]), z = u(z, I, E, j, k, 7, s[12]), j = u(j, z, I, E, S, 12, s[13]), E = u(E, j, z, I, O, 17, s[14]), I = u(I, E, j, z, P, 22, s[15]), z = c(z, I, E, j, l, 5, s[16]), j = c(j, z, I, E, v, 9, s[17]), E = c(E, j, z, I, x, 14, s[18]), I = c(I, E, j, z, a, 20, s[19]), z = c(z, I, E, j, g, 5, s[20]), j = c(j, z, I, E, _, 9, s[21]), E = c(E, j, z, I, P, 14, s[22]), I = c(I, E, j, z, m, 20, s[23]), z = c(z, I, E, j, w, 5, s[24]), j = c(j, z, I, E, O, 9, s[25]), E = c(E, j, z, I, h, 14, s[26]), I = c(I, E, j, z, b, 20, s[27]), z = c(z, I, E, j, S, 5, s[28]), j = c(j, z, I, E, p, 9, s[29]), E = c(E, j, z, I, y, 14, s[30]), I = c(I, E, j, z, k, 20, s[31]), z = d(z, I, E, j, g, 4, s[32]), j = d(j, z, I, E, b, 11, s[33]), E = d(E, j, z, I, x, 16, s[34]), I = d(I, E, j, z, O, 23, s[35]), z = d(z, I, E, j, l, 4, s[36]), j = d(j, z, I, E, m, 11, s[37]), E = d(E, j, z, I, y, 16, s[38]), I = d(I, E, j, z, _, 23, s[39]), z = d(z, I, E, j, S, 4, s[40]), j = d(j, z, I, E, a, 11, s[41]), E = d(E, j, z, I, h, 16, s[42]), I = d(I, E, j, z, v, 23, s[43]), z = d(z, I, E, j, w, 4, s[44]), j = d(j, z, I, E, k, 11, s[45]), E = d(E, j, z, I, P, 16, s[46]), I = d(I, E, j, z, p, 23, s[47]), z = f(z, I, E, j, a, 6, s[48]), j = f(j, z, I, E, y, 10, s[49]), E = f(E, j, z, I, O, 15, s[50]), I = f(I, E, j, z, g, 21, s[51]), z = f(z, I, E, j, k, 6, s[52]), j = f(j, z, I, E, h, 10, s[53]), E = f(E, j, z, I, _, 15, s[54]), I = f(I, E, j, z, l, 21, s[55]), z = f(z, I, E, j, b, 6, s[56]), j = f(j, z, I, E, P, 10, s[57]), E = f(E, j, z, I, v, 15, s[58]), I = f(I, E, j, z, S, 21, s[59]), z = f(z, I, E, j, m, 6, s[60]), j = f(j, z, I, E, x, 10, s[61]), E = f(E, j, z, I, p, 15, s[62]), I = f(I, E, j, z, w, 21, s[63]), o[0] = o[0] + z | 0, o[1] = o[1] + I | 0, o[2] = o[2] + E | 0, o[3] = o[3] + j | 0;
1019
+ var o = this._hash.words, a = e[t + 0], l = e[t + 1], p = e[t + 2], h = e[t + 3], m = e[t + 4], g = e[t + 5], v = e[t + 6], y = e[t + 7], b = e[t + 8], w = e[t + 9], _ = e[t + 10], x = e[t + 11], k = e[t + 12], S = e[t + 13], O = e[t + 14], P = e[t + 15], I = o[0], z = o[1], E = o[2], j = o[3];
1020
+ I = u(I, z, E, j, a, 7, s[0]), j = u(j, I, z, E, l, 12, s[1]), E = u(E, j, I, z, p, 17, s[2]), z = u(z, E, j, I, h, 22, s[3]), I = u(I, z, E, j, m, 7, s[4]), j = u(j, I, z, E, g, 12, s[5]), E = u(E, j, I, z, v, 17, s[6]), z = u(z, E, j, I, y, 22, s[7]), I = u(I, z, E, j, b, 7, s[8]), j = u(j, I, z, E, w, 12, s[9]), E = u(E, j, I, z, _, 17, s[10]), z = u(z, E, j, I, x, 22, s[11]), I = u(I, z, E, j, k, 7, s[12]), j = u(j, I, z, E, S, 12, s[13]), E = u(E, j, I, z, O, 17, s[14]), z = u(z, E, j, I, P, 22, s[15]), I = c(I, z, E, j, l, 5, s[16]), j = c(j, I, z, E, v, 9, s[17]), E = c(E, j, I, z, x, 14, s[18]), z = c(z, E, j, I, a, 20, s[19]), I = c(I, z, E, j, g, 5, s[20]), j = c(j, I, z, E, _, 9, s[21]), E = c(E, j, I, z, P, 14, s[22]), z = c(z, E, j, I, m, 20, s[23]), I = c(I, z, E, j, w, 5, s[24]), j = c(j, I, z, E, O, 9, s[25]), E = c(E, j, I, z, h, 14, s[26]), z = c(z, E, j, I, b, 20, s[27]), I = c(I, z, E, j, S, 5, s[28]), j = c(j, I, z, E, p, 9, s[29]), E = c(E, j, I, z, y, 14, s[30]), z = c(z, E, j, I, k, 20, s[31]), I = d(I, z, E, j, g, 4, s[32]), j = d(j, I, z, E, b, 11, s[33]), E = d(E, j, I, z, x, 16, s[34]), z = d(z, E, j, I, O, 23, s[35]), I = d(I, z, E, j, l, 4, s[36]), j = d(j, I, z, E, m, 11, s[37]), E = d(E, j, I, z, y, 16, s[38]), z = d(z, E, j, I, _, 23, s[39]), I = d(I, z, E, j, S, 4, s[40]), j = d(j, I, z, E, a, 11, s[41]), E = d(E, j, I, z, h, 16, s[42]), z = d(z, E, j, I, v, 23, s[43]), I = d(I, z, E, j, w, 4, s[44]), j = d(j, I, z, E, k, 11, s[45]), E = d(E, j, I, z, P, 16, s[46]), z = d(z, E, j, I, p, 23, s[47]), I = f(I, z, E, j, a, 6, s[48]), j = f(j, I, z, E, y, 10, s[49]), E = f(E, j, I, z, O, 15, s[50]), z = f(z, E, j, I, g, 21, s[51]), I = f(I, z, E, j, k, 6, s[52]), j = f(j, I, z, E, h, 10, s[53]), E = f(E, j, I, z, _, 15, s[54]), z = f(z, E, j, I, l, 21, s[55]), I = f(I, z, E, j, b, 6, s[56]), j = f(j, I, z, E, P, 10, s[57]), E = f(E, j, I, z, v, 15, s[58]), z = f(z, E, j, I, S, 21, s[59]), I = f(I, z, E, j, m, 6, s[60]), j = f(j, I, z, E, x, 10, s[61]), E = f(E, j, I, z, p, 15, s[62]), z = f(z, E, j, I, w, 21, s[63]), o[0] = o[0] + I | 0, o[1] = o[1] + z | 0, o[2] = o[2] + E | 0, o[3] = o[3] + j | 0;
1021
1021
  },
1022
1022
  _doFinalize: function() {
1023
1023
  var e = this._data, r = e.words, n = 8 * this._nDataBytes, i = 8 * e.sigBytes;
@@ -10607,6 +10607,36 @@ class DoubanMatcher {
10607
10607
  douban_define_property(this, "logger", new Logger("豆瓣")), douban_define_property(this, "tmdbMatcher", new TmdbMatcher()), douban_define_property(this, "imdbMatcher", new ImdbMatcher()), douban_define_property(this, "fetch", new Fetch()), douban_define_property(this, "DOUBAN_API_KEY", "0ac44ae016490db2204ce0a042db2916");
10608
10608
  }
10609
10609
  }
10610
+ let LOCAL_TMDB_PLATFORM_MAP = {
10611
+ movie: {},
10612
+ tv: {
10613
+ 282136: {
10614
+ series: [
10615
+ {
10616
+ provider: "bilibili",
10617
+ idString: "seasonId=45962"
10618
+ }
10619
+ ]
10620
+ }
10621
+ }
10622
+ }, cloneProviders = (e)=>e.map(({ provider: e, idString: t, episodeNumber: r })=>void 0 === r ? {
10623
+ provider: e,
10624
+ idString: t
10625
+ } : {
10626
+ provider: e,
10627
+ idString: t,
10628
+ episodeNumber: r
10629
+ }), lookupLocalMap = ({ type: e, tmdbId: t, season: r })=>{
10630
+ var n, i, o;
10631
+ if (!Number.isInteger(t) || t < 0) return null;
10632
+ let a = String(t);
10633
+ if ("movie" === e) return null != (n = LOCAL_TMDB_PLATFORM_MAP.movie[a]) ? n : null;
10634
+ let s = LOCAL_TMDB_PLATFORM_MAP.tv[a];
10635
+ return s ? null == r ? null != (i = s.series) ? i : null : !Number.isInteger(r) || r < 0 ? null : null != (o = s[String(r)]) ? o : null : null;
10636
+ }, getLocalEpisodeParams = (e)=>{
10637
+ let t = lookupLocalMap(e);
10638
+ return t ? cloneProviders(t) : [];
10639
+ };
10610
10640
  function src_asyncGeneratorStep(e, t, r, n, i, o, a) {
10611
10641
  try {
10612
10642
  var s = e[o](a), l = s.value;
@@ -10665,14 +10695,14 @@ function src_object_spread_props(e, t) {
10665
10695
  Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
10666
10696
  }), e;
10667
10697
  }
10668
- let widgetVersion = "0.15.1";
10698
+ let widgetVersion = "0.15.2";
10669
10699
  WidgetMetadata = {
10670
10700
  id: "baranwang.danmu.universe",
10671
10701
  title: "通用弹幕",
10672
10702
  description: "通用弹幕插件,支持腾讯、优酷、爱奇艺、哔哩哔哩、人人视频等平台",
10673
10703
  author: "Baran",
10674
10704
  version: widgetVersion,
10675
- site: "https://github.com/baranwang/forward-widgets/tree/main/apps/danmu-universe",
10705
+ site: "https://github.com/baranwang/forward-widget/tree/main/apps/danmu-universe",
10676
10706
  requiredVersion: "0.0.2",
10677
10707
  globalParams: [
10678
10708
  {
@@ -10879,40 +10909,51 @@ WidgetMetadata = {
10879
10909
  };
10880
10910
  let checkShowEmptyAnimeTitle = (e)=>stringbool().catch(!0).parse(e.emptyAnimeTitle);
10881
10911
  searchDanmu = (e)=>src_async_to_generator(function*() {
10882
- let t = scrapers_scraper.setGlobalParams(e), { fuzzyMatch: r = "auto", type: n, episode: i } = e, o = [], a = new DoubanMatcher(), { doubanIds: s, videoPlatformInfo: l } = yield a.getEpisodeParams(e);
10883
- o = o.concat(l);
10912
+ let t = scrapers_scraper.setGlobalParams(e), { fuzzyMatch: r = "auto", type: n, episode: i } = e, o = (e)=>"tv" !== n ? e : e.map((e)=>src_object_spread_props(src_object_spread({}, e), {
10913
+ episodeNumber: i ? parseInt(i, 10) : e.episodeNumber
10914
+ })), a = (e)=>src_async_to_generator(function*() {
10915
+ let t = yield scrapers_scraper.getEpisodes(...o(e));
10916
+ return "tv" === n && i && (t = t.filter((e)=>e.episodeNumber === parseInt(i, 10))), t;
10917
+ })(), s = (e)=>({
10918
+ animes: e.map((e)=>{
10919
+ let t = `[${PROVIDER_NAMES[e.provider]}] `;
10920
+ return e.episodeTitle && (t += e.episodeTitle), {
10921
+ animeId: e.episodeId,
10922
+ animeTitle: t
10923
+ };
10924
+ })
10925
+ }), l = e.tmdbId ? Number(e.tmdbId) : NaN, u = "tv" === n && void 0 !== e.season ? Number(e.season) : null, c = Number.isInteger(l) ? getLocalEpisodeParams({
10926
+ type: n,
10927
+ tmdbId: l,
10928
+ season: u
10929
+ }) : [];
10930
+ if (c.length) {
10931
+ let e = yield a(c);
10932
+ if (e.length) return s(e);
10933
+ }
10934
+ let d = [], f = new DoubanMatcher(), { doubanIds: p, videoPlatformInfo: h } = yield f.getEpisodeParams(e);
10935
+ d = d.concat(h);
10884
10936
  try {
10885
10937
  if ((null == t ? void 0 : t.global.experimental.doubanHistory.enabled) && (null == t ? void 0 : t.global.experimental.doubanHistory.dbcl2)) {
10886
10938
  let e = new DoubanHistory(t.global.experimental.doubanHistory);
10887
- 1 === s.length && (yield e.setStatus(n, s[0], "tv" === n ? "doing" : "done"));
10939
+ 1 === p.length && (yield e.setStatus(n, p[0], "tv" === n ? "doing" : "done"));
10888
10940
  }
10889
10941
  } catch (e) {
10890
10942
  console.error(e);
10891
10943
  }
10892
- if (!(null == o ? void 0 : o.length) && "auto" === r || "always" === r) {
10944
+ if (!(null == d ? void 0 : d.length) && "auto" === r || "always" === r) {
10893
10945
  let t = yield scrapers_scraper.getEpisodeParams(e);
10894
- o = o.concat(t);
10946
+ d = d.concat(t);
10895
10947
  }
10896
- "tv" === n && (o = o.map((e)=>src_object_spread_props(src_object_spread({}, e), {
10897
- episodeNumber: i ? parseInt(i, 10) : void 0
10898
- })));
10899
- let u = yield scrapers_scraper.getEpisodes(...o);
10900
- return ("tv" === n && i && (u = u.filter((e)=>e.episodeNumber === parseInt(i, 10))), !u.length && checkShowEmptyAnimeTitle(e)) ? {
10948
+ let m = yield a(d);
10949
+ return !m.length && checkShowEmptyAnimeTitle(e) ? {
10901
10950
  animes: [
10902
10951
  {
10903
10952
  animeId: EMPTY_ANIME_CONFIG.ID,
10904
10953
  animeTitle: EMPTY_ANIME_CONFIG.TITLE
10905
10954
  }
10906
10955
  ]
10907
- } : {
10908
- animes: u.map((e)=>{
10909
- let t = `[${PROVIDER_NAMES[e.provider]}] `;
10910
- return e.episodeTitle && (t += e.episodeTitle), {
10911
- animeId: e.episodeId,
10912
- animeTitle: t
10913
- };
10914
- })
10915
- };
10956
+ } : s(m);
10916
10957
  })(), getDetail = (e)=>src_async_to_generator(function*() {
10917
10958
  scrapers_scraper.setGlobalParams(e);
10918
10959
  let { animeId: t, type: r, episode: n } = e;
@@ -1016,8 +1016,8 @@ var compat_ZodFirstPartyTypeKind, __webpack_modules__ = {
1016
1016
  var n = t + r, i = e[n];
1017
1017
  e[n] = (i << 8 | i >>> 24) & 0x00ff00ff | (i << 24 | i >>> 8) & 0xff00ff00;
1018
1018
  }
1019
- var o = this._hash.words, a = e[t + 0], l = e[t + 1], p = e[t + 2], h = e[t + 3], m = e[t + 4], g = e[t + 5], v = e[t + 6], y = e[t + 7], b = e[t + 8], w = e[t + 9], _ = e[t + 10], x = e[t + 11], k = e[t + 12], O = e[t + 13], S = e[t + 14], P = e[t + 15], z = o[0], I = o[1], E = o[2], j = o[3];
1020
- z = u(z, I, E, j, a, 7, s[0]), j = u(j, z, I, E, l, 12, s[1]), E = u(E, j, z, I, p, 17, s[2]), I = u(I, E, j, z, h, 22, s[3]), z = u(z, I, E, j, m, 7, s[4]), j = u(j, z, I, E, g, 12, s[5]), E = u(E, j, z, I, v, 17, s[6]), I = u(I, E, j, z, y, 22, s[7]), z = u(z, I, E, j, b, 7, s[8]), j = u(j, z, I, E, w, 12, s[9]), E = u(E, j, z, I, _, 17, s[10]), I = u(I, E, j, z, x, 22, s[11]), z = u(z, I, E, j, k, 7, s[12]), j = u(j, z, I, E, O, 12, s[13]), E = u(E, j, z, I, S, 17, s[14]), I = u(I, E, j, z, P, 22, s[15]), z = c(z, I, E, j, l, 5, s[16]), j = c(j, z, I, E, v, 9, s[17]), E = c(E, j, z, I, x, 14, s[18]), I = c(I, E, j, z, a, 20, s[19]), z = c(z, I, E, j, g, 5, s[20]), j = c(j, z, I, E, _, 9, s[21]), E = c(E, j, z, I, P, 14, s[22]), I = c(I, E, j, z, m, 20, s[23]), z = c(z, I, E, j, w, 5, s[24]), j = c(j, z, I, E, S, 9, s[25]), E = c(E, j, z, I, h, 14, s[26]), I = c(I, E, j, z, b, 20, s[27]), z = c(z, I, E, j, O, 5, s[28]), j = c(j, z, I, E, p, 9, s[29]), E = c(E, j, z, I, y, 14, s[30]), I = c(I, E, j, z, k, 20, s[31]), z = d(z, I, E, j, g, 4, s[32]), j = d(j, z, I, E, b, 11, s[33]), E = d(E, j, z, I, x, 16, s[34]), I = d(I, E, j, z, S, 23, s[35]), z = d(z, I, E, j, l, 4, s[36]), j = d(j, z, I, E, m, 11, s[37]), E = d(E, j, z, I, y, 16, s[38]), I = d(I, E, j, z, _, 23, s[39]), z = d(z, I, E, j, O, 4, s[40]), j = d(j, z, I, E, a, 11, s[41]), E = d(E, j, z, I, h, 16, s[42]), I = d(I, E, j, z, v, 23, s[43]), z = d(z, I, E, j, w, 4, s[44]), j = d(j, z, I, E, k, 11, s[45]), E = d(E, j, z, I, P, 16, s[46]), I = d(I, E, j, z, p, 23, s[47]), z = f(z, I, E, j, a, 6, s[48]), j = f(j, z, I, E, y, 10, s[49]), E = f(E, j, z, I, S, 15, s[50]), I = f(I, E, j, z, g, 21, s[51]), z = f(z, I, E, j, k, 6, s[52]), j = f(j, z, I, E, h, 10, s[53]), E = f(E, j, z, I, _, 15, s[54]), I = f(I, E, j, z, l, 21, s[55]), z = f(z, I, E, j, b, 6, s[56]), j = f(j, z, I, E, P, 10, s[57]), E = f(E, j, z, I, v, 15, s[58]), I = f(I, E, j, z, O, 21, s[59]), z = f(z, I, E, j, m, 6, s[60]), j = f(j, z, I, E, x, 10, s[61]), E = f(E, j, z, I, p, 15, s[62]), I = f(I, E, j, z, w, 21, s[63]), o[0] = o[0] + z | 0, o[1] = o[1] + I | 0, o[2] = o[2] + E | 0, o[3] = o[3] + j | 0;
1019
+ var o = this._hash.words, a = e[t + 0], l = e[t + 1], p = e[t + 2], h = e[t + 3], m = e[t + 4], g = e[t + 5], v = e[t + 6], y = e[t + 7], b = e[t + 8], w = e[t + 9], _ = e[t + 10], x = e[t + 11], k = e[t + 12], S = e[t + 13], O = e[t + 14], P = e[t + 15], z = o[0], I = o[1], E = o[2], j = o[3];
1020
+ z = u(z, I, E, j, a, 7, s[0]), j = u(j, z, I, E, l, 12, s[1]), E = u(E, j, z, I, p, 17, s[2]), I = u(I, E, j, z, h, 22, s[3]), z = u(z, I, E, j, m, 7, s[4]), j = u(j, z, I, E, g, 12, s[5]), E = u(E, j, z, I, v, 17, s[6]), I = u(I, E, j, z, y, 22, s[7]), z = u(z, I, E, j, b, 7, s[8]), j = u(j, z, I, E, w, 12, s[9]), E = u(E, j, z, I, _, 17, s[10]), I = u(I, E, j, z, x, 22, s[11]), z = u(z, I, E, j, k, 7, s[12]), j = u(j, z, I, E, S, 12, s[13]), E = u(E, j, z, I, O, 17, s[14]), I = u(I, E, j, z, P, 22, s[15]), z = c(z, I, E, j, l, 5, s[16]), j = c(j, z, I, E, v, 9, s[17]), E = c(E, j, z, I, x, 14, s[18]), I = c(I, E, j, z, a, 20, s[19]), z = c(z, I, E, j, g, 5, s[20]), j = c(j, z, I, E, _, 9, s[21]), E = c(E, j, z, I, P, 14, s[22]), I = c(I, E, j, z, m, 20, s[23]), z = c(z, I, E, j, w, 5, s[24]), j = c(j, z, I, E, O, 9, s[25]), E = c(E, j, z, I, h, 14, s[26]), I = c(I, E, j, z, b, 20, s[27]), z = c(z, I, E, j, S, 5, s[28]), j = c(j, z, I, E, p, 9, s[29]), E = c(E, j, z, I, y, 14, s[30]), I = c(I, E, j, z, k, 20, s[31]), z = d(z, I, E, j, g, 4, s[32]), j = d(j, z, I, E, b, 11, s[33]), E = d(E, j, z, I, x, 16, s[34]), I = d(I, E, j, z, O, 23, s[35]), z = d(z, I, E, j, l, 4, s[36]), j = d(j, z, I, E, m, 11, s[37]), E = d(E, j, z, I, y, 16, s[38]), I = d(I, E, j, z, _, 23, s[39]), z = d(z, I, E, j, S, 4, s[40]), j = d(j, z, I, E, a, 11, s[41]), E = d(E, j, z, I, h, 16, s[42]), I = d(I, E, j, z, v, 23, s[43]), z = d(z, I, E, j, w, 4, s[44]), j = d(j, z, I, E, k, 11, s[45]), E = d(E, j, z, I, P, 16, s[46]), I = d(I, E, j, z, p, 23, s[47]), z = f(z, I, E, j, a, 6, s[48]), j = f(j, z, I, E, y, 10, s[49]), E = f(E, j, z, I, O, 15, s[50]), I = f(I, E, j, z, g, 21, s[51]), z = f(z, I, E, j, k, 6, s[52]), j = f(j, z, I, E, h, 10, s[53]), E = f(E, j, z, I, _, 15, s[54]), I = f(I, E, j, z, l, 21, s[55]), z = f(z, I, E, j, b, 6, s[56]), j = f(j, z, I, E, P, 10, s[57]), E = f(E, j, z, I, v, 15, s[58]), I = f(I, E, j, z, S, 21, s[59]), z = f(z, I, E, j, m, 6, s[60]), j = f(j, z, I, E, x, 10, s[61]), E = f(E, j, z, I, p, 15, s[62]), I = f(I, E, j, z, w, 21, s[63]), o[0] = o[0] + z | 0, o[1] = o[1] + I | 0, o[2] = o[2] + E | 0, o[3] = o[3] + j | 0;
1021
1021
  },
1022
1022
  _doFinalize: function() {
1023
1023
  var e = this._data, r = e.words, n = 8 * this._nDataBytes, i = 8 * e.sigBytes;
@@ -10447,6 +10447,36 @@ class DoubanMatcher {
10447
10447
  douban_define_property(this, "logger", new Logger("豆瓣")), douban_define_property(this, "tmdbMatcher", new TmdbMatcher()), douban_define_property(this, "imdbMatcher", new ImdbMatcher()), douban_define_property(this, "fetch", new Fetch()), douban_define_property(this, "DOUBAN_API_KEY", "0ac44ae016490db2204ce0a042db2916");
10448
10448
  }
10449
10449
  }
10450
+ let LOCAL_TMDB_PLATFORM_MAP = {
10451
+ movie: {},
10452
+ tv: {
10453
+ 282136: {
10454
+ series: [
10455
+ {
10456
+ provider: "bilibili",
10457
+ idString: "seasonId=45962"
10458
+ }
10459
+ ]
10460
+ }
10461
+ }
10462
+ }, cloneProviders = (e)=>e.map(({ provider: e, idString: t, episodeNumber: r })=>void 0 === r ? {
10463
+ provider: e,
10464
+ idString: t
10465
+ } : {
10466
+ provider: e,
10467
+ idString: t,
10468
+ episodeNumber: r
10469
+ }), lookupLocalMap = ({ type: e, tmdbId: t, season: r })=>{
10470
+ var n, i, o;
10471
+ if (!Number.isInteger(t) || t < 0) return null;
10472
+ let a = String(t);
10473
+ if ("movie" === e) return null != (n = LOCAL_TMDB_PLATFORM_MAP.movie[a]) ? n : null;
10474
+ let s = LOCAL_TMDB_PLATFORM_MAP.tv[a];
10475
+ return s ? null == r ? null != (i = s.series) ? i : null : !Number.isInteger(r) || r < 0 ? null : null != (o = s[String(r)]) ? o : null : null;
10476
+ }, getLocalEpisodeParams = (e)=>{
10477
+ let t = lookupLocalMap(e);
10478
+ return t ? cloneProviders(t) : [];
10479
+ };
10450
10480
  function src_asyncGeneratorStep(e, t, r, n, i, o, a) {
10451
10481
  try {
10452
10482
  var s = e[o](a), l = s.value;
@@ -10505,14 +10535,14 @@ function src_object_spread_props(e, t) {
10505
10535
  Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
10506
10536
  }), e;
10507
10537
  }
10508
- let widgetVersion = "0.15.1";
10538
+ let widgetVersion = "0.15.2";
10509
10539
  WidgetMetadata = {
10510
10540
  id: "baranwang.danmu.universe",
10511
10541
  title: "通用弹幕",
10512
10542
  description: "通用弹幕插件,支持腾讯、优酷、爱奇艺、哔哩哔哩、人人视频等平台",
10513
10543
  author: "Baran",
10514
10544
  version: widgetVersion,
10515
- site: "https://github.com/baranwang/forward-widgets/tree/main/apps/danmu-universe",
10545
+ site: "https://github.com/baranwang/forward-widget/tree/main/apps/danmu-universe",
10516
10546
  requiredVersion: "0.0.2",
10517
10547
  globalParams: [
10518
10548
  {
@@ -10724,40 +10754,51 @@ WidgetMetadata = {
10724
10754
  };
10725
10755
  let checkShowEmptyAnimeTitle = (e)=>stringbool().catch(!0).parse(e.emptyAnimeTitle);
10726
10756
  searchDanmu = (e)=>src_async_to_generator(function*() {
10727
- let t = scrapers_scraper.setGlobalParams(e), { fuzzyMatch: r = "auto", type: n, episode: i } = e, o = [], a = new DoubanMatcher(), { doubanIds: s, videoPlatformInfo: l } = yield a.getEpisodeParams(e);
10728
- o = o.concat(l);
10757
+ let t = scrapers_scraper.setGlobalParams(e), { fuzzyMatch: r = "auto", type: n, episode: i } = e, o = (e)=>"tv" !== n ? e : e.map((e)=>src_object_spread_props(src_object_spread({}, e), {
10758
+ episodeNumber: i ? parseInt(i, 10) : e.episodeNumber
10759
+ })), a = (e)=>src_async_to_generator(function*() {
10760
+ let t = yield scrapers_scraper.getEpisodes(...o(e));
10761
+ return "tv" === n && i && (t = t.filter((e)=>e.episodeNumber === parseInt(i, 10))), t;
10762
+ })(), s = (e)=>({
10763
+ animes: e.map((e)=>{
10764
+ let t = `[${PROVIDER_NAMES[e.provider]}] `;
10765
+ return e.episodeTitle && (t += e.episodeTitle), {
10766
+ animeId: e.episodeId,
10767
+ animeTitle: t
10768
+ };
10769
+ })
10770
+ }), l = e.tmdbId ? Number(e.tmdbId) : NaN, u = "tv" === n && void 0 !== e.season ? Number(e.season) : null, c = Number.isInteger(l) ? getLocalEpisodeParams({
10771
+ type: n,
10772
+ tmdbId: l,
10773
+ season: u
10774
+ }) : [];
10775
+ if (c.length) {
10776
+ let e = yield a(c);
10777
+ if (e.length) return s(e);
10778
+ }
10779
+ let d = [], f = new DoubanMatcher(), { doubanIds: p, videoPlatformInfo: h } = yield f.getEpisodeParams(e);
10780
+ d = d.concat(h);
10729
10781
  try {
10730
10782
  if ((null == t ? void 0 : t.global.experimental.doubanHistory.enabled) && (null == t ? void 0 : t.global.experimental.doubanHistory.dbcl2)) {
10731
10783
  let e = new DoubanHistory(t.global.experimental.doubanHistory);
10732
- 1 === s.length && (yield e.setStatus(n, s[0], "tv" === n ? "doing" : "done"));
10784
+ 1 === p.length && (yield e.setStatus(n, p[0], "tv" === n ? "doing" : "done"));
10733
10785
  }
10734
10786
  } catch (e) {
10735
10787
  console.error(e);
10736
10788
  }
10737
- if (!(null == o ? void 0 : o.length) && "auto" === r || "always" === r) {
10789
+ if (!(null == d ? void 0 : d.length) && "auto" === r || "always" === r) {
10738
10790
  let t = yield scrapers_scraper.getEpisodeParams(e);
10739
- o = o.concat(t);
10791
+ d = d.concat(t);
10740
10792
  }
10741
- "tv" === n && (o = o.map((e)=>src_object_spread_props(src_object_spread({}, e), {
10742
- episodeNumber: i ? parseInt(i, 10) : void 0
10743
- })));
10744
- let u = yield scrapers_scraper.getEpisodes(...o);
10745
- return ("tv" === n && i && (u = u.filter((e)=>e.episodeNumber === parseInt(i, 10))), !u.length && checkShowEmptyAnimeTitle(e)) ? {
10793
+ let m = yield a(d);
10794
+ return !m.length && checkShowEmptyAnimeTitle(e) ? {
10746
10795
  animes: [
10747
10796
  {
10748
10797
  animeId: EMPTY_ANIME_CONFIG.ID,
10749
10798
  animeTitle: EMPTY_ANIME_CONFIG.TITLE
10750
10799
  }
10751
10800
  ]
10752
- } : {
10753
- animes: u.map((e)=>{
10754
- let t = `[${PROVIDER_NAMES[e.provider]}] `;
10755
- return e.episodeTitle && (t += e.episodeTitle), {
10756
- animeId: e.episodeId,
10757
- animeTitle: t
10758
- };
10759
- })
10760
- };
10801
+ } : s(m);
10761
10802
  })(), getDetail = (e)=>src_async_to_generator(function*() {
10762
10803
  scrapers_scraper.setGlobalParams(e);
10763
10804
  let { animeId: t, type: r, episode: n } = e;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forward-widget/danmu-universe",
3
- "version": "0.15.1",
3
+ "version": "0.15.2",
4
4
  "type": "module",
5
5
  "main": "./dist/danmu-universe.js",
6
6
  "exports": {
@@ -20,8 +20,8 @@
20
20
  "url-parse": "^1.5.10",
21
21
  "zod": "4.0.17",
22
22
  "@forward-widget/libs-fetch": "^0.0.0",
23
- "@forward-widget/libs-utils": "^0.0.0",
24
- "@forward-widget/libs-storage": "^0.0.0"
23
+ "@forward-widget/libs-storage": "^0.0.0",
24
+ "@forward-widget/libs-utils": "^0.0.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@forward-widget/libs": "2.1.0",
@@ -35,15 +35,16 @@
35
35
  "@types/url-parse": "^1.4.11",
36
36
  "rsbuild-plugin-protobufjs": "^0.0.0",
37
37
  "type-fest": "^4.41.0",
38
- "typescript": "^5.9.3"
38
+ "typescript": "^5.9.3",
39
+ "@forward-widget/tmdb-mapping-kit": "^0.0.0"
39
40
  },
40
41
  "repository": {
41
42
  "type": "git",
42
- "url": "https://github.com/baranwang/forward-widgets.git",
43
+ "url": "https://github.com/baranwang/forward-widget.git",
43
44
  "directory": "apps/danmu-universe"
44
45
  },
45
46
  "bugs": {
46
- "url": "https://github.com/baranwang/forward-widgets/issues/new?template=danmu-universe.md"
47
+ "url": "https://github.com/baranwang/forward-widget/issues/new?template=danmu-universe.md"
47
48
  },
48
49
  "publishConfig": {
49
50
  "access": "public",