L'encoder scende in congestione e risale piano; la regia imposta il pavimento, mostra lo stato del telefono e apre il selettore dal bitrate colorato. Co-authored-by: Cursor <cursoragent@cursor.com>
40 lines
958 B
Ruby
40 lines
958 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Sessions
|
|
class SetMinQuality
|
|
def initialize(session, preset:)
|
|
@session = session
|
|
@preset = preset.to_s.strip
|
|
end
|
|
|
|
def call
|
|
id = normalize
|
|
unless SelectQuality.allowed_min_ids(@session.quality_preset).include?(id)
|
|
raise ArgumentError, "Qualità minima non valida"
|
|
end
|
|
|
|
return @session if @session.min_quality_preset == id
|
|
|
|
@session.update!(min_quality_preset: id)
|
|
@session.stream_events.create!(
|
|
event_type: "quality_changed",
|
|
occurred_at: Time.current,
|
|
metadata: { "min_quality_preset" => id }
|
|
)
|
|
SessionChannel.broadcast_message(
|
|
@session,
|
|
{ type: "command", action: "set_min_quality", min_quality_preset: id }
|
|
)
|
|
@session
|
|
end
|
|
|
|
private
|
|
|
|
def normalize
|
|
return SelectQuality::AUTO_ID if @preset.blank? || @preset == SelectQuality::AUTO_ID
|
|
|
|
@preset
|
|
end
|
|
end
|
|
end
|