Skip to content

Commit 39a12cc

Browse files
committed
Add: logger
1 parent 382b91b commit 39a12cc

17 files changed

Lines changed: 263 additions & 204 deletions

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,5 @@ ios
4242
android/**
4343
.node_modules
4444
node_modules
45-
dist
45+
dist
46+
*.swp

App.js

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,41 @@
1-
import React from 'react';
2-
import { StatusBar } from 'react-native';
3-
import AsyncStorage from '@react-native-async-storage/async-storage';
4-
import { NavigationContainer } from '@react-navigation/native';
5-
import { initialWindowMetrics, SafeAreaProvider } from 'react-native-safe-area-context';
6-
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
7-
import { useTranslation } from 'react-i18next';
8-
9-
import { HomeStack, SearchStack, PlaylistsStack, SettingsStack } from '~/screens/Stacks';
10-
import TabBar from '~/components/bar/TabBar';
11-
12-
import { ConfigContext, SetConfigContext, getConfig } from '~/contexts/config';
13-
import { initCacheSong } from '~/utils/cache';
14-
import { getSettings, SettingsContext, SetSettingsContext } from '~/contexts/settings';
15-
import { SetUpdateApiContext, UpdateApiContext } from '~/contexts/updateApi';
16-
import { SongContext, SongDispatchContext, defaultSong, songReducer } from '~/contexts/song';
17-
import { ThemeContext, getTheme } from '~/contexts/theme';
18-
import Player from '~/utils/player';
19-
import '~/i18next/i18next';
20-
21-
const Tab = createBottomTabNavigator();
22-
23-
global.maxBitRate = 0;
24-
global.streamFormat = 'mp3';
1+
import React from 'react'
2+
import { StatusBar, Platform } from 'react-native'
3+
import AsyncStorage from '@react-native-async-storage/async-storage'
4+
import { NavigationContainer } from '@react-navigation/native'
5+
import { initialWindowMetrics, SafeAreaProvider } from 'react-native-safe-area-context'
6+
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'
7+
import { useTranslation } from 'react-i18next'
8+
9+
import { HomeStack, SearchStack, PlaylistsStack, SettingsStack } from '~/screens/Stacks'
10+
import TabBar from '~/components/bar/TabBar'
11+
12+
import { ConfigContext, SetConfigContext, getConfig } from '~/contexts/config'
13+
import { initCacheSong } from '~/utils/cache'
14+
import { getSettings, SettingsContext, SetSettingsContext } from '~/contexts/settings'
15+
import { SetUpdateApiContext, UpdateApiContext } from '~/contexts/updateApi'
16+
import { SongContext, SongDispatchContext, defaultSong, songReducer } from '~/contexts/song'
17+
import { ThemeContext, getTheme } from '~/contexts/theme'
18+
import Player from '~/utils/player'
19+
import '~/i18next/i18next'
20+
import logger from '~/utils/logger'
21+
import { version } from '~/../package.json'
22+
23+
const Tab = createBottomTabNavigator()
24+
25+
global.maxBitRate = 0
26+
global.streamFormat = 'mp3'
2527

2628
const App = () => {
27-
const [config, setConfig] = React.useState({});
28-
const [settings, setSettings] = React.useState({});
29+
const [config, setConfig] = React.useState({})
30+
const [settings, setSettings] = React.useState({})
2931
const [song, dispatch] = React.useReducer(songReducer, defaultSong)
3032
const [theme, setTheme] = React.useState(getTheme())
3133
const [updateApi, setUpdateApi] = React.useState({ path: '', query: '' })
32-
const { i18n } = useTranslation();
34+
const { i18n } = useTranslation()
3335
Player.useEvent(song, dispatch)
3436

3537
React.useEffect(() => {
38+
logger.info(`App started (version: ${version}, platform: ${Platform.OS} ${Platform.Version})`)
3639
if (!song.isInit) Player.initPlayer(dispatch)
3740
getConfig()
3841
.then((config) => {
@@ -78,14 +81,14 @@ const App = () => {
7881

7982
React.useEffect(() => {
8083
i18n.changeLanguage(settings.language)
81-
.catch(err => console.error(err));
84+
.catch(err => logger.error(err))
8285
}, [settings.language])
8386

8487
const saveSettings = React.useCallback((settings) => {
8588
setSettings(settings)
8689
AsyncStorage.setItem('settings', JSON.stringify(settings))
8790
.catch((error) => {
88-
console.error('Save settings error:', error)
91+
logger.error('Save settings error:', error)
8992
})
9093
}, [settings, setSettings])
9194

@@ -137,7 +140,7 @@ const App = () => {
137140
</SetUpdateApiContext.Provider>
138141
</SetSettingsContext.Provider>
139142
</SetConfigContext.Provider>
140-
);
143+
)
141144
}
142145

143-
export default App;
146+
export default App

app/components/button/FavoritedButton.js

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import React from 'react';
1+
import React from 'react'
22

3-
import { SetUpdateApiContext } from '~/contexts/updateApi';
4-
import { ConfigContext } from '~/contexts/config';
5-
import { ThemeContext } from '~/contexts/theme';
6-
import { getApi, refreshApi } from '~/utils/api';
7-
import IconButton from '~/components/button/IconButton';
3+
import { SetUpdateApiContext } from '~/contexts/updateApi'
4+
import { ConfigContext } from '~/contexts/config'
5+
import { ThemeContext } from '~/contexts/theme'
6+
import { getApi, refreshApi } from '~/utils/api'
7+
import IconButton from '~/components/button/IconButton'
8+
import logger from '~/utils/logger'
89

910
const FavoritedButton = ({ id, isFavorited = false, style = {}, size = 23 }) => {
1011
const [favorited, setFavorited] = React.useState(isFavorited)
@@ -25,7 +26,7 @@ const FavoritedButton = ({ id, isFavorited = false, style = {}, size = 23 }) =>
2526
setUpdateApi({ path: 'getStarred2', query: null, uid: 1 })
2627
})
2728
})
28-
.catch((e) => console.error(`FavoritedButton: ${e}`))
29+
.catch((e) => logger.error(`FavoritedButton: ${e}`))
2930
}
3031

3132
return (
@@ -39,4 +40,4 @@ const FavoritedButton = ({ id, isFavorited = false, style = {}, size = 23 }) =>
3940
)
4041
}
4142

42-
export default FavoritedButton;
43+
export default FavoritedButton

app/components/lists/HorizontalList.js

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
1-
import React from 'react';
2-
import { Pressable, Text } from 'react-native';
3-
import { useNavigation } from '@react-navigation/native';
4-
import { useTranslation } from 'react-i18next';
1+
import React from 'react'
2+
import { Pressable, Text } from 'react-native'
3+
import { useNavigation } from '@react-navigation/native'
4+
import { useTranslation } from 'react-i18next'
55
import Icon from 'react-native-vector-icons/FontAwesome'
66

7-
import { getCachedAndApi, getUrl } from '~/utils/api';
8-
import { getJsonCache } from '~/utils/cache';
9-
import { ThemeContext } from '~/contexts/theme';
10-
import { SettingsContext, homeSections } from '~/contexts/settings';
11-
import { ConfigContext } from '~/contexts/config';
12-
import { UpdateApiContext, isUpdatable } from '~/contexts/updateApi';
13-
import HorizontalAlbums from '~/components/lists/HorizontalAlbums';
14-
import HorizontalArtists from '~/components/lists/HorizontalArtists';
15-
import HorizontalGenres from '~/components/lists/HorizontalGenres';
16-
import HorizontalLBStat from '~/components/lists/HorizontalLBStat';
17-
import HorizontalPlaylists from '~/components/lists/HorizontalPlaylists';
18-
import mainStyles from '~/styles/main';
19-
import RadioList from '~/components/lists/RadioList';
20-
import size from '~/styles/size';
7+
import { getCachedAndApi, getUrl } from '~/utils/api'
8+
import { getJsonCache } from '~/utils/cache'
9+
import { ThemeContext } from '~/contexts/theme'
10+
import { SettingsContext, homeSections } from '~/contexts/settings'
11+
import { ConfigContext } from '~/contexts/config'
12+
import { UpdateApiContext, isUpdatable } from '~/contexts/updateApi'
13+
import HorizontalAlbums from '~/components/lists/HorizontalAlbums'
14+
import HorizontalArtists from '~/components/lists/HorizontalArtists'
15+
import HorizontalGenres from '~/components/lists/HorizontalGenres'
16+
import HorizontalLBStat from '~/components/lists/HorizontalLBStat'
17+
import HorizontalPlaylists from '~/components/lists/HorizontalPlaylists'
18+
import mainStyles from '~/styles/main'
19+
import RadioList from '~/components/lists/RadioList'
20+
import size from '~/styles/size'
21+
import logger from '~/utils/logger'
2122

2223
const HorizontalList = ({ refresh, id, enable }) => {
23-
const { t } = useTranslation();
24-
const [list, setList] = React.useState();
24+
const { t } = useTranslation()
25+
const [list, setList] = React.useState()
2526
const theme = React.useContext(ThemeContext)
2627
const settings = React.useContext(SettingsContext)
27-
const navigation = useNavigation();
28+
const navigation = useNavigation()
2829
const config = React.useContext(ConfigContext)
2930
const updateApi = React.useContext(UpdateApiContext)
3031
const section = React.useMemo(() => homeSections.find(s => s.id === id), [id])
@@ -74,7 +75,7 @@ const HorizontalList = ({ refresh, id, enable }) => {
7475
if (!data?.payload?.listening_activity?.length) return
7576
setList(data.payload.listening_activity)
7677
})
77-
.catch(error => console.error(error))
78+
.catch(error => logger.error(error))
7879
} else {
7980
getCachedAndApi(config, section.path, nquery, (json) => section.getInfo(json, setList))
8081
}
@@ -120,4 +121,4 @@ const HorizontalList = ({ refresh, id, enable }) => {
120121
)
121122
}
122123

123-
export default HorizontalList;
124+
export default HorizontalList

app/contexts/song.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import Player from '~/utils/player'
33
import AsyncStorage from '@react-native-async-storage/async-storage'
44
import { Platform } from 'react-native'
55

6+
import logger from '~/utils/logger'
7+
68
export const SongContext = React.createContext()
79
export const SongDispatchContext = React.createContext()
810

@@ -15,7 +17,7 @@ const newSong = (state, action, isCache = false) => {
1517
else global.song = song
1618
if (isCache && Platform.OS === 'android') {
1719
AsyncStorage.setItem('song', JSON.stringify(song))
18-
.catch((error) => console.error('Error saving song to AsyncStorage:', error))
20+
.catch((error) => logger.error('Error saving song to AsyncStorage:', error))
1921
}
2022
return song
2123
}
@@ -109,7 +111,7 @@ export const songReducer = (state, action) => {
109111
isInit: true,
110112
}, true)
111113
default:
112-
console.error('Unknown action', action)
114+
logger.error('Unknown action', action)
113115
return state
114116
}
115117
}

app/screens/Explorer/AlbumExplorer.js

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,33 @@
1-
import React from 'react';
2-
import { View, Text, StyleSheet, ActivityIndicator } from 'react-native';
3-
import { LegendList } from '@legendapp/list';
4-
import { useNavigation } from '@react-navigation/native';
5-
import { useSafeAreaInsets } from 'react-native-safe-area-context';
6-
import { useTranslation } from 'react-i18next';
1+
import React from 'react'
2+
import { View, Text, StyleSheet, ActivityIndicator } from 'react-native'
3+
import { LegendList } from '@legendapp/list'
4+
import { useNavigation } from '@react-navigation/native'
5+
import { useSafeAreaInsets } from 'react-native-safe-area-context'
6+
import { useTranslation } from 'react-i18next'
77

8-
import { ThemeContext } from '~/contexts/theme';
9-
import { getApiNetworkFirst } from '~/utils/api';
10-
import { ConfigContext } from '~/contexts/config';
11-
import mainStyles from '~/styles/main';
12-
import PresHeaderIcon from '~/components/PresHeaderIcon';
13-
import Selector from '~/components/Selector';
14-
import size from '~/styles/size';
15-
import ExplorerItem from '~/components/item/ExplorerItem';
8+
import { ThemeContext } from '~/contexts/theme'
9+
import { getApiNetworkFirst } from '~/utils/api'
10+
import { ConfigContext } from '~/contexts/config'
11+
import mainStyles from '~/styles/main'
12+
import PresHeaderIcon from '~/components/PresHeaderIcon'
13+
import Selector from '~/components/Selector'
14+
import size from '~/styles/size'
15+
import ExplorerItem from '~/components/item/ExplorerItem'
16+
import logger from '~/utils/logger'
1617

17-
const TYPES = ['newest', 'highest', 'frequent', 'recent', 'starred', 'random'];
18-
const PAGE_SIZE = 100;
18+
const TYPES = ['newest', 'highest', 'frequent', 'recent', 'starred', 'random']
19+
const PAGE_SIZE = 100
1920

2021
const AlbumExplorer = () => {
21-
const { t } = useTranslation();
22-
const insets = useSafeAreaInsets();
23-
const theme = React.useContext(ThemeContext);
24-
const navigation = useNavigation();
25-
const config = React.useContext(ConfigContext);
26-
const [albums, setAlbums] = React.useState([]);
27-
const [type, setType] = React.useState('newest');
28-
const [offset, setOffset] = React.useState(0);
29-
const [isLoading, setIsLoading] = React.useState(false);
22+
const { t } = useTranslation()
23+
const insets = useSafeAreaInsets()
24+
const theme = React.useContext(ThemeContext)
25+
const navigation = useNavigation()
26+
const config = React.useContext(ConfigContext)
27+
const [albums, setAlbums] = React.useState([])
28+
const [type, setType] = React.useState('newest')
29+
const [offset, setOffset] = React.useState(0)
30+
const [isLoading, setIsLoading] = React.useState(false)
3031

3132
React.useEffect(() => {
3233
setIsLoading(true)
@@ -38,7 +39,7 @@ const AlbumExplorer = () => {
3839
setAlbums(prev => [...prev, ...newAlbums])
3940
})
4041
.catch(error => {
41-
console.error('Error fetching albums:', error)
42+
logger.error('Error fetching albums:', error)
4243
setIsLoading(false)
4344
})
4445
}, [type, offset])

app/screens/Explorer/SongExplorer.js

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
1-
import React from 'react';
2-
import { View, Text, StyleSheet, ActivityIndicator } from 'react-native';
3-
import { LegendList } from '@legendapp/list';
4-
import { useSafeAreaInsets } from 'react-native-safe-area-context';
5-
import { useTranslation } from 'react-i18next';
1+
import React from 'react'
2+
import { View, Text, StyleSheet, ActivityIndicator } from 'react-native'
3+
import { LegendList } from '@legendapp/list'
4+
import { useSafeAreaInsets } from 'react-native-safe-area-context'
5+
import { useTranslation } from 'react-i18next'
66

7-
import { ThemeContext } from '~/contexts/theme';
8-
import { getApiNetworkFirst } from '~/utils/api';
9-
import { ConfigContext } from '~/contexts/config';
10-
import SongItem from '~/components/item/SongItem';
11-
import mainStyles from '~/styles/main';
12-
import PresHeaderIcon from '~/components/PresHeaderIcon';
13-
import size from '~/styles/size';
7+
import { ThemeContext } from '~/contexts/theme'
8+
import { getApiNetworkFirst } from '~/utils/api'
9+
import { ConfigContext } from '~/contexts/config'
10+
import SongItem from '~/components/item/SongItem'
11+
import mainStyles from '~/styles/main'
12+
import PresHeaderIcon from '~/components/PresHeaderIcon'
13+
import size from '~/styles/size'
14+
import logger from '~/utils/logger'
1415

15-
const PAGE_SIZE = 100;
16+
const PAGE_SIZE = 100
1617

1718
const SongExplorer = () => {
18-
const { t } = useTranslation();
19-
const insets = useSafeAreaInsets();
20-
const theme = React.useContext(ThemeContext);
21-
const config = React.useContext(ConfigContext);
22-
const [songs, setSongs] = React.useState([]);
23-
const [offset, setOffset] = React.useState(0);
24-
const [isLoading, setIsLoading] = React.useState(false);
19+
const { t } = useTranslation()
20+
const insets = useSafeAreaInsets()
21+
const theme = React.useContext(ThemeContext)
22+
const config = React.useContext(ConfigContext)
23+
const [songs, setSongs] = React.useState([])
24+
const [offset, setOffset] = React.useState(0)
25+
const [isLoading, setIsLoading] = React.useState(false)
2526

2627
React.useEffect(() => {
2728
setIsLoading(true)
@@ -42,7 +43,7 @@ const SongExplorer = () => {
4243
setSongs(prev => [...prev, ...newSongs])
4344
})
4445
.catch(error => {
45-
console.error('Error fetching songs:', error)
46+
logger.error('Error fetching songs:', error)
4647
setIsLoading(false)
4748
})
4849
}, [offset])

0 commit comments

Comments
 (0)