mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-23 22:01:20 -08:00
fix(dash): [PKG-DASH-MENU-01] preserve settings navigation during SDK refresh
This commit is contained in:
1 parent
30f646be97
commit
88ce836f85
21 files changed
+769
-23
No files matched your search
@@ -20,7 +20,18 @@ export default function artplayerPluginDashControl<Level extends object = Qualit
|
||||
const subscriptions: [EventName, Cleanup][] = []
|
||||
const observer = observeSDK<Level, Track>({
|
||||
active: dash => !closed && !art.isDestroy && art.dash === dash,
|
||||
refresh: update,
|
||||
refresh() {
|
||||
const dash = art.dash
|
||||
let version = revision
|
||||
const current = () => !closed && !art.isDestroy && art.dash === dash && revision === version
|
||||
const restore = quality.captureNavigation(current) || audio.captureNavigation(current)
|
||||
if (!current())
|
||||
return
|
||||
version++
|
||||
update()
|
||||
if (current())
|
||||
restore?.()
|
||||
},
|
||||
reset() {
|
||||
const version = ++revision
|
||||
clear(() => version === revision)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { DisplayConfig, Label, MenuHost, MenuModel, SelectorItem, Valid } from './types'
|
||||
import type { Cleanup, DisplayConfig, Label, MenuHost, MenuModel, SelectorItem, Valid } from './types'
|
||||
|
||||
export function createMenu<Item extends SelectorItem>(art: MenuHost, name: string, icon: string) {
|
||||
let current: object | undefined
|
||||
@@ -70,5 +70,21 @@ export function createMenu<Item extends SelectorItem>(art: MenuHost, name: strin
|
||||
}
|
||||
}
|
||||
|
||||
return { update, clear }
|
||||
function captureNavigation(active: Valid): Cleanup | undefined {
|
||||
const setting = art.setting
|
||||
const item = setting.find?.(name)
|
||||
const callback = owned.get('setting')
|
||||
if (!active() || !callback || setting.show !== true || item?.onSelect !== callback || !item.selector || setting.active !== item.selector || typeof setting.render !== 'function')
|
||||
return
|
||||
return () => {
|
||||
if (!active() || art.setting !== setting || setting.show !== true || !setting.option || setting.active !== setting.option)
|
||||
return
|
||||
const replacement = setting.find?.(name)
|
||||
const callback = owned.get('setting')
|
||||
if (active() && callback && replacement?.onSelect === callback && replacement.selector)
|
||||
setting.render?.(replacement.selector)
|
||||
}
|
||||
}
|
||||
|
||||
return { update, clear, captureNavigation }
|
||||
}
|
||||
@@ -77,7 +77,11 @@ export interface Registry {
|
||||
remove: (name: string) => unknown
|
||||
check: (item: SelectorItem) => unknown
|
||||
cache?: { get?: (name: string) => { option?: { onSelect?: unknown } } | undefined }
|
||||
find?: (name: string) => { onSelect?: unknown } | undefined
|
||||
find?: (name: string) => { onSelect?: unknown, selector?: SelectorItem[] } | null | undefined
|
||||
active?: SelectorItem[] | null
|
||||
option?: SelectorItem[]
|
||||
show?: boolean
|
||||
render?: (option: SelectorItem[]) => unknown
|
||||
}
|
||||
|
||||
export interface MenuHost {
|
||||
|
||||
Reference in new issue
Block a user