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