diff --git a/conf/configuration.go b/conf/configuration.go index 485634220..f6a8a5bcb 100644 --- a/conf/configuration.go +++ b/conf/configuration.go @@ -40,6 +40,7 @@ type configOptions struct { CoverJpegQuality int UIWelcomeMessage string EnableGravatar bool + EnableFavourites bool GATrackingID string AuthRequestLimit int AuthWindowLength time.Duration @@ -143,6 +144,7 @@ func init() { viper.SetDefault("coverjpegquality", 75) viper.SetDefault("uiwelcomemessage", "") viper.SetDefault("enablegravatar", false) + viper.SetDefault("enablefavourites", true) viper.SetDefault("gatrackingid", "") viper.SetDefault("authrequestlimit", 5) viper.SetDefault("authwindowlength", 20*time.Second) diff --git a/server/app/serve_index.go b/server/app/serve_index.go index cc35f5baf..56bdebc7a 100644 --- a/server/app/serve_index.go +++ b/server/app/serve_index.go @@ -36,6 +36,7 @@ func serveIndex(ds model.DataStore, fs fs.FS) http.HandlerFunc { "enableTranscodingConfig": conf.Server.EnableTranscodingConfig, "gaTrackingId": conf.Server.GATrackingID, "enableDownloads": conf.Server.EnableDownloads, + "enableFavourites": conf.Server.EnableFavourites, "devActivityPanel": conf.Server.DevActivityPanel, "devFastAccessCoverArt": conf.Server.DevFastAccessCoverArt, } diff --git a/server/app/serve_index_test.go b/server/app/serve_index_test.go index 860e23694..a8e48f26f 100644 --- a/server/app/serve_index_test.go +++ b/server/app/serve_index_test.go @@ -114,6 +114,17 @@ var _ = Describe("serveIndex", func() { Expect(config).To(HaveKeyWithValue("enableDownloads", true)) }) + It("sets the enableLoved", func() { + conf.Server.EnableFavourites = true + r := httptest.NewRequest("GET", "/index.html", nil) + w := httptest.NewRecorder() + + serveIndex(ds, fs)(w, r) + + config := extractAppConfig(w.Body.String()) + Expect(config).To(HaveKeyWithValue("enableFavourites", true)) + }) + It("sets the gaTrackingId", func() { conf.Server.GATrackingID = "UA-12345" r := httptest.NewRequest("GET", "/index.html", nil) diff --git a/ui/src/album/AlbumDetails.js b/ui/src/album/AlbumDetails.js index c5ca28a30..36a6a2472 100644 --- a/ui/src/album/AlbumDetails.js +++ b/ui/src/album/AlbumDetails.js @@ -20,6 +20,7 @@ import { SizeField, LoveButton, } from '../common' +import config from '../config' const useStyles = makeStyles((theme) => ({ root: { @@ -160,14 +161,16 @@ const AlbumDetails = ({ record }) => { {record.name} - + {config.enableFavourites && ( + + )} diff --git a/ui/src/album/AlbumList.js b/ui/src/album/AlbumList.js index 3f585dac2..aa033eae5 100644 --- a/ui/src/album/AlbumList.js +++ b/ui/src/album/AlbumList.js @@ -19,6 +19,7 @@ import AlbumListView from './AlbumListView' import AlbumGridView from './AlbumGridView' import { AddToPlaylistDialog } from '../dialogs' import albumLists, { defaultAlbumList } from './albumLists' +import config from '../config' const AlbumFilter = (props) => { const translate = useTranslate() @@ -36,11 +37,13 @@ const AlbumFilter = (props) => { - } - defaultValue={true} - /> + {config.enableFavourites && ( + } + defaultValue={true} + /> + )} ) } diff --git a/ui/src/album/AlbumListView.js b/ui/src/album/AlbumListView.js index ad8f11f5d..60db104bd 100644 --- a/ui/src/album/AlbumListView.js +++ b/ui/src/album/AlbumListView.js @@ -20,6 +20,7 @@ import { MultiLineTextField, AlbumContextMenu, } from '../common' +import config from '../config' const useStyles = makeStyles({ columnIcon: { @@ -91,12 +92,15 @@ const AlbumListView = ({ hasShow, hasEdit, hasList, ...rest }) => { source={'starred'} sortBy={'starred ASC, starredAt ASC'} sortByOrder={'DESC'} + sortable={config.enableFavourites} className={classes.contextMenu} label={ - + config.enableFavourites && ( + + ) } /> diff --git a/ui/src/album/AlbumSongs.js b/ui/src/album/AlbumSongs.js index 5babb24f6..292c738fb 100644 --- a/ui/src/album/AlbumSongs.js +++ b/ui/src/album/AlbumSongs.js @@ -21,6 +21,7 @@ import { SongTitleField, } from '../common' import { AddToPlaylistDialog } from '../dialogs' +import config from '../config' const useStyles = makeStyles( (theme) => ({ @@ -123,10 +124,12 @@ const AlbumSongs = (props) => { sortable={false} className={classes.contextMenu} label={ - + config.enableFavourites && ( + + ) } /> diff --git a/ui/src/album/albumLists.js b/ui/src/album/albumLists.js index c87c4993d..c540140c2 100644 --- a/ui/src/album/albumLists.js +++ b/ui/src/album/albumLists.js @@ -4,6 +4,7 @@ import VideoLibraryIcon from '@material-ui/icons/VideoLibrary' import RepeatIcon from '@material-ui/icons/Repeat' import AlbumIcon from '@material-ui/icons/Album' import FavoriteIcon from '@material-ui/icons/Favorite' +import config from '../config' export default { all: { @@ -11,10 +12,12 @@ export default { params: 'sort=name&order=ASC', }, random: { icon: ShuffleIcon, params: 'sort=random' }, - starred: { - icon: FavoriteIcon, - params: 'sort=starred_at&order=DESC&filter={"starred":true}', - }, + ...(config.enableFavourites && { + starred: { + icon: FavoriteIcon, + params: 'sort=starred_at&order=DESC&filter={"starred":true}', + }, + }), recentlyAdded: { icon: LibraryAddIcon, params: 'sort=recently_added&order=DESC', diff --git a/ui/src/artist/ArtistList.js b/ui/src/artist/ArtistList.js index ea69689cf..2f78497f7 100644 --- a/ui/src/artist/ArtistList.js +++ b/ui/src/artist/ArtistList.js @@ -19,6 +19,7 @@ import { ArtistSimpleList, } from '../common' import { makeStyles } from '@material-ui/core/styles' +import config from '../config' const useStyles = makeStyles({ contextHeader: { @@ -41,11 +42,13 @@ const useStyles = makeStyles({ const ArtistFilter = (props) => ( - } - defaultValue={true} - /> + {config.enableFavourites && ( + } + defaultValue={true} + /> + )} ) @@ -69,12 +72,15 @@ const ArtistListView = ({ hasShow, hasEdit, hasList, width, ...rest }) => { source={'starred'} sortBy={'starred ASC, starredAt ASC'} sortByOrder={'DESC'} + sortable={config.enableFavourites} className={classes.contextMenu} label={ - + config.enableFavourites && ( + + ) } /> diff --git a/ui/src/audioplayer/PlayerToolbar.js b/ui/src/audioplayer/PlayerToolbar.js index 223dbf936..cc78602be 100644 --- a/ui/src/audioplayer/PlayerToolbar.js +++ b/ui/src/audioplayer/PlayerToolbar.js @@ -7,8 +7,10 @@ import { keyMap } from '../hotkeys' import { ThemeProvider } from '@material-ui/styles' import { createMuiTheme } from '@material-ui/core/styles' import useCurrentTheme from '../themes/useCurrentTheme' +import config from '../config' -const Placeholder = () => +const Placeholder = () => + config.enableFavourites && const Toolbar = ({ id }) => { const location = useLocation() @@ -24,11 +26,13 @@ const Toolbar = ({ id }) => { return ( - + {config.enableFavourites && ( + + )} ) } diff --git a/ui/src/common/ContextMenus.js b/ui/src/common/ContextMenus.js index 1022fd885..2c3a6001e 100644 --- a/ui/src/common/ContextMenus.js +++ b/ui/src/common/ContextMenus.js @@ -133,7 +133,7 @@ const ContextMenu = ({ - + diff --git a/ui/src/config.js b/ui/src/config.js index c61cefe4f..6e1a16424 100644 --- a/ui/src/config.js +++ b/ui/src/config.js @@ -12,6 +12,7 @@ const defaultConfig = { gaTrackingId: '', devActivityPanel: true, devFastAccessCoverArt: false, + enableFavourites: true, } let config diff --git a/ui/src/hotkeys.js b/ui/src/hotkeys.js index 506b1143e..327d4b715 100644 --- a/ui/src/hotkeys.js +++ b/ui/src/hotkeys.js @@ -1,3 +1,4 @@ +import config from './config' const keyMap = { SHOW_HELP: { name: 'show_help', sequence: 'shift+?', group: 'Global' }, TOGGLE_MENU: { name: 'toggle_menu', sequence: 'm', group: 'Global' }, @@ -6,7 +7,9 @@ const keyMap = { NEXT_SONG: { name: 'next_song', sequence: 'right', group: 'Player' }, VOL_UP: { name: 'vol_up', sequence: '=', group: 'Player' }, VOL_DOWN: { name: 'vol_down', sequence: '-', group: 'Player' }, - TOGGLE_LOVE: { name: 'toggle_love', sequence: 'l', group: 'Player' }, + ...(config.enableFavourites && { + TOGGLE_LOVE: { name: 'toggle_love', sequence: 'l', group: 'Player' }, + }), } export { keyMap } diff --git a/ui/src/song/SongList.js b/ui/src/song/SongList.js index fb5cff9bd..4df4acef6 100644 --- a/ui/src/song/SongList.js +++ b/ui/src/song/SongList.js @@ -26,6 +26,7 @@ import { AlbumLinkField } from './AlbumLinkField' import { AddToPlaylistDialog } from '../dialogs' import { makeStyles } from '@material-ui/core/styles' import FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder' +import config from '../config' const useStyles = makeStyles({ contextHeader: { @@ -48,11 +49,13 @@ const useStyles = makeStyles({ const SongFilter = (props) => ( - } - defaultValue={true} - /> + {config.enableFavourites && ( + } + defaultValue={true} + /> + )} ) @@ -113,12 +116,15 @@ const SongList = (props) => { source={'starred'} sortBy={'starred ASC, starredAt ASC'} sortByOrder={'DESC'} + sortable={config.enableFavourites} className={classes.contextMenu} label={ - + config.enableFavourites && ( + + ) } />