1bea4f105Sopenharmony_ci/* 2bea4f105Sopenharmony_ci * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved. 3bea4f105Sopenharmony_ci */ 4bea4f105Sopenharmony_ci 5bea4f105Sopenharmony_ciimport { Logger } from '../../common/util/HiLogger' 6bea4f105Sopenharmony_ciimport { ObservedArray } from '../../data/ObservedArray' 7bea4f105Sopenharmony_ciimport { AbsBaseViewModel } from '../../basemvvm/AbsBaseViewModel' 8bea4f105Sopenharmony_ciimport { BaseState, ViewState } from '../../basemvvm/ViewState' 9bea4f105Sopenharmony_ciimport { AudioPickerViewData } from '../model/AudioPickerViewData' 10bea4f105Sopenharmony_ciimport { LocalResourceManager } from '../../localresource/LocalResourceManager' 11bea4f105Sopenharmony_ciimport { Constants } from '../../constant/Constants' 12bea4f105Sopenharmony_ciimport { LocalAudioFile } from '../../localresource/localaudio/LocalAudioFile' 13bea4f105Sopenharmony_ci 14bea4f105Sopenharmony_ciconst logger: Logger = new Logger('AudioPickerViewModel') 15bea4f105Sopenharmony_ci 16bea4f105Sopenharmony_ci/** 17bea4f105Sopenharmony_ci * [audioPicker页面 viewmodel] 18bea4f105Sopenharmony_ci */ 19bea4f105Sopenharmony_ciexport class AudioPickerViewModel extends AbsBaseViewModel<LocalAudioFile> { 20bea4f105Sopenharmony_ci // 页面待观察的数据 21bea4f105Sopenharmony_ci private audioPickerViewData: AudioPickerViewData = new AudioPickerViewData() 22bea4f105Sopenharmony_ci private localResourceManager: LocalResourceManager = new LocalResourceManager(); 23bea4f105Sopenharmony_ci public audioTotal: number = 0 24bea4f105Sopenharmony_ci 25bea4f105Sopenharmony_ci constructor() { 26bea4f105Sopenharmony_ci super() 27bea4f105Sopenharmony_ci } 28bea4f105Sopenharmony_ci 29bea4f105Sopenharmony_ci /** 30bea4f105Sopenharmony_ci * 获取当前页面的可见性 31bea4f105Sopenharmony_ci * @returns 32bea4f105Sopenharmony_ci */ 33bea4f105Sopenharmony_ci public getState(): ViewState { 34bea4f105Sopenharmony_ci return this.audioPickerViewData.getState() 35bea4f105Sopenharmony_ci } 36bea4f105Sopenharmony_ci 37bea4f105Sopenharmony_ci 38bea4f105Sopenharmony_ci /** 39bea4f105Sopenharmony_ci * 获取当前页面的音频列表 40bea4f105Sopenharmony_ci * @returns 41bea4f105Sopenharmony_ci */ 42bea4f105Sopenharmony_ci protected getData(): ObservedArray<LocalAudioFile> { 43bea4f105Sopenharmony_ci return this.audioPickerViewData.getDataList() 44bea4f105Sopenharmony_ci } 45bea4f105Sopenharmony_ci 46bea4f105Sopenharmony_ci /** 47bea4f105Sopenharmony_ci * 获取列表中音频总数 48bea4f105Sopenharmony_ci * @returns 49bea4f105Sopenharmony_ci */ 50bea4f105Sopenharmony_ci public getAudioTotal(): number { 51bea4f105Sopenharmony_ci return this.audioPickerViewData.totalCount() 52bea4f105Sopenharmony_ci } 53bea4f105Sopenharmony_ci 54bea4f105Sopenharmony_ci /** 55bea4f105Sopenharmony_ci * 查询音频详情基类,子类需要重载 56bea4f105Sopenharmony_ci * @returns 57bea4f105Sopenharmony_ci */ 58bea4f105Sopenharmony_ci public queryAudioPickerList(pageNo: number, context: Context): Promise<boolean> { 59bea4f105Sopenharmony_ci return new Promise<boolean>((resolve) => { 60bea4f105Sopenharmony_ci try { 61bea4f105Sopenharmony_ci this.localResourceManager.getLocalAudioResource(pageNo * Constants.PICKER_PAGE_SIZE, 62bea4f105Sopenharmony_ci Constants.PICKER_PAGE_SIZE, context).then((value) => { 63bea4f105Sopenharmony_ci this.audioPickerViewData.append(value) 64bea4f105Sopenharmony_ci this.audioTotal = value.length 65bea4f105Sopenharmony_ci logger.info(`queryAudioPickerList: ${JSON.stringify(value.length)}`) 66bea4f105Sopenharmony_ci resolve(true) 67bea4f105Sopenharmony_ci }) 68bea4f105Sopenharmony_ci } catch (err) { 69bea4f105Sopenharmony_ci logger.error(`localAudioFile error: ${JSON.stringify(err)}`) 70bea4f105Sopenharmony_ci this.getState().setViewState(BaseState.ERROR) 71bea4f105Sopenharmony_ci resolve(false) 72bea4f105Sopenharmony_ci } 73bea4f105Sopenharmony_ci }) 74bea4f105Sopenharmony_ci } 75bea4f105Sopenharmony_ci 76bea4f105Sopenharmony_ci /** 77bea4f105Sopenharmony_ci * 加载更多 78bea4f105Sopenharmony_ci */ 79bea4f105Sopenharmony_ci public loadMore(pageNo: number, context: Context): Promise<boolean> { 80bea4f105Sopenharmony_ci return new Promise((resolve) => { 81bea4f105Sopenharmony_ci logger.info('loadMoreAudioPicker') 82bea4f105Sopenharmony_ci if (!this.audioPickerViewData.hasMoreData) { 83bea4f105Sopenharmony_ci resolve(false) 84bea4f105Sopenharmony_ci return 85bea4f105Sopenharmony_ci } 86bea4f105Sopenharmony_ci let pageNum = pageNo + 1 87bea4f105Sopenharmony_ci this.queryAudioPickerList(pageNum, context).then((isSuccess: boolean) => { 88bea4f105Sopenharmony_ci logger.info(`loadMoreMusic: ${isSuccess}`) 89bea4f105Sopenharmony_ci if (isSuccess) { 90bea4f105Sopenharmony_ci resolve(true) 91bea4f105Sopenharmony_ci } else { 92bea4f105Sopenharmony_ci resolve(false) 93bea4f105Sopenharmony_ci } 94bea4f105Sopenharmony_ci }) 95bea4f105Sopenharmony_ci }) 96bea4f105Sopenharmony_ci } 97bea4f105Sopenharmony_ci 98bea4f105Sopenharmony_ci /** 99bea4f105Sopenharmony_ci * 获取lazyforeach的数据源 100bea4f105Sopenharmony_ci * @returns 101bea4f105Sopenharmony_ci */ 102bea4f105Sopenharmony_ci public getDataSource(): AudioPickerViewData { 103bea4f105Sopenharmony_ci return this.audioPickerViewData 104bea4f105Sopenharmony_ci } 105bea4f105Sopenharmony_ci}