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}