xref: /MusicFree/src/pages/localMusic/index.tsx (revision 9501a53846abeb6e52d388c9c5031f73671944ef)
1import React from 'react';
2import {StyleSheet} from 'react-native';
3import rpx from '@/utils/rpx';
4import {SafeAreaView} from 'react-native-safe-area-context';
5import StatusBar from '@/components/base/statusBar';
6import LocalMusicList from './localMusicList';
7import MusicBar from '@/components/musicBar';
8import ComplexAppBar from '@/components/base/ComplexAppBar';
9import DocumentPicker from 'react-native-document-picker';
10import Toast from '@/utils/toast';
11import LocalMusicSheet from '@/core/localMusicSheet';
12import {useNavigation} from '@react-navigation/native';
13import {ROUTE_PATH} from '@/entry/router';
14import {errorLog} from '@/utils/log';
15
16export default function LocalMusic() {
17    const navigation = useNavigation<any>();
18
19    return (
20        <SafeAreaView style={style.wrapper}>
21            <StatusBar />
22            <ComplexAppBar
23                title="本地音乐"
24                onSearchPress={() => {
25                    navigation.navigate(ROUTE_PATH.SEARCH_MUSIC_LIST, {
26                        musicList: LocalMusicSheet.getMusicList(),
27                    });
28                }}
29                menuOptions={[
30                    {
31                        icon: 'magnify',
32                        title: '从文件夹导入',
33                        async onPress() {
34                            try {
35                                const dir =
36                                    await DocumentPicker.pickDirectory();
37                                if (dir?.uri) {
38                                    await LocalMusicSheet.importFolder(dir.uri);
39                                    Toast.success('导入成功');
40                                }
41                            } catch (e: any) {
42                                errorLog('导入歌曲失败', e?.message ?? '');
43                                Toast.warn('导入失败');
44                            }
45                        },
46                    },
47                ]}
48            />
49            <LocalMusicList />
50            <MusicBar />
51        </SafeAreaView>
52    );
53}
54
55const style = StyleSheet.create({
56    wrapper: {
57        width: rpx(750),
58        flex: 1,
59    },
60});
61