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}