Add setting to disable server transcoding

This commit is contained in:
Drew Weymouth
2023-10-30 17:32:27 -07:00
parent 9b0a017e8c
commit c9320b8021
6 changed files with 26 additions and 9 deletions
+1 -1
View File
@@ -101,7 +101,7 @@ func StartupApp(appName, displayAppName, appVersionTag, configFile, latestReleas
} }
a.ServerManager = NewServerManager(appName, a.Config) a.ServerManager = NewServerManager(appName, a.Config)
a.PlaybackManager = NewPlaybackManager(a.bgrndCtx, a.ServerManager, a.Player, &a.Config.Scrobbling) a.PlaybackManager = NewPlaybackManager(a.bgrndCtx, a.ServerManager, a.Player, &a.Config.Scrobbling, &a.Config.Transcoding)
a.ImageManager = NewImageManager(a.bgrndCtx, a.ServerManager, configdir.LocalCache(a.appName)) a.ImageManager = NewImageManager(a.bgrndCtx, a.ServerManager, configdir.LocalCache(a.appName))
a.Config.Application.MaxImageCacheSizeMB = clamp(a.Config.Application.MaxImageCacheSizeMB, 1, 500) a.Config.Application.MaxImageCacheSizeMB = clamp(a.Config.Application.MaxImageCacheSizeMB, 1, 500)
a.ImageManager.SetMaxOnDiskCacheSizeBytes(int64(a.Config.Application.MaxImageCacheSizeMB) * 1_048_576) a.ImageManager.SetMaxOnDiskCacheSizeBytes(int64(a.Config.Application.MaxImageCacheSizeMB) * 1_048_576)
+8
View File
@@ -98,6 +98,10 @@ type ThemeConfig struct {
Appearance string Appearance string
} }
type TranscodingConfig struct {
ForceRawFile bool
}
type Config struct { type Config struct {
Application AppConfig Application AppConfig
Servers []*ServerConfig Servers []*ServerConfig
@@ -112,6 +116,7 @@ type Config struct {
LocalPlayback LocalPlaybackConfig LocalPlayback LocalPlaybackConfig
Scrobbling ScrobbleConfig Scrobbling ScrobbleConfig
ReplayGain ReplayGainConfig ReplayGain ReplayGainConfig
Transcoding TranscodingConfig
Theme ThemeConfig Theme ThemeConfig
} }
@@ -176,6 +181,9 @@ func DefaultConfig(appVersionTag string) *Config {
PreampGainDB: 0.0, PreampGainDB: 0.0,
PreventClipping: true, PreventClipping: true,
}, },
Transcoding: TranscodingConfig{
ForceRawFile: false,
},
Theme: ThemeConfig{ Theme: ThemeConfig{
Appearance: "Dark", Appearance: "Dark",
}, },
+1 -1
View File
@@ -67,7 +67,7 @@ type MediaProvider interface {
GetFavorites() (Favorites, error) GetFavorites() (Favorites, error)
GetStreamURL(trackID string) (string, error) GetStreamURL(trackID string, forceRaw bool) (string, error)
GetTopTracks(artist Artist, count int) ([]*Track, error) GetTopTracks(artist Artist, count int) ([]*Track, error)
@@ -192,8 +192,12 @@ func (s *subsonicMediaProvider) GetSimilarTracks(artistID string, count int) ([]
return sharedutil.MapSlice(tr, toTrack), nil return sharedutil.MapSlice(tr, toTrack), nil
} }
func (s *subsonicMediaProvider) GetStreamURL(trackID string) (string, error) { func (s *subsonicMediaProvider) GetStreamURL(trackID string, forceRaw bool) (string, error) {
u, err := s.client.GetStreamURL(trackID, map[string]string{}) m := make(map[string]string)
if forceRaw {
m["format"] = "raw"
}
u, err := s.client.GetStreamURL(trackID, m)
if err != nil { if err != nil {
return "", err return "", err
} }
+8 -5
View File
@@ -45,6 +45,7 @@ type PlaybackManager struct {
// to pass to onSongChange listeners; clear once listeners have been called // to pass to onSongChange listeners; clear once listeners have been called
lastScrobbled *mediaprovider.Track lastScrobbled *mediaprovider.Track
scrobbleCfg *ScrobbleConfig scrobbleCfg *ScrobbleConfig
transcodeCfg *TranscodingConfig
onSongChange []func(nowPlaying, justScrobbledIfAny *mediaprovider.Track) onSongChange []func(nowPlaying, justScrobbledIfAny *mediaprovider.Track)
onPlayTimeUpdate []func(float64, float64) onPlayTimeUpdate []func(float64, float64)
@@ -57,14 +58,16 @@ func NewPlaybackManager(
s *ServerManager, s *ServerManager,
p *player.Player, p *player.Player,
scrobbleCfg *ScrobbleConfig, scrobbleCfg *ScrobbleConfig,
transcodeCfg *TranscodingConfig,
) *PlaybackManager { ) *PlaybackManager {
// clamp to 99% to avoid any possible rounding issues // clamp to 99% to avoid any possible rounding issues
scrobbleCfg.ThresholdPercent = clamp(scrobbleCfg.ThresholdPercent, 0, 99) scrobbleCfg.ThresholdPercent = clamp(scrobbleCfg.ThresholdPercent, 0, 99)
pm := &PlaybackManager{ pm := &PlaybackManager{
ctx: ctx, ctx: ctx,
sm: s, sm: s,
player: p, player: p,
scrobbleCfg: scrobbleCfg, scrobbleCfg: scrobbleCfg,
transcodeCfg: transcodeCfg,
} }
p.OnTrackChange(func(tracknum int64) { p.OnTrackChange(func(tracknum int64) {
if tracknum >= int64(len(pm.playQueue)) { if tracknum >= int64(len(pm.playQueue)) {
@@ -177,7 +180,7 @@ func (p *PlaybackManager) LoadTracks(tracks []*mediaprovider.Track, appendToQueu
util.ShuffleSlice(nums) util.ShuffleSlice(nums)
} }
for _, i := range nums { for _, i := range nums {
url, err := p.sm.Server.GetStreamURL(tracks[i].ID) url, err := p.sm.Server.GetStreamURL(tracks[i].ID, p.transcodeCfg.ForceRawFile)
if err != nil { if err != nil {
return err return err
} }
+2
View File
@@ -241,6 +241,7 @@ func (s *SettingsDialog) createGeneralTab() *container.TabItem {
} }
func (s *SettingsDialog) createPlaybackTab() *container.TabItem { func (s *SettingsDialog) createPlaybackTab() *container.TabItem {
disableTranscode := widget.NewCheckWithData("Disable server transcoding", binding.BindBool(&s.config.Transcoding.ForceRawFile))
deviceList := make([]string, len(s.audioDevices)) deviceList := make([]string, len(s.audioDevices))
var selIndex int var selIndex int
for i, dev := range s.audioDevices { for i, dev := range s.audioDevices {
@@ -315,6 +316,7 @@ func (s *SettingsDialog) createPlaybackTab() *container.TabItem {
audioExclusive.Checked = s.config.LocalPlayback.AudioExclusive audioExclusive.Checked = s.config.LocalPlayback.AudioExclusive
return container.NewTabItem("Playback", container.NewVBox( return container.NewTabItem("Playback", container.NewVBox(
container.NewHBox(disableTranscode),
container.New(&layouts.MaxPadLayout{PadTop: 5}, container.New(&layouts.MaxPadLayout{PadTop: 5},
container.New(layout.NewFormLayout(), container.New(layout.NewFormLayout(),
widget.NewLabel("Audio device"), container.NewBorder(nil, nil, nil, util.NewHSpace(70), deviceSelect), widget.NewLabel("Audio device"), container.NewBorder(nil, nil, nil, util.NewHSpace(70), deviceSelect),