Class: Rockbox::Api::Settings

Inherits:
Object
  • Object
show all
Defined in:
lib/rockbox/api/settings.rb

Defined Under Namespace

Classes: SaveBuilder

Constant Summary collapse

QUERY =
<<~GQL
  query GlobalSettings {
    globalSettings {
      musicDir volume balance bass treble channelConfig stereoWidth
      eqEnabled eqPrecut
      eqBandSettings { cutoff q gain }
      replaygainSettings { noclip type preamp }
      compressorSettings { threshold makeupGain ratio knee releaseTime attackTime }
      crossfadeEnabled crossfadeFadeInDelay crossfadeFadeInDuration
      crossfadeFadeOutDelay crossfadeFadeOutDuration crossfadeFadeOutMixmode
      crossfeedEnabled crossfeedDirectGain crossfeedCrossGain
      crossfeedHfAttenuation crossfeedHfCutoff
      repeatMode singleMode partyMode shuffle playerName
    }
  }
GQL

Instance Method Summary collapse

Constructor Details

#initialize(http) ⇒ Settings

Returns a new instance of Settings.



25
26
27
# File 'lib/rockbox/api/settings.rb', line 25

def initialize(http)
  @http = http
end

Instance Method Details

#getRockbox::UserSettings



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/rockbox/api/settings.rb', line 30

def get
  s = @http.execute(QUERY)[:global_settings] || {}

  UserSettings.new(
    music_dir:                   s[:music_dir],
    volume:                      s[:volume],
    balance:                     s[:balance],
    bass:                        s[:bass],
    treble:                      s[:treble],
    channel_config:              s[:channel_config],
    stereo_width:                s[:stereo_width],
    eq_enabled:                  s[:eq_enabled],
    eq_precut:                   s[:eq_precut],
    eq_band_settings:            Array(s[:eq_band_settings]).map { |b| EqBandSetting.from_hash(b) },
    replaygain_settings:         ReplaygainSettings.from_hash(s[:replaygain_settings]),
    compressor_settings:         CompressorSettings.from_hash(s[:compressor_settings]),
    crossfade_enabled:           s[:crossfade_enabled],
    crossfade_fade_in_delay:     s[:crossfade_fade_in_delay],
    crossfade_fade_in_duration:  s[:crossfade_fade_in_duration],
    crossfade_fade_out_delay:    s[:crossfade_fade_out_delay],
    crossfade_fade_out_duration: s[:crossfade_fade_out_duration],
    crossfade_fade_out_mixmode:  s[:crossfade_fade_out_mixmode],
    crossfeed_enabled:           s[:crossfeed_enabled],
    crossfeed_direct_gain:       s[:crossfeed_direct_gain],
    crossfeed_cross_gain:        s[:crossfeed_cross_gain],
    crossfeed_hf_attenuation:    s[:crossfeed_hf_attenuation],
    crossfeed_hf_cutoff:         s[:crossfeed_hf_cutoff],
    repeat_mode:                 s[:repeat_mode],
    single_mode:                 s[:single_mode],
    party_mode:                  s[:party_mode],
    shuffle:                     s[:shuffle],
    player_name:                 s[:player_name]
  )
end

#save(settings = nil, &block) ⇒ Object

Save a partial settings update. Pass any subset of keys; everything else is left as-is by the firmware.

Examples:

Builder block

client.settings.save do |s|
  s.volume = -20
  s.bass = 4
  s.shuffle = true
end

Hash

client.settings.save(volume: -20, bass: 4)

Raises:

  • (ArgumentError)


77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/rockbox/api/settings.rb', line 77

def save(settings = nil, &block)
  if block
    builder = SaveBuilder.new
    yield builder
    settings = builder.to_h.merge(settings || {})
  end
  raise ArgumentError, "settings hash or block required" if settings.nil? || settings.empty?

  @http.execute(
    "mutation SaveSettings($settings: NewGlobalSettings!) { saveSettings(settings: $settings) }",
    { settings: settings }
  )
  nil
end