mpv: sane-sysvol: dont force system volume to zero on init
This commit is contained in:
parent
976ae65529
commit
b9e107510d
|
@ -96,7 +96,6 @@ function pwmon_parser_new()
|
||||||
last_audio_device_id = nil, -- TODO: might not actually be necessary
|
last_audio_device_id = nil, -- TODO: might not actually be necessary
|
||||||
|
|
||||||
-- parser state:
|
-- parser state:
|
||||||
in_changed = false,
|
|
||||||
changed_id = nil,
|
changed_id = nil,
|
||||||
in_device = false,
|
in_device = false,
|
||||||
in_direction = false,
|
in_direction = false,
|
||||||
|
@ -106,8 +105,7 @@ function pwmon_parser_new()
|
||||||
|
|
||||||
feed_line = function(self, line)
|
feed_line = function(self, line)
|
||||||
line = ltrim(line)
|
line = ltrim(line)
|
||||||
if startswith(line, "changed:") then
|
if startswith(line, "changed:") or startswith(line, "added:") or startswith(line, "removed:") then
|
||||||
self.in_changed = true
|
|
||||||
self.changed_id = nil
|
self.changed_id = nil
|
||||||
self.in_device = false
|
self.in_device = false
|
||||||
self.in_direction = false
|
self.in_direction = false
|
||||||
|
@ -115,24 +113,15 @@ function pwmon_parser_new()
|
||||||
self.in_vol = false
|
self.in_vol = false
|
||||||
self.in_mute = false
|
self.in_mute = false
|
||||||
self.in_properties = false
|
self.in_properties = false
|
||||||
elseif startswith(line, "added:") or startswith(line, "removed:") then
|
elseif startswith(line, "id: ") then
|
||||||
self.in_changed = false
|
|
||||||
self.changed_id = nil
|
|
||||||
self.in_device = false
|
|
||||||
self.in_direction = false
|
|
||||||
self.in_output = false
|
|
||||||
self.in_vol = false
|
|
||||||
self.in_mute = false
|
|
||||||
self.in_properties = false
|
|
||||||
elseif startswith(line, "id: ") and self.in_changed then
|
|
||||||
if self.changed_id == nil then
|
if self.changed_id == nil then
|
||||||
self.changed_id = tonumber(strip_prefix(line, "id: "))
|
self.changed_id = tonumber(strip_prefix(line, "id: "))
|
||||||
msg.debug("changed_id:", self.changed_id)
|
msg.debug("changed_id:", self.changed_id)
|
||||||
end
|
end
|
||||||
elseif startswith(line, "type: ") and self.in_changed then
|
elseif startswith(line, "type: ") then
|
||||||
self.in_device = startswith(line, "type: PipeWire:Interface:Device")
|
self.in_device = startswith(line, "type: PipeWire:Interface:Device")
|
||||||
msg.trace("parsed type:", line, self.in_device)
|
msg.trace("parsed type:", line, self.in_device)
|
||||||
elseif startswith(line, "Prop: ") and self.in_changed and self.in_device then
|
elseif startswith(line, "Prop: ") and self.in_device then
|
||||||
self.in_direction = startswith(line, "Prop: key Spa:Pod:Object:Param:Route:direction")
|
self.in_direction = startswith(line, "Prop: key Spa:Pod:Object:Param:Route:direction")
|
||||||
if self.in_direction then
|
if self.in_direction then
|
||||||
self.in_output = false
|
self.in_output = false
|
||||||
|
@ -144,15 +133,15 @@ function pwmon_parser_new()
|
||||||
msg.trace("parsed `Prop:`", line, self.in_vol)
|
msg.trace("parsed `Prop:`", line, self.in_vol)
|
||||||
elseif line:find("Spa:Enum:Direction:Output", 1, true) and self.in_direction then
|
elseif line:find("Spa:Enum:Direction:Output", 1, true) and self.in_direction then
|
||||||
self.in_output = true
|
self.in_output = true
|
||||||
elseif startswith(line, "Float ") and self.in_changed and self.in_device and self.in_output and self.in_vol then
|
elseif startswith(line, "Float ") and self.in_device and self.in_output and self.in_vol then
|
||||||
value = tonumber(strip_prefix(line, "Float "))
|
value = tonumber(strip_prefix(line, "Float "))
|
||||||
self:feed_volume(value)
|
self:feed_volume(value)
|
||||||
elseif startswith(line, "Bool ") and self.in_changed and self.in_device and self.in_output and self.in_mute then
|
elseif startswith(line, "Bool ") and self.in_device and self.in_output and self.in_mute then
|
||||||
value = tonumber(strip_prefix(line, "Bool ")) == "true"
|
value = tonumber(strip_prefix(line, "Bool ")) == "true"
|
||||||
self:feed_mute(value)
|
self:feed_mute(value)
|
||||||
elseif startswith(line, "properties:") and self.in_changed and self.in_device then
|
elseif startswith(line, "properties:") and self.in_device then
|
||||||
self.in_properties = true
|
self.in_properties = true
|
||||||
elseif line == 'media.class = "Audio/Device"' and self.in_changed and self.in_device and self.in_properties then
|
elseif line == 'media.class = "Audio/Device"' and self.in_device and self.in_properties then
|
||||||
self.last_audio_device_id = self.changed_id
|
self.last_audio_device_id = self.changed_id
|
||||||
msg.debug("last_audio_device_id:", self.changed_id)
|
msg.debug("last_audio_device_id:", self.changed_id)
|
||||||
end
|
end
|
||||||
|
@ -223,12 +212,18 @@ function pwmon_new()
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
mp.set_property_native("user-data/sane-sysvol/volume", 0)
|
mp.set_property_native("user-data/sane-sysvol/volume", 0)
|
||||||
|
|
||||||
local sysvol = sysvol_new()
|
local sysvol = sysvol_new()
|
||||||
|
local first_announcement = true
|
||||||
mp.observe_property("user-data/sane-sysvol/volume", "native", function(_, val)
|
mp.observe_property("user-data/sane-sysvol/volume", "native", function(_, val)
|
||||||
sysvol:change_sysvol(val)
|
-- we must set the volume property early -- before we actually know the volume
|
||||||
|
-- else other modules will think it's `nil` and error.
|
||||||
|
-- but we DON'T want the value we set to actually impact the system volume
|
||||||
|
if not first_announcement then
|
||||||
|
sysvol:change_sysvol(val)
|
||||||
|
end
|
||||||
|
first_announcement = false
|
||||||
end)
|
end)
|
||||||
mp.observe_property("user-data/sane-sysvol/pw-mon-volume", "native", function(_, val)
|
mp.observe_property("user-data/sane-sysvol/pw-mon-volume", "native", function(_, val)
|
||||||
sysvol:on_sysvol_change(val)
|
sysvol:on_sysvol_change(val)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user