From c217a84a98fcf75ccd00a3ecfc0d23290bb91109 Mon Sep 17 00:00:00 2001 From: maotoumao Date: Sun, 11 May 2025 15:16:52 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=90=88=E5=B9=B6=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../panels/types/playList/header.tsx | 12 +++---- src/core/config.ts | 2 +- src/core/mediaCache.ts | 2 +- src/core/musicSheet/storage.ts | 3 +- .../components/bottom/playControl.tsx | 18 +++++----- .../setting/settingTypes/backupSetting.tsx | 22 ++++++------ src/utils/asyncLock.ts | 34 ------------------- src/utils/delay.ts | 10 +++--- src/utils/jsonUtil.ts | 19 +++++++++++ src/utils/mediaExtra.ts | 2 +- src/utils/persistStatus.ts | 2 +- src/utils/safeParse.ts | 10 ------ src/utils/safeStringify.ts | 7 ---- src/utils/sleep.ts | 11 ------ 14 files changed, 56 insertions(+), 98 deletions(-) delete mode 100644 src/utils/asyncLock.ts create mode 100644 src/utils/jsonUtil.ts delete mode 100644 src/utils/safeParse.ts delete mode 100644 src/utils/safeStringify.ts delete mode 100644 src/utils/sleep.ts diff --git a/src/components/panels/types/playList/header.tsx b/src/components/panels/types/playList/header.tsx index f89b168..3ddfa30 100644 --- a/src/components/panels/types/playList/header.tsx +++ b/src/components/panels/types/playList/header.tsx @@ -1,11 +1,11 @@ -import React from 'react'; -import {InteractionManager, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; +import IconTextButton from '@/components/base/iconTextButton'; import ThemeText from '@/components/base/themeText'; import repeatModeConst from '@/constants/repeatModeConst'; -import IconTextButton from '@/components/base/iconTextButton'; import TrackPlayer, { usePlayList, useRepeatMode } from '@/core/trackPlayer'; -import sleep from '@/utils/sleep.ts'; +import delay from '@/utils/delay'; +import rpx from '@/utils/rpx'; +import React from 'react'; +import { InteractionManager, StyleSheet, View } from 'react-native'; export default function Header() { const repeatMode = useRepeatMode(); @@ -26,7 +26,7 @@ export default function Header() { { InteractionManager.runAfterInteractions(async () => { - await sleep(20); + await delay(20, false); TrackPlayer.toggleRepeatMode(); }); }} diff --git a/src/core/config.ts b/src/core/config.ts index 269fda6..e5a4f1e 100644 --- a/src/core/config.ts +++ b/src/core/config.ts @@ -2,9 +2,9 @@ import {useMMKVObject} from 'react-native-mmkv'; import {getStorage, removeStorage} from '@/utils/storage'; import getOrCreateMMKV from '@/utils/getOrCreateMMKV.ts'; -import safeStringify from '@/utils/safeStringify.ts'; import type {AppConfigPropertyKey, IAppConfig, IAppConfigProperties} from '@/types/core/config'; +import { safeStringify } from '@/utils/jsonUtil'; const configStore = getOrCreateMMKV('App.config'); diff --git a/src/core/mediaCache.ts b/src/core/mediaCache.ts index 6a8083d..4d2d2b9 100644 --- a/src/core/mediaCache.ts +++ b/src/core/mediaCache.ts @@ -1,7 +1,7 @@ import { addFileScheme } from "@/utils/fileUtils"; import getOrCreateMMKV from "@/utils/getOrCreateMMKV"; +import { safeParse } from "@/utils/jsonUtil"; import { getMediaKey } from "@/utils/mediaItem"; -import safeParse from "@/utils/safeParse"; import { exists, unlink } from "react-native-fs"; // Internal Method diff --git a/src/core/musicSheet/storage.ts b/src/core/musicSheet/storage.ts index 867f9d5..5396306 100644 --- a/src/core/musicSheet/storage.ts +++ b/src/core/musicSheet/storage.ts @@ -1,8 +1,7 @@ import getOrCreateMMKV from '@/utils/getOrCreateMMKV.ts'; -import safeParse from '@/utils/safeParse.ts'; import {InteractionManager} from 'react-native'; -import safeStringify from '@/utils/safeStringify.ts'; import {SortType} from '@/constants/commonConst.ts'; +import { safeParse, safeStringify } from '@/utils/jsonUtil'; function getStorageData(key: string) { const mmkv = getOrCreateMMKV(`LocalSheet.${key}`); diff --git a/src/pages/musicDetail/components/bottom/playControl.tsx b/src/pages/musicDetail/components/bottom/playControl.tsx index 9719abe..a724e7c 100644 --- a/src/pages/musicDetail/components/bottom/playControl.tsx +++ b/src/pages/musicDetail/components/bottom/playControl.tsx @@ -1,14 +1,14 @@ -import React from 'react'; -import {InteractionManager, StyleSheet, View} from 'react-native'; -import rpx from '@/utils/rpx'; import repeatModeConst from '@/constants/repeatModeConst'; +import rpx from '@/utils/rpx'; +import React from 'react'; +import { InteractionManager, StyleSheet, View } from 'react-native'; -import useOrientation from '@/hooks/useOrientation'; -import {showPanel} from '@/components/panels/usePanel'; -import TrackPlayer, { useMusicState, useRepeatMode } from '@/core/trackPlayer'; -import {musicIsPaused} from '@/utils/trackUtils'; import Icon from '@/components/base/icon.tsx'; -import sleep from '@/utils/sleep'; +import { showPanel } from '@/components/panels/usePanel'; +import TrackPlayer, { useMusicState, useRepeatMode } from '@/core/trackPlayer'; +import useOrientation from '@/hooks/useOrientation'; +import delay from '@/utils/delay'; +import { musicIsPaused } from '@/utils/trackUtils'; export default function () { const repeatMode = useRepeatMode(); @@ -33,7 +33,7 @@ export default function () { size={rpx(56)} onPress={async () => { InteractionManager.runAfterInteractions(async () => { - await sleep(20); + await delay(20, false); TrackPlayer.toggleRepeatMode(); }); }} diff --git a/src/pages/setting/settingTypes/backupSetting.tsx b/src/pages/setting/settingTypes/backupSetting.tsx index d7ee9b9..30c9e58 100644 --- a/src/pages/setting/settingTypes/backupSetting.tsx +++ b/src/pages/setting/settingTypes/backupSetting.tsx @@ -1,23 +1,23 @@ -import React from "react"; -import { ScrollView, StyleSheet } from "react-native"; import ListItem, { ListItemHeader } from "@/components/base/listItem"; -import Toast from "@/utils/toast"; import Backup from "@/core/backup"; import { ROUTE_PATH, useNavigate } from "@/core/router"; +import Toast from "@/utils/toast"; +import React from "react"; +import { ScrollView, StyleSheet } from "react-native"; -import axios from "axios"; import { showDialog } from "@/components/dialogs/useDialog"; import { showPanel } from "@/components/panels/usePanel"; +import axios from "axios"; -import { AuthType, createClient } from "webdav"; -import { writeInChunks } from "@/utils/fileUtils.ts"; -import { getDocumentAsync } from "expo-document-picker"; -import { readAsStringAsync } from "expo-file-system"; -import sleep from "@/utils/sleep"; import { ResumeMode } from "@/constants/commonConst.ts"; import strings from "@/constants/strings.ts"; -import { errorLog } from "@/utils/log.ts"; import Config, { useAppConfig } from "@/core/config"; +import delay from "@/utils/delay"; +import { writeInChunks } from "@/utils/fileUtils.ts"; +import { errorLog } from "@/utils/log.ts"; +import { getDocumentAsync } from "expo-document-picker"; +import { readAsStringAsync } from "expo-file-system"; +import { AuthType, createClient } from "webdav"; export default function BackupSetting() { const navigate = useNavigate(); @@ -82,7 +82,7 @@ export default function BackupSetting() { title: '从本地文件恢复', loadingText: '恢复中...', async task() { - await sleep(300); + await delay(300, false); return Backup.resume(result, resumeMode); }, onResolve(_, hideDialog) { diff --git a/src/utils/asyncLock.ts b/src/utils/asyncLock.ts deleted file mode 100644 index 1ad19b0..0000000 --- a/src/utils/asyncLock.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {nanoid} from 'nanoid'; - -const locks = new Map(); - -export interface ILock { - key: string; - lockId: string; - valid: () => boolean; - release: () => void; -} - -function requireLock(key: string): ILock { - const lockId = nanoid(); - locks.set(key, lockId); - - return { - key, - lockId, - /** 锁是否有效 */ - valid() { - const currentLockId = locks.get(key); - return !currentLockId || currentLockId === lockId; - }, - /** 释放后赋空 */ - release() { - const currentLockId = locks.get(key); - if (currentLockId === lockId) { - locks.delete(key); - } - }, - }; -} - -export {requireLock}; diff --git a/src/utils/delay.ts b/src/utils/delay.ts index 360b2b4..a2faaac 100644 --- a/src/utils/delay.ts +++ b/src/utils/delay.ts @@ -1,9 +1,11 @@ import BackgroundTimer from 'react-native-background-timer'; -export default function (millsecond: number) { +export default function (millsecond: number, background = true) { return new Promise(resolve => { - BackgroundTimer.setTimeout(() => { - resolve(); - }, millsecond); + if (background) { + BackgroundTimer.setTimeout(resolve, millsecond); + } else { + setTimeout(resolve, millsecond); + } }); } diff --git a/src/utils/jsonUtil.ts b/src/utils/jsonUtil.ts new file mode 100644 index 0000000..a0bd679 --- /dev/null +++ b/src/utils/jsonUtil.ts @@ -0,0 +1,19 @@ +export function safeStringify(raw: any): string { + try { + return JSON.stringify(raw); + } catch { + return ''; + } +} + + +export function safeParse(raw?: string) { + try { + if (!raw) { + return null; + } + return JSON.parse(raw) as T; + } catch { + return null; + } +} diff --git a/src/utils/mediaExtra.ts b/src/utils/mediaExtra.ts index 287ef1d..da009b0 100644 --- a/src/utils/mediaExtra.ts +++ b/src/utils/mediaExtra.ts @@ -1,7 +1,7 @@ import getOrCreateMMKV from '@/utils/getOrCreateMMKV'; import { getMediaKey } from '@/utils/mediaItem'; -import safeParse from '@/utils/safeParse'; import { useEffect, useState } from 'react'; +import { safeParse } from './jsonUtil'; // Internal Method const getPluginStore = (pluginName: string) => { diff --git a/src/utils/persistStatus.ts b/src/utils/persistStatus.ts index 46fb3cd..d5b6a91 100644 --- a/src/utils/persistStatus.ts +++ b/src/utils/persistStatus.ts @@ -3,8 +3,8 @@ */ import getOrCreateMMKV from "@/utils/getOrCreateMMKV"; -import safeParse from "@/utils/safeParse"; import { useEffect, useState } from "react"; +import { safeParse } from "./jsonUtil"; // Internal Method const getStore = () => { diff --git a/src/utils/safeParse.ts b/src/utils/safeParse.ts deleted file mode 100644 index c403053..0000000 --- a/src/utils/safeParse.ts +++ /dev/null @@ -1,10 +0,0 @@ -export default function (raw?: string) { - try { - if (!raw) { - return null; - } - return JSON.parse(raw) as T; - } catch { - return null; - } -} diff --git a/src/utils/safeStringify.ts b/src/utils/safeStringify.ts deleted file mode 100644 index ae30bcd..0000000 --- a/src/utils/safeStringify.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default function (raw: any): string { - try { - return JSON.stringify(raw); - } catch { - return ''; - } -} diff --git a/src/utils/sleep.ts b/src/utils/sleep.ts deleted file mode 100644 index 51e54e8..0000000 --- a/src/utils/sleep.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Sleep是用的settimeout,delay用的是backgroundtimer - * @param ms - */ -export default function sleep(ms = 200) { - return new Promise(resolve => { - setTimeout(() => { - resolve(); - }, ms); - }); -}