This commit is contained in:
lyswhut
2022-10-29 11:36:35 +08:00
parent 66b965d9f7
commit e45cee6596
715 changed files with 57096 additions and 31771 deletions
+6 -5
View File
@@ -1,6 +1,6 @@
import Sortable, { AutoScroll } from 'sortablejs/modular/sortable.core.esm'
import { onMounted } from '@renderer/utils/vueTools'
import { base as eventBaseName } from '@renderer/event/names'
import { onMounted } from '@common/utils/vueTools'
import { clearDownKeys } from '@renderer/event'
Sortable.mount(new AutoScroll())
@@ -28,13 +28,14 @@ export default ({ dom_list, dragingItemClassName, filter, onUpdate, onStart = no
onUnchoose() {
onEnd()
// 处于拖动状态期间,键盘事件无法监听,拖动结束手动清理按下的键
window.eventHub.emit(eventBaseName.setClearDownKeys)
// window.app_event.emit(eventBaseName.setClearDownKeys)
clearDownKeys()
},
onStart(event) {
window.eventHub.emit(eventBaseName.dragStart)
window.app_event.dragStart()
},
onEnd(event) {
window.eventHub.emit(eventBaseName.dragEnd)
window.app_event.dragEnd()
},
})
})
@@ -1,8 +1,8 @@
import { useI18n } from '@renderer/utils/vueTools'
import { useI18n } from '@renderer/plugins/i18n'
import { dialog } from '@renderer/plugins/Dialog'
export default () => {
const { t } = useI18n()
const t = useI18n()
return (type) => {
@@ -19,6 +19,7 @@ export default () => {
message = t('list_import_tip__alldata')
break
case 'playListPart':
case 'playListPart_v2':
message = t('list_import_tip__playlist_part')
break
@@ -1,38 +0,0 @@
import { onMounted, onBeforeUnmount, ref } from '@renderer/utils/vueTools'
export default name => {
const keyDown = ref(false)
const down = `key_${name}_down`
const up = `key_${name}_up`
const handle_key_down = event => {
if (!keyDown.value) {
// console.log(event)
switch (event.event.target.tagName) {
case 'INPUT':
case 'SELECT':
case 'TEXTAREA':
return
default: if (event.event.target.isContentEditable) return
}
keyDown.value = true
}
}
const handle_key_up = () => {
if (keyDown.value) keyDown.value = false
}
onMounted(() => {
window.eventHub.on(down, handle_key_down)
window.eventHub.on(up, handle_key_up)
})
onBeforeUnmount(() => {
window.eventHub.off(down, handle_key_down)
window.eventHub.off(up, handle_key_up)
})
return keyDown
}
@@ -0,0 +1,38 @@
import { onMounted, onBeforeUnmount, ref } from '@common/utils/vueTools'
export default (name: string) => {
const keyDown = ref(false)
const down = `key_${name}_down`
const up = `key_${name}_up`
const handle_key_down = (event: LX.KeyDownEevent) => {
if (!keyDown.value) {
// console.log(event)
switch ((event.event?.target as HTMLElement).tagName) {
case 'INPUT':
case 'SELECT':
case 'TEXTAREA':
return
default: if ((event.event?.target as HTMLElement).isContentEditable) return
}
keyDown.value = true
}
}
const handle_key_up = () => {
if (keyDown.value) keyDown.value = false
}
onMounted(() => {
window.key_event.on(down, handle_key_down)
window.key_event.on(up, handle_key_up)
})
onBeforeUnmount(() => {
window.key_event.off(down, handle_key_down)
window.key_event.off(up, handle_key_up)
})
return keyDown
}
+44 -16
View File
@@ -1,8 +1,10 @@
import { ref, onMounted, onBeforeUnmount, watch, nextTick } from '@renderer/utils/vueTools'
import { scrollTo, throttle, formatPlayTime2 } from '@renderer/utils'
import { player as eventPlayerNames } from '@renderer/event/names'
import { ref, onMounted, onBeforeUnmount, watch, nextTick } from '@common/utils/vueTools'
import { throttle, formatPlayTime2 } from '@common/utils/common'
import { scrollTo } from '@common/utils/renderer'
import { play } from '@renderer/core/player/action'
// import { player as eventPlayerNames } from '@renderer/event/names'
export default ({ isPlay, lyric, isShowLyricProgressSetting }) => {
export default ({ isPlay, lyric, playProgress, isShowLyricProgressSetting, offset }) => {
const dom_lyric = ref(null)
const dom_lyric_text = ref(null)
const dom_skip_line = ref(null)
@@ -28,10 +30,8 @@ export default ({ isPlay, lyric, isShowLyricProgressSetting }) => {
if (time == -1) return
handleSkipMouseLeave()
isStopScroll.value = false
let offset = lyric.offset + lyric.tempOffset
if (offset) offset = offset / 1000
window.eventHub.emit(eventPlayerNames.setProgress, Math.max(time + offset, 0))
if (!isPlay.value) window.eventHub.emit(eventPlayerNames.setPlay)
window.app_event.setProgress(time)
if (!isPlay.value) play()
}
const handleSkipMouseEnter = () => {
isSkipMouseEnter = true
@@ -51,13 +51,15 @@ export default ({ isPlay, lyric, isShowLyricProgressSetting }) => {
if (dom_pre_line === dom) return
if (dom.tagName == 'SPAN') {
dom = dom.parentNode.parentNode
} else if (dom.classList.contains('font')) {
} else if (dom.classList.contains('line')) {
dom = dom.parentNode
}
if (dom.time == null) {
if (lyric.lines.length) {
time = dom.classList.contains('pre') ? 0 : lyric.lines[lyric.lines.length - 1].time ?? 0
if (time) time = time / 1000
time = Math.max(time - lyric.offset - lyric.tempOffset, 0)
time /= 1000
if (time > playProgress.maxPlayTime) time = playProgress.maxPlayTime
timeStr.value = formatPlayTime2(time)
} else {
time = -1
@@ -65,7 +67,9 @@ export default ({ isPlay, lyric, isShowLyricProgressSetting }) => {
}
} else {
time = dom.time
if (time) time = time / 1000
time = Math.max(time - lyric.offset - lyric.tempOffset, 0)
time /= 1000
if (time > playProgress.maxPlayTime) time = playProgress.maxPlayTime
timeStr.value = formatPlayTime2(time)
}
dom_pre_line = dom
@@ -100,31 +104,49 @@ export default ({ isPlay, lyric, isShowLyricProgressSetting }) => {
handleScrollLrc()
}, 3000)
}
const handleLyricMouseDown = event => {
const handleLyricDown = (y) => {
// console.log(event)
if (delayScrollTimeout) {
clearTimeout(delayScrollTimeout)
delayScrollTimeout = null
}
isMsDown.value = true
msDownY = event.clientY
msDownY = y
msDownScrollY = dom_lyric.value.scrollTop
}
const handleLyricMouseDown = event => {
handleLyricDown(event.clientY)
}
const handleLyricTouchStart = event => {
if (event.changedTouches.length) {
const touch = event.changedTouches[0]
handleLyricDown(touch.clientY)
}
}
const handleMouseMsUp = event => {
isMsDown.value = false
}
const handleMouseMsMove = event => {
const handleMove = (y) => {
if (isMsDown.value) {
if (!isStopScroll.value) isStopScroll.value = true
if (cancelScrollFn) {
cancelScrollFn()
cancelScrollFn = null
}
dom_lyric.value.scrollTop = msDownScrollY + msDownY - event.clientY
dom_lyric.value.scrollTop = msDownScrollY + msDownY - y
startLyricScrollTimeout()
setTime()
}
}
const handleMouseMsMove = event => {
handleMove(event.clientY)
}
const handleTouchMove = (e) => {
if (e.changedTouches.length) {
const touch = e.changedTouches[0]
handleMove(touch.clientY)
}
}
const handleWheel = (event) => {
console.log(event.deltaY)
@@ -146,7 +168,7 @@ export default ({ isPlay, lyric, isShowLyricProgressSetting }) => {
dom_lyric_text.value.textContent = ''
dom_lyric_text.value.appendChild(dom_line_content)
nextTick(() => {
dom_lines = dom_lyric.value.querySelectorAll('.lrc-content')
dom_lines = dom_lyric.value.querySelectorAll('.line-content')
handleScrollLrc()
})
}
@@ -189,6 +211,8 @@ export default ({ isPlay, lyric, isShowLyricProgressSetting }) => {
onMounted(() => {
document.addEventListener('mousemove', handleMouseMsMove)
document.addEventListener('mouseup', handleMouseMsUp)
document.addEventListener('touchmove', handleTouchMove)
document.addEventListener('touchend', handleMouseMsUp)
initLrc(lyric.lines, null)
nextTick(() => {
@@ -199,6 +223,8 @@ export default ({ isPlay, lyric, isShowLyricProgressSetting }) => {
onBeforeUnmount(() => {
document.removeEventListener('mousemove', handleMouseMsMove)
document.removeEventListener('mouseup', handleMouseMsUp)
document.removeEventListener('touchmove', handleTouchMove)
document.removeEventListener('touchend', handleMouseMsUp)
})
return {
@@ -209,9 +235,11 @@ export default ({ isPlay, lyric, isShowLyricProgressSetting }) => {
isMsDown,
timeStr,
handleLyricMouseDown,
handleLyricTouchStart,
handleWheel,
handleSkipPlay,
handleSkipMouseEnter,
handleSkipMouseLeave,
handleScrollLrc,
}
}
@@ -1,4 +1,7 @@
import { onMounted, onBeforeUnmount, watch, reactive, ref, nextTick } from '@renderer/utils/vueTools'
import { onMounted, onBeforeUnmount, watch, reactive, ref } from '@common/utils/vueTools'
import { isFullscreen } from '@renderer/store'
let rootOffset = window.dt ? 0 : 8
export default ({ visible, location, onHide }) => {
const transition1 = 'transform, opacity'
@@ -10,17 +13,20 @@ export default ({ visible, location, onHide }) => {
top: 0,
opacity: 0,
transitionProperty: 'transform, opacity',
transform: 'scale(0) translate(0,0)',
transform: 'scale(.8, .7) translate(0,0)',
pointerEvents: 'none',
})
const handleShow = () => {
show = true
menuStyles.opacity = 1
menuStyles.transform = `scaleY(1) translate(${handleGetOffsetXY(location.value.x, location.value.y)})`
menuStyles.transform = `scale(1) translate(${handleGetOffsetXY(location.value.x, location.value.y)})`
menuStyles.pointerEvents = 'auto'
}
const handleHide = () => {
menuStyles.opacity = 0
menuStyles.transform = 'scale(0) translate(0, 0)'
menuStyles.transform = 'scale(.8, .7) translate(0, 0)'
menuStyles.pointerEvents = 'none'
show = false
}
const handleGetOffsetXY = (left, top) => {
@@ -33,8 +39,8 @@ export default ({ visible, location, onHide }) => {
const offsetHeight = containerHeight - top - listHeight
let x = 0
let y = 0
if (containerWidth > listWidth && offsetWidth < 17) {
x = offsetWidth - 17
if (containerWidth > listWidth && offsetWidth < 12) {
x = offsetWidth - 12
}
if (containerHeight > listHeight && offsetHeight < 5) {
y = offsetHeight - 5
@@ -55,15 +61,19 @@ export default ({ visible, location, onHide }) => {
visible ? handleShow() : handleHide()
}, { immediate: true })
watch(isFullscreen, isFullscreen => {
rootOffset = window.dt || isFullscreen ? 0 : 8
}, { immediate: true })
watch(location, location => {
menuStyles.left = location.x + 2 + 'px'
menuStyles.top = location.y + 'px'
nextTick(() => {
if (show) {
if (menuStyles.transitionProperty != transition2) menuStyles.transitionProperty = transition2
menuStyles.transform = `scaleY(1) translate(${handleGetOffsetXY(location.x, location.y)})`
}
})
menuStyles.left = location.x - rootOffset + 2 + 'px'
menuStyles.top = location.y - rootOffset + 'px'
// nextTick(() => {
if (show) {
if (menuStyles.transitionProperty != transition2) menuStyles.transitionProperty = transition2
menuStyles.transform = `scale(1) translate(${handleGetOffsetXY(location.x, location.y)})`
}
// })
}, { deep: true })
onMounted(() => {
@@ -1,20 +1,21 @@
import { appSetting, setTogglePlayMode } from '@renderer/store/setting'
import {
computed,
useCommit,
} from '@renderer/utils/vueTools'
} from '@common/utils/vueTools'
import { useI18n } from '@renderer/plugins/i18n'
const playNextModes = [
'listLoop',
'random',
'list',
'singleLoop',
]
export default ({ setting, t }) => {
const setPlayNextMode = useCommit('setPlayNextMode')
'none',
] as const
export default () => {
const t = useI18n()
const nextTogglePlayName = computed(() => {
switch (setting.value.player.togglePlayMethod) {
switch (appSetting['player.togglePlayMethod']) {
case 'listLoop': return t('player__play_toggle_mode_list_loop')
case 'random': return t('player__play_toggle_mode_random')
case 'singleLoop': return t('player__play_toggle_mode_single_loop')
@@ -24,9 +25,9 @@ export default ({ setting, t }) => {
})
const toggleNextPlayMode = () => {
let index = playNextModes.indexOf(setting.value.player.togglePlayMethod)
if (++index >= playNextModes.length) index = -1
setPlayNextMode(playNextModes[index] || '')
let index = playNextModes.indexOf(appSetting['player.togglePlayMethod'])
if (++index >= playNextModes.length) index = 0
setTogglePlayMode(playNextModes[index] ?? playNextModes[0])
}
return {
@@ -1,6 +1,5 @@
import { ref, onBeforeUnmount, toRef } from '@renderer/utils/vueTools'
import { player as eventPlayerNames } from '@renderer/event/names'
import { playProgress } from '@renderer/core/share/playProgress'
import { ref, onBeforeUnmount, toRef } from '@common/utils/vueTools'
import { playProgress } from '@renderer/store/player/playProgress'
export default () => {
const isActiveTransition = ref(false)
@@ -15,10 +14,10 @@ export default () => {
isActiveTransition.value = true
}
window.eventHub.on(eventPlayerNames.activeTransition, handleActiveTransition)
window.app_event.on('activePlayProgressTransition', handleActiveTransition)
onBeforeUnmount(() => {
window.eventHub.off(eventPlayerNames.activeTransition, handleActiveTransition)
window.app_event.off('activePlayProgressTransition', handleActiveTransition)
})
return {
@@ -1,34 +0,0 @@
import { setListUpdateTime } from '@renderer/utils/data'
import { setFetchingListStatus } from '@renderer/core/share/list'
import { useAction, useCommit } from '@renderer/utils/vueTools'
export default () => {
const getBoardListAll = useAction('leaderboard', 'getListAll')
const getListDetailAll = useAction('songList', 'getListDetailAll')
const setList = useCommit('list', 'setList')
const fetchList = (id, source, sourceListId) => {
setFetchingListStatus(id, true)
let promise
if (/board__/.test(sourceListId)) {
const id = sourceListId.replace(/board__/, '')
promise = getBoardListAll({ id, isRefresh: true })
} else {
promise = getListDetailAll({ source, id: sourceListId, isRefresh: true })
}
return promise.finally(() => {
setFetchingListStatus(id, false)
})
}
return async targetListInfo => {
const list = await fetchList(targetListInfo.id, targetListInfo.source, targetListInfo.sourceListId)
// console.log(targetListInfo.list.length, list.length)
setList({
...targetListInfo,
list,
})
setListUpdateTime(targetListInfo.id, Date.now())
}
}
@@ -1,29 +1,29 @@
import {
computed,
useCommit,
} from '@renderer/utils/vueTools'
} from '@common/utils/vueTools'
import { useI18n } from '@renderer/plugins/i18n'
import { appSetting, setLockDesktopLyric, setVisibleDesktopLyric } from '@renderer/store/setting'
export default ({ setting, t }) => {
const setVisibleDesktopLyric = useCommit('setVisibleDesktopLyric')
const setLockDesktopLyric = useCommit('setLockDesktopLyric')
export default () => {
const t = useI18n()
const toggleDesktopLyricBtnTitle = computed(() => {
return `${
setting.value.desktopLyric.enable
appSetting['desktopLyric.enable']
? t('player__desktop_lyric_off')
: t('player__desktop_lyric_on')
}(${
setting.value.desktopLyric.isLock
appSetting['desktopLyric.isLock']
? t('player__desktop_lyric_unlock')
: t('player__desktop_lyric_lock')
})`
})
const toggleDesktopLyric = () => {
setVisibleDesktopLyric(!setting.value.desktopLyric.enable)
setVisibleDesktopLyric(!appSetting['desktopLyric.enable'])
}
const toggleLockDesktopLyric = () => {
setLockDesktopLyric(!setting.value.desktopLyric.isLock)
setLockDesktopLyric(!appSetting['desktopLyric.isLock'])
}
return {