Compare commits

..

3 Commits

Author SHA1 Message Date
51ccd76c2a adds version number to
announce_voicemeeter_version
2023-09-27 15:58:08 +01:00
149ed73605 swap Copy-Item for Robocopy 2023-09-27 14:46:37 +01:00
ecca4c65c8 add pyproject.toml 2023-09-27 14:16:52 +01:00
10 changed files with 81 additions and 19 deletions

View File

@ -1,8 +1,5 @@
{
"python.analysis.diagnosticSeverityOverrides": {
"reportMissingImports": "none"
},
"black-formatter.args": [
"--line-length=120"
]
}
}

View File

@ -14,11 +14,11 @@ def _make_gestures():
defaults = {
"kb:NVDA+alt+s": "strip_mode",
"kb:NVDA+alt+b": "bus_mode",
"kb:NVDA+alt+g": "slider_mode",
"kb:NVDA+alt+c": "slider_mode",
"kb:NVDA+alt+t": "slider_mode",
"kb:NVDA+alt+d": "slider_mode",
"kb:NVDA+alt+a": "slider_mode",
"kb:NVDA+alt+g": "slider_mode", # Gate
"kb:NVDA+alt+c": "slider_mode", # Comp
"kb:NVDA+alt+t": "slider_mode", # Gate
"kb:NVDA+alt+d": "slider_mode", # Denoiser
"kb:NVDA+alt+a": "slider_mode", # Audibility
"kb:NVDA+shift+q": "announce_controller",
"kb:NVDA+shift+a": "announce_voicemeeter_version",
"kb:NVDA+shift+o": "toggle_mono",

View File

@ -22,6 +22,10 @@ class Binds:
bind_get_voicemeeter_type.restype = LONG
bind_get_voicemeeter_type.argtypes = [ct.POINTER(LONG)]
bind_get_voicemeeter_version = libc.VBVMR_GetVoicemeeterVersion
bind_get_voicemeeter_version.restype = LONG
bind_get_voicemeeter_version.argtypes = [ct.POINTER(LONG)]
bind_is_parameters_dirty = libc.VBVMR_IsParametersDirty
bind_is_parameters_dirty.restype = LONG
bind_is_parameters_dirty.argtypes = None

View File

@ -35,7 +35,7 @@ def get_vmpath():
try:
vm_parent = Path(get_vmpath()).parent
except FileNotFoundError as e:
raise VMError(f"Unable to fetch DLL path from the registry") from e
raise VMError("Unable to fetch DLL path from the registry") from e
DLL_NAME = f'VoicemeeterRemote{"64" if BITS == 64 else ""}.dll'

View File

@ -8,7 +8,7 @@ class CommandsMixin:
### ANNOUNCEMENTS ###
def script_announce_voicemeeter_version(self, _):
ui.message(f"Running Voicemeeter {self.kind}")
ui.message(f"Running Voicemeeter {self.kind} {self.controller.version}")
def script_announce_controller(self, _):
ui.message(f"Controller for {self.controller.ctx.strategy} {self.controller.ctx.index + 1}")

View File

@ -8,12 +8,8 @@ class Strategy(ABC):
self._slider_mode = "gain"
@abstractmethod
def __str__(self):
pass
@property
def identifier(self):
return f"{self}[{self._index}]"
pass
@property
def index(self):
@ -54,11 +50,19 @@ class StripStrategy(Strategy):
def __str__(self):
return "Strip"
@property
def identifier(self):
return f"{self}[{self._index}]"
class BusStrategy(Strategy):
def __str__(self):
return "Bus"
@property
def identifier(self):
return f"{self}[{self._index}]"
class Context:
def __init__(self, strategy: Strategy) -> None:

View File

@ -27,6 +27,17 @@ class Controller(Binds):
self.call(self.bind_get_voicemeeter_type, ct.byref(c_type))
return KindId(c_type.value).name.lower()
@property
def version(self):
ver = ct.c_long()
self.call(self.bind_get_voicemeeter_version, ct.byref(ver))
return "{}.{}.{}.{}".format(
(ver.value & 0xFF000000) >> 24,
(ver.value & 0x00FF0000) >> 16,
(ver.value & 0x0000FF00) >> 8,
ver.value & 0x000000FF,
)
def run_voicemeeter(self, kind_id):
val = kind_id.value
if val == 3 and BITS == 64:

View File

@ -1,5 +1,5 @@
class VMError(Exception):
"""Base voicemeeterlib exception class."""
"""Base voicemeeterlib exception class"""
class VMCAPIError(VMError):

View File

@ -4,8 +4,8 @@ param(
function Copy-FilestoScratchpad {
$source = Join-Path $PSScriptRoot "addon" "globalPlugins" "voicemeeter"
$target = Join-Path $env:appdata "nvda" "scratchpad" "globalPlugins"
Copy-Item -Path $source -Destination $target -Recurse -Force
$target = Join-Path $env:appdata "nvda" "scratchpad" "globalPlugins" "voicemeeter"
Robocopy $source $target /MIR /NFL /NDL /NJH /NJS /nc /ns /np
}
function main {

46
pyproject.toml Normal file
View File

@ -0,0 +1,46 @@
[tool.black]
line-length = 119
[tool.ruff]
# Enable pycodestyle (`E`) and Pyflakes (`F`) codes by default.
select = ["E", "F"]
# Avoid enforcing line-length violations (`E501`). Let Black deal with this.
ignore = ["E501"]
# Allow autofix for all enabled rules (when `--fix`) is provided.
fixable = ["A", "B", "C", "D", "E", "F", "G", "I", "N", "Q", "S", "T", "W", "ANN", "ARG", "BLE", "COM", "DJ", "DTZ", "EM", "ERA", "EXE", "FBT", "ICN", "INP", "ISC", "NPY", "PD", "PGH", "PIE", "PL", "PT", "PTH", "PYI", "RET", "RSE", "RUF", "SIM", "SLF", "TCH", "TID", "TRY", "UP", "YTT"]
unfixable = []
# Exclude a variety of commonly ignored directories.
exclude = [
".bzr",
".direnv",
".eggs",
".git",
".git-rewrite",
".hg",
".mypy_cache",
".nox",
".pants.d",
".pytype",
".ruff_cache",
".svn",
".tox",
".venv",
"__pypackages__",
"_build",
"buck-out",
"build",
"dist",
"node_modules",
"venv",
]
# Same as Black.
line-length = 119
# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
# Assume Python 3.7
target-version = "py37"
[tool.ruff.mccabe]
# Unlike Flake8, default to a complexity level of 10.
max-complexity = 10
[tool.ruff.per-file-ignores]
"__init__.py" = ["E402", "F401"] # Ignore unused import and variable not accessed violations