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)} > +