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.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.Config.Application.MaxImageCacheSizeMB = clamp(a.Config.Application.MaxImageCacheSizeMB, 1, 500)
a.ImageManager.SetMaxOnDiskCacheSizeBytes(int64(a.Config.Application.MaxImageCacheSizeMB) * 1_048_576)
+8
View File
@@ -98,6 +98,10 @@ type ThemeConfig struct {
Appearance string
}
type TranscodingConfig struct {
ForceRawFile bool
}
type Config struct {
Application AppConfig
Servers []*ServerConfig
@@ -112,6 +116,7 @@ type Config struct {
LocalPlayback LocalPlaybackConfig
Scrobbling ScrobbleConfig
ReplayGain ReplayGainConfig
Transcoding TranscodingConfig
Theme ThemeConfig
}
@@ -176,6 +181,9 @@ func DefaultConfig(appVersionTag string) *Config {
PreampGainDB: 0.0,
PreventClipping: true,
},
Transcoding: TranscodingConfig{
ForceRawFile: false,
},
Theme: ThemeConfig{
Appearance: "Dark",
},
+1 -1
View File
@@ -67,7 +67,7 @@ type MediaProvider interface {
GetFavorites() (Favorites, error)
GetStreamURL(trackID string) (string, error)
GetStreamURL(trackID string, forceRaw bool) (string, 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
}
func (s *subsonicMediaProvider) GetStreamURL(trackID string) (string, error) {
u, err := s.client.GetStreamURL(trackID, map[string]string{})
func (s *subsonicMediaProvider) GetStreamURL(trackID string, forceRaw bool) (string, error) {
m := make(map[string]string)
if forceRaw {
m["format"] = "raw"
}
u, err := s.client.GetStreamURL(trackID, m)
if err != nil {
return "", err
}
+4 -1
View File
@@ -45,6 +45,7 @@ type PlaybackManager struct {
// to pass to onSongChange listeners; clear once listeners have been called
lastScrobbled *mediaprovider.Track
scrobbleCfg *ScrobbleConfig
transcodeCfg *TranscodingConfig
onSongChange []func(nowPlaying, justScrobbledIfAny *mediaprovider.Track)
onPlayTimeUpdate []func(float64, float64)
@@ -57,6 +58,7 @@ func NewPlaybackManager(
s *ServerManager,
p *player.Player,
scrobbleCfg *ScrobbleConfig,
transcodeCfg *TranscodingConfig,
) *PlaybackManager {
// clamp to 99% to avoid any possible rounding issues
scrobbleCfg.ThresholdPercent = clamp(scrobbleCfg.ThresholdPercent, 0, 99)
@@ -65,6 +67,7 @@ func NewPlaybackManager(
sm: s,
player: p,
scrobbleCfg: scrobbleCfg,
transcodeCfg: transcodeCfg,
}
p.OnTrackChange(func(tracknum int64) {
if tracknum >= int64(len(pm.playQueue)) {
@@ -177,7 +180,7 @@ func (p *PlaybackManager) LoadTracks(tracks []*mediaprovider.Track, appendToQueu
util.ShuffleSlice(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 {
return err
}
+2
View File
@@ -241,6 +241,7 @@ func (s *SettingsDialog) createGeneralTab() *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))
var selIndex int
for i, dev := range s.audioDevices {
@@ -315,6 +316,7 @@ func (s *SettingsDialog) createPlaybackTab() *container.TabItem {
audioExclusive.Checked = s.config.LocalPlayback.AudioExclusive
return container.NewTabItem("Playback", container.NewVBox(
container.NewHBox(disableTranscode),
container.New(&layouts.MaxPadLayout{PadTop: 5},
container.New(layout.NewFormLayout(),
widget.NewLabel("Audio device"), container.NewBorder(nil, nil, nil, util.NewHSpace(70), deviceSelect),