diff --git a/server/serve_index.go b/server/serve_index.go index 26367360f..e12994680 100644 --- a/server/serve_index.go +++ b/server/serve_index.go @@ -36,31 +36,32 @@ func serveIndex(ds model.DataStore, fs fs.FS, shareInfo *model.Share) http.Handl return } appConfig := map[string]interface{}{ - "version": consts.Version, - "firstTime": firstTime, - "variousArtistsId": consts.VariousArtistsID, - "baseURL": utils.SanitizeText(strings.TrimSuffix(conf.Server.BaseURL, "/")), - "loginBackgroundURL": utils.SanitizeText(conf.Server.UILoginBackgroundURL), - "welcomeMessage": utils.SanitizeText(conf.Server.UIWelcomeMessage), - "enableTranscodingConfig": conf.Server.EnableTranscodingConfig, - "enableDownloads": conf.Server.EnableDownloads, - "enableFavourites": conf.Server.EnableFavourites, - "enableStarRating": conf.Server.EnableStarRating, - "defaultTheme": conf.Server.DefaultTheme, - "defaultLanguage": conf.Server.DefaultLanguage, - "defaultUIVolume": conf.Server.DefaultUIVolume, - "enableCoverAnimation": conf.Server.EnableCoverAnimation, - "gaTrackingId": conf.Server.GATrackingID, - "losslessFormats": strings.ToUpper(strings.Join(consts.LosslessFormats, ",")), - "devActivityPanel": conf.Server.DevActivityPanel, - "enableUserEditing": conf.Server.EnableUserEditing, - "devEnableShare": conf.Server.DevEnableShare, - "devSidebarPlaylists": conf.Server.DevSidebarPlaylists, - "lastFMEnabled": conf.Server.LastFM.Enabled, - "lastFMApiKey": conf.Server.LastFM.ApiKey, - "devShowArtistPage": conf.Server.DevShowArtistPage, - "listenBrainzEnabled": conf.Server.ListenBrainz.Enabled, - "enableReplayGain": conf.Server.EnableReplayGain, + "version": consts.Version, + "firstTime": firstTime, + "variousArtistsId": consts.VariousArtistsID, + "baseURL": utils.SanitizeText(strings.TrimSuffix(conf.Server.BaseURL, "/")), + "loginBackgroundURL": utils.SanitizeText(conf.Server.UILoginBackgroundURL), + "welcomeMessage": utils.SanitizeText(conf.Server.UIWelcomeMessage), + "enableTranscodingConfig": conf.Server.EnableTranscodingConfig, + "enableDownloads": conf.Server.EnableDownloads, + "enableFavourites": conf.Server.EnableFavourites, + "enableStarRating": conf.Server.EnableStarRating, + "defaultTheme": conf.Server.DefaultTheme, + "defaultLanguage": conf.Server.DefaultLanguage, + "defaultUIVolume": conf.Server.DefaultUIVolume, + "enableCoverAnimation": conf.Server.EnableCoverAnimation, + "gaTrackingId": conf.Server.GATrackingID, + "losslessFormats": strings.ToUpper(strings.Join(consts.LosslessFormats, ",")), + "devActivityPanel": conf.Server.DevActivityPanel, + "enableUserEditing": conf.Server.EnableUserEditing, + "devEnableShare": conf.Server.DevEnableShare, + "devSidebarPlaylists": conf.Server.DevSidebarPlaylists, + "lastFMEnabled": conf.Server.LastFM.Enabled, + "lastFMApiKey": conf.Server.LastFM.ApiKey, + "devShowArtistPage": conf.Server.DevShowArtistPage, + "listenBrainzEnabled": conf.Server.ListenBrainz.Enabled, + "enableReplayGain": conf.Server.EnableReplayGain, + "defaultDownsamplingFormat": conf.Server.DefaultDownsamplingFormat, } if strings.HasPrefix(conf.Server.UILoginBackgroundURL, "/") { appConfig["loginBackgroundURL"] = path.Join(conf.Server.BaseURL, conf.Server.UILoginBackgroundURL) diff --git a/server/serve_index_test.go b/server/serve_index_test.go index 03bf10ab5..46f9c54cf 100644 --- a/server/serve_index_test.go +++ b/server/serve_index_test.go @@ -234,6 +234,16 @@ var _ = Describe("serveIndex", func() { Expect(config).To(HaveKeyWithValue("devEnableShare", false)) }) + It("sets the defaultDownsamplingFormat", func() { + r := httptest.NewRequest("GET", "/index.html", nil) + w := httptest.NewRecorder() + + serveIndex(ds, fs, nil)(w, r) + + config := extractAppConfig(w.Body.String()) + Expect(config).To(HaveKeyWithValue("defaultDownsamplingFormat", conf.Server.DefaultDownsamplingFormat)) + }) + It("sets the devSidebarPlaylists", func() { conf.Server.DevSidebarPlaylists = true diff --git a/ui/src/config.js b/ui/src/config.js index 1692e5792..5431e45e6 100644 --- a/ui/src/config.js +++ b/ui/src/config.js @@ -28,6 +28,7 @@ const defaultConfig = { enableCoverAnimation: true, devShowArtistPage: true, enableReplayGain: true, + defaultDownsamplingFormat: 'opus', publicBaseUrl: '/p', } diff --git a/ui/src/consts.js b/ui/src/consts.js index 101254ec8..6ed6d9977 100644 --- a/ui/src/consts.js +++ b/ui/src/consts.js @@ -20,3 +20,5 @@ DraggableTypes.ALL.push( ) export const MAX_SIDEBAR_PLAYLISTS = 100 + +export const DEFAULT_SHARE_BITRATE = 128 diff --git a/ui/src/dialogs/ShareDialog.js b/ui/src/dialogs/ShareDialog.js index ef751db76..edd95de52 100644 --- a/ui/src/dialogs/ShareDialog.js +++ b/ui/src/dialogs/ShareDialog.js @@ -16,13 +16,15 @@ import { } from 'react-admin' import { useMemo, useState } from 'react' import { shareUrl } from '../utils' +import config from '../config' +import { DEFAULT_SHARE_BITRATE } from '../consts' export const ShareDialog = ({ open, close, onClose, ids, resource, title }) => { const notify = useNotify() - const [format, setFormat] = useState('') - const [maxBitRate, setMaxBitRate] = useState(0) + const [format, setFormat] = useState(config.defaultDownsamplingFormat) + const [maxBitRate, setMaxBitRate] = useState(DEFAULT_SHARE_BITRATE) const [originalFormat, setUseOriginalFormat] = useState(true) - const { data: formats, loading } = useGetList( + const { data: formats, loading: loadingFormats } = useGetList( 'transcoding', { page: 1, @@ -33,12 +35,12 @@ export const ShareDialog = ({ open, close, onClose, ids, resource, title }) => { const formatOptions = useMemo( () => - loading + loadingFormats ? [] : Object.values(formats).map((f) => { return { id: f.targetFormat, name: f.targetFormat } }), - [formats, loading] + [formats, loadingFormats] ) const handleOriginal = (e) => { @@ -57,8 +59,8 @@ export const ShareDialog = ({ open, close, onClose, ids, resource, title }) => { { resourceType: resource, resourceIds: ids?.join(','), - format, - maxBitRate, + ...(!originalFormat && { format }), + ...(!originalFormat && { maxBitRate }), }, { onSuccess: (res) => { @@ -106,8 +108,8 @@ export const ShareDialog = ({ open, close, onClose, ids, resource, title }) => { {!originalFormat && ( { setFormat(event.target.value) }} @@ -115,7 +117,8 @@ export const ShareDialog = ({ open, close, onClose, ids, resource, title }) => { )} {!originalFormat && ( { { id: 256, name: '256' }, { id: 320, name: '320' }, ]} - resettable onChange={(event) => { setMaxBitRate(event.target.value) }} diff --git a/ui/src/share/ShareList.js b/ui/src/share/ShareList.js index 0c3f5e470..716628b63 100644 --- a/ui/src/share/ShareList.js +++ b/ui/src/share/ShareList.js @@ -9,11 +9,12 @@ import React from 'react' import { DateField, QualityInfo } from '../common' import { shareUrl } from '../utils' import { Link } from '@material-ui/core' +import config from '../config' export const FormatInfo = ({ record, size }) => { const r = { suffix: record.format, bitRate: record.maxBitRate } - // TODO Get DefaultDownsamplingFormat - r.suffix = r.suffix || (r.bitRate ? 'opus' : 'Original') + r.suffix = + r.suffix || (r.bitRate ? config.defaultDownsamplingFormat : 'Original') return }