141 lines
5.6 KiB
Plaintext
141 lines
5.6 KiB
Plaintext
import { DependScope, MutableObserver, PLVMediaPlayerAppContext } from '@polyvharmony/media-player-sdk'
|
|
import {
|
|
PLVMediaDownloadStatus,
|
|
PLVMediaDownloadStatusCompleted,
|
|
PLVMediaDownloadStatusDownloading,
|
|
PLVMediaDownloadStatusError,
|
|
PLVMediaDownloadStatusNotStarted,
|
|
PLVMediaDownloadStatusPaused,
|
|
PLVMediaDownloadStatusWaiting
|
|
} from '@polyvharmony/media-player-sdk-addon-cache-down'
|
|
import { PLVMPDownloadItemViewModel } from '../../modules/download/single/viewmodel/PLVMPDownloadItemViewModel'
|
|
import { PLVMPPageControlViewModel } from '../../modules/pagecontrol/viewmodel/PLVMPPageControlViewModel'
|
|
import { PLVMediaPlayerDownloadCenterPageParam, PLVMediaPlayerScenes } from '../enums/PLVMediaPlayerScenes'
|
|
|
|
@Component
|
|
export struct PLVMediaPlayerMoreLayoutDownloadActionView {
|
|
@Consume dependScope: DependScope
|
|
@Consume pageDependScope: DependScope
|
|
iconResource: Resource = $r("app.media.plv_media_player_more_download_action_icon_port")
|
|
textFontColor: string = '#FFFFFF'
|
|
private readonly downloadViewModel = this.dependScope.get(PLVMPDownloadItemViewModel)
|
|
private readonly pageControlViewModel = this.pageDependScope.get(PLVMPPageControlViewModel)
|
|
@State downloadStatusText: string = PLVMediaPlayerAppContext.getString($r("app.string.plv_media_player_ui_component_download_text"))
|
|
@State isShowDownloadProgress: boolean = false
|
|
@State downloadProgress: number = 0
|
|
@State downloadProgressText: string = "0%"
|
|
@State isVisible: boolean = false
|
|
private observers: MutableObserver[] = []
|
|
|
|
aboutToAppear(): void {
|
|
this.downloadViewModel.downloadItem.observe((viewState) => {
|
|
if (viewState === null) {
|
|
return
|
|
}
|
|
this.downloadStatusText = downloadStatusText(viewState.status)
|
|
this.isShowDownloadProgress = viewState.status instanceof PLVMediaDownloadStatusDownloading
|
|
|| viewState.status instanceof PLVMediaDownloadStatusWaiting;
|
|
this.downloadProgress = Math.floor(viewState.progress * 100)
|
|
this.downloadProgressText = `${this.downloadProgress}%`
|
|
this.isVisible = viewState.isVisible
|
|
}).pushTo(this.observers)
|
|
}
|
|
|
|
build() {
|
|
Column() {
|
|
if (!this.isShowDownloadProgress) {
|
|
Image(this.iconResource)
|
|
.width(36)
|
|
.height(36)
|
|
.draggable(false)
|
|
}
|
|
|
|
if (this.isShowDownloadProgress) {
|
|
Stack() {
|
|
Progress({
|
|
value: this.downloadProgress,
|
|
total: 100,
|
|
type: ProgressType.Ring
|
|
})
|
|
.width(36)
|
|
.height(36)
|
|
.color('#3F76FC')
|
|
.backgroundColor('#333F76FC')
|
|
.style({
|
|
strokeWidth: 3
|
|
})
|
|
|
|
Text(this.downloadProgressText)
|
|
.fontColor('#3F76FC')
|
|
.fontSize(12)
|
|
}
|
|
}
|
|
|
|
Text(this.downloadStatusText)
|
|
.fontColor(this.textFontColor)
|
|
.fontSize(12)
|
|
.margin({
|
|
top: 4
|
|
})
|
|
}
|
|
.visibility(this.isVisible ? Visibility.Visible : Visibility.None)
|
|
.gesture(
|
|
GestureGroup(GestureMode.Exclusive,
|
|
TapGesture()
|
|
.onAction(() => {
|
|
const status = this.downloadViewModel.downloadItem.value?.status ?? PLVMediaDownloadStatusNotStarted.instance
|
|
if (status instanceof PLVMediaDownloadStatusNotStarted
|
|
|| status instanceof PLVMediaDownloadStatusPaused
|
|
|| status instanceof PLVMediaDownloadStatusError) {
|
|
this.downloadViewModel.startDownload()
|
|
} else {
|
|
this.gotoDownloadCenter()
|
|
}
|
|
}),
|
|
LongPressGesture()
|
|
.onAction(() => this.gotoDownloadCenter())
|
|
)
|
|
)
|
|
}
|
|
|
|
private gotoDownloadCenter() {
|
|
const navPathStack: NavPathStack | undefined = this.pageControlViewModel.navPathStack
|
|
if (navPathStack === undefined) {
|
|
return
|
|
}
|
|
const status = this.downloadViewModel.downloadItem.value?.status ?? PLVMediaDownloadStatusNotStarted.instance
|
|
let gotoDownloadingTab = false
|
|
if (status instanceof PLVMediaDownloadStatusPaused
|
|
|| status instanceof PLVMediaDownloadStatusWaiting
|
|
|| status instanceof PLVMediaDownloadStatusDownloading
|
|
|| status instanceof PLVMediaDownloadStatusError) {
|
|
gotoDownloadingTab = true
|
|
}
|
|
navPathStack.removeByName(PLVMediaPlayerScenes.DOWNLOAD_CENTER.name)
|
|
navPathStack.pushPath(new NavPathInfo(
|
|
PLVMediaPlayerScenes.DOWNLOAD_CENTER.name,
|
|
new PLVMediaPlayerDownloadCenterPageParam(gotoDownloadingTab ? 1 : 0)
|
|
))
|
|
}
|
|
|
|
aboutToDisappear(): void {
|
|
MutableObserver.disposeAll(this.observers)
|
|
this.observers = []
|
|
}
|
|
}
|
|
|
|
export function downloadStatusText(status: PLVMediaDownloadStatus): string {
|
|
if (status instanceof PLVMediaDownloadStatusPaused) {
|
|
return PLVMediaPlayerAppContext.getString($r("app.string.plv_media_player_ui_component_download_text_paused"))
|
|
} else if (status instanceof PLVMediaDownloadStatusDownloading) {
|
|
return PLVMediaPlayerAppContext.getString($r("app.string.plv_media_player_ui_component_download_text_downloading"))
|
|
} else if (status instanceof PLVMediaDownloadStatusWaiting) {
|
|
return PLVMediaPlayerAppContext.getString($r("app.string.plv_media_player_ui_component_download_text_waiting"))
|
|
} else if (status instanceof PLVMediaDownloadStatusCompleted) {
|
|
return PLVMediaPlayerAppContext.getString($r("app.string.plv_media_player_ui_component_download_text_completed"))
|
|
} else if (status instanceof PLVMediaDownloadStatusError) {
|
|
return PLVMediaPlayerAppContext.getString($r("app.string.plv_media_player_ui_component_download_text_failed"))
|
|
} else {
|
|
return PLVMediaPlayerAppContext.getString($r("app.string.plv_media_player_ui_component_download_text"))
|
|
}
|
|
} |