diff --git a/index.js b/index.js index eac7c6d..e34b06d 100644 --- a/index.js +++ b/index.js @@ -117,7 +117,12 @@ const init = () => { return } - global.restorePlayInfo = info + + let setting = store.getState().common.setting + global.restorePlayInfo = { + info, + startupAutoPlay: setting.startupAutoPlay, + } store.dispatch(playerAction.setList({ list: { diff --git a/publish/changeLog.md b/publish/changeLog.md index 8716b58..14d6c4c 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -2,6 +2,7 @@ - 新增设置-桌面歌词-单行歌词设置,默认关闭,启用后只显示一行歌词,超出窗口宽度自动滚动到末尾 - 新增设置-桌面歌词-显示歌词切换动画,默认启用,如果你觉得切换动画影响视觉可以将其关闭 +- 新增设置-基本设置-启动后自动播放音乐,默认关闭 ### 优化 diff --git a/src/config/defaultSetting.js b/src/config/defaultSetting.js index faf1d1d..1fdc95e 100644 --- a/src/config/defaultSetting.js +++ b/src/config/defaultSetting.js @@ -4,7 +4,7 @@ import { MUSIC_TOGGLE_MODE } from './constant' const defaultSetting = { - version: '1.24', + version: '1.25', player: { togglePlayMethod: MUSIC_TOGGLE_MODE.listLoop, highQuality: false, @@ -113,6 +113,7 @@ const defaultSetting = { // randomAnimate: true, ignoreVersion: null, isAgreePact: false, + startupAutoPlay: false, } const overwriteSetting = { diff --git a/src/lang/en_us.json b/src/lang/en_us.json index a00d942..2e085f8 100644 --- a/src/lang/en_us.json +++ b/src/lang/en_us.json @@ -123,6 +123,7 @@ "setting_backup_part_import_setting": "Import settings", "setting_backup_part_import_setting_desc": "Select the Settings file", "setting_basic": "General", + "setting_basic__startup_auto_play": "Play music automatically after startup", "setting_basic_animation": "Random pop-up animation", "setting_basic_lang": "Language", "setting_basic_share_type": "Share", diff --git a/src/lang/zh_cn.json b/src/lang/zh_cn.json index c4fcef2..c7afca5 100644 --- a/src/lang/zh_cn.json +++ b/src/lang/zh_cn.json @@ -52,8 +52,8 @@ "list_import_part_button_confirm": "覆盖掉", "list_import_part_confirm": "导入的列表({{importName}})与本地列表({{localName}})的ID相同,是否覆盖本地列表?", "list_import_part_desc": "选择列表文件", - "list_import_tip__failed": "导入失败", "list_import_tip__alldata": "这是一个所有数据备份文件,你需要去这里导入:\n设置 -> 备份与恢复 -> 列表数据 -> 导入列表", + "list_import_tip__failed": "导入失败", "list_import_tip__playlist": "这是一个列表备份文件,你需要去这里导入:\n设置 -> 备份与恢复 -> 列表数据 -> 导入列表", "list_import_tip__playlist_part": "这是一个单列表文件,你需要去这里导入:\n我的列表 -> 点击任意一个列表名右侧的菜单按钮 -> 在弹出的菜单中选择导入", "list_import_tip__setting": "这是一个设置备份文件,移动端不支持导入此类文件", @@ -124,6 +124,7 @@ "setting_backup_part_import_setting": "导入设置", "setting_backup_part_import_setting_desc": "选择配置文件", "setting_basic": "基本设置", + "setting_basic__startup_auto_play": "启动后自动播放音乐", "setting_basic_animation": "弹出层随机动画", "setting_basic_lang": "语言", "setting_basic_share_type": "分享方式", diff --git a/src/plugins/player/playList.js b/src/plugins/player/playList.js index 3c2e47e..81f7dfc 100644 --- a/src/plugins/player/playList.js +++ b/src/plugins/player/playList.js @@ -2,6 +2,7 @@ import TrackPlayer, { State } from 'react-native-track-player' import BackgroundTimer from 'react-native-background-timer' import { defaultUrl } from '@/config' import { getStore } from '@/store' +import { action as playerAction } from '@/store/modules/player' const store = getStore() const list = [] @@ -98,7 +99,10 @@ export const playMusic = async(tracks, time) => { if (time) await TrackPlayer.seekTo(time) if (global.restorePlayInfo) { await TrackPlayer.pause() + let startupAutoPlay = global.restorePlayInfo.startupAutoPlay global.restorePlayInfo = null + + if (startupAutoPlay) store.dispatch(playerAction.playMusic()) } else { await TrackPlayer.play() } diff --git a/src/screens/Home/Setting/Basic/IsStartupAutoPlay.js b/src/screens/Home/Setting/Basic/IsStartupAutoPlay.js new file mode 100644 index 0000000..b3a8b55 --- /dev/null +++ b/src/screens/Home/Setting/Basic/IsStartupAutoPlay.js @@ -0,0 +1,20 @@ +import React, { memo } from 'react' +import { View } from 'react-native' + +import { useGetter, useDispatch } from '@/store' + +import CheckBoxItem from '../components/CheckBoxItem' +import { useTranslation } from '@/plugins/i18n' + +export default memo(() => { + const { t } = useTranslation() + const startupAutoPlay = useGetter('common', 'startupAutoPlay') + const setStartupAutoPlay = useDispatch('common', 'setStartupAutoPlay') + + + return ( + + + + ) +}) diff --git a/src/screens/Home/Setting/Basic/index.js b/src/screens/Home/Setting/Basic/index.js index 8ecaf2c..7367829 100644 --- a/src/screens/Home/Setting/Basic/index.js +++ b/src/screens/Home/Setting/Basic/index.js @@ -6,6 +6,7 @@ import Source from './Source' import SourceName from './SourceName' import Language from './Language' import ShareType from './ShareType' +import IsStartupAutoPlay from './IsStartupAutoPlay' import { useTranslation } from '@/plugins/i18n' export default memo(() => { @@ -15,6 +16,7 @@ export default memo(() => { return (
+ diff --git a/src/store/modules/common/action.js b/src/store/modules/common/action.js index d380e0d..01b2a60 100644 --- a/src/store/modules/common/action.js +++ b/src/store/modules/common/action.js @@ -19,6 +19,7 @@ export const TYPES = { setNavScreenName: null, setPlayNextMode: null, setPrevSelectListId: null, + setStartupAutoPlay: null, setApiSource: null, setTheme: null, setIsAutoTheme: null, @@ -174,6 +175,15 @@ export const setPlayNextMode = mode => async(dispatch, getState) => { await setData(settingKey, state.common.setting) } +export const setStartupAutoPlay = enable => async(dispatch, getState) => { + dispatch({ + type: TYPES.setStartupAutoPlay, + payload: enable, + }) + const { common } = getState() + await setData(settingKey, common.setting) +} + export const setApiSource = id => async(dispatch, getState) => { dispatch({ type: TYPES.setApiSource, diff --git a/src/store/modules/common/getter.js b/src/store/modules/common/getter.js index 2f4de9e..52a73de 100644 --- a/src/store/modules/common/getter.js +++ b/src/store/modules/common/getter.js @@ -11,6 +11,8 @@ export const common = state => state.common export const navMenus = state => state.common.nav.menus export const navActiveIndex = state => state.common.nav.activeIndex +export const startupAutoPlay = state => state.common.setting.startupAutoPlay + export const setting = state => state.common.setting export const componentIds = state => state.common.componentIds diff --git a/src/store/modules/common/reducer.js b/src/store/modules/common/reducer.js index 328de71..0c8b620 100644 --- a/src/store/modules/common/reducer.js +++ b/src/store/modules/common/reducer.js @@ -258,6 +258,15 @@ const mutations = { }, } }, + [TYPES.setStartupAutoPlay](state, startupAutoPlay) { + return { + ...state, + setting: { + ...state.setting, + startupAutoPlay, + }, + } + }, [TYPES.setPlayerCacheSize](state, size) { return { ...state, diff --git a/src/store/modules/player/action.js b/src/store/modules/player/action.js index d660076..4a75023 100644 --- a/src/store/modules/player/action.js +++ b/src/store/modules/player/action.js @@ -430,7 +430,7 @@ export const refreshMusicUrl = (musicInfo, restorePlayTime) => (dispatch, getSta } const songmid = targetMusic.songmid const index = state.player.listInfo.list.findIndex(m => m.songmid == songmid) - handlePlayMusic({ + return handlePlayMusic({ getState, dispatch, index,