Skip to content

Commit bdbc818

Browse files
committed
feat: allow to enable or disable mini progress
1 parent 4836f98 commit bdbc818

File tree

8 files changed

+40
-27
lines changed

8 files changed

+40
-27
lines changed

electron-builder.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,4 @@ releaseInfo:
7171
添加检查更新发生错误的提示信息
7272
修复初次播放视频时无法显示设置的问题
7373
修复自动匹配字幕无法显示的问题
74+
添加开关 mini 进度条设置

src/main/lib/ffmpeg.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ export default class FFmpeg {
8888

8989
const fileName = `${Date.now()}-${nanoid(10)}-${index}.ass`
9090
const outputPath = path.join(subtitlesPath(), fileName)
91-
9291
return new Promise<string>((resolve, reject) => {
9392
this.ffmpeg
9493
.clone() // Ensure a new instance for each command

src/renderer/src/atoms/settings/player.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const createPlayerDefaultSettings = () => {
1616
return {
1717
enableTraditionalToSimplified: false,
1818
enableAutomaticEpisodeSwitching: true,
19+
enableMiniProgress: true,
1920
danmakuFontSize: getSelectedDefaultValue(danmakuFontSizeList) ?? '26',
2021
danmakuDuration: getSelectedDefaultValue(danmakuDurationList) ?? '15000',
2122
danmakuEndArea: getSelectedDefaultValue(danmakuEndAreaList)!,

src/renderer/src/components/modules/player/initialize/hooks.tsx

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import type { CommentModel } from '@renderer/request/models/comment'
1010
import type { Danmu, IPlayerOptions } from '@suemor/xgplayer'
1111
import XgPlayer from '@suemor/xgplayer'
1212
import { useAtomValue } from 'jotai'
13-
import { useEffect, useRef, useState } from 'react'
13+
import { useCallback, useEffect, useRef, useState } from 'react'
1414

1515
import { useDanmakuData } from '../loading/hooks'
1616
import { danmakuConfig, playerBaseConfigForClient, playerBaseConfigForWeb } from './config'
@@ -29,15 +29,15 @@ export const useXgPlayer = (url: string) => {
2929
const isLoadDanmaku = useAtomValue(isLoadDanmakuAtom)
3030
const video = useAtomValue(videoAtom)
3131
const playerSettings = usePlayerSettingsValue()
32-
const { danmakuDuration, danmakuFontSize, danmakuEndArea } = playerSettings
33-
const { setResponsiveDanmakuConfig } = useXgPlayerUtils()
32+
const { danmakuDuration, danmakuFontSize, danmakuEndArea, enableMiniProgress } = playerSettings
33+
const { setResponsiveSettingsUpdate } = useXgPlayerUtils()
3434
const { mergedDanmakuData } = useDanmakuData()
3535
useEffect(() => {
36-
setResponsiveDanmakuConfig(playerInstance)
36+
setResponsiveSettingsUpdate(playerInstance)
3737
return () => {
3838
dismiss()
3939
}
40-
}, [playerSettings])
40+
}, [setResponsiveSettingsUpdate])
4141

4242
useEffect(() => {
4343
const handleInitalizePlayer = async () => {
@@ -55,6 +55,7 @@ export const useXgPlayer = (url: string) => {
5555
}
5656
const xgplayerConfig = {
5757
...(isWeb ? playerBaseConfigForWeb : playerBaseConfigForClient),
58+
miniprogress: enableMiniProgress,
5859
el: playerRef.current,
5960
url,
6061
startTime,
@@ -70,7 +71,6 @@ export const useXgPlayer = (url: string) => {
7071
.map((danmaku) => danmaku?.content)
7172
.flatMap((danmaku) => danmaku.comments) ?? []
7273
}
73-
7474
xgplayerConfig.danmu = {
7575
...danmakuConfig,
7676
comments: parseDanmakuData({
@@ -123,19 +123,22 @@ export const useXgPlayer = (url: string) => {
123123
export const useXgPlayerUtils = () => {
124124
const playerSettings = usePlayerSettingsValue()
125125

126-
const setResponsiveDanmakuConfig = (playerInstance: PlayerType | null) => {
127-
if (playerInstance?.isPlaying) {
128-
const { danmakuDuration, danmakuEndArea, danmakuFontSize } = playerSettings
129-
playerInstance.danmu?.setFontSize(+danmakuFontSize, 24)
130-
playerInstance.danmu?.setAllDuration('all', +danmakuDuration)
131-
playerInstance.danmu?.setArea({
132-
start: 0,
133-
end: +danmakuEndArea,
134-
})
135-
}
136-
}
126+
const setResponsiveSettingsUpdate = useCallback(
127+
(playerInstance: PlayerType | null) => {
128+
if (playerInstance?.isPlaying) {
129+
const { danmakuDuration, danmakuEndArea, danmakuFontSize } = playerSettings
130+
playerInstance.danmu?.setFontSize(+danmakuFontSize, 24)
131+
playerInstance.danmu?.setAllDuration('all', +danmakuDuration)
132+
playerInstance.danmu?.setArea({
133+
start: 0,
134+
end: +danmakuEndArea,
135+
})
136+
}
137+
},
138+
[playerSettings],
139+
)
137140

138141
return {
139-
setResponsiveDanmakuConfig,
142+
setResponsiveSettingsUpdate,
140143
}
141144
}

src/renderer/src/components/modules/player/setting/items/damaku/AddDanmaku.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export const AddDanmaku = () => {
2929
const { danmaku } = useSettingConfig()
3030
const { danmakuDuration } = usePlayerSettingsValue()
3131
const player = usePlayerInstance()
32-
const { setResponsiveDanmakuConfig } = useXgPlayerUtils()
32+
const { setResponsiveSettingsUpdate } = useXgPlayerUtils()
3333
const { mutate, isPending } = useMutation({
3434
mutationFn: async (url: string) => {
3535
const matchedDanmaku = await apiClient.comment.getExtcomment({ url })
@@ -109,9 +109,9 @@ export const AddDanmaku = () => {
109109
player.danmu?.clear()
110110

111111
player.danmu?.updateComments(mergedDanmakus, true)
112-
setResponsiveDanmakuConfig(player)
112+
setResponsiveSettingsUpdate(player)
113113
},
114-
[danmakuDuration, player, setResponsiveDanmakuConfig],
114+
[danmakuDuration, player, setResponsiveSettingsUpdate],
115115
)
116116

117117
const handleImportDanmakuFile = useCallback(async () => {
@@ -157,12 +157,12 @@ export const AddDanmaku = () => {
157157
toast({
158158
title: `导入成功`,
159159
})
160-
}, [danmaku, danmakuDuration, hash, player, setResponsiveDanmakuConfig, toast])
160+
}, [danmaku, danmakuDuration, hash, player, setResponsiveSettingsUpdate, toast])
161161
return (
162162
<div className="space-y-6 pt-1">
163163
<form className="mt-1 flex flex-col gap-3" onSubmit={handleOnSubmit}>
164164
<Label htmlFor="width" className="text-zinc-600">
165-
从第三方网址导入
165+
从第三方网址导入弹幕
166166
</Label>
167167
<Input
168168
id="width"

src/renderer/src/components/modules/player/setting/items/damaku/DanmakuSource.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ const SourceList = memo(() => {
5959
const { danmaku } = useSettingConfig()
6060
const video = useAtomValue(videoAtom)
6161
const player = usePlayerInstance()
62-
const { setResponsiveDanmakuConfig } = useXgPlayerUtils()
62+
const { setResponsiveSettingsUpdate } = useXgPlayerUtils()
6363
const handleCheckDanmaku = debounce((params: { checked: CheckedState; source: string }) => {
6464
const { checked, source } = params
6565
if (checked === 'indeterminate') {
@@ -89,7 +89,7 @@ const SourceList = memo(() => {
8989
player.danmu?.clear()
9090

9191
player.danmu?.updateComments(parsedDanmaku, true)
92-
setResponsiveDanmakuConfig(player)
92+
setResponsiveSettingsUpdate(player)
9393

9494
db.history.update(video.hash, {
9595
danmaku,

src/renderer/src/components/modules/settings/views/Layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export const FieldsCardLayout: FC<FieldsCardLayoutProps> = ({ children, title, c
1313
return (
1414
<section
1515
className={cn(
16-
'min-h-20 space-y-3 rounded-lg border bg-zinc-50 p-3 dark:bg-zinc-900',
16+
'min-h-20 space-y-4 rounded-lg border bg-zinc-50 p-3 dark:bg-zinc-900',
1717
className,
1818
)}
1919
>

src/renderer/src/components/modules/settings/views/player/VideoSetting.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@ export const VideoSetting = () => {
1919
}}
2020
/>
2121
</FieldLayout>
22+
23+
<FieldLayout title="底部迷你进度条">
24+
<SettingSwitch
25+
value={playerSetting.enableMiniProgress}
26+
onCheckedChange={(value) => {
27+
setPlayerSetting((prev) => ({ ...prev, enableMiniProgress: value }))
28+
}}
29+
/>
30+
</FieldLayout>
2231
</FieldsCardLayout>
2332
)
2433
}

0 commit comments

Comments
 (0)