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.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)
|
||||||
|
|||||||
@@ -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",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
Reference in New Issue
Block a user