Add setting to disable server transcoding
This commit is contained in:
+1
-1
@@ -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)
|
||||
|
||||
@@ -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",
|
||||
},
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user