/** * 更新日志管理器 * 负责管理更新日志的显示逻辑、版本检查等功能 */ import { AppUtil, PreferencesUtil } from '@pura/harmony-utils'; import { UpdateConstants } from '../constants/UpdateConstants'; import Logger from './Logger'; export class UpdateLogManager { private static readonly TAG = 'UpdateLogManager'; /** * 检查并显示更新日志 * @returns Promise 是否显示了更新日志 */ public static async checkAndShowUpdateLog(): Promise { try { if (!UpdateConstants.ENABLE_UPDATE_LOG) { Logger.info(UpdateLogManager.TAG, '更新日志功能已禁用'); return false; } const shouldShow = UpdateLogManager.shouldShowUpdateLog(); if (!shouldShow) { Logger.info(UpdateLogManager.TAG, '无需显示更新日志'); return false; } Logger.info(UpdateLogManager.TAG, '准备显示更新日志弹窗'); return true; } catch (error) { Logger.error(UpdateLogManager.TAG, '检查更新日志失败:' + error); return false; } } /** * 检查是否需要显示更新日志 */ private static shouldShowUpdateLog(): boolean { try { const currentVersion = UpdateLogManager.getCurrentVersion(); const lastShownVersion = PreferencesUtil.getStringSync('last_shown_update_version', ''); // 如果配置为每次启动都检查 if (UpdateConstants.CHECK_ON_EVERY_LAUNCH) { Logger.info(UpdateLogManager.TAG, '配置为每次启动都显示更新日志'); return true; } // 检查版本是否更新 const isVersionUpdated = lastShownVersion !== currentVersion; if (isVersionUpdated) { Logger.info(UpdateLogManager.TAG, `检测到版本更新:${lastShownVersion} -> ${currentVersion}`); } return isVersionUpdated; } catch (error) { Logger.error(UpdateLogManager.TAG, '检查更新日志显示条件失败:' + error); return false; } } /** * 获取当前应用版本号 */ private static getCurrentVersion(): string { try { return AppUtil.getVersionName(); } catch (error) { Logger.error(UpdateLogManager.TAG, '获取应用版本号失败:' + error); return '1.0.0'; } } /** * 标记当前版本的更新日志已显示 */ public static markCurrentVersionShown(): void { try { const currentVersion = UpdateLogManager.getCurrentVersion(); PreferencesUtil.putSync('last_shown_update_version', currentVersion); Logger.info(UpdateLogManager.TAG, `已标记版本 ${currentVersion} 的更新日志为已显示`); } catch (error) { Logger.error(UpdateLogManager.TAG, '标记更新日志已显示失败:' + error); } } /** * 重置更新日志显示状态(用于测试) */ public static resetUpdateLogStatus(): void { try { PreferencesUtil.deleteSync('last_shown_update_version'); Logger.info(UpdateLogManager.TAG, '已重置更新日志显示状态'); } catch (error) { Logger.error(UpdateLogManager.TAG, '重置更新日志显示状态失败:' + error); } } }