prepend Util::Cache

This commit is contained in:
onyx-and-iris 2023-07-26 14:12:47 +01:00
parent e7244957b1
commit bee166f354
2 changed files with 20 additions and 24 deletions

View File

@ -12,7 +12,7 @@ module Voicemeeter
class Base class Base
include Logging include Logging
include Worker include Worker
include Util::Cache prepend Util::Cache
attr_reader :kind, :midi, :event, :callback, :running, :delay, :cache attr_reader :kind, :midi, :event, :callback, :running, :delay, :cache
alias_method :observer, :callback alias_method :observer, :callback
@ -105,16 +105,14 @@ module Voicemeeter
end end
def get(name, is_string = false) def get(name, is_string = false)
polling(:get, name:) do if is_string
if is_string cget = FFI::MemoryPointer.new(:string, 512, true)
cget = FFI::MemoryPointer.new(:string, 512, true) CBindings.call(:bind_get_parameter_string_a, name, cget)
CBindings.call(:bind_get_parameter_string_a, name, cget) cget.read_string
cget.read_string else
else cget = FFI::MemoryPointer.new(:float, 1)
cget = FFI::MemoryPointer.new(:float, 1) CBindings.call(:bind_get_parameter_float, name, cget)
CBindings.call(:bind_get_parameter_float, name, cget) cget.read_float.round(1)
cget.read_float.round(1)
end
end end
end end
@ -128,11 +126,9 @@ module Voicemeeter
end end
def get_buttonstatus(id, mode) def get_buttonstatus(id, mode)
polling(:get_buttonstatus, id:, mode:) do cget = FFI::MemoryPointer.new(:float, 1)
cget = FFI::MemoryPointer.new(:float, 1) CBindings.call(:bind_macro_button_get_status, id, cget, mode)
CBindings.call(:bind_macro_button_get_status, id, cget, mode) cget.read_float.to_i
cget.read_float.to_i
end
end end
def set_buttonstatus(id, mode, state) def set_buttonstatus(id, mode, state)

View File

@ -19,16 +19,16 @@ module Voicemeeter
end end
module Cache module Cache
def polling(func, **kwargs) def get(name, is_string = false)
params = { return cache.delete(name) if cache.key? name
get: kwargs[:name],
get_buttonstatus: "mb_#{kwargs[:id]}_#{kwargs[:mode]}"
}
return cache.delete(params[func]) if cache.key? params[func]
clear_dirty if @sync clear_dirty if @sync
super
end
yield def get_buttonstatus(id, mode)
return cache.delete("mb_#{id}_#{mode}") if cache.key? "mb_#{id}_#{mode}"
clear_dirty if @sync
super
end end
end end
end end