diff --git a/resources/i18n/pt-br.json b/resources/i18n/pt-br.json
index e105f134..285a7152 100644
--- a/resources/i18n/pt-br.json
+++ b/resources/i18n/pt-br.json
@@ -126,6 +126,7 @@
"performer": "Músico |||| Músicos"
},
"actions": {
+ "topSongs": "Mais tocadas",
"shuffle": "Aleatório",
"radio": "Rádio"
}
@@ -412,6 +413,7 @@
"transcodingEnabled": "Navidrome está sendo executado com a opção %{config}. Isto permite que potencialmente se execute comandos do sistema pela interface Web. É recomendado que vc mantenha esta opção desabilitada, e só a habilite quando precisar configurar opções de Conversão",
"songsAddedToPlaylist": "Música adicionada à playlist |||| %{smart_count} músicas adicionadas à playlist",
"noSimilarSongsFound": "Nenhuma música semelhante encontrada",
+ "noTopSongsFound": "Nenhuma música mais tocada encontrada",
"noPlaylistsAvailable": "Nenhuma playlist",
"delete_user_title": "Excluir usuário '%{name}'",
"delete_user_content": "Você tem certeza que deseja excluir o usuário e todos os seus dados (incluindo suas playlists e preferências)?",
diff --git a/ui/src/artist/ArtistActions.jsx b/ui/src/artist/ArtistActions.jsx
index 33b9732e..c33ee892 100644
--- a/ui/src/artist/ArtistActions.jsx
+++ b/ui/src/artist/ArtistActions.jsx
@@ -12,9 +12,9 @@ import {
useTranslate,
} from 'react-admin'
import ShuffleIcon from '@material-ui/icons/Shuffle'
+import PlayArrowIcon from '@material-ui/icons/PlayArrow'
import { IoIosRadio } from 'react-icons/io'
-import { playTracks } from '../actions'
-import { playSimilar } from '../utils'
+import { playShuffle, playSimilar, playTopSongs } from './actions.js'
const useStyles = makeStyles((theme) => ({
toolbar: {
@@ -53,21 +53,19 @@ const ArtistActions = ({ className, record, ...rest }) => {
const classes = useStyles()
const isMobile = useMediaQuery((theme) => theme.breakpoints.down('xs'))
+ const handlePlay = React.useCallback(async () => {
+ try {
+ await playTopSongs(dispatch, notify, record.name)
+ } catch (e) {
+ // eslint-disable-next-line no-console
+ console.error('Error fetching top songs for artist:', e)
+ notify('ra.page.error', 'warning')
+ }
+ }, [dispatch, notify, record])
+
const handleShuffle = React.useCallback(async () => {
try {
- const res = await dataProvider.getList('song', {
- pagination: { page: 1, perPage: 500 },
- sort: { field: 'random', order: 'ASC' },
- filter: { album_artist_id: record.id, missing: false },
- })
-
- const data = {}
- const ids = []
- res.data.forEach((s) => {
- data[s.id] = s
- ids.push(s.id)
- })
- dispatch(playTracks(data, ids))
+ await playShuffle(dataProvider, dispatch, record.id)
} catch (e) {
// eslint-disable-next-line no-console
console.error('Error fetching songs for shuffle:', e)
@@ -90,6 +88,14 @@ const ArtistActions = ({ className, record, ...rest }) => {
className={`${className} ${classes.toolbar}`}
{...sanitizeListRestProps(rest)}
>
+