MCPcopy Create free account
hub / github.com/anyehttp/quantumult-x / getAppVersionCache

Method getAppVersionCache

h5/appstoreapi.js:624–663  ·  view source on GitHub ↗

* 获取应用版本缓存 * 合并三方接口数据 * @description 从缓存中获取应用版本列表,如果不存在则从请求获取 * @param {number} salableAdamId - 应用的Adam ID * @param {number} startVersionId - 应用的外部版本 ID,可选参数,不传则返回最新版本 * @returns {cachedVersionsAll} - 所有app版本列表,缓存中不存在则返回空数组 * @returns {versionList} - 当前应用版本列表(Map 类型,键为外部版本ID,值为null

(salableAdamId, startVersionId)

Source from the content-addressed store, hash-verified

622 * @returns {versionList} - 当前应用版本列表(Map 类型,键为外部版本ID,值为null或者版本标识符),缓存中不存在则拉取请求返回版本列表
623 */
624 static async getAppVersionCache(salableAdamId, startVersionId) {
625 const cachedVersionsAll = new LRUCache(
626 sharedState.MAX_APP_CACHE,
627 JSON.parse($.cache.get(sharedState.VERSION_KEY) ?? "[]")
628 );
629
630 //如果缓存中不存在该应用的版本列表,则从请求获取 官方,三方接口数据
631 if (!cachedVersionsAll.has(salableAdamId)) {
632 const [processedVersions, legacyVersions] = await Promise.all([
633 this.#processVersionIdList(salableAdamId, startVersionId),
634 VersionService.concurrentGetVersionList(salableAdamId).catch(
635 ({ errors = [], error }) => {
636 $.log(...errors, error);
637 return { total: 0, data: [] };
638 }
639 ),
640 ]);
641
642 if (processedVersions.length >= legacyVersions.total) {
643 // 合并数据源
644 processedVersions.forEach(p => {
645 const legacy = legacyVersions.data.find(i => i[0] === p[0]);
646 if (legacy && p[1] === "????") p[1] = legacy[1];
647 });
648 cachedVersionsAll.put(salableAdamId, processedVersions);
649 } else {
650 cachedVersionsAll.put(salableAdamId, legacyVersions.data);
651 }
652 }
653
654 $.cache.set(
655 sharedState.VERSION_KEY,
656 JSON.stringify(cachedVersionsAll.toArray())
657 );
658
659 return {
660 cachedVersionsAll,
661 versionList: new Map(cachedVersionsAll.get(salableAdamId)),
662 };
663 }
664
665 /**
666 * 初始化版本ID列表,确保至少包含一个版本ID

Callers 1

getVersionsMethod · 0.80

Calls 7

getMethod · 0.95
hasMethod · 0.95
putMethod · 0.95
toArrayMethod · 0.95
#processVersionIdListMethod · 0.80
logMethod · 0.45

Tested by

no test coverage detected