|
|
@@ -12,7 +12,6 @@ import { PlaylistModel } from './PlaylistModel';
|
|
|
import { IjkMediaPlayer, LogUtils, InterruptEvent, InterruptHintType } from '@ohos/ijkplayer';
|
|
|
import { common } from '@kit.AbilityKit';
|
|
|
import { PreferencesUtil as PuraPreferencesUtil, StrUtil } from '@pura/harmony-utils';
|
|
|
-import { PreferencesUtil } from '../utils/PreferencesUtil';
|
|
|
import {
|
|
|
DataPersistenceService,
|
|
|
PlaylistSyncService,
|
|
|
@@ -31,7 +30,6 @@ import { AvSessionController } from '../../controller/AvSessionController';
|
|
|
import { avSession } from '@kit.AVSessionKit';
|
|
|
import { formProvider, formBindingData } from '@kit.FormKit';
|
|
|
import { fileIo } from '@kit.CoreFileKit';
|
|
|
-import { BusinessError } from '@kit.BasicServicesKit';
|
|
|
import { http } from '@kit.NetworkKit';
|
|
|
import { util } from '@kit.ArkTS';
|
|
|
import json from '@ohos.util.json';
|
|
|
@@ -446,9 +444,7 @@ export class UnifiedPlayerService implements IPlayerService, PlaylistSyncListene
|
|
|
private context: common.UIAbilityContext | null = null;
|
|
|
// 防重复调用机制
|
|
|
private isUpdatingForms: boolean = false;
|
|
|
- private lastUpdateTime: number = 0;
|
|
|
private lastAvSessionUpdateTime: number = 0;
|
|
|
- private readonly UPDATE_THROTTLE_MS: number = 100; // 100ms内只允许一次更新
|
|
|
private progressTimer: number = -1;
|
|
|
private isInitialized: boolean = false;
|
|
|
private isDataRestored: boolean = false; // 新增:数据恢复完成标识
|
|
|
@@ -3027,37 +3023,6 @@ export class UnifiedPlayerService implements IPlayerService, PlaylistSyncListene
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 处理新卡片添加事件。
|
|
|
- * 此方法专为 FormExtensionAbility 的 onAddForm 调用。
|
|
|
- * 它会确保在获取卡片数据前,服务的数据状态(如播放列表,当前歌曲)已从持久化存储中恢复,
|
|
|
- * 从而避免新添加的卡片显示默认的“未知歌曲”信息。
|
|
|
- * @param formId 新创建的卡片的ID
|
|
|
- * @returns FormBindingData 实例,包含了正确的初始歌曲信息。
|
|
|
- */
|
|
|
- public async onFormAdded(formId: string): Promise<formBindingData.FormBindingData> {
|
|
|
- try {
|
|
|
- LogUtils.getInstance().LOGI(`UnifiedPlayerService: Form [${formId}] added. Preparing initial data.`);
|
|
|
-
|
|
|
- // 1. 强制数据恢复,这是解决新卡片显示默认信息的关键步骤。
|
|
|
- await this.forceDataRestoration();
|
|
|
-
|
|
|
- // 2. 获取完整的卡片数据(包括图片)
|
|
|
- const widgetData = await this.getWidgetFormData(true);
|
|
|
- if (!widgetData) {
|
|
|
- LogUtils.getInstance().LOGI(`UnifiedPlayerService onFormAdded: Failed to get widget data after restoration.`);
|
|
|
- // 即使失败,也返回一个空的绑定数据,避免卡片创建失败
|
|
|
- return formBindingData.createFormBindingData({});
|
|
|
- }
|
|
|
-
|
|
|
- // 3. 创建并返回 FormBindingData
|
|
|
- return formBindingData.createFormBindingData(widgetData);
|
|
|
- } catch (error) {
|
|
|
- LogUtils.getInstance().LOGI(`UnifiedPlayerService onFormAdded: Error preparing data for form [${formId}]: ${error}`);
|
|
|
- return formBindingData.createFormBindingData({});
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
public async getWidgetFormData(loadImage: boolean = true): Promise<widgeData | undefined> {
|
|
|
this.updatePlaylistStateInModelSync();
|
|
|
const formData: VideoItem = this.getCurrentSong()!; // VideoItem
|