From 38c19eddc36dfbc1195cd4e8d8ef41d892d11d79 Mon Sep 17 00:00:00 2001 From: Deluan Date: Wed, 5 Aug 2020 14:57:59 -0400 Subject: [PATCH] Add 'download' option to album context menu --- resources/i18n/pt.json | 4 +++- ui/src/album/AlbumActions.js | 12 ++++++++++++ ui/src/album/AlbumShow.js | 2 +- ui/src/common/AlbumContextMenu.js | 21 +++++++++++++-------- ui/src/i18n/en.json | 4 +++- ui/src/subsonic/index.js | 4 +++- 6 files changed, 35 insertions(+), 12 deletions(-) diff --git a/resources/i18n/pt.json b/resources/i18n/pt.json index b42113a8f..15f25e692 100644 --- a/resources/i18n/pt.json +++ b/resources/i18n/pt.json @@ -44,7 +44,9 @@ "playAll": "Tocar", "playNext": "Tocar em seguida", "addToQueue": "Adicionar à fila", - "shuffle": "Aleatório" + "shuffle": "Aleatório", + "addToPlaylist": "Adicionar à playlist", + "download": "Baixar" }, "lists": { "all": "Todos", diff --git a/ui/src/album/AlbumActions.js b/ui/src/album/AlbumActions.js index 60aa07879..843ad5f41 100644 --- a/ui/src/album/AlbumActions.js +++ b/ui/src/album/AlbumActions.js @@ -6,11 +6,14 @@ import { } from 'react-admin' import PlayArrowIcon from '@material-ui/icons/PlayArrow' import ShuffleIcon from '@material-ui/icons/Shuffle' +import CloudDownloadIcon from '@material-ui/icons/CloudDownload' import React from 'react' import { useDispatch } from 'react-redux' import { playTracks, shuffleTracks } from '../audioplayer' +import subsonic from '../subsonic' const AlbumActions = ({ + albumId, className, ids, data, @@ -21,6 +24,7 @@ const AlbumActions = ({ const dispatch = useDispatch() const translate = useTranslate() + console.log(rest) return ( + ) } diff --git a/ui/src/album/AlbumShow.js b/ui/src/album/AlbumShow.js index 62b307b65..7eeefe978 100644 --- a/ui/src/album/AlbumShow.js +++ b/ui/src/album/AlbumShow.js @@ -26,7 +26,7 @@ const AlbumShow = (props) => { {...props} albumId={props.id} title={} - actions={<AlbumActions />} + actions={<AlbumActions albumId={props.id} />} filter={{ album_id: props.id }} resource={'albumSong'} exporter={false} diff --git a/ui/src/common/AlbumContextMenu.js b/ui/src/common/AlbumContextMenu.js index fd2534ff9..d0a8ae7db 100644 --- a/ui/src/common/AlbumContextMenu.js +++ b/ui/src/common/AlbumContextMenu.js @@ -1,15 +1,16 @@ import React, { useState } from 'react' +import PropTypes from 'prop-types' import { useDispatch } from 'react-redux' import IconButton from '@material-ui/core/IconButton' import Menu from '@material-ui/core/Menu' import MenuItem from '@material-ui/core/MenuItem' import MoreVertIcon from '@material-ui/icons/MoreVert' +import StarIcon from '@material-ui/icons/Star' import { makeStyles } from '@material-ui/core/styles' import { useDataProvider, useNotify, useTranslate } from 'react-admin' import { addTracks, playTracks, shuffleTracks } from '../audioplayer' import { openAddToPlaylist } from '../dialogs/dialogState' -import StarIcon from '@material-ui/icons/Star' -import PropTypes from 'prop-types' +import subsonic from '../subsonic' const useStyles = makeStyles({ noWrap: { @@ -35,19 +36,23 @@ const AlbumContextMenu = ({ record, discNumber, color, visible }) => { const options = { play: { label: 'resources.album.actions.playAll', - action: playTracks, + action: (data, ids) => dispatch(playTracks(data, ids)), }, addToQueue: { label: 'resources.album.actions.addToQueue', - action: addTracks, + action: (data, ids) => dispatch(addTracks(data, ids)), }, shuffle: { label: 'resources.album.actions.shuffle', - action: shuffleTracks, + action: (data, ids) => dispatch(shuffleTracks(data, ids)), }, addToPlaylist: { - label: 'resources.song.actions.addToPlaylist', - action: (data, ids) => openAddToPlaylist({ selectedIds: ids }), + label: 'resources.album.actions.addToPlaylist', + action: (data, ids) => dispatch(openAddToPlaylist({ selectedIds: ids })), + }, + download: { + label: 'resources.album.actions.download', + action: () => subsonic.download(record.id), }, } @@ -83,7 +88,7 @@ const AlbumContextMenu = ({ record, discNumber, color, visible }) => { }) .then((response) => { let { data, ids } = extractSongsData(response) - dispatch(options[key].action(data, ids)) + options[key].action(data, ids) }) .catch(() => { notify('ra.page.error', 'warning') diff --git a/ui/src/i18n/en.json b/ui/src/i18n/en.json index c1a288c66..781a7ca16 100644 --- a/ui/src/i18n/en.json +++ b/ui/src/i18n/en.json @@ -45,7 +45,9 @@ "playAll": "Play", "playNext": "Play Next", "addToQueue": "Play Later", - "shuffle": "Shuffle" + "shuffle": "Shuffle", + "addToPlaylist": "Add to Playlist", + "download": "Download" }, "lists": { "all": "All", diff --git a/ui/src/subsonic/index.js b/ui/src/subsonic/index.js index b5dfc5aac..aa77d785c 100644 --- a/ui/src/subsonic/index.js +++ b/ui/src/subsonic/index.js @@ -26,4 +26,6 @@ const url = (command, id, options) => { const scrobble = (id, submit) => fetchUtils.fetchJson(url('scrobble', id, { submission: submit })) -export default { url, scrobble } +const download = (id, submit) => (window.location.href = url('download', id)) + +export default { url, scrobble, download }