diff --git a/WeakAuras/Types.lua b/WeakAuras/Types.lua index 2c168c8a57..7a2a52ce5a 100644 --- a/WeakAuras/Types.lua +++ b/WeakAuras/Types.lua @@ -2690,12 +2690,18 @@ for name, path in next, LSM:HashTable("sound") do Private.sound_file_types[path] = name end +Private.sound_types_inverted = {} +for path, key in pairs(Private.sound_types) do + Private.sound_types_inverted[key] = path +end + LSM.RegisterCallback(WeakAuras, "LibSharedMedia_Registered", function(_, mediatype, key) if mediatype == "sound" then local path = LSM:Fetch(mediatype, key) if path then Private.sound_types[path] = key Private.sound_file_types[path] = key + Private.sound_types_inverted[key] = path end end end) diff --git a/WeakAurasOptions/ActionOptions.lua b/WeakAurasOptions/ActionOptions.lua index 5349884016..31c9f75007 100644 --- a/WeakAurasOptions/ActionOptions.lua +++ b/WeakAurasOptions/ActionOptions.lua @@ -229,8 +229,15 @@ function OptionsPrivate.GetActionOptions(data) width = WeakAuras.normalWidth, name = L["Sound"], order = 8.4, - values = OptionsPrivate.Private.sound_types, - sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.sound_types), + dialogControl = "LSM30_Sound", + get = function() + return data.actions.start.sound and OptionsPrivate.Private.sound_types[data.actions.start.sound] + end, + set = function(info, v) + data.actions.start.sound = v and OptionsPrivate.Private.sound_types_inverted[v] + WeakAuras.Add(data); + end, + values = OptionsPrivate.Private.sound_types_inverted, disabled = function() return not data.actions.start.do_sound end, }, start_sound_channel = { @@ -660,7 +667,14 @@ function OptionsPrivate.GetActionOptions(data) width = WeakAuras.normalWidth, name = L["Sound"], order = 28.1, - values = OptionsPrivate.Private.sound_types, + get = function() + return data.actions.finish.sound and OptionsPrivate.Private.sound_types[data.actions.finish.sound] + end, + set = function(info, v) + data.actions.finish.sound = v and OptionsPrivate.Private.sound_types_inverted[v] + WeakAuras.Add(data); + end, + values = OptionsPrivate.Private.sound_types_inverted, sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.sound_types), disabled = function() return not data.actions.finish.do_sound end, }, diff --git a/WeakAurasOptions/ConditionOptions.lua b/WeakAurasOptions/ConditionOptions.lua index ba5b4a66aa..e754eefc85 100644 --- a/WeakAurasOptions/ConditionOptions.lua +++ b/WeakAurasOptions/ConditionOptions.lua @@ -579,15 +579,22 @@ local function addControlsForChange(args, order, data, conditionVariable, totalA args["condition" .. i .. "value" .. j .. "sound"] = { type = "select", width = WeakAuras.normalWidth, - values = OptionsPrivate.Private.sound_types, - sorting = OptionsPrivate.Private.SortOrderForValues(OptionsPrivate.Private.sound_types), + dialogControl = "LSM30_Sound", + values = OptionsPrivate.Private.sound_types_inverted, name = blueIfNoValue2(data, conditions[i].changes[j], "value", "sound", L["Differences"]), desc = descIfNoValue2(data, conditions[i].changes[j], "value", "sound", propertyType, OptionsPrivate.Private.sound_types), order = order, get = function() - return type(conditions[i].changes[j].value) == "table" and conditions[i].changes[j].value.sound; + return type(conditions[i].changes[j].value) == "table" and conditions[i].changes[j].value.sound and OptionsPrivate.Private.sound_types[conditions[i].changes[j].value.sound] + end, + set = function(info, v) + if (type (conditions[i].changes[j].value) ~= "table") then + conditions[i].changes[j].value = {}; + end + conditions[i].changes[j].value["sound"] = v and OptionsPrivate.Private.sound_types_inverted[v]; + WeakAuras.Add(data); + WeakAuras.ClearAndUpdateOptions(data.id) end, - set = wrapWithPlaySound(setValueComplex("sound")), hidden = function() return not (anySoundType("Play") or anySoundType("Loop")) end } order = order + 1;