From f0bfd3a9be2a4775c6e587bd7250494f7f83fee6 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Sun, 15 Sep 2024 19:23:23 +0700 Subject: [PATCH 01/20] [Fix] Missing bundle contents --- README.md | 4 ---- pyproject.toml | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 1a2eeec..5cdc5d5 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,4 @@ cd scripts/build_debian ./build.sh ``` -Build from sources and prey. - -TODO: Write this guides - ![Extra dialogs preview](docs/preview_2.png) diff --git a/pyproject.toml b/pyproject.toml index cd331e9..ffccda0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ packages = [ include = [ { path = "openfreebuds/assets", format = ["sdist", "wheel"] }, { path = "openfreebuds_qt/assets", format = ["sdist", "wheel"] }, + { path = "openfreebuds_qt/assets/i18n/*.qm", format = ["wheel"] }, { path = "openfreebuds_qt/designer/*.py", format = ["wheel"] }, ] From c4ea9c0f6e6ce1e60f44926ff46107c67443ae90 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Tue, 17 Sep 2024 19:19:30 +0700 Subject: [PATCH 02/20] [Fix] Qt 6.4 (Debian 12) compatibility --- openfreebuds_qt/utils/icon/dual_connect_device.py | 5 ++++- scripts/make_qt_parts.sh | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/openfreebuds_qt/utils/icon/dual_connect_device.py b/openfreebuds_qt/utils/icon/dual_connect_device.py index 53d4190..b059eef 100644 --- a/openfreebuds_qt/utils/icon/dual_connect_device.py +++ b/openfreebuds_qt/utils/icon/dual_connect_device.py @@ -46,7 +46,10 @@ def create_dual_connect_icon( background=PRESET_TRANSPARENT) if is_playing: - accent_color = palette.accent().color().getRgb() + try: + accent_color = palette.accent().color().getRgb() + except AttributeError: + accent_color = (0, 128, 256) overlay = image_combine_mask(OVERLAY_PLAYING, foreground=Image.new("RGBA", ICON_SIZE, color=accent_color), background=PRESET_TRANSPARENT) diff --git a/scripts/make_qt_parts.sh b/scripts/make_qt_parts.sh index 072ab70..ada8463 100755 --- a/scripts/make_qt_parts.sh +++ b/scripts/make_qt_parts.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash cd "$(dirname "$0")"/.. -pyuic6 openfreebuds_qt/designer +poetry run pyuic6 openfreebuds_qt/designer /usr/lib/qt6/bin/lrelease openfreebuds_qt/assets/i18n/*.ts From 34705621fe0255c80bd45592a421b4c2c960ec7a Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Wed, 18 Sep 2024 20:29:17 +0700 Subject: [PATCH 03/20] [Feature][Dev] Add RAM tracer to find memory leaks --- openfreebuds_qt/launcher.py | 1 - openfreebuds_qt/main.py | 4 ++ openfreebuds_qt/utils/qt_utils.py | 2 + openfreebuds_qt/utils/ram_trace/__init__.py | 6 ++ .../utils/ram_trace/ram_trace_service.py | 61 +++++++++++++++++++ poetry.lock | 53 +++++++++++++--- pyproject.toml | 6 ++ 7 files changed, 124 insertions(+), 9 deletions(-) create mode 100644 openfreebuds_qt/utils/ram_trace/__init__.py create mode 100644 openfreebuds_qt/utils/ram_trace/ram_trace_service.py diff --git a/openfreebuds_qt/launcher.py b/openfreebuds_qt/launcher.py index 6571081..27ea6aa 100644 --- a/openfreebuds_qt/launcher.py +++ b/openfreebuds_qt/launcher.py @@ -1,6 +1,5 @@ from argparse import ArgumentParser -from openfreebuds.utils.logger import create_logger from openfreebuds_qt.main import OfbQtApplication from openfreebuds_qt.version_info import VERSION diff --git a/openfreebuds_qt/main.py b/openfreebuds_qt/main.py index ccacd11..f49f2f8 100644 --- a/openfreebuds_qt/main.py +++ b/openfreebuds_qt/main.py @@ -15,6 +15,7 @@ from openfreebuds_qt.tray.main import OfbTrayIcon from openfreebuds_qt.utils import OfbQtDeviceAutoSelect, OfbQtHotkeyService, list_available_locales from openfreebuds_qt.utils.mpris.service import OfbQtMPRISHelperService +from openfreebuds_qt.utils.ram_trace import start_ram_trace log = create_logger("OfbQtApplication") @@ -86,6 +87,9 @@ async def boot(self): self.tray = OfbTrayIcon(self) self.main_window = OfbQtMainWindow(self) + # Dev toys (won't work in release build) + start_ram_trace(self) + if self.ofb.role == "standalone": await self.restore_device() await self.auto_select.boot() diff --git a/openfreebuds_qt/utils/qt_utils.py b/openfreebuds_qt/utils/qt_utils.py index d8e3a5b..dfa9aea 100644 --- a/openfreebuds_qt/utils/qt_utils.py +++ b/openfreebuds_qt/utils/qt_utils.py @@ -1,5 +1,6 @@ import asyncio import os +import signal import traceback from contextlib import contextmanager, asynccontextmanager, suppress @@ -44,6 +45,7 @@ async def qt_error_handler(identifier, ctx: IOfbQtApplication): # Kill process # noinspection PyProtectedMember,PyUnresolvedReferences os._exit(1) + os.kill(os.getpid(), signal.SIGKILL) def fill_combo_box(box: QComboBox, options: list[str], name_map: dict[str, str], current: str): diff --git a/openfreebuds_qt/utils/ram_trace/__init__.py b/openfreebuds_qt/utils/ram_trace/__init__.py new file mode 100644 index 0000000..28dd071 --- /dev/null +++ b/openfreebuds_qt/utils/ram_trace/__init__.py @@ -0,0 +1,6 @@ +def start_ram_trace(ctx): + try: + from openfreebuds_qt.utils.ram_trace.ram_trace_service import OfbQtRamTraceService + OfbQtRamTraceService(ctx).start() + except ImportError: + pass diff --git a/openfreebuds_qt/utils/ram_trace/ram_trace_service.py b/openfreebuds_qt/utils/ram_trace/ram_trace_service.py new file mode 100644 index 0000000..01568db --- /dev/null +++ b/openfreebuds_qt/utils/ram_trace/ram_trace_service.py @@ -0,0 +1,61 @@ +import asyncio +import os +import signal +from contextlib import suppress +from datetime import datetime, timedelta +from typing import Optional + +import psutil +from pympler.tracker import SummaryTracker + +from openfreebuds.utils.logger import create_logger +from openfreebuds_qt.generic import IOfbQtApplication +from openfreebuds_qt.utils import OfbQtReportTool + +log = create_logger("OfbQtRamTraceService") +ram_warn = 256 * 1024 * 1024 # 256bb +ram_exit = 512 * 1024 * 1024 # 512gb + + +class OfbQtRamTraceService: + def __init__(self, ctx: IOfbQtApplication): + self._task: Optional[asyncio.Task] = None + self.tracker = SummaryTracker() + self.last_print = datetime.now() - timedelta(days=1) + self.ctx = ctx + + def start(self): + if self._task is None: + self._task = asyncio.create_task(self._mainloop()) + + def _write_trace(self): + data = [""] + for item in self.tracker.format_diff(): + data.append(item) + log.warn("\n".join(data)) + + async def _mainloop(self): + process = psutil.Process() + await asyncio.sleep(15) + log.info("Start up RAM usage trace") + self._write_trace() + + with suppress(asyncio.CancelledError): + log.info("Started") + while True: + current_usage = process.memory_info().rss + if current_usage > ram_exit: + log.error("RAM usage exceeded") + self._write_trace() + async with asyncio.Timeout(5): + await OfbQtReportTool(self.ctx).create_and_show() + log.error("Force exiting...") + + # noinspection PyProtectedMember,PyUnresolvedReferences + os._exit(1) + os.kill(os.getpid(), signal.SIGKILL) + elif current_usage > ram_warn and datetime.now() > self.last_print + timedelta(minutes=5): + log.warn(f"Too high ram usage, print trace info") + self._write_trace() + self.last_print = datetime.now() + await asyncio.sleep(10) diff --git a/poetry.lock b/poetry.lock index bc250f1..890fc3d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -316,13 +316,13 @@ files = [ [[package]] name = "idna" -version = "3.9" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" files = [ - {file = "idna-3.9-py3-none-any.whl", hash = "sha256:69297d5da0cc9281c77efffb4e730254dd45943f45bbfb461de5991713989b1e"}, - {file = "idna-3.9.tar.gz", hash = "sha256:e5c5dafde284f26e9e0f28f6ea2d6400abd5ca099864a67f576f3981c6476124"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] [package.extras] @@ -716,6 +716,20 @@ files = [ packaging = ">=22.0" setuptools = ">=42.0.0" +[[package]] +name = "pympler" +version = "1.1" +description = "A development tool to measure, monitor and analyze the memory behavior of Python objects." +optional = false +python-versions = ">=3.6" +files = [ + {file = "Pympler-1.1-py3-none-any.whl", hash = "sha256:5b223d6027d0619584116a0cbc28e8d2e378f7a79c1e5e024f9ff3b673c58506"}, + {file = "pympler-1.1.tar.gz", hash = "sha256:1eaa867cb8992c218430f1708fdaccda53df064144d1c5656b1e6f1ee6000424"}, +] + +[package.dependencies] +pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} + [[package]] name = "pynput" version = "1.7.7" @@ -954,6 +968,29 @@ files = [ [package.dependencies] six = ">=1.10.0" +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + [[package]] name = "pywin32-ctypes" version = "0.2.3" @@ -990,18 +1027,18 @@ files = [ [[package]] name = "setuptools" -version = "74.1.2" +version = "75.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-74.1.2-py3-none-any.whl", hash = "sha256:5f4c08aa4d3ebcb57a50c33b1b07e94315d7fc7230f7115e47fc99776c8ce308"}, - {file = "setuptools-74.1.2.tar.gz", hash = "sha256:95b40ed940a1c67eb70fc099094bd6e99c6ee7c23aa2306f4d2697ba7916f9c6"}, + {file = "setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"}, + {file = "setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] @@ -1184,4 +1221,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "ecce3259a2c3f5f62c26b80f4fc1890f24753a7f3f815ef28fa9f26e257ff3d2" +content-hash = "65a5686e12a04dad8a1e9be2cb865fb8c54b91c67d199af357c7410182fe2e51" diff --git a/pyproject.toml b/pyproject.toml index ffccda0..3655226 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,6 +43,12 @@ pygobject = { version = "^3.48.1", platform = "linux" } pytest = "^8.3.2" pytest-asyncio = "^0.24.0" +[tool.poetry.group.ram_leak_test] +optional = true + +[tool.poetry.group.ram_leak_test.dependencies] +pympler = "^1.1" + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" From 03ba8ac703980038f1c3410b315603d191424640 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Wed, 18 Sep 2024 21:04:42 +0700 Subject: [PATCH 04/20] [Fix][win32] `bump_version.sh` under windows / gh actions --- .gitattributes | 3 +++ .github/workflows/on_push.yml | 4 ++-- scripts/bump_version.sh | 6 +++--- 3 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..41ed2c1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* eol=lf +*.bat eol=crlf + diff --git a/.github/workflows/on_push.yml b/.github/workflows/on_push.yml index c006447..45c8d56 100644 --- a/.github/workflows/on_push.yml +++ b/.github/workflows/on_push.yml @@ -35,8 +35,8 @@ jobs: - uses: actions/checkout@v4 - name: Set up poetry environment run: poetry install - #- name: Change in-app version - #run: bash.exe -c "./scripts/bump_version_git.sh" + - name: Change in-app version + run: bash.exe -c "./scripts/bump_version_git.sh" - name: Run build script run: .\scripts/build_win32\make.cmd - name: Upload bundle diff --git a/scripts/bump_version.sh b/scripts/bump_version.sh index 21c316a..8145130 100755 --- a/scripts/bump_version.sh +++ b/scripts/bump_version.sh @@ -11,19 +11,19 @@ source scripts/constants.sh # Bump python wheel version VERSION_SHORT=`echo $1 | cut -d . -f -2` -sed -i "s/^version =.*/version = \"$VERSION_SHORT\"/g" pyproject.toml +sed -bi "s/^version =.*/version = \"$VERSION_SHORT\"/g" pyproject.toml # Create ./openfreebuds_qt/version_info.py echo "VERSION = '$1'" > ./openfreebuds_qt/version_info.py echo "LIBRARIES = [" >> ./openfreebuds_qt/version_info.py -poetry export --without-hashes -n --with extras | while read line +poetry export --without-hashes -n --with extras | sed 's/\r$//' | while read line do echo " '$line'," >> ./openfreebuds_qt/version_info.py done echo "]" >> ./openfreebuds_qt/version_info.py # Update nsis vars -sed -i "s/!define APP_VERSION.*/!define APP_VERSION \"$1\"/g" scripts/build_win32/openfreebuds.nsi +sed -bi "s/!define APP_VERSION.*/!define APP_VERSION \"$1\"/g" scripts/build_win32/openfreebuds.nsi # Update debian pkg changelog prev_changelog=`cat scripts/build_debian/debian/changelog` From ca5c8e3394c24de1024e6d533a62ecc1b6e60e38 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Wed, 18 Sep 2024 21:39:14 +0700 Subject: [PATCH 05/20] [New] save device last charge time --- openfreebuds_qt/app/module/device_info.py | 18 +++++- openfreebuds_qt/designer/device_info.ui | 76 ++++++++++++++--------- openfreebuds_qt/tray/menu.py | 12 +++- 3 files changed, 71 insertions(+), 35 deletions(-) diff --git a/openfreebuds_qt/app/module/device_info.py b/openfreebuds_qt/app/module/device_info.py index aa7ec46..b4a221e 100644 --- a/openfreebuds_qt/app/module/device_info.py +++ b/openfreebuds_qt/app/module/device_info.py @@ -1,6 +1,8 @@ +from PyQt6.QtCore import QDateTime, Qt from PyQt6.QtWidgets import QTableWidgetItem from openfreebuds import OfbEventKind +from openfreebuds_qt.config import OfbQtConfigParser from openfreebuds_qt.utils.core_event import OfbCoreEvent from openfreebuds_qt.app.module.common import OfbQtCommonModule from openfreebuds_qt.utils.qt_utils import qt_error_handler @@ -11,6 +13,7 @@ class OfbQtDeviceInfoModule(Ui_OfbQtDeviceInfoModule, OfbQtCommonModule): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.config = OfbQtConfigParser.get_instance() self.setupUi(self) async def update_ui(self, event: OfbCoreEvent): @@ -18,14 +21,23 @@ async def update_ui(self, event: OfbCoreEvent): if event.is_changed("info") or event.kind_match(OfbEventKind.DEVICE_CHANGED): device_name, device_address = await self.ofb.get_device_tags() info: dict[str, str] = await self.ofb.get_property("info") - if info is None: - return + + last_charged = self.config.get("last_charged", device_address, 0) + if last_charged == 0: + self.last_charged_field.setText(self.tr("Unknown")) + else: + date = QDateTime.fromSecsSinceEpoch(int(last_charged)) + self.last_charged_field.setText(date.toString(Qt.DateFormat.TextDate)) self.device_address.setText(device_address) self.device_name.setText(device_name) + self.all_data_table.clearContents() + + if info is None: + return + self.device_firmware.setText(info.get("software_ver", "--")) - self.all_data_table.clearContents() self.all_data_table.setRowCount(len(info.keys())) for index, (code, value) in enumerate(info.items()): self.all_data_table.setItem(index, 0, QTableWidgetItem(code)) diff --git a/openfreebuds_qt/designer/device_info.ui b/openfreebuds_qt/designer/device_info.ui index deb4c1c..cc51672 100644 --- a/openfreebuds_qt/designer/device_info.ui +++ b/openfreebuds_qt/designer/device_info.ui @@ -17,58 +17,45 @@ 8 - - + + - Bluetooth address: + Firmware version: - - + + - 00:00:00:00:00:00 + 0.0.0 - - + + - All available device information fields: - - - 0 + Bluetooth address: - - + + - 0.0.0 - - - - - - - - 14 - true - + All available device information fields: - - Device name + + 0 - - + + - Firmware version: + 00:00:00:00:00:00 - + @@ -143,6 +130,33 @@ + + + + + 14 + true + + + + Device name + + + + + + + Battery last charged: + + + + + + + Nobody knows + + + diff --git a/openfreebuds_qt/tray/menu.py b/openfreebuds_qt/tray/menu.py index 7599e6a..9dc7790 100644 --- a/openfreebuds_qt/tray/menu.py +++ b/openfreebuds_qt/tray/menu.py @@ -1,3 +1,4 @@ +from datetime import datetime from typing import Optional from PyQt6.QtGui import QAction @@ -25,6 +26,7 @@ def __init__(self, tray: IOfbTrayIcon, context: IOfbQtApplication, ofb: IOpenFre self.config = OfbQtConfigParser.get_instance() self.is_connected: bool = False self.first_time_render: bool = True + self.device_mac_address: str = "" # Translation data self.battery_option_names = { @@ -90,9 +92,10 @@ def __init__(self, tray: IOfbTrayIcon, context: IOfbQtApplication, ofb: IOpenFre async def on_core_event(self, event: OfbCoreEvent): if event.kind_match(OfbEventKind.DEVICE_CHANGED): - device_name, _ = await self.ofb.get_device_tags() + device_name, device_addr = await self.ofb.get_device_tags() self.device_name_action.setText(device_name) self.device_name_action.setVisible(True) + self.device_mac_address = device_addr if event.kind_in([OfbEventKind.STATE_CHANGED, OfbEventKind.QT_SETTINGS_CHANGED]): state = await self.ofb.get_state() @@ -143,12 +146,19 @@ async def _update_battery(self, battery: dict): self.battery_actions["global"].setVisible(not battery_is_tws) self.battery_is_tws = battery_is_tws + # Update menu items for code in battery: if code in self.battery_actions: self.battery_actions[code].setText( f"{self.battery_option_names[code]} {battery[code]}%" ) + # Update last charged config field + if battery.get("global", 0) - 20 > self.config.get("last_battery", self.device_mac_address, 0): + self.config.set("last_battery", self.device_mac_address, battery.get("global", 0)) + self.config.set("last_charged", self.device_mac_address, datetime.now().timestamp()) + self.config.save() + async def _update_anc(self, anc: dict): mode = anc["mode"] mode_options = list(anc["mode_options"].split(",")) From 4ca830ed069784721d86a93165b43c4af251973a Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Thu, 19 Sep 2024 09:47:18 +0700 Subject: [PATCH 06/20] [Fix] Use Qt as fallback dark theme detection --- docs/preview_0.png | Bin 237549 -> 237543 bytes openfreebuds_backend/linux/ui_gtk.py | 2 +- openfreebuds_qt/assets/icon.ico | Bin 8408 -> 8407 bytes openfreebuds_qt/config/main.py | 17 ++++++++++++++++- openfreebuds_qt/main.py | 2 ++ 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/preview_0.png b/docs/preview_0.png index f3ab9c4e885e9ee86981d0badaff35f33cdeeab3..6bda53871b2374868d68af899cd5ce5a546a89e7 100644 GIT binary patch delta 47 zcmV+~0MP&KzYgcW4g`r%PDil?Kbo^enq)7ts>w!whw(@OxA8~W%TK!1GxD~-^ palette.base().color().value() + def get_tray_icon_theme(self): value = self.get("ui", "tray_icon_theme", "auto") if value != "auto": return value - return "dark" if not is_dark_taskbar() else "light" + + # Auto-detect using ofb-backend + backend_theme = is_dark_taskbar() + if backend_theme is not None: + return "dark" if not backend_theme else "light" + + # Auto-detect using qt + return self.qt_is_dark_theme diff --git a/openfreebuds_qt/main.py b/openfreebuds_qt/main.py index f49f2f8..cac2d04 100644 --- a/openfreebuds_qt/main.py +++ b/openfreebuds_qt/main.py @@ -49,6 +49,8 @@ def __init__(self, args): # App configuration ConfigLock.acquire() + self.config.update_fallback_values(self) + log.info(f"Qt is dark theme: {self.config.qt_is_dark_theme}") # Qt base configs self.setApplicationName("OpenFreebuds") From e4f85e5d2f45d2c2d61b89b1c4ebb638cd9561b8 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Fri, 20 Sep 2024 21:10:26 +0700 Subject: [PATCH 07/20] Integrate mmk-updater --- .../app/helper/update_widget_helper.py | 40 ++++++++ openfreebuds_qt/app/main.py | 20 ++++ openfreebuds_qt/app/module/ui_settings.py | 16 ++++ openfreebuds_qt/designer/main_window.ui | 96 ++++++++++++++++++- openfreebuds_qt/designer/ui_settings.ui | 65 ++++++++++--- openfreebuds_qt/generic.py | 2 + openfreebuds_qt/main.py | 4 + openfreebuds_qt/utils/updater/__init__.py | 0 openfreebuds_qt/utils/updater/service.py | 57 +++++++++++ poetry.lock | 19 +++- pyproject.toml | 1 + 11 files changed, 307 insertions(+), 13 deletions(-) create mode 100644 openfreebuds_qt/app/helper/update_widget_helper.py create mode 100644 openfreebuds_qt/utils/updater/__init__.py create mode 100644 openfreebuds_qt/utils/updater/service.py diff --git a/openfreebuds_qt/app/helper/update_widget_helper.py b/openfreebuds_qt/app/helper/update_widget_helper.py new file mode 100644 index 0000000..f05a3b1 --- /dev/null +++ b/openfreebuds_qt/app/helper/update_widget_helper.py @@ -0,0 +1,40 @@ +from PyQt6.QtWidgets import QWidget, QLabel + +from openfreebuds.utils.logger import create_logger +from openfreebuds_qt.config import OfbQtConfigParser +from openfreebuds_qt.generic import IOfbQtApplication + +log = create_logger("OfbQtUpdateWidgetHelper") + + +class OfbQtUpdateWidgetHelper: + def __init__(self, root_widget: QWidget, label_widget: QLabel, ctx: IOfbQtApplication): + self.config = OfbQtConfigParser.get_instance() + self.root_widget = root_widget + self.label_widget = label_widget + self.ctx = ctx + + def update_widget(self): + updater = self.ctx.updater_service.updater + if updater is None: + self.root_widget.setVisible(False) + return + + log.info(f"{updater.has_update} {updater.release_info}") + if updater.has_update: + if updater.release_info.version == self.config.get("updater", "ignored_version", ""): + self.root_widget.setVisible(False) + return + self.label_widget.setText(f"{updater.config.app_display_name} {updater.release_info.version}") + self.root_widget.setVisible(updater.has_update) + + def user_hide(self): + updater = self.ctx.updater_service.updater + if updater is None: + self.root_widget.setVisible(False) + return + + self.config.set("updater", "ignored_version", updater.release_info.version) + self.config.save() + + self.root_widget.setVisible(False) diff --git a/openfreebuds_qt/app/main.py b/openfreebuds_qt/app/main.py index c58cdab..de2ebb1 100644 --- a/openfreebuds_qt/app/main.py +++ b/openfreebuds_qt/app/main.py @@ -2,6 +2,7 @@ import sys from typing import Optional +from PyQt6.QtCore import pyqtSlot from PyQt6.QtGui import QIcon, QKeySequence from PyQt6.QtWidgets import QMenu from qasync import asyncSlot @@ -10,6 +11,7 @@ from openfreebuds.utils.logger import create_logger from openfreebuds_qt.app.dialog.manual_connect import OfbQtManualConnectDialog from openfreebuds_qt.app.helper import OfbQtSettingsTabHelper +from openfreebuds_qt.app.helper.update_widget_helper import OfbQtUpdateWidgetHelper from openfreebuds_qt.app.module import OfbQtAboutModule, OfbQtSoundQualityModule, OfbQtLinuxExtrasModule, \ OfbQtHotkeysModule, OfbQtGesturesModule, OfbQtDualConnectModule, OfbQtDeviceOtherSettingsModule, \ OfbQtDeviceInfoModule, OfbQtCommonModule, OfbQtChooseDeviceModule, OfbQtUiSettingsModule @@ -47,9 +49,13 @@ def __init__(self, ctx: IOfbQtApplication): self.extra_options_button.setMenu(self.extra_menu) self._fill_extras_menu() + # Helpers self.tabs = OfbQtSettingsTabHelper(self.tabs_list_content, self.body_content) + self.update_view = OfbQtUpdateWidgetHelper(self.updater_root, self.updater_header, self.ctx) + # Asyncio & update loop staff self._ui_update_task: Optional[asyncio.Task] = None + self._update_check_task: Optional[asyncio.Task] = None self._ui_modules: list[OfbQtCommonModule] = [] # Header section @@ -80,6 +86,10 @@ def __init__(self, ctx: IOfbQtApplication): self.tabs.set_active_tab(*self.default_tab) def _fill_extras_menu(self): + self.check_updates_action = self.extra_menu.addAction(self.tr("Check for updates...")) + # noinspection PyUnresolvedReferences + self.check_updates_action.triggered.connect(self.on_check_updates) + bugreport_action = self.extra_menu.addAction(self.tr("Bugreport...")) bugreport_action.setShortcut("F2") # noinspection PyUnresolvedReferences @@ -118,6 +128,14 @@ async def on_exit(self): async with qt_error_handler("OfbQtMain_OnExit", self.ctx): await self.ctx.exit() + @pyqtSlot() + def on_hide_update(self): + self.update_view.user_hide() + + @pyqtSlot() + def on_check_updates(self): + self._update_check_task = asyncio.create_task(self.ctx.updater_service.check_now()) + def _attach_module(self, label: str, module: OfbQtCommonModule): entry = self.tabs.add_tab(label, module) self._ui_modules.append(module) @@ -150,6 +168,8 @@ async def _update_loop(self): # First-time force update everything await self._update_ui(OfbCoreEvent(None)) + self.check_updates_action.setEnabled(self.ctx.updater_service.updater is not None) + self.update_view.update_widget() try: while True: diff --git a/openfreebuds_qt/app/module/ui_settings.py b/openfreebuds_qt/app/module/ui_settings.py index a971052..3a9ae09 100644 --- a/openfreebuds_qt/app/module/ui_settings.py +++ b/openfreebuds_qt/app/module/ui_settings.py @@ -1,3 +1,5 @@ +import sys + from PyQt6.QtCore import QLocale from qasync import asyncSlot @@ -21,6 +23,7 @@ def __init__(self, *args, **kwargs): self.shortcut_names = get_shortcut_names() self.available_shortcuts = OfbShortcuts.all() self.available_icons = ["auto", "light", "dark"] + self.available_updater_policies = ["show", "check", "off"] self.available_locales = ["auto", *list_available_locales()] self.config = OfbQtConfigParser.get_instance() @@ -36,6 +39,14 @@ def __init__(self, *args, **kwargs): name = QLocale(locale).nativeLanguageName() self.language_picker.addItem(name) + with blocked_signals(self.updater_policy_picker): + if sys.platform == "win32": + self.updater_policy_picker.setCurrentIndex( + self.available_updater_policies.index(self.config.get("updater", "mode", "show")) + ) + else: + self.updater_policy_picker.setCurrentIndex(2) + self.updater_policy_picker.setEnabled(False) with blocked_signals(self.tray_shortcut_picker): self.tray_shortcut_picker.setCurrentIndex( self.available_shortcuts.index(self.config.get("ui", "tray_shortcut", "next_mode")) @@ -76,6 +87,11 @@ async def on_language_choose(self, index: int): self.config.set("ui", "language", self.available_locales[index]) self.config.save() + @asyncSlot(int) + async def on_updater_policy_choose(self, index: int): + self.config.set("updater", "mode", self.available_updater_policies[index]) + self.config.save() + @asyncSlot(int) async def on_tray_color_choose(self, index: int): self.config.set("ui", "tray_icon_theme", self.available_icons[index]) diff --git a/openfreebuds_qt/designer/main_window.ui b/openfreebuds_qt/designer/main_window.ui index 4bd8da3..1c4ad85 100644 --- a/openfreebuds_qt/designer/main_window.ui +++ b/openfreebuds_qt/designer/main_window.ui @@ -104,7 +104,7 @@ 0 0 218 - 550 + 444 @@ -113,6 +113,66 @@ + + + + + + + + + + New version available, click here to view + + + true + + + + + + + + true + + + + OpenFreebuds v99 + + + + + + + + 0 + 0 + + + + + 60 + 16777215 + + + + Hide + + + true + + + + + + + Update now + + + + + + @@ -245,8 +305,42 @@ + + updater_hide + clicked() + OfbMainWindowDesign + on_hide_update() + + + 180 + 490 + + + 474 + 299 + + + + + update_button + clicked() + OfbMainWindowDesign + on_check_updates() + + + 76 + 530 + + + 474 + 299 + + + on_exit() + on_check_updates() + on_hide_update() diff --git a/openfreebuds_qt/designer/ui_settings.ui b/openfreebuds_qt/designer/ui_settings.ui index a419d6a..be300c7 100644 --- a/openfreebuds_qt/designer/ui_settings.ui +++ b/openfreebuds_qt/designer/ui_settings.ui @@ -27,13 +27,11 @@ Main - - - - - System - - + + + + Launch at system startup + @@ -43,20 +41,48 @@ - + + + + + System + + + + + Restart OpenFeebuds to apply changes - - + + - Launch at system startup + Update checker: + + + + + Notify about new versions + + + + + Check for new versions, but don't notify + + + + + Disabled (not recomended) + + + + @@ -232,6 +258,22 @@ + + updater_policy_picker + currentIndexChanged(int) + OfbQtUiSettingsModule + on_updater_policy_choose(int) + + + 362 + 107 + + + 247 + 261 + + + on_tray_eq_toggle(bool) @@ -240,5 +282,6 @@ on_tray_color_choose(int) on_tray_shortcut_choose(int) on_autostart_toggle(bool) + on_updater_policy_choose(int) diff --git a/openfreebuds_qt/generic.py b/openfreebuds_qt/generic.py index 86f9faf..1e85d9a 100644 --- a/openfreebuds_qt/generic.py +++ b/openfreebuds_qt/generic.py @@ -1,6 +1,7 @@ from PyQt6.QtWidgets import QMainWindow, QApplication, QSystemTrayIcon from openfreebuds import IOpenFreebuds +from openfreebuds_qt.utils.updater.service import OfbQtUpdaterService class IOfbMainWindow(QMainWindow): @@ -25,6 +26,7 @@ class IOfbQtApplication(QApplication): main_window: IOfbMainWindow ofb: IOpenFreebuds tray: IOfbTrayIcon + updater_service: OfbQtUpdaterService async def exit(self, ret_code: int = 0): raise NotImplementedError("Not implemented") diff --git a/openfreebuds_qt/main.py b/openfreebuds_qt/main.py index cac2d04..0fb4f6e 100644 --- a/openfreebuds_qt/main.py +++ b/openfreebuds_qt/main.py @@ -16,6 +16,7 @@ from openfreebuds_qt.utils import OfbQtDeviceAutoSelect, OfbQtHotkeyService, list_available_locales from openfreebuds_qt.utils.mpris.service import OfbQtMPRISHelperService from openfreebuds_qt.utils.ram_trace import start_ram_trace +from openfreebuds_qt.utils.updater.service import OfbQtUpdaterService log = create_logger("OfbQtApplication") @@ -38,6 +39,7 @@ def __init__(self, args): self.mpris: Optional[OfbQtMPRISHelperService] = None self.tray: Optional[OfbTrayIcon] = None self.main_window: Optional[OfbQtMainWindow] = None + self.updater_service: Optional[OfbQtUpdaterService] = None # Setup logging setup_logging(args.verbose) @@ -88,6 +90,7 @@ async def boot(self): self.auto_select = OfbQtDeviceAutoSelect(self.ofb) self.tray = OfbTrayIcon(self) self.main_window = OfbQtMainWindow(self) + self.updater_service = OfbQtUpdaterService(self.main_window) # Dev toys (won't work in release build) start_ram_trace(self) @@ -100,6 +103,7 @@ async def boot(self): await self.mpris.start() await self.tray.boot() await self.main_window.boot() + await self.updater_service.boot() # Show UI self.tray.show() diff --git a/openfreebuds_qt/utils/updater/__init__.py b/openfreebuds_qt/utils/updater/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/openfreebuds_qt/utils/updater/service.py b/openfreebuds_qt/utils/updater/service.py new file mode 100644 index 0000000..d999016 --- /dev/null +++ b/openfreebuds_qt/utils/updater/service.py @@ -0,0 +1,57 @@ +import sys +from typing import Optional + +from PyQt6.QtWidgets import QWidget + +from openfreebuds.utils.logger import create_logger +from openfreebuds_qt.config import OfbQtConfigParser +from openfreebuds_qt.constants import STORAGE_PATH +from openfreebuds_qt.version_info import VERSION + +try: + from mmk_updater import UpdateCheckerConfig + from mmk_updater.qt import MmkUpdaterQt +except ImportError: + UpdateCheckerConfig = None + MmkUpdaterQt = None + +log = create_logger("OfbQtUpdaterService") + + +class OfbQtUpdaterService: + def __init__(self, parent: QWidget): + self.config = OfbQtConfigParser.get_instance() + + is_win32 = sys.platform == "win32" + mode = self.config.get("updater", "mode", "show") + + if UpdateCheckerConfig is not None and MmkUpdaterQt is not None: + self.updater_config = UpdateCheckerConfig( + server_url="https://st.mmk.pw/openfreebuds", + current_version=VERSION, + state_location=STORAGE_PATH / "qt_updater.json", + app_display_name="OpenFreebuds", + notify_method=(UpdateCheckerConfig.NotifyMethod.POP_UP + if is_win32 and mode == "show" + else UpdateCheckerConfig.NotifyMethod.NONE) + ) + self.updater = MmkUpdaterQt(parent, self.updater_config) # type: MmkUpdaterQt + else: + self.updater_config = None + self.updater = None # type: MmkUpdaterQt + + async def boot(self): + if UpdateCheckerConfig is None: + log.info("Skip, unavailable") + return + + if self.config.get("updater", "mode", "show") == "off": + return + + if "git" in VERSION: + return + + await self.updater.boot() + + async def check_now(self): + await self.updater.check_now(True) diff --git a/poetry.lock b/poetry.lock index 890fc3d..8e319a5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -353,6 +353,23 @@ files = [ [package.dependencies] altgraph = ">=0.17" +[[package]] +name = "mmk-updater" +version = "0.15.2" +description = "mmk-updater" +optional = false +python-versions = "<3.13,>=3.10" +files = [ + {file = "mmk_updater-0.15.2-py3-none-any.whl", hash = "sha256:b84475eea1c2efc3f4c709521787a21c40cf2f416acdce1bd56cd8f27d39a519"}, + {file = "mmk_updater-0.15.2.tar.gz", hash = "sha256:a2410381e0557f29bb9a7ab12508fde4136329d59a142318706d0b2cddf29bcf"}, +] + +[package.dependencies] +aiohttp = ">=3.10.5,<4.0.0" +pillow = ">=10.4.0,<11.0.0" +pyqt6 = ">=6.7.1,<7.0.0" +qasync = ">=0.27.1,<0.28.0" + [[package]] name = "multidict" version = "6.1.0" @@ -1221,4 +1238,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "65a5686e12a04dad8a1e9be2cb865fb8c54b91c67d199af357c7410182fe2e51" +content-hash = "5ae9cfce0b546437ceacd6cf2068b5e081b3f6ddb2f07474bcf1e49dcb73f8af" diff --git a/pyproject.toml b/pyproject.toml index 3655226..d912086 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,6 +30,7 @@ pyqt6 = "^6.7.1" qasync = "^0.27.1" sdbus = { version = "^0.12.0", platform = "linux" } pynput = "^1.7.7" +mmk-updater = "0.15.2" [tool.poetry.group.release.dependencies] pyinstaller = "6.10.0" From ace3c9645fcb5a85612259e534c01277d6ed4fdb Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Sat, 21 Sep 2024 19:52:10 +0700 Subject: [PATCH 08/20] [Feature] Flatpak build config --- .gitattributes | 3 - openfreebuds_backend/__init__.py | 1 - openfreebuds_backend/dummy.py | 2 +- openfreebuds_backend/linux/linux_misc.py | 21 +- openfreebuds_backend/linux/ui_gtk.py | 19 -- openfreebuds_qt/app/module/ui_settings.py | 27 +- openfreebuds_qt/config/main.py | 7 +- openfreebuds_qt/designer/ui_settings.ui | 2 +- openfreebuds_qt/main.py | 2 +- poetry.lock | 72 +---- pyproject.toml | 21 +- scripts/build_debian/Makefile | 4 +- .../build_debian/pw.mmk.OpenFreebuds.desktop | 1 + scripts/build_debian/pw.mmk.OpenFreebuds.png | 1 + scripts/build_flatpak/build.sh | 16 + .../pw.mmk.OpenFreebuds.desktop} | 8 +- scripts/build_flatpak/pw.mmk.OpenFreebuds.png | Bin 0 -> 8068 bytes scripts/build_flatpak/pw.mmk.OpenFreebuds.yml | 50 +++ .../build_flatpak/python3-requirements.json | 305 ++++++++++++++++++ scripts/build_win32/openfreebuds.spec | 2 +- scripts/build_win32/pw.mmk.OpenFreebuds.ico | Bin 0 -> 8408 bytes scripts/bump_version.sh | 20 ++ 22 files changed, 444 insertions(+), 140 deletions(-) delete mode 100644 .gitattributes delete mode 100644 openfreebuds_backend/linux/ui_gtk.py create mode 120000 scripts/build_debian/pw.mmk.OpenFreebuds.desktop create mode 120000 scripts/build_debian/pw.mmk.OpenFreebuds.png create mode 100755 scripts/build_flatpak/build.sh rename scripts/{openfreebuds.desktop => build_flatpak/pw.mmk.OpenFreebuds.desktop} (65%) create mode 100644 scripts/build_flatpak/pw.mmk.OpenFreebuds.png create mode 100644 scripts/build_flatpak/pw.mmk.OpenFreebuds.yml create mode 100644 scripts/build_flatpak/python3-requirements.json create mode 100644 scripts/build_win32/pw.mmk.OpenFreebuds.ico diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 41ed2c1..0000000 --- a/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -* eol=lf -*.bat eol=crlf - diff --git a/openfreebuds_backend/__init__.py b/openfreebuds_backend/__init__.py index c66a8d9..6880e76 100644 --- a/openfreebuds_backend/__init__.py +++ b/openfreebuds_backend/__init__.py @@ -3,7 +3,6 @@ from openfreebuds_backend.dummy import * if platform.system() == "Linux": - from openfreebuds_backend.linux.ui_gtk import * from openfreebuds_backend.linux.bluez_io import * from openfreebuds_backend.linux.linux_misc import * elif platform.system() == "Windows": diff --git a/openfreebuds_backend/dummy.py b/openfreebuds_backend/dummy.py index 6d9da94..5de75e9 100644 --- a/openfreebuds_backend/dummy.py +++ b/openfreebuds_backend/dummy.py @@ -40,4 +40,4 @@ def bt_list_devices(): def is_dark_taskbar(): - return False + return None diff --git a/openfreebuds_backend/linux/linux_misc.py b/openfreebuds_backend/linux/linux_misc.py index a2beead..664d410 100644 --- a/openfreebuds_backend/linux/linux_misc.py +++ b/openfreebuds_backend/linux/linux_misc.py @@ -20,7 +20,15 @@ def is_run_at_boot(): def set_run_at_boot(val): path = _get_autostart_file_path() - data = _mk_autostart_file_content() + data = (f"[Desktop Entry]\n" + f"Name=OpenFreebuds\n" + f"Categories=GNOME;GTK;Utility;\n" + f"Exec=openfreebuds_qt\n" + f"Icon=pw.mmk.OpenFreebuds\n" + f"Terminal=false\n" + f"Type=Application\n" + f"X-KDE-autostart-phase=1\n" + f"X-GNOME-Autostart-enabled=true\n") if val: # Install @@ -39,14 +47,3 @@ def _get_autostart_file_path(): if not autostart_dir.exists(): autostart_dir.mkdir() return str(autostart_dir / "openfreebuds.desktop") - - -def _mk_autostart_file_content(): - return (f"[Desktop Entry]\n" - f"Name=Openfreebuds\n" - f"Categories=GNOME;GTK;Utility;\n" - f"Exec=/usr/bin/openfreebuds\n" - f"Icon=/opt/openfreebuds/openfreebuds_assets/icon.png\n" - f"Terminal=false\n" - f"Type=Application\n" - f"X-GNOME-Autostart-enabled=true\n") diff --git a/openfreebuds_backend/linux/ui_gtk.py b/openfreebuds_backend/linux/ui_gtk.py deleted file mode 100644 index b2d0bac..0000000 --- a/openfreebuds_backend/linux/ui_gtk.py +++ /dev/null @@ -1,19 +0,0 @@ -import logging - - -log = logging.getLogger("OfbLinuxBackend") - - -def is_dark_taskbar(): - try: - import gi - gi.require_version("Gtk", "3.0") - - from gi.repository import Gtk - settings = Gtk.Settings() - defaults = settings.get_default() - theme_name = defaults.get_property("gtk-theme-name") - log.info(f"System theme name is {theme_name}") - return "Dark" in theme_name - except ImportError: - return None diff --git a/openfreebuds_qt/app/module/ui_settings.py b/openfreebuds_qt/app/module/ui_settings.py index 3a9ae09..0325a76 100644 --- a/openfreebuds_qt/app/module/ui_settings.py +++ b/openfreebuds_qt/app/module/ui_settings.py @@ -27,17 +27,7 @@ def __init__(self, *args, **kwargs): self.available_locales = ["auto", *list_available_locales()] self.config = OfbQtConfigParser.get_instance() - log.info(self.available_shortcuts) - log.info(self.available_locales) - self.setupUi(self) - for shortcut in self.available_shortcuts: - self.tray_shortcut_picker.addItem(self.shortcut_names.get(shortcut, shortcut)) - for locale in self.available_locales: - if locale == "auto": - continue - name = QLocale(locale).nativeLanguageName() - self.language_picker.addItem(name) with blocked_signals(self.updater_policy_picker): if sys.platform == "win32": @@ -47,25 +37,42 @@ def __init__(self, *args, **kwargs): else: self.updater_policy_picker.setCurrentIndex(2) self.updater_policy_picker.setEnabled(False) + with blocked_signals(self.tray_shortcut_picker): + for shortcut in self.available_shortcuts: + self.tray_shortcut_picker.addItem(self.shortcut_names.get(shortcut, shortcut)) self.tray_shortcut_picker.setCurrentIndex( self.available_shortcuts.index(self.config.get("ui", "tray_shortcut", "next_mode")) ) + with blocked_signals(self.language_picker): + for locale in self.available_locales: + if locale == "auto": + continue + name = QLocale(locale).nativeLanguageName() + self.language_picker.addItem(name) + self.language_picker.setCurrentIndex( self.available_locales.index(self.config.get("ui", "language", "auto")) ) + with blocked_signals(self.tray_icon_picker): self.tray_icon_picker.setCurrentIndex( self.available_icons.index(self.config.get("ui", "tray_icon_theme", "auto")) ) + with blocked_signals(self.tray_eq_toggle): self.tray_eq_toggle.setChecked(self.config.get("ui", "tray_show_equalizer", False)) + with blocked_signals(self.tray_dc_toggle): self.tray_dc_toggle.setChecked(self.config.get("ui", "tray_show_dual_connect", False)) + with blocked_signals(self.autostart_toggle): self.autostart_toggle.setChecked(is_run_at_boot()) + if self.config.is_containerized_app: + self.autostart_toggle.setVisible(False) + @asyncSlot(bool) async def on_autostart_toggle(self, value: bool): set_run_at_boot(value) diff --git a/openfreebuds_qt/config/main.py b/openfreebuds_qt/config/main.py index 8ed9cb4..0213ca3 100644 --- a/openfreebuds_qt/config/main.py +++ b/openfreebuds_qt/config/main.py @@ -1,7 +1,8 @@ import json +import os.path +from functools import cached_property from typing import Optional -from PyQt6.QtGui import QPalette from qasync import QApplication from openfreebuds_backend import is_dark_taskbar @@ -68,3 +69,7 @@ def get_tray_icon_theme(self): # Auto-detect using qt return self.qt_is_dark_theme + + @cached_property + def is_containerized_app(self): + return os.path.isfile("/app/is_container") diff --git a/openfreebuds_qt/designer/ui_settings.ui b/openfreebuds_qt/designer/ui_settings.ui index be300c7..8867f21 100644 --- a/openfreebuds_qt/designer/ui_settings.ui +++ b/openfreebuds_qt/designer/ui_settings.ui @@ -78,7 +78,7 @@ - Disabled (not recomended) + Disabled diff --git a/openfreebuds_qt/main.py b/openfreebuds_qt/main.py index 0fb4f6e..e115ba8 100644 --- a/openfreebuds_qt/main.py +++ b/openfreebuds_qt/main.py @@ -56,7 +56,7 @@ def __init__(self, args): # Qt base configs self.setApplicationName("OpenFreebuds") - self.setDesktopFileName("openfreebuds") + self.setDesktopFileName("pw.mmk.OpenFreebuds") # Qt i18n locale = self._detect_locale() diff --git a/poetry.lock b/poetry.lock index 8e319a5..285896c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -651,39 +651,6 @@ files = [ [package.extras] test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] -[[package]] -name = "pycairo" -version = "1.27.0" -description = "Python interface for cairo" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pycairo-1.27.0-cp310-cp310-win32.whl", hash = "sha256:e20f431244634cf244ab6b4c3a2e540e65746eed1324573cf291981c3e65fc05"}, - {file = "pycairo-1.27.0-cp310-cp310-win_amd64.whl", hash = "sha256:03bf570e3919901572987bc69237b648fe0de242439980be3e606b396e3318c9"}, - {file = "pycairo-1.27.0-cp311-cp311-win32.whl", hash = "sha256:9a9b79f92a434dae65c34c830bb9abdbd92654195e73d52663cbe45af1ad14b2"}, - {file = "pycairo-1.27.0-cp311-cp311-win_amd64.whl", hash = "sha256:d40a6d80b15dacb3672dc454df4bc4ab3988c6b3f36353b24a255dc59a1c8aea"}, - {file = "pycairo-1.27.0-cp312-cp312-win32.whl", hash = "sha256:e2239b9bb6c05edae5f3be97128e85147a155465e644f4d98ea0ceac7afc04ee"}, - {file = "pycairo-1.27.0-cp312-cp312-win_amd64.whl", hash = "sha256:27cb4d3a80e3b9990af552818515a8e466e0317063a6e61585533f1a86f1b7d5"}, - {file = "pycairo-1.27.0-cp313-cp313-win32.whl", hash = "sha256:01505c138a313df2469f812405963532fc2511fb9bca9bdc8e0ab94c55d1ced8"}, - {file = "pycairo-1.27.0-cp313-cp313-win_amd64.whl", hash = "sha256:b0349d744c068b6644ae23da6ada111c8a8a7e323b56cbce3707cba5bdb474cc"}, - {file = "pycairo-1.27.0-cp39-cp39-win32.whl", hash = "sha256:f9ca8430751f1fdcd3f072377560c9e15608b9a42d61375469db853566993c9b"}, - {file = "pycairo-1.27.0-cp39-cp39-win_amd64.whl", hash = "sha256:1b1321652a6e27c4de3069709b1cae22aed2707fd8c5e889c04a95669228af2a"}, - {file = "pycairo-1.27.0.tar.gz", hash = "sha256:5cb21e7a00a2afcafea7f14390235be33497a2cce53a98a19389492a60628430"}, -] - -[[package]] -name = "pygobject" -version = "3.50.0" -description = "Python bindings for GObject Introspection" -optional = false -python-versions = "<4.0,>=3.9" -files = [ - {file = "pygobject-3.50.0.tar.gz", hash = "sha256:4500ad3dbf331773d8dedf7212544c999a76fc96b63a91b3dcac1e5925a1d103"}, -] - -[package.dependencies] -pycairo = ">=1.16" - [[package]] name = "pyinstaller" version = "6.10.0" @@ -733,20 +700,6 @@ files = [ packaging = ">=22.0" setuptools = ">=42.0.0" -[[package]] -name = "pympler" -version = "1.1" -description = "A development tool to measure, monitor and analyze the memory behavior of Python objects." -optional = false -python-versions = ">=3.6" -files = [ - {file = "Pympler-1.1-py3-none-any.whl", hash = "sha256:5b223d6027d0619584116a0cbc28e8d2e378f7a79c1e5e024f9ff3b673c58506"}, - {file = "pympler-1.1.tar.gz", hash = "sha256:1eaa867cb8992c218430f1708fdaccda53df064144d1c5656b1e6f1ee6000424"}, -] - -[package.dependencies] -pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} - [[package]] name = "pynput" version = "1.7.7" @@ -985,29 +938,6 @@ files = [ [package.dependencies] six = ">=1.10.0" -[[package]] -name = "pywin32" -version = "306" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, -] - [[package]] name = "pywin32-ctypes" version = "0.2.3" @@ -1238,4 +1168,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "5ae9cfce0b546437ceacd6cf2068b5e081b3f6ddb2f07474bcf1e49dcb73f8af" +content-hash = "1f39bee953f103daafc6f377b5b1b88505e5c3a94fe554c730af59c7537ffec9" diff --git a/pyproject.toml b/pyproject.toml index d912086..68dffd8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,30 +25,23 @@ python = ">=3.10,<3.13" pillow = "^10.4.0" psutil = "^6.0.0" aiohttp = "^3.10.5" -winsdk = { version = "1.0.0b10", platform = "win32" } -pyqt6 = "^6.7.1" qasync = "^0.27.1" -sdbus = { version = "^0.12.0", platform = "linux" } pynput = "^1.7.7" -mmk-updater = "0.15.2" +sdbus = { version = "^0.12.0", platform = "linux" } +winsdk = { version = "1.0.0b10", platform = "win32" } -[tool.poetry.group.release.dependencies] -pyinstaller = "6.10.0" +[tool.poetry.group.no_flatpak.dependencies] +pyqt6 = "^6.7.1" +mmk-updater = "0.15.2" [tool.poetry.group.extras.dependencies] aiocmd = ">=0.1.5,<0.2.0" pynput = ">=1.7.6,<1.8.0" -pygobject = { version = "^3.48.1", platform = "linux" } -[tool.poetry.group.test.dependencies] +[tool.poetry.group.dev.dependencies] pytest = "^8.3.2" pytest-asyncio = "^0.24.0" - -[tool.poetry.group.ram_leak_test] -optional = true - -[tool.poetry.group.ram_leak_test.dependencies] -pympler = "^1.1" +pyinstaller = "6.10.0" [build-system] requires = ["poetry-core"] diff --git a/scripts/build_debian/Makefile b/scripts/build_debian/Makefile index b770d27..74a5dd3 100644 --- a/scripts/build_debian/Makefile +++ b/scripts/build_debian/Makefile @@ -14,8 +14,10 @@ install: mv ${DESTDIR}${DIST_PACKAGES_PATH}/bin/* ${DESTDIR}/usr/bin/ sed -i '1 s/^.*$$/\#\!\/usr\/bin\/env python3/' ${DESTDIR}/usr/bin/* rm -rf ${DESTDIR}${DIST_PACKAGES_PATH}/bin + mkdir -p ${DESTDIR}/usr/share/icons/hicolor/256x256/apps + install -Dm644 ./pw.mmk.OpenFreebuds.png ${DESTDIR}/usr/share/icons/hicolor/256x256/apps/pw.mmk.OpenFreebuds.png mkdir -p ${DESTDIR}/usr/share/applications - cp ../openfreebuds.desktop ${DESTDIR}/usr/share/applications + install -Dm644 ./pw.mmk.OpenFreebuds.desktop ${DESTDIR}/usr//share/applications/pw.mmk.OpenFreebuds.desktop clean: rm -rf dist *.tar.gz *.whl diff --git a/scripts/build_debian/pw.mmk.OpenFreebuds.desktop b/scripts/build_debian/pw.mmk.OpenFreebuds.desktop new file mode 120000 index 0000000..a2cb092 --- /dev/null +++ b/scripts/build_debian/pw.mmk.OpenFreebuds.desktop @@ -0,0 +1 @@ +../build_flatpak/pw.mmk.OpenFreebuds.desktop \ No newline at end of file diff --git a/scripts/build_debian/pw.mmk.OpenFreebuds.png b/scripts/build_debian/pw.mmk.OpenFreebuds.png new file mode 120000 index 0000000..2b13467 --- /dev/null +++ b/scripts/build_debian/pw.mmk.OpenFreebuds.png @@ -0,0 +1 @@ +../build_flatpak/pw.mmk.OpenFreebuds.png \ No newline at end of file diff --git a/scripts/build_flatpak/build.sh b/scripts/build_flatpak/build.sh new file mode 100755 index 0000000..91eebc3 --- /dev/null +++ b/scripts/build_flatpak/build.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +cd "$(dirname "$0")"/../.. + +rm -rf scripts/build_flatpak/release +./scripts/make_qt_parts.sh +poetry build + +cd scripts/build_flatpak +flatpak-builder \ + --force-clean \ + --user \ + --install-deps-from=flathub \ + --repo=repo \ + --install builddir \ + pw.mmk.OpenFreebuds.yml diff --git a/scripts/openfreebuds.desktop b/scripts/build_flatpak/pw.mmk.OpenFreebuds.desktop similarity index 65% rename from scripts/openfreebuds.desktop rename to scripts/build_flatpak/pw.mmk.OpenFreebuds.desktop index fc6d887..43f7fa2 100644 --- a/scripts/openfreebuds.desktop +++ b/scripts/build_flatpak/pw.mmk.OpenFreebuds.desktop @@ -4,10 +4,10 @@ Type=Application Name=OpenFreebuds GenericName=Headphones manager GenericName[ru]=Управление наушниками -Comment=Open-source client app for HUAWEI FreeBuds -Comment[ru]=Open-source клиент для устройств HUAWEI FreeBuds -Icon=/usr/lib/python3/dist-packages/openfreebuds_qt/assets/icon.png -Exec=/usr/bin/openfreebuds_qt +Comment=Open-source client app for HUAWEI FreeBuds (Flatpak) +Comment[ru]=Open-source клиент для устройств HUAWEI FreeBuds (Flatpak) +Icon=pw.mmk.OpenFreebuds +Exec=openfreebuds_qt Actions= Terminal=false Categories=Utility; diff --git a/scripts/build_flatpak/pw.mmk.OpenFreebuds.png b/scripts/build_flatpak/pw.mmk.OpenFreebuds.png new file mode 100644 index 0000000000000000000000000000000000000000..8d612f7bf10fda17dc9ecb4044c6d7ad4c94ab0d GIT binary patch literal 8068 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 literal 0 HcmV?d00001 diff --git a/scripts/bump_version.sh b/scripts/bump_version.sh index 8145130..8f3378f 100755 --- a/scripts/bump_version.sh +++ b/scripts/bump_version.sh @@ -6,9 +6,17 @@ then exit 1 fi +# Init cd "$(dirname "$0")"/.. source scripts/constants.sh +# Init tools +[ ! -d ./scripts/tools ] && mkdir ./scripts/tools +[ ! -f ./scripts/tools/flatpak-pip-generator ] && \ + echo "Downloading flatpak-pip-generator tool..." && \ + wget https://github.com/flatpak/flatpak-builder-tools/raw/refs/heads/master/pip/flatpak-pip-generator && \ + chmod +x flatpak-pip-generator + # Bump python wheel version VERSION_SHORT=`echo $1 | cut -d . -f -2` sed -bi "s/^version =.*/version = \"$VERSION_SHORT\"/g" pyproject.toml @@ -22,6 +30,18 @@ do done echo "]" >> ./openfreebuds_qt/version_info.py +# Create flatpak PyPI manifests +poetry export \ + --without no_flatpak,dev \ + --without-hashes \ + -o ./scripts/build_flatpak/requirements.txt +sed -i '/sys_platform == \"darwin\"/d' ./scripts/build_flatpak/requirements.txt +sed -i '/sys_platform == \"win32\"/d' ./scripts/build_flatpak/requirements.txt +sed -i 's/ and python_version < \"3.11\"//g' ./scripts/build_flatpak/requirements.txt +./scripts/tools/flatpak-pip-generator \ + -r ./scripts/build_flatpak/requirements.txt \ + -o ./scripts/build_flatpak/python3-requirements.json + # Update nsis vars sed -bi "s/!define APP_VERSION.*/!define APP_VERSION \"$1\"/g" scripts/build_win32/openfreebuds.nsi From 0a7df01cc57fb0b5de587ffc850cc11232d6d740 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Sat, 21 Sep 2024 20:22:47 +0700 Subject: [PATCH 09/20] [Fix] Add Qt version check, remove RAM tracer, update mmk-updater --- openfreebuds_qt/main.py | 37 +++++++++-- openfreebuds_qt/utils/ram_trace/__init__.py | 6 -- .../utils/ram_trace/ram_trace_service.py | 61 ------------------- openfreebuds_qt/utils/report_tool.py | 6 +- poetry.lock | 8 +-- pyproject.toml | 2 +- 6 files changed, 41 insertions(+), 79 deletions(-) delete mode 100644 openfreebuds_qt/utils/ram_trace/__init__.py delete mode 100644 openfreebuds_qt/utils/ram_trace/ram_trace_service.py diff --git a/openfreebuds_qt/main.py b/openfreebuds_qt/main.py index e115ba8..ea0a643 100644 --- a/openfreebuds_qt/main.py +++ b/openfreebuds_qt/main.py @@ -1,9 +1,11 @@ import asyncio import logging import sys +from contextlib import suppress from typing import Optional -from PyQt6.QtCore import QLibraryInfo, QLocale, QTranslator +from PyQt6.QtCore import QLibraryInfo, QLocale, QTranslator, QT_VERSION_STR +from PyQt6.QtWidgets import QMessageBox from qasync import QEventLoop from openfreebuds import IOpenFreebuds, create as create_ofb, OfbEventKind @@ -15,7 +17,6 @@ from openfreebuds_qt.tray.main import OfbTrayIcon from openfreebuds_qt.utils import OfbQtDeviceAutoSelect, OfbQtHotkeyService, list_available_locales from openfreebuds_qt.utils.mpris.service import OfbQtMPRISHelperService -from openfreebuds_qt.utils.ram_trace import start_ram_trace from openfreebuds_qt.utils.updater.service import OfbQtUpdaterService log = create_logger("OfbQtApplication") @@ -52,7 +53,6 @@ def __init__(self, args): # App configuration ConfigLock.acquire() self.config.update_fallback_values(self) - log.info(f"Qt is dark theme: {self.config.qt_is_dark_theme}") # Qt base configs self.setApplicationName("OpenFreebuds") @@ -92,9 +92,6 @@ async def boot(self): self.main_window = OfbQtMainWindow(self) self.updater_service = OfbQtUpdaterService(self.main_window) - # Dev toys (won't work in release build) - start_ram_trace(self) - if self.ofb.role == "standalone": await self.restore_device() await self.auto_select.boot() @@ -105,6 +102,11 @@ async def boot(self): await self.main_window.boot() await self.updater_service.boot() + # Qt version check & warn + with suppress(Exception): + if float(".".join(QT_VERSION_STR.split(".")[:2])) < 6.7: + self.show_old_qt_warning() + # Show UI self.tray.show() if self.args.settings: @@ -177,3 +179,26 @@ def exec_async(self): self.event_loop.create_task(self.boot()) self.event_loop.run_until_complete(self.close_event.wait()) self.event_loop.close() + + def show_old_qt_warning(self): + if self.config.get("ui", "old_qt", False): + return + + paragraph_1 = self.tr( + "You're running under older version of Qt than expected. " + "It's strongly recommended to switch to Flatpak release, " + "because older Qt version may fail your experience of using " + "OpenFreebuds.") + paragraph_2 = self.tr("This warning will be shown only once. Please, " + "test Flatpak version before reporting bugs.") + + QMessageBox( + QMessageBox.Icon.Warning, + "OpenFreebuds", + paragraph_1 + "\n\n" + paragraph_2, + QMessageBox.StandardButton.Ok, + self.main_window + ).show() + + self.config.set("ui", "old_qt", True) + self.config.save() diff --git a/openfreebuds_qt/utils/ram_trace/__init__.py b/openfreebuds_qt/utils/ram_trace/__init__.py deleted file mode 100644 index 28dd071..0000000 --- a/openfreebuds_qt/utils/ram_trace/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -def start_ram_trace(ctx): - try: - from openfreebuds_qt.utils.ram_trace.ram_trace_service import OfbQtRamTraceService - OfbQtRamTraceService(ctx).start() - except ImportError: - pass diff --git a/openfreebuds_qt/utils/ram_trace/ram_trace_service.py b/openfreebuds_qt/utils/ram_trace/ram_trace_service.py deleted file mode 100644 index 01568db..0000000 --- a/openfreebuds_qt/utils/ram_trace/ram_trace_service.py +++ /dev/null @@ -1,61 +0,0 @@ -import asyncio -import os -import signal -from contextlib import suppress -from datetime import datetime, timedelta -from typing import Optional - -import psutil -from pympler.tracker import SummaryTracker - -from openfreebuds.utils.logger import create_logger -from openfreebuds_qt.generic import IOfbQtApplication -from openfreebuds_qt.utils import OfbQtReportTool - -log = create_logger("OfbQtRamTraceService") -ram_warn = 256 * 1024 * 1024 # 256bb -ram_exit = 512 * 1024 * 1024 # 512gb - - -class OfbQtRamTraceService: - def __init__(self, ctx: IOfbQtApplication): - self._task: Optional[asyncio.Task] = None - self.tracker = SummaryTracker() - self.last_print = datetime.now() - timedelta(days=1) - self.ctx = ctx - - def start(self): - if self._task is None: - self._task = asyncio.create_task(self._mainloop()) - - def _write_trace(self): - data = [""] - for item in self.tracker.format_diff(): - data.append(item) - log.warn("\n".join(data)) - - async def _mainloop(self): - process = psutil.Process() - await asyncio.sleep(15) - log.info("Start up RAM usage trace") - self._write_trace() - - with suppress(asyncio.CancelledError): - log.info("Started") - while True: - current_usage = process.memory_info().rss - if current_usage > ram_exit: - log.error("RAM usage exceeded") - self._write_trace() - async with asyncio.Timeout(5): - await OfbQtReportTool(self.ctx).create_and_show() - log.error("Force exiting...") - - # noinspection PyProtectedMember,PyUnresolvedReferences - os._exit(1) - os.kill(os.getpid(), signal.SIGKILL) - elif current_usage > ram_warn and datetime.now() > self.last_print + timedelta(minutes=5): - log.warn(f"Too high ram usage, print trace info") - self._write_trace() - self.last_print = datetime.now() - await asyncio.sleep(10) diff --git a/openfreebuds_qt/utils/report_tool.py b/openfreebuds_qt/utils/report_tool.py index bf22a9d..a5af8e8 100644 --- a/openfreebuds_qt/utils/report_tool.py +++ b/openfreebuds_qt/utils/report_tool.py @@ -3,6 +3,8 @@ import sys from contextlib import suppress +from PyQt6.QtCore import QT_VERSION_STR, PYQT_VERSION_STR + import openfreebuds_backend from openfreebuds.utils.logger import get_full_log from openfreebuds_qt.config import OfbQtConfigParser @@ -48,7 +50,9 @@ async def create_report(self): self.append( f"version={VERSION}", f"os_platform={platform.system()}-{platform.release()}", - f"python={sys.version_info}" + f"python={sys.version_info}", + f"qt={QT_VERSION_STR}", + f"pyqt={PYQT_VERSION_STR}" ) self.header("Role info") diff --git a/poetry.lock b/poetry.lock index 285896c..ec8b2f0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -355,13 +355,13 @@ altgraph = ">=0.17" [[package]] name = "mmk-updater" -version = "0.15.2" +version = "0.15.3" description = "mmk-updater" optional = false python-versions = "<3.13,>=3.10" files = [ - {file = "mmk_updater-0.15.2-py3-none-any.whl", hash = "sha256:b84475eea1c2efc3f4c709521787a21c40cf2f416acdce1bd56cd8f27d39a519"}, - {file = "mmk_updater-0.15.2.tar.gz", hash = "sha256:a2410381e0557f29bb9a7ab12508fde4136329d59a142318706d0b2cddf29bcf"}, + {file = "mmk_updater-0.15.3-py3-none-any.whl", hash = "sha256:6b72a01d63fefe2052c2f13acedb94e9448dfb2275904b26e80c76615aba601f"}, + {file = "mmk_updater-0.15.3.tar.gz", hash = "sha256:ae1e9a2c016e009199006075254b6ea72f7b85c83274cd19acb0fec7577a2b2e"}, ] [package.dependencies] @@ -1168,4 +1168,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "1f39bee953f103daafc6f377b5b1b88505e5c3a94fe554c730af59c7537ffec9" +content-hash = "ce0e0b1b7f0cea5faa980657c0568c24cdbecd46effe5d7629fffcdf5f49950a" diff --git a/pyproject.toml b/pyproject.toml index 68dffd8..0e46882 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ winsdk = { version = "1.0.0b10", platform = "win32" } [tool.poetry.group.no_flatpak.dependencies] pyqt6 = "^6.7.1" -mmk-updater = "0.15.2" +mmk-updater = "0.15.3" [tool.poetry.group.extras.dependencies] aiocmd = ">=0.1.5,<0.2.0" From b6a82b02da2d3fc528b643f16c7cc4e6d6abe6ff Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Sun, 22 Sep 2024 11:33:10 +0700 Subject: [PATCH 10/20] [Refactor] Migrate to dbus-next, fixes sandbox permisions --- .gitignore | 1 + openfreebuds_backend/linux/bluez_io.py | 128 +++++++++++------- openfreebuds_backend/linux/dbus/__init__.py | 1 - .../linux/dbus/bluez_device.py | 19 --- openfreebuds_backend/linux/dbus/mpris.py | 61 ++++++--- openfreebuds_qt/utils/mpris/service.py | 10 +- poetry.lock | 25 ++-- pyproject.toml | 2 +- scripts/build_flatpak/pw.mmk.OpenFreebuds.yml | 16 ++- .../build_flatpak/python3-requirements.json | 28 ++-- scripts/bump_version.sh | 11 +- 11 files changed, 167 insertions(+), 135 deletions(-) delete mode 100644 openfreebuds_backend/linux/dbus/__init__.py delete mode 100644 openfreebuds_backend/linux/dbus/bluez_device.py diff --git a/.gitignore b/.gitignore index 9fb5e30..e1b0a43 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,6 @@ /build /builddir /dist +/scripts/tools /.idea diff --git a/openfreebuds_backend/linux/bluez_io.py b/openfreebuds_backend/linux/bluez_io.py index 1369a25..cc10b72 100644 --- a/openfreebuds_backend/linux/bluez_io.py +++ b/openfreebuds_backend/linux/bluez_io.py @@ -1,104 +1,130 @@ import asyncio import logging -from sdbus import sd_bus_open_system, SdBusBaseError - -from openfreebuds_backend.linux.dbus import BluezDevice1Proxy, BluezProxy +from dbus_next import BusType +from dbus_next.errors import DBusError +from dbus_next.aio import MessageBus, ProxyObject +from dbus_next.introspection import Node log = logging.getLogger("OfbLinuxBackend") -system_bus = sd_bus_open_system() +class DBusConn: + system: MessageBus = None + bluez: ProxyObject = None + bluez_introspect: Node = None + + @staticmethod + async def prepare(): + if DBusConn.system is None: + DBusConn.system = await MessageBus(bus_type=BusType.SYSTEM).connect() + DBusConn.bluez_introspect = await DBusConn.system.introspect("org.bluez", "/") + DBusConn.bluez = DBusConn.system.get_proxy_object("org.bluez", "/", + DBusConn.bluez_introspect) + + +# noinspection PyUnresolvedReferences async def bt_is_connected(address): try: - path = await _dbus_find_bt_device(address) - if path is None: + device, device_introspect = await _dbus_find_bt_device(address) + if device is None: return None - proxy = BluezDevice1Proxy.new_proxy("org.bluez", - object_path=path, - bus=system_bus) - return await proxy.Connected - except SdBusBaseError: + interface = device.get_interface("org.bluez.Device1") + return await interface.get_connected() + except AttributeError: log.exception(f"Failed to check connection state of {address}") return False +# noinspection PyUnresolvedReferences async def bt_connect(address): try: - path = await _dbus_find_bt_device(address) - if path is None: + device, device_introspect = await _dbus_find_bt_device(address) + if device is None: return None - proxy = BluezDevice1Proxy.new_proxy("org.bluez", - object_path=path, - bus=system_bus) - await proxy.Connect() + interface = device.get_interface("org.bluez.Device1") + await interface.call_connect() await asyncio.sleep(1) return True - except SdBusBaseError: + except DBusError: log.exception(f"Failed to change connection state of {address}") return False +# noinspection PyUnresolvedReferences async def bt_disconnect(address): try: - path = await _dbus_find_bt_device(address) - if path is None: + device, device_introspect = await _dbus_find_bt_device(address) + if device is None: return None - proxy = BluezDevice1Proxy.new_proxy("org.bluez", - object_path=path, - bus=system_bus) - await proxy.Disconnect() + interface = device.get_interface("org.bluez.Device1") + await interface.call_disconnect() await asyncio.sleep(1) return True - except SdBusBaseError: + except DBusError: log.exception(f"Failed to change connection state of {address}") return False +# noinspection PyUnresolvedReferences async def bt_list_devices(): scan_results = [] try: - proxy = BluezProxy.new_proxy("org.bluez", - object_path="/", - bus=system_bus) - all_objects = await proxy.get_managed_objects() + await DBusConn.prepare() + obj_manager = DBusConn.bluez.get_interface("org.freedesktop.DBus.ObjectManager") + # noinspection PyUnresolvedReferences + all_objects = await obj_manager.call_get_managed_objects() for path in all_objects: if "org.bluez.Device1" in all_objects[path]: - props = all_objects[path]["org.bluez.Device1"] - if not props.get("Paired", ("", False))[1]: - continue - - scan_results.append({ - "name": props.get("Name", ('', ''))[1], - "address": props.get("Address", ('', ''))[1], - "connected": props.get("Connected", ('', ''))[1], - }) - except SdBusBaseError: + device_introspect = await DBusConn.system.introspect("org.bluez", path) + device = DBusConn.system.get_proxy_object("org.bluez", path, device_introspect) + properties = device.get_interface("org.freedesktop.DBus.Properties") + props = await properties.call_get_all("org.bluez.Device1") + + try: + scan_results.append({ + "name": props.get("Name").value, + "address": props.get("Address").value, + "connected": props.get("Connected").value + }) + except AttributeError: + log.debug(f"Skip broken bluez device {path}") + except DBusError: log.exception("Failed to list devices") return scan_results -async def _dbus_find_bt_device(address): - proxy = BluezProxy.new_proxy("org.bluez", - object_path="/", - bus=system_bus) - all_objects = await proxy.get_managed_objects() +# noinspection PyUnresolvedReferences +async def _dbus_find_bt_device(address: str) -> tuple[ProxyObject, Node]: + try: + await DBusConn.prepare() + obj_manager = DBusConn.bluez.get_interface("org.freedesktop.DBus.ObjectManager") + # noinspection PyUnresolvedReferences + all_objects = await obj_manager.call_get_managed_objects() - for path in all_objects: - if "org.bluez.Device1" in all_objects[path]: - _, addr = all_objects[path]["org.bluez.Device1"]["Address"] - if addr == address: - return path + for path in all_objects: + if "org.bluez.Device1" in all_objects[path]: + device_introspect = await DBusConn.system.introspect("org.bluez", path) + device = DBusConn.system.get_proxy_object("org.bluez", path, device_introspect) + properties = device.get_interface("org.freedesktop.DBus.Properties") + addr = await properties.call_get("org.bluez.Device1", "Address") - return None + try: + if addr.value == address: + return device, device_introspect + except AttributeError: + pass + except DBusError: + log.exception("Failed to find device") + return None, None if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) - asyncio.run(bt_list_devices()) + asyncio.run(bt_is_connected("20:18:5B:04:CB:74")) diff --git a/openfreebuds_backend/linux/dbus/__init__.py b/openfreebuds_backend/linux/dbus/__init__.py deleted file mode 100644 index a47d1ae..0000000 --- a/openfreebuds_backend/linux/dbus/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .bluez_device import BluezDevice1Proxy, BluezProxy diff --git a/openfreebuds_backend/linux/dbus/bluez_device.py b/openfreebuds_backend/linux/dbus/bluez_device.py deleted file mode 100644 index 68d2420..0000000 --- a/openfreebuds_backend/linux/dbus/bluez_device.py +++ /dev/null @@ -1,19 +0,0 @@ -from sdbus import DbusInterfaceCommonAsync, dbus_property_async, DbusObjectManagerInterfaceAsync, dbus_method_async - - -class BluezProxy(DbusObjectManagerInterfaceAsync, interface_name="org.bluez"): - pass - - -class BluezDevice1Proxy(DbusInterfaceCommonAsync, interface_name="org.bluez.Device1"): - @dbus_property_async("b") - def Connected(self) -> bool: - pass - - @dbus_method_async() - async def Disconnect(self): - pass - - @dbus_method_async() - async def Connect(self): - pass diff --git a/openfreebuds_backend/linux/dbus/mpris.py b/openfreebuds_backend/linux/dbus/mpris.py index 23ad22e..c35fbdc 100644 --- a/openfreebuds_backend/linux/dbus/mpris.py +++ b/openfreebuds_backend/linux/dbus/mpris.py @@ -1,36 +1,53 @@ -from sdbus import DbusInterfaceCommonAsync, dbus_property_async, dbus_method_async -from sdbus_async.dbus_daemon import FreedesktopDbus +import asyncio +from dbus_next import BusType +from dbus_next.aio import MessageBus, ProxyObject -class MPRISPProxy(DbusInterfaceCommonAsync, interface_name="org.mpris.MediaPlayer2"): - def __init__(self, service_name): + +class MPRISPProxy: + def __init__(self, dbus_object: ProxyObject): super().__init__() - self._proxify(service_name, "/org/mpris/MediaPlayer2") - self.Player = MPRISPlayer2Proxy.new_proxy(service_name, "/org/mpris/MediaPlayer2") + self.dbus_interface_base = dbus_object.get_interface("org.mpris.MediaPlayer2") + self.dbus_interface_player = dbus_object.get_interface("org.mpris.MediaPlayer2.Player") @staticmethod async def get_all(): items: list[MPRISPProxy] = [] - bus = FreedesktopDbus() - for name in await bus.list_names(): + bus = await MessageBus(bus_type=BusType.SESSION).connect() + + dbus_introspect = await bus.introspect("org.freedesktop.DBus", "/org/freedesktop/DBus") + dbus_obj = bus.get_proxy_object("org.freedesktop.DBus", "/org/freedesktop/DBus", + dbus_introspect) + dbus = dbus_obj.get_interface("org.freedesktop.DBus") + + # noinspection PyUnresolvedReferences + for name in await dbus.call_list_names(): if name.startswith("org.mpris.MediaPlayer2"): - items.append(MPRISPProxy(name)) + introspect = await bus.introspect(name, "/org/mpris/MediaPlayer2") + obj = bus.get_proxy_object(name, "/org/mpris/MediaPlayer2", introspect) + items.append(MPRISPProxy(obj)) return items - @dbus_property_async("s") - def Identity(self) -> str: - pass + async def pause(self): + # noinspection PyUnresolvedReferences + return await self.dbus_interface_player.call_pause() + + async def play(self): + # noinspection PyUnresolvedReferences + return await self.dbus_interface_player.call_play() + + async def identity(self) -> str: + # noinspection PyUnresolvedReferences + return await self.dbus_interface_base.get_identity() + async def playback_status(self) -> str: + # noinspection PyUnresolvedReferences + return await self.dbus_interface_player.get_playback_status() -class MPRISPlayer2Proxy(DbusInterfaceCommonAsync, interface_name="org.mpris.MediaPlayer2.Player"): - @dbus_property_async("s") - def PlaybackStatus(self) -> str: - pass - @dbus_method_async() - async def Pause(self): - pass +if __name__ == "__main__": + async def main(): + for obj in await MPRISPProxy.get_all(): + print(await obj.playback_status()) - @dbus_method_async() - async def Play(self): - pass + asyncio.run(main()) diff --git a/openfreebuds_qt/utils/mpris/service.py b/openfreebuds_qt/utils/mpris/service.py index f27dd7c..e52442d 100644 --- a/openfreebuds_qt/utils/mpris/service.py +++ b/openfreebuds_qt/utils/mpris/service.py @@ -35,14 +35,14 @@ async def _trigger(self): # Pause all self.paused_players = [] for service in await MPRISPProxy.get_all(): - if await service.Player.PlaybackStatus == "Playing": - log.info(f"Pause {service.Identity}") - await service.Player.Pause() + if await service.playback_status() == "Playing": + log.info(f"Pause {await service.identity()}") + await service.pause() self.paused_players.append(service) elif self.last_in_ear is False and in_ear is True: for service in self.paused_players: - log.info(f"Resume {service.Identity}") - await service.Player.Play() + log.info(f"Resume {await service.identity()}") + await service.play() self.paused_players = [] self.last_in_ear = in_ear diff --git a/poetry.lock b/poetry.lock index ec8b2f0..fd97f61 100644 --- a/poetry.lock +++ b/poetry.lock @@ -204,6 +204,17 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "dbus-next" +version = "0.2.3" +description = "A zero-dependency DBus library for Python with asyncio support" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "dbus_next-0.2.3-py3-none-any.whl", hash = "sha256:58948f9aff9db08316734c0be2a120f6dc502124d9642f55e90ac82ffb16a18b"}, + {file = "dbus_next-0.2.3.tar.gz", hash = "sha256:f4eae26909332ada528c0a3549dda8d4f088f9b365153952a408e28023a626a5"}, +] + [[package]] name = "evdev" version = "1.7.1" @@ -960,18 +971,6 @@ files = [ {file = "qasync-0.27.1.tar.gz", hash = "sha256:8dc768fd1ee5de1044c7c305eccf2d39d24d87803ea71189d4024fb475f4985f"}, ] -[[package]] -name = "sdbus" -version = "0.12.0" -description = "Modern Python D-Bus library. Based on sd-bus from libsystemd." -optional = false -python-versions = ">=3.7" -files = [ - {file = "sdbus-0.12.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d918c8ad14ef00e589d6752ac0f2b6540a20c625e85000c152376945fca14209"}, - {file = "sdbus-0.12.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d545e65637536a63898e2366b2a74617aa1a2215b1c16b23475f912e3407838c"}, - {file = "sdbus-0.12.0.tar.gz", hash = "sha256:c3692d75704438a78adc1439350bc32f30d6b38ad344cfc94773db89c6ce4a89"}, -] - [[package]] name = "setuptools" version = "75.1.0" @@ -1168,4 +1167,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "ce0e0b1b7f0cea5faa980657c0568c24cdbecd46effe5d7629fffcdf5f49950a" +content-hash = "c6a9fdc0713c90fcc208829e76d5f06d56a0c3d4277fa73697bc3646fdbbaa68" diff --git a/pyproject.toml b/pyproject.toml index 0e46882..9e098c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,8 +27,8 @@ psutil = "^6.0.0" aiohttp = "^3.10.5" qasync = "^0.27.1" pynput = "^1.7.7" -sdbus = { version = "^0.12.0", platform = "linux" } winsdk = { version = "1.0.0b10", platform = "win32" } +dbus-next = "^0.2.3" [tool.poetry.group.no_flatpak.dependencies] pyqt6 = "^6.7.1" diff --git a/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml b/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml index 0010c6e..6853ffa 100644 --- a/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml +++ b/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml @@ -8,16 +8,22 @@ runtime-version: '6.7' base-version: '6.7' finish-args: + # List paired Bluetooth devices, toggle their connection status + - --system-talk-name=org.bluez + # Connect to Bluetooth devices through RFCOMM / SPP protocol - --allow=bluetooth + - --share=network + # Manage currently running MPRIS-compatible media players + # (can be safely removed if MPRIS helper is disabled) + - --socket=session-bus + # Display user interface - --socket=wayland - --socket=fallback-x11 - --device=dri - - --share=network + # Display tray icon + - --talk-name=org.kde.StatusNotifierWatcher + # Store settings - --filesystem=xdg-config/openfreebuds - # python-sdbus don't want to work through Flatpak's proxy, - # so currently we're requireing direct access to DBus'es - - --socket=system-bus - - --socket=session-bus cleanup-commands: - /app/cleanup-BaseApp.sh diff --git a/scripts/build_flatpak/python3-requirements.json b/scripts/build_flatpak/python3-requirements.json index 5a3ebd9..eb3f3ef 100644 --- a/scripts/build_flatpak/python3-requirements.json +++ b/scripts/build_flatpak/python3-requirements.json @@ -113,6 +113,20 @@ } ] }, + { + "name": "python3-dbus-next", + "buildsystem": "simple", + "build-commands": [ + "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"dbus-next==0.2.3\" --no-build-isolation" + ], + "sources": [ + { + "type": "file", + "url": "https://files.pythonhosted.org/packages/d2/fc/c0a3f4c4eaa5a22fbef91713474666e13d0ea2a69c84532579490a9f2cc8/dbus_next-0.2.3-py3-none-any.whl", + "sha256": "58948f9aff9db08316734c0be2a120f6dc502124d9642f55e90ac82ffb16a18b" + } + ] + }, { "name": "python3-evdev", "buildsystem": "simple", @@ -249,20 +263,6 @@ } ] }, - { - "name": "python3-sdbus", - "buildsystem": "simple", - "build-commands": [ - "pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"sdbus==0.12.0\" --no-build-isolation" - ], - "sources": [ - { - "type": "file", - "url": "https://files.pythonhosted.org/packages/8e/39/3d49f0d18dcba3344af756f31e4408e7de50b3df86fa3f3ea6f604402f16/sdbus-0.12.0.tar.gz", - "sha256": "c3692d75704438a78adc1439350bc32f30d6b38ad344cfc94773db89c6ce4a89" - } - ] - }, { "name": "python3-typing-extensions", "buildsystem": "simple", diff --git a/scripts/bump_version.sh b/scripts/bump_version.sh index 8f3378f..cfe4417 100755 --- a/scripts/bump_version.sh +++ b/scripts/bump_version.sh @@ -12,10 +12,13 @@ source scripts/constants.sh # Init tools [ ! -d ./scripts/tools ] && mkdir ./scripts/tools -[ ! -f ./scripts/tools/flatpak-pip-generator ] && \ - echo "Downloading flatpak-pip-generator tool..." && \ - wget https://github.com/flatpak/flatpak-builder-tools/raw/refs/heads/master/pip/flatpak-pip-generator && \ +if [ ! -f ./scripts/tools/flatpak-pip-generator ] +then + echo "Downloading flatpak-pip-generator tool..." + wget -o ./scripts/tools/flatpak-pip-generator \ + https://github.com/flatpak/flatpak-builder-tools/raw/refs/heads/master/pip/flatpak-pip-generator chmod +x flatpak-pip-generator +fi # Bump python wheel version VERSION_SHORT=`echo $1 | cut -d . -f -2` @@ -40,7 +43,7 @@ sed -i '/sys_platform == \"win32\"/d' ./scripts/build_flatpak/requirements.txt sed -i 's/ and python_version < \"3.11\"//g' ./scripts/build_flatpak/requirements.txt ./scripts/tools/flatpak-pip-generator \ -r ./scripts/build_flatpak/requirements.txt \ - -o ./scripts/build_flatpak/python3-requirements.json + -o ./scripts/build_flatpak/python3-requirements # Update nsis vars sed -bi "s/!define APP_VERSION.*/!define APP_VERSION \"$1\"/g" scripts/build_win32/openfreebuds.nsi From 1698ecb1e1dd58930858a02bdd0d2ab2244ccca1 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Sun, 22 Sep 2024 12:41:22 +0700 Subject: [PATCH 11/20] [Feature] Remote control guide, settings and auth --- openfreebuds/assets/web_static/index.html | 92 ++++++++++++++++ openfreebuds/constants.py | 4 +- openfreebuds/main.py | 21 +++- .../manager/{standalone.py => main.py} | 7 ++ openfreebuds/utils/stupid_rpc.py | 40 +++++-- openfreebuds/webserver.py | 46 ++++++++ openfreebuds_qt/app/dialog/rpc_config.py | 39 +++++++ openfreebuds_qt/app/main.py | 31 +++++- openfreebuds_qt/app/module/linux_related.py | 4 +- openfreebuds_qt/constants.py | 6 +- openfreebuds_qt/designer/stupid_rpc_setup.ui | 101 ++++++++++++++++++ 11 files changed, 366 insertions(+), 25 deletions(-) create mode 100644 openfreebuds/assets/web_static/index.html rename openfreebuds/manager/{standalone.py => main.py} (95%) create mode 100644 openfreebuds/webserver.py create mode 100644 openfreebuds_qt/app/dialog/rpc_config.py create mode 100644 openfreebuds_qt/designer/stupid_rpc_setup.ui diff --git a/openfreebuds/assets/web_static/index.html b/openfreebuds/assets/web_static/index.html new file mode 100644 index 0000000..23bf93c --- /dev/null +++ b/openfreebuds/assets/web_static/index.html @@ -0,0 +1,92 @@ + + + + + OpenFreebuds + + + +

+ OpenFreebuds RPC +

+

+ Use this web-server to control earphones from your software + or scripts +

+

+ Quick actions +

+

+ Right-click on required action link and copy their URL. So you can trigger + them from any app or script, for exmaple, via curl: +

+
curl -s http://localhost:19823/mode_cancellation
+

Available actions:

+
+

+ Direct RPC command execution +

+
fetch(
+    "http://localhost:19823/__rpc__/set_property", {
+        method: "POST",
+        headers: {
+            "Content-Type": "application/json",
+            "X-Secret": "SECRET_KEY_IF_ENROLLED",
+        },
+        body: JSON.stringify({
+            "args": ["anc", "mode", "awareness"],
+            "kwargs": {},
+        }),
+    }
+)
+    .then(d => d.json())
+    .then(r => console.log(r))
+

+ Remote access +

+

+ To access this page through other devices in network, + make sure that you're enabled "Remote access" in GUI + settings. +

+

+ If you plan to do that, it's strongly recommended to also + enable secret key verification, and set strong, random key, + to prevent unauthorized access to your devices. +

+ + + \ No newline at end of file diff --git a/openfreebuds/constants.py b/openfreebuds/constants.py index b45d387..38e97e4 100644 --- a/openfreebuds/constants.py +++ b/openfreebuds/constants.py @@ -1,7 +1,8 @@ import os -import sys from pathlib import Path +from openfreebuds_backend import get_app_storage_path + class OfbEventKind: STATE_CHANGED = "state_changed" @@ -12,3 +13,4 @@ class OfbEventKind: APP_ROOT = Path(os.path.dirname(os.path.realpath(__file__))).parent +STORAGE_PATH = get_app_storage_path() / "openfreebuds" diff --git a/openfreebuds/main.py b/openfreebuds/main.py index 2ceef51..60aef71 100644 --- a/openfreebuds/main.py +++ b/openfreebuds/main.py @@ -1,27 +1,40 @@ import asyncio +import json import logging from aiohttp import ClientConnectorError -from openfreebuds.manager.standalone import OfbManager +from openfreebuds.constants import STORAGE_PATH +from openfreebuds.manager.main import OfbManager from openfreebuds.utils.logger import create_logger from openfreebuds.utils.stupid_rpc import test_online, run_rpc_server log = create_logger("OpenFreebudsDaemon") -# await openfreebuds.start("HUAWEI FreeBuds 5i" "DC:D4:44:28:6F:AE") -async def create(): +async def create(kwargs: dict = None): """ Create a new manager instance, or connect to exiting if it's already spawned """ instance = OfbManager() + if kwargs is None: + # noinspection PyBroadException + try: + rpc_config_path = STORAGE_PATH / "openfreebuds_rpc.json" + log.info(f"Will load RPC config from {rpc_config_path}") + with open(rpc_config_path, "r") as f: + kwargs = json.load(f) + except Exception: + kwargs = {} + + instance.rpc_config = kwargs + try: await test_online() instance.role = "client" except ClientConnectorError: - instance.server_task = asyncio.create_task(run_rpc_server(instance, "")) + instance.server_task = asyncio.create_task(run_rpc_server(instance, **kwargs)) return instance diff --git a/openfreebuds/manager/standalone.py b/openfreebuds/manager/main.py similarity index 95% rename from openfreebuds/manager/standalone.py rename to openfreebuds/manager/main.py index 6db6582..088171b 100644 --- a/openfreebuds/manager/standalone.py +++ b/openfreebuds/manager/main.py @@ -3,7 +3,10 @@ from contextlib import asynccontextmanager from typing import Optional +from aiohttp.web_routedef import RouteTableDef + import openfreebuds_backend +from openfreebuds import webserver from openfreebuds.constants import OfbEventKind from openfreebuds.driver import DEVICE_TO_DRIVER_MAP from openfreebuds.driver.generic import OfbDriverGeneric @@ -27,6 +30,7 @@ def __init__(self): self._state = IOpenFreebuds.STATE_STOPPED # type: int self.role: str = "standalone" + self.rpc_config: dict = {} self.server_task: Task | None = None @rpc @@ -169,6 +173,9 @@ async def _mainloop_inner(self): await asyncio.sleep(2) + def on_rpc_server_setup(self, routes: RouteTableDef, secret: Optional[str]): + webserver.setup_routes(self, routes, secret) + async def _set_state(self, new_state: int): if self._state == new_state: return diff --git a/openfreebuds/utils/stupid_rpc.py b/openfreebuds/utils/stupid_rpc.py index 056ab4d..7ddac44 100644 --- a/openfreebuds/utils/stupid_rpc.py +++ b/openfreebuds/utils/stupid_rpc.py @@ -5,6 +5,7 @@ import aiohttp from aiohttp import web +from aiohttp.web_response import json_response from openfreebuds.exceptions import OfbServerDeadError from openfreebuds.utils.logger import create_logger @@ -28,7 +29,7 @@ async def _inner(self, *args, **kwargs): if self.role == "client": while True: try: - return await do_rpc_request(func.__name__, *args, **kwargs) + return await do_rpc_request(func.__name__, self.rpc_config, *args, **kwargs) except aiohttp.ClientConnectionError: raise OfbServerDeadError("Server is down, please restart application") return await func(self, *args, **kwargs) @@ -36,16 +37,17 @@ async def _inner(self, *args, **kwargs): return _inner -async def do_rpc_request(func, *args, **kwargs): +async def do_rpc_request(func, config, *args, **kwargs): async with aiohttp.ClientSession() as session: async with session.post( - f"http://127.0.0.1:{_PORT}/{func}", + f"http://127.0.0.1:{_PORT}/__rpc__/{func}", data=json.dumps({ "args": args, "kwargs": kwargs, }), headers={ - "Content-Type": "application/json" + "Content-Type": "application/json", + "X-Secret": config.get("secret_key", "") } ) as resp: data = json.loads(await resp.text()) @@ -56,12 +58,12 @@ async def do_rpc_request(func, *args, **kwargs): async def test_online(): async with aiohttp.ClientSession() as session: - async with session.get(f"http://127.0.0.1:{_PORT}/ping") as resp: + async with session.get(f"http://127.0.0.1:{_PORT}/__rpc__/ping") as resp: assert resp.status == 200 # noinspection PyBroadException -async def _handle_rpc_call(instance, static_folder, request: web.Request, data=None): +async def _handle_rpc_call(instance, request: web.Request, data=None): target = '' if 'path' not in request.match_info else request.match_info['path'] if data is None: @@ -86,19 +88,34 @@ async def _handle_rpc_call(instance, static_folder, request: web.Request, data=N return web.Response(status=200, text="ok") -async def run_rpc_server(instance, static_folder): +async def run_rpc_server( + instance, + allow_remote: bool = False, + require_authorization: bool = False, + secret_key: str = "", +): logging.getLogger('aiohttp.access').setLevel(logging.WARNING) + host = "127.0.0.1" if not allow_remote else "0.0.0.0" routes = web.RouteTableDef() - @routes.route('*', "/{path}") + if allow_remote: + log.warning("Allowed remote connection to RPC") + + if hasattr(instance, "on_rpc_server_setup"): + instance.on_rpc_server_setup(routes, None if not require_authorization else secret_key) + + @routes.route('*', "/__rpc__/{path}") async def handle(request: web.Request): + if require_authorization and request.headers.get("X-Secret", "") != secret_key: + return json_response({"error": "Unauthorized"}, status=401) + data = None if request.method == "POST": data = await request.json() - return await _handle_rpc_call(instance, static_folder, request, data) + return await _handle_rpc_call(instance, request, data) - @routes.get("/ping") + @routes.get("/__rpc__/ping") def ping(_): return web.Response(text="pong") @@ -107,8 +124,9 @@ def ping(_): runner = aiohttp.web.AppRunner(app) await runner.setup() - server = aiohttp.web.TCPSite(runner, port=_PORT) + server = aiohttp.web.TCPSite(runner, host=host, port=_PORT) await server.start() + log.info(f"Started RPC server at{_PORT}") try: await asyncio.Event().wait() diff --git a/openfreebuds/webserver.py b/openfreebuds/webserver.py new file mode 100644 index 0000000..3849f91 --- /dev/null +++ b/openfreebuds/webserver.py @@ -0,0 +1,46 @@ +from typing import Optional + +from aiohttp.web import Request +from aiohttp.web_fileresponse import FileResponse +from aiohttp.web_response import json_response +from aiohttp.web_routedef import RouteTableDef + +from openfreebuds.constants import APP_ROOT +from openfreebuds.manager.generic import IOpenFreebuds +from openfreebuds.shortcuts import OfbShortcuts +from openfreebuds.utils.logger import create_logger + +log = create_logger("OfbWebServer") +STATIC_PATH = APP_ROOT / "openfreebuds" / "assets" / "web_static" + + +def setup_routes(instance: IOpenFreebuds, routes: RouteTableDef, secret: Optional[str]): + all_shortcuts = OfbShortcuts.all() + + @routes.get("/") + def index_html(request: Request): + if secret is not None and request.headers.get("X-Secret", "") != secret: + return json_response({"error": "Unauthorized"}, status=401) + return FileResponse(STATIC_PATH / "index.html") + + @routes.get("/list_shortcuts") + def list_shortcuts(request: Request): + if secret is not None and request.headers.get("X-Secret", "") != secret: + return json_response({"error": "Unauthorized"}, status=401) + return json_response(all_shortcuts) + + @routes.get("/{shortcut}") + async def handle_shortcut(request: Request): + if secret is not None and request.headers.get("X-Secret", "") != secret: + return json_response({"error": "Unauthorized"}, status=401) + + name = request.match_info["shortcut"] + if name not in all_shortcuts: + return json_response({"error": "Not found"}, status=404) + + try: + await instance.run_shortcut(name) + return json_response({"result": True}) + except Exception: + log.exception(f"Wile running {name} shortcut") + return json_response({"error": "Failed"}, status=500) diff --git a/openfreebuds_qt/app/dialog/rpc_config.py b/openfreebuds_qt/app/dialog/rpc_config.py new file mode 100644 index 0000000..c4e0cc2 --- /dev/null +++ b/openfreebuds_qt/app/dialog/rpc_config.py @@ -0,0 +1,39 @@ +import json +from contextlib import suppress + +from PyQt6.QtWidgets import QWidget + +from openfreebuds import STORAGE_PATH +from openfreebuds.utils.logger import create_logger +from openfreebuds_qt.designer.stupid_rpc_setup import Ui_Dialog +from openfreebuds_qt.utils import OfbQtAsyncDialog + +log = create_logger("OfbQtRpcConfig") + + +class OfbQtRpcConfig(Ui_Dialog, OfbQtAsyncDialog): + def __init__(self, parent: QWidget): + super().__init__(parent) + self.setupUi(self) + + self.current_config = {} + with suppress(Exception): + with open(STORAGE_PATH / "openfreebuds_rpc.json", "r") as f: + self.current_config = json.load(f) + + self.cb_remote_access.setChecked(self.current_config.get("allow_remote", False)) + self.cb_secret_key.setChecked(self.current_config.get("require_authorization", False)) + self.field_secret.setText(self.current_config.get("secret_key", "")) + + async def get_user_response(self): + res = await super().get_user_response() + if not res: + return + + # Save settings + with open(STORAGE_PATH / "openfreebuds_rpc.json", "w") as f: + json.dump({ + "allow_remote": self.cb_remote_access.isChecked(), + "require_authorization": self.cb_secret_key.isChecked(), + "secret_key": self.field_secret.text(), + }, f) diff --git a/openfreebuds_qt/app/main.py b/openfreebuds_qt/app/main.py index de2ebb1..b95f781 100644 --- a/openfreebuds_qt/app/main.py +++ b/openfreebuds_qt/app/main.py @@ -1,5 +1,6 @@ import asyncio import sys +import webbrowser from typing import Optional from PyQt6.QtCore import pyqtSlot @@ -10,13 +11,14 @@ from openfreebuds import IOpenFreebuds, OfbEventKind from openfreebuds.utils.logger import create_logger from openfreebuds_qt.app.dialog.manual_connect import OfbQtManualConnectDialog +from openfreebuds_qt.app.dialog.rpc_config import OfbQtRpcConfig from openfreebuds_qt.app.helper import OfbQtSettingsTabHelper from openfreebuds_qt.app.helper.update_widget_helper import OfbQtUpdateWidgetHelper from openfreebuds_qt.app.module import OfbQtAboutModule, OfbQtSoundQualityModule, OfbQtLinuxExtrasModule, \ OfbQtHotkeysModule, OfbQtGesturesModule, OfbQtDualConnectModule, OfbQtDeviceOtherSettingsModule, \ OfbQtDeviceInfoModule, OfbQtCommonModule, OfbQtChooseDeviceModule, OfbQtUiSettingsModule -from openfreebuds_qt.config import ConfigLock -from openfreebuds_qt.constants import ASSETS_PATH +from openfreebuds_qt.config import ConfigLock, OfbQtConfigParser +from openfreebuds_qt.constants import ASSETS_PATH, LINK_RPC_HELP, LINK_WEBSITE_HELP from openfreebuds_qt.designer.main_window import Ui_OfbMainWindowDesign from openfreebuds_qt.generic import IOfbQtApplication, IOfbMainWindow from openfreebuds_qt.utils import qt_error_handler, OfbCoreEvent, OfbQtReportTool, get_qt_icon_colored @@ -32,6 +34,7 @@ def __init__(self, ctx: IOfbQtApplication): self.ctx = ctx self.ofb = ctx.ofb + self.config = OfbQtConfigParser.get_instance() self.setupUi(self) @@ -86,21 +89,37 @@ def __init__(self, ctx: IOfbQtApplication): self.tabs.set_active_tab(*self.default_tab) def _fill_extras_menu(self): - self.check_updates_action = self.extra_menu.addAction(self.tr("Check for updates...")) + help_action = self.extra_menu.addAction(self.tr("Help: FAQ")) # noinspection PyUnresolvedReferences - self.check_updates_action.triggered.connect(self.on_check_updates) + help_action.triggered.connect(lambda: webbrowser.open(LINK_WEBSITE_HELP)) + + help_rpc_action = self.extra_menu.addAction(self.tr("Help: Remote control")) + # noinspection PyUnresolvedReferences + help_rpc_action.triggered.connect(lambda: webbrowser.open(LINK_RPC_HELP)) bugreport_action = self.extra_menu.addAction(self.tr("Bugreport...")) bugreport_action.setShortcut("F2") # noinspection PyUnresolvedReferences bugreport_action.triggered.connect(self.on_bugreport) + self.check_updates_action = self.extra_menu.addAction(self.tr("Check for updates...")) + # noinspection PyUnresolvedReferences + self.check_updates_action.triggered.connect(self.on_check_updates) + + self.extra_menu.addSeparator() + + if self.ofb.role == "standalone" and ConfigLock.owned and not self.config.is_containerized_app: + rpc_config_action = self.extra_menu.addAction(self.tr("Remote access...")) + # noinspection PyUnresolvedReferences + rpc_config_action.triggered.connect(self.on_rpc_config) + temp_device_action = self.extra_menu.addAction(self.tr("Temporary replace device")) temp_device_action.setShortcut("Ctrl+D") # noinspection PyUnresolvedReferences temp_device_action.triggered.connect(self.temporary_change_device) self.extra_menu.addSeparator() + hide_action = self.extra_menu.addAction(self.tr("Close this window")) hide_action.setShortcut(QKeySequence('Ctrl+W')) # noinspection PyUnresolvedReferences @@ -123,6 +142,10 @@ async def temporary_change_device(self): async def on_bugreport(self): await OfbQtReportTool(self.ctx).create_and_show() + @asyncSlot() + async def on_rpc_config(self): + await OfbQtRpcConfig(self).get_user_response() + @asyncSlot() async def on_exit(self): async with qt_error_handler("OfbQtMain_OnExit", self.ctx): diff --git a/openfreebuds_qt/app/module/linux_related.py b/openfreebuds_qt/app/module/linux_related.py index a1480a6..5667e8d 100644 --- a/openfreebuds_qt/app/module/linux_related.py +++ b/openfreebuds_qt/app/module/linux_related.py @@ -6,6 +6,7 @@ from openfreebuds_qt.app.module.common import OfbQtCommonModule from openfreebuds_qt.config import OfbQtConfigParser +from openfreebuds_qt.constants import LINK_WEBSITE_HELP from openfreebuds_qt.designer.linux_extras import Ui_OfbQtLinuxExtrasModule from openfreebuds_qt.utils import blocked_signals from openfreebuds_qt.utils.mpris.service import OfbQtMPRISHelperService @@ -26,8 +27,7 @@ def __init__(self, *args, **kwargs): @pyqtSlot() def on_hotkeys_doc(self): - url = "https://mmk.pw/en/openfreebuds/help" - webbrowser.open(url) + webbrowser.open(LINK_WEBSITE_HELP) @asyncSlot(bool) async def on_mpris_toggle(self, value: bool): diff --git a/openfreebuds_qt/constants.py b/openfreebuds_qt/constants.py index 396c22a..5621d87 100644 --- a/openfreebuds_qt/constants.py +++ b/openfreebuds_qt/constants.py @@ -1,8 +1,6 @@ -import openfreebuds_backend -from openfreebuds import APP_ROOT +from openfreebuds import APP_ROOT, STORAGE_PATH ASSETS_PATH = APP_ROOT / "openfreebuds_qt" / "assets" -STORAGE_PATH = openfreebuds_backend.get_app_storage_path() / "openfreebuds" I18N_PATH = APP_ROOT / "openfreebuds_qt" / "assets" / "i18n" IGNORED_LOG_TAGS = [ @@ -14,4 +12,6 @@ ] LINK_WEBSITE = "https://mmk.pw/en/openfreebuds/" +LINK_WEBSITE_HELP = "https://mmk.pw/en/openfreebuds/help" LINK_GITHUB = "https://github.com/melianmiko/OpenFreebuds/" +LINK_RPC_HELP = "http://localhost:19823/" diff --git a/openfreebuds_qt/designer/stupid_rpc_setup.ui b/openfreebuds_qt/designer/stupid_rpc_setup.ui new file mode 100644 index 0000000..b2a01e4 --- /dev/null +++ b/openfreebuds_qt/designer/stupid_rpc_setup.ui @@ -0,0 +1,101 @@ + + + Dialog + + + + 0 + 0 + 363 + 172 + + + + StupidRPC configuration + + + + + + + 0 + 0 + + + + Change this settings only if you know what you're doing. Require restart of all OpenFreebuds instances and all clients. + + + true + + + + + + + Allow controlling OpenFreebuds through network + + + + + + + Require following secret to be present in X-Secret header + + + + + + + (enter new secret key) + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + From b28f0530489ba1ece00c9e659eefb4be6b34dfc2 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Sun, 22 Sep 2024 13:42:52 +0700 Subject: [PATCH 12/20] [Docs] Update screenshots --- docs/app_0.png | Bin 0 -> 63632 bytes docs/app_1.png | Bin 0 -> 69846 bytes docs/preview_0.png | Bin 237543 -> 41238 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/app_0.png create mode 100644 docs/app_1.png diff --git a/docs/app_0.png b/docs/app_0.png new file mode 100644 index 0000000000000000000000000000000000000000..47b7b63aaa4aaf3d7e6f06ef726bf0b29b8c75ce GIT binary patch literal 63632 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
eOT>)TzPZ+YIFcSkZfq`b&)$SCG({I-=# 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 literal 0 HcmV?d00001 diff --git a/docs/preview_0.png b/docs/preview_0.png index 6bda53871b2374868d68af899cd5ce5a546a89e7..9ea341c12ed29095649511089caafbe8aa5c6be6 100644 GIT binary patch literal 41238 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�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 From 05e3bfd298dcd1bce203110912175b0fc142dcb2 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Sun, 22 Sep 2024 14:21:19 +0700 Subject: [PATCH 13/20] [Feature] Add metainfo, minor fixes --- README.md | 7 +- .../assets/debug_profiles/huawei_5i.json | 6 +- openfreebuds_qt/app/main.py | 2 +- openfreebuds_qt/app/module/linux_related.py | 13 +++ scripts/build_debian/Makefile | 4 +- scripts/build_debian/build.sh | 4 + .../pw.mmk.OpenFreebuds.metainfo.xml | 1 + .../build_flatpak/pw.mmk.OpenFreebuds.desktop | 6 +- .../pw.mmk.OpenFreebuds.metainfo.xml | 91 +++++++++++++++++++ scripts/build_flatpak/pw.mmk.OpenFreebuds.yml | 15 +-- 10 files changed, 130 insertions(+), 19 deletions(-) create mode 120000 scripts/build_debian/pw.mmk.OpenFreebuds.metainfo.xml create mode 100644 scripts/build_flatpak/pw.mmk.OpenFreebuds.metainfo.xml diff --git a/README.md b/README.md index 5cdc5d5..9e5ccc2 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ ![Tray menu preview](docs/preview_0.png) +This application allows to control HUAWEI FreeBuds earphone settings from PC. Check exact battery level, toggle noise cancellation, control built-in equalizer, change gestures, and all other in-device settings and features are now available without official mobile application. + Features --------- @@ -45,10 +47,7 @@ If your device isn't listed here, you could try to use it with profile for other - [HUAWEI FreeLace Pro](./docs/devices/HUAWEI_FreeLace_Pro.md) - [HUAWEI FreeLace Pro 2](./docs/devices/HUAWEI_FreeLace_Pro_2.md) -If you want to get full support of your headphones, you can [create a Bluetooth-traffic](https://mmk.pw/en/posts/ofb-contribution/) -dump from Ai Life, which will contain all requests and responses that is used by official -app to manage your headset. Then send collected file to me, I'll analyze them and try to -implement their features in OpenFreebuds. +May also work with newer/older devices in same series. If you want to get better compatibility of some model, you could [create Bluetooth traffic dump](https://mmk.pw/en/posts/ofb-contribution/) to help making OpenFreebuds better. Download & install ----------------- diff --git a/openfreebuds/assets/debug_profiles/huawei_5i.json b/openfreebuds/assets/debug_profiles/huawei_5i.json index 1911bc3..6c7de6e 100644 --- a/openfreebuds/assets/debug_profiles/huawei_5i.json +++ b/openfreebuds/assets/debug_profiles/huawei_5i.json @@ -9,9 +9,9 @@ "in_ear": "false" }, "battery": { - "global": 90, - "left": 90, - "right": 90, + "global": 50, + "left": 50, + "right": 65, "case": 85, "is_charging": "false" }, diff --git a/openfreebuds_qt/app/main.py b/openfreebuds_qt/app/main.py index b95f781..0f0b72c 100644 --- a/openfreebuds_qt/app/main.py +++ b/openfreebuds_qt/app/main.py @@ -108,7 +108,7 @@ def _fill_extras_menu(self): self.extra_menu.addSeparator() - if self.ofb.role == "standalone" and ConfigLock.owned and not self.config.is_containerized_app: + if self.ofb.role == "standalone" and ConfigLock.owned: rpc_config_action = self.extra_menu.addAction(self.tr("Remote access...")) # noinspection PyUnresolvedReferences rpc_config_action.triggered.connect(self.on_rpc_config) diff --git a/openfreebuds_qt/app/module/linux_related.py b/openfreebuds_qt/app/module/linux_related.py index 5667e8d..71218a7 100644 --- a/openfreebuds_qt/app/module/linux_related.py +++ b/openfreebuds_qt/app/module/linux_related.py @@ -2,6 +2,7 @@ import webbrowser from PyQt6.QtCore import pyqtSlot +from PyQt6.QtWidgets import QMessageBox from qasync import asyncSlot from openfreebuds_qt.app.module.common import OfbQtCommonModule @@ -31,6 +32,18 @@ def on_hotkeys_doc(self): @asyncSlot(bool) async def on_mpris_toggle(self, value: bool): + if value and self.config.is_containerized_app: + QMessageBox( + QMessageBox.Icon.Information, + self.tr("Ensure bus access"), + self.tr("Looks like you're running under Flatpak. To use this feature, OpenFreebuds" + "need to have access to entire session bus, otherwise it won't find any" + "working media players. Ensure that you're granted this permission," + "refer to FAQ for more details."), + QMessageBox.StandardButton.Ok, + self + ).show() + self.config.set("mpris", "enabled", value) self.config.save() await self.service.start() diff --git a/scripts/build_debian/Makefile b/scripts/build_debian/Makefile index 74a5dd3..8e6bcf3 100644 --- a/scripts/build_debian/Makefile +++ b/scripts/build_debian/Makefile @@ -3,7 +3,7 @@ DESTDIR := ${PWD}/dist DIST_PACKAGES_PATH := /usr/lib/python3/dist-packages WHEEL_FILE := $(shell find ${PWD} -maxdepth 1 -name '*.whl') -all: +prepare: bash ../make_qt_parts.sh cd ../.. && poetry build cp ../../dist/openfreebuds* . @@ -18,6 +18,8 @@ install: install -Dm644 ./pw.mmk.OpenFreebuds.png ${DESTDIR}/usr/share/icons/hicolor/256x256/apps/pw.mmk.OpenFreebuds.png mkdir -p ${DESTDIR}/usr/share/applications install -Dm644 ./pw.mmk.OpenFreebuds.desktop ${DESTDIR}/usr//share/applications/pw.mmk.OpenFreebuds.desktop + mkdir -p ${DESTDIR}/usr/share/metainfo + install -Dm644 pw.mmk.OpenFreebuds.metainfo.xml -t ${DESTDIR}/usr/share/metainfo clean: rm -rf dist *.tar.gz *.whl diff --git a/scripts/build_debian/build.sh b/scripts/build_debian/build.sh index ed7fbeb..c4c6dc5 100755 --- a/scripts/build_debian/build.sh +++ b/scripts/build_debian/build.sh @@ -2,6 +2,10 @@ cd "$(dirname "$0")" +rm openfreebuds* + +make prepare + dpkg-buildpackage -S dpkg-buildpackage -b diff --git a/scripts/build_debian/pw.mmk.OpenFreebuds.metainfo.xml b/scripts/build_debian/pw.mmk.OpenFreebuds.metainfo.xml new file mode 120000 index 0000000..57f5196 --- /dev/null +++ b/scripts/build_debian/pw.mmk.OpenFreebuds.metainfo.xml @@ -0,0 +1 @@ +../build_flatpak/pw.mmk.OpenFreebuds.metainfo.xml \ No newline at end of file diff --git a/scripts/build_flatpak/pw.mmk.OpenFreebuds.desktop b/scripts/build_flatpak/pw.mmk.OpenFreebuds.desktop index 43f7fa2..9577b21 100644 --- a/scripts/build_flatpak/pw.mmk.OpenFreebuds.desktop +++ b/scripts/build_flatpak/pw.mmk.OpenFreebuds.desktop @@ -4,11 +4,11 @@ Type=Application Name=OpenFreebuds GenericName=Headphones manager GenericName[ru]=Управление наушниками -Comment=Open-source client app for HUAWEI FreeBuds (Flatpak) +Comment=Open-source client app for HUAWEI FreeBuds earphones (Flatpak) Comment[ru]=Open-source клиент для устройств HUAWEI FreeBuds (Flatpak) Icon=pw.mmk.OpenFreebuds Exec=openfreebuds_qt Actions= Terminal=false -Categories=Utility; -Keywords=huawei;headphones;headset;earphones +Categories=Settings;HardwareSettings; +Keywords=huawei;headphones;headset;earphones; diff --git a/scripts/build_flatpak/pw.mmk.OpenFreebuds.metainfo.xml b/scripts/build_flatpak/pw.mmk.OpenFreebuds.metainfo.xml new file mode 100644 index 0000000..825f029 --- /dev/null +++ b/scripts/build_flatpak/pw.mmk.OpenFreebuds.metainfo.xml @@ -0,0 +1,91 @@ + + + pw.mmk.OpenFreebuds + + OpenFreebuds +

Open-source client app for HUAWEI FreeBuds earphones + + MelianMiko + + + MIT + GPL-3.0-or-later + + + 1024 + + + pointing + keyboard + + + +

+ This application allows to control HUAWEI FreeBuds earphone settings from PC. Check exact battery level, toggle noise cancellation, control built-in equalizer, change gestures, and all other in-device settings and features are now available without official mobile application. +

+

+ Features: - Dynamic system tray icon that shows current active noise cancellation mode and battery level; - Tray menu with battery levels and active noise cancellation settings; - Ability to change voice language (not all devices supported); - Device settings dialog, eg. change equalizer preset, gesture actions, etc; - Built-in HTTP-server for remote control & scripting; - Built-in global hotkeys support (for Windows and Xorg-Linux) +

+

+ Tested with following devices: HUAWEI FreeBuds 4i / 5i / Pro / Pro 2 / Pro 3 / SE, HUAWEI FreeLace Pro / Pro 2. +

+

+ May also work with newer/older devices in same series. +

+
+ + pw.mmk.OpenFreebuds.desktop + + Settings + HardwareSettings + + + QT + huawei + headset + headphones + earphones + hardware + + + https://github.com/melianmiko/OpenFreebuds/issues + https://mmk.pw/en/openfreebuds/ + https://mmk.pw/en/donate/ + https://mmk.pw/mailto/ + https://mmk.pw/en/openfreebuds/help/ + https://mmk.pw/en/openfreebuds/translate/ + https://github.com/melianmiko/OpenFreebuds + https://github.com/melianmiko/OpenFreebuds + + + + Tray indicator and context menu with common features + https://raw.githubusercontent.com/melianmiko/OpenFreebuds/refs/heads/main/docs/preview_0.png + + + Device gesture settings (may vary depending on device model) + https://raw.githubusercontent.com/melianmiko/OpenFreebuds/refs/heads/main/docs/app_0.png + + + Application user interface settings + https://raw.githubusercontent.com/melianmiko/OpenFreebuds/refs/heads/main/docs/app_1.png + + + + #8ff0a4 + #26a269 + + + + + + https://github.com/melianmiko/OpenFreebuds/blob/main/CHANGELOG.md#v0.14.0 + +
    +
  • Application rewritter from scratch to Qt
  • +
  • Add HUAWEI FreeBuds Pro 2 compatibility
  • +
+
+
+
+ diff --git a/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml b/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml index 6853ffa..1adf06c 100644 --- a/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml +++ b/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml @@ -8,22 +8,20 @@ runtime-version: '6.7' base-version: '6.7' finish-args: - # List paired Bluetooth devices, toggle their connection status - - --system-talk-name=org.bluez # Connect to Bluetooth devices through RFCOMM / SPP protocol - --allow=bluetooth - --share=network - # Manage currently running MPRIS-compatible media players - # (can be safely removed if MPRIS helper is disabled) - - --socket=session-bus # Display user interface - --socket=wayland - --socket=fallback-x11 + - --share=ipc - --device=dri + # List paired Bluetooth devices, toggle their connection status + - --system-talk-name=org.bluez # Display tray icon - --talk-name=org.kde.StatusNotifierWatcher # Store settings - - --filesystem=xdg-config/openfreebuds + - --persist=.config/openfreebuds cleanup-commands: - /app/cleanup-BaseApp.sh @@ -45,11 +43,14 @@ modules: build-commands: - pip3 install --prefix=/app --no-deps *.whl - touch /app/is_container - - install -Dm644 pw.mmk.OpenFreebuds.png /app/share/icons/hicolor/256x256/apps/pw.mmk.OpenFreebuds.png + - install -Dm644 pw.mmk.OpenFreebuds.png -t /app/share/icons/hicolor/256x256/apps - install -Dm644 pw.mmk.OpenFreebuds.desktop -t /app/share/applications + - install -Dm644 pw.mmk.OpenFreebuds.metainfo.xml -t /app/share/metainfo sources: - type: file path: pw.mmk.OpenFreebuds.desktop + - type: file + path: pw.mmk.OpenFreebuds.metainfo.xml - type: file path: pw.mmk.OpenFreebuds.png - type: dir From 246bc5628ba322153b29ffcb42104a16559c69e3 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Sun, 22 Sep 2024 15:10:57 +0700 Subject: [PATCH 14/20] [DevTools] Rewrite bump_version to support... everything --- .github/workflows/on_push.yml | 4 +- .gitignore | 1 + CHANGELOG.md | 21 ++++ scripts/bump_version.py | 212 ++++++++++++++++++++++++++++++++++ scripts/bump_version.sh | 59 ---------- scripts/bump_version_git.sh | 4 - 6 files changed, 236 insertions(+), 65 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 scripts/bump_version.py delete mode 100755 scripts/bump_version.sh delete mode 100755 scripts/bump_version_git.sh diff --git a/.github/workflows/on_push.yml b/.github/workflows/on_push.yml index 45c8d56..b83ec18 100644 --- a/.github/workflows/on_push.yml +++ b/.github/workflows/on_push.yml @@ -36,7 +36,7 @@ jobs: - name: Set up poetry environment run: poetry install - name: Change in-app version - run: bash.exe -c "./scripts/bump_version_git.sh" + run: python3 ./scripts/bump_version.py git - name: Run build script run: .\scripts/build_win32\make.cmd - name: Upload bundle @@ -64,7 +64,7 @@ jobs: - name: Set up poetry environment run: poetry install - name: Change in-app version - run: bash -c "./scripts/bump_version_git.sh" + run: python3 ./scripts/bump_version.py git - name: Run build script run: bash ./scripts/build_debian/build.sh - name: Upload bundle diff --git a/.gitignore b/.gitignore index e1b0a43..d7106b8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,6 @@ /builddir /dist /scripts/tools +/release.json /.idea diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..c276ea2 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,21 @@ +# v0.14.0 +- [Core] Client-server architecture, close #14; + - Now multiple instances of OpenFreebuds could be launched, for multi-user usage for example; + - Built-in HTTP-server is now used as cross process communication protocol, so it can't be fully disabled, remote access is still disallowed out-of-box; + - If you need to launch multiple instances from single user, use -c CLI flag; +- [Core] Web-server authorization +- [Core] Rewritten (mostly from scratch) to asyncio ; +- [Core] Drop pybluez from dependencies, now will use predefined port numbers instead of SDP detection; +- [UI] Rewritten from scratch to asyncio and PyQT6, introduce redesigned Settings UI; +- [UI] Disable logging to CLI / `journalctl` if -v isn't present, close #29; +- [Device compatibility] Bug fixes for modern HUAWEI Devices (5i, Pro 2, Pro 3); +- [HUAWEI FreeBuds 5i & other] Better Dual-Connect configuration; +- [HUAWEI FreeBuds 5i & other] Add low-latency mode setting; +- [HUAWEI FreeBuds 5i & other] Add triple-tap settings; +- [HUAWEI FreeBuds 5i & other] Fix SQ preference switch; +- [Device compatibility] Add HUAWEI FreeLace Pro 2 compatibility; + - Custom equalizer preset configuration (should also work with Pro 3); +- [Linux] Flatpak installation option + +# Older releases +WIP diff --git a/scripts/bump_version.py b/scripts/bump_version.py new file mode 100644 index 0000000..699f2b5 --- /dev/null +++ b/scripts/bump_version.py @@ -0,0 +1,212 @@ +import json +import os +import subprocess +import sys +import urllib.request +from datetime import date +from pathlib import Path +from xml.sax.saxutils import escape + +DEB_CODENAMES = "bookworm jammy mantic" +DEVELOPER_SIGN = "MelianMiko " +DEBUG = False + +URL_FLATPAK_PIP_GENERATOR = ("https://github.com/flatpak/flatpak-builder-tools/raw/refs/heads/master" + "/pip/flatpak-pip-generator") + +PROJECT_ROOT = Path(__file__).parents[1] +FLATPAK_PIP_GENERATOR_PATH = PROJECT_ROOT / "scripts" / "tools" / "flatpak-pip-generator" + +if len(sys.argv) < 2: + print("Usage: ./bump_version.py [|git|flatpak_deps]") + raise SystemExit(1) + +NEW_VERSION = sys.argv[1] +CHANGELOG = [] +if NEW_VERSION == "git": + NEW_VERSION = f"0.99.git.{subprocess.getoutput('git rev-parse HEAD')}" + +NEW_VERSION_SHORT = ".".join(NEW_VERSION.replace("git", '99').split(".")[0:3]) + + +def write_file(path: Path | str, new_data: list[str], win32_le: bool = False): + if DEBUG: + print(f"-- Override {path} with following content") + print("\n".join(new_data)) + print("") + return + + with open(path, "w") as f: + line_ending = "\r\n" if win32_le else "\n" + f.write(line_ending.join(new_data) + line_ending) + print(f"-- Modified {path}") + + +def file_mutator(_func): + def _inner(path: Path, win32_le: bool = False): + with open(path) as f: + data = f.read() + + new_data = [] + for file_line in data.splitlines(): + new_data.append(_func(file_line)) + + write_file(path, new_data, win32_le) + + return _inner + + +# === Mutators + + +@file_mutator +def bump_pyproject(line: str): + """ + Replaces version in pyproject.toml + """ + if line.startswith("version ="): + return f"version = \"{NEW_VERSION_SHORT}\"" + return line + + +@file_mutator +def bump_nsis(line: str): + """ + Replaces version in NSIS config + """ + if line.startswith("!define APP_VERSION"): + return f"!define APP_VERSION \"{NEW_VERSION}\"" + return line + + +def create_version_info(path: Path): + export_data = subprocess.getoutput("poetry export --without-hashes -n --with extras") + libraries = [] + for line in export_data.replace("\r", "").splitlines(): + libraries.append(f" '{line}',") + + write_file(path, [ + f"VERSION = '{NEW_VERSION}'", + "LIBRARIES = [", + *libraries, + "]", + "" + ]) + + +def bump_debian(path: Path): + with open(path) as f: + exiting_data = f.read() + + debian_changelog = [] + for line in CHANGELOG: + debian_changelog.append(f" * {line[2:]}") + + write_file(path, [ + f"openfreebuds ({NEW_VERSION}-1) {DEB_CODENAMES}; urgency=medium", + f"", + *debian_changelog, + f"", + f" -- {DEVELOPER_SIGN} {subprocess.getoutput('date -R')}", + f"", + *exiting_data.splitlines() + ]) + + +@file_mutator +def bump_metainfo(line: str): + if not line.strip().startswith(''): + return line + new_data = [ + line, + f' ', + f' https://github.com/melianmiko/OpenFreebuds/blob/main/CHANGELOG.md#v{NEW_VERSION}', + f' ', + f'
    ', + *[f"
  • {escape(line[2:])}
  • " for line in CHANGELOG], + f'
', + f'
', + f'
', + ] + + return "\n".join(new_data) + + +def create_flatpak_staff(): + if sys.platform == "win32": + print("-- Skip Flatpak staff: win32 not supported") + return + + export_data = subprocess.getoutput("poetry export --without no_flatpak,dev --without-hashes").splitlines() + new_export_data = [] + for line in export_data: + if 'sys_platform == "win32"' in line: + continue + if 'sys_platform == "darwin"' in line: + continue + new_export_data.append(line.replace(' and python_version < "3.11"', '')) + + with open(PROJECT_ROOT / "scripts/build_flatpak/requirements.txt", "w") as f: + f.write("\n".join(new_export_data)) + print('-- Create requirements.txt for flatpak, will trigger flatpak-pip-generator') + subprocess.run( + ['./scripts/tools/flatpak-pip-generator', + '-r', './scripts/build_flatpak/requirements.txt', + '-o', './scripts/build_flatpak/python3-requirements'], + cwd=PROJECT_ROOT, + ) + + +def main(): + if NEW_VERSION[0] == "v": + print("Version shouldn't start with v") + raise SystemExit(1) + + # Read changelog + with open(PROJECT_ROOT / "CHANGELOG.md", "r") as changelog_file: + reach_section = False + for changelog_line in changelog_file: + if not reach_section: + reach_section = changelog_line.startswith(f"# v{NEW_VERSION}") + continue + if changelog_line.strip() == "" or changelog_line[0] == "#": + break + + CHANGELOG.append(changelog_line.strip()) + + if len(CHANGELOG) == 0: + CHANGELOG.append("- Changelog not provided") + + # Set up tools + subprocess.getoutput("poetry config warnings.export false") + if not (PROJECT_ROOT / "scripts" / "tools").is_dir(): + (PROJECT_ROOT / "scripts" / "tools").mkdir() + if not FLATPAK_PIP_GENERATOR_PATH.is_file(): + print(f"-- Downloading flatpak-pip-generator") + urllib.request.urlretrieve(URL_FLATPAK_PIP_GENERATOR, FLATPAK_PIP_GENERATOR_PATH) + os.chmod(FLATPAK_PIP_GENERATOR_PATH, 0o755) + + # Launch everything + bump_pyproject(str(PROJECT_ROOT / "pyproject.toml")) + bump_nsis(str(PROJECT_ROOT / "scripts/build_win32/openfreebuds.nsi")) + bump_debian(PROJECT_ROOT / "scripts/build_debian/debian/changelog") + bump_metainfo(str(PROJECT_ROOT / "scripts/build_flatpak/pw.mmk.OpenFreebuds.metainfo.xml")) + create_version_info(PROJECT_ROOT / "openfreebuds_qt/version_info.py") + create_flatpak_staff() + + # Create release.json + with open(PROJECT_ROOT / "release.json", "w") as f: + f.write(json.dumps({ + "version": NEW_VERSION, + "changelog": CHANGELOG, + }, indent=2)) + print(f'-- Created {PROJECT_ROOT / "release.json"}') + + print('-- Done') + + +if __name__ == "__main__": + if NEW_VERSION == "flatpak_deps": + create_flatpak_staff() + else: + main() diff --git a/scripts/bump_version.sh b/scripts/bump_version.sh deleted file mode 100755 index cfe4417..0000000 --- a/scripts/bump_version.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env bash - -if [[ "$1" == "" ]] -then - echo "Usage: ./scripts/bump_version.sh [new_version_tag]" - exit 1 -fi - -# Init -cd "$(dirname "$0")"/.. -source scripts/constants.sh - -# Init tools -[ ! -d ./scripts/tools ] && mkdir ./scripts/tools -if [ ! -f ./scripts/tools/flatpak-pip-generator ] -then - echo "Downloading flatpak-pip-generator tool..." - wget -o ./scripts/tools/flatpak-pip-generator \ - https://github.com/flatpak/flatpak-builder-tools/raw/refs/heads/master/pip/flatpak-pip-generator - chmod +x flatpak-pip-generator -fi - -# Bump python wheel version -VERSION_SHORT=`echo $1 | cut -d . -f -2` -sed -bi "s/^version =.*/version = \"$VERSION_SHORT\"/g" pyproject.toml - -# Create ./openfreebuds_qt/version_info.py -echo "VERSION = '$1'" > ./openfreebuds_qt/version_info.py -echo "LIBRARIES = [" >> ./openfreebuds_qt/version_info.py -poetry export --without-hashes -n --with extras | sed 's/\r$//' | while read line -do - echo " '$line'," >> ./openfreebuds_qt/version_info.py -done -echo "]" >> ./openfreebuds_qt/version_info.py - -# Create flatpak PyPI manifests -poetry export \ - --without no_flatpak,dev \ - --without-hashes \ - -o ./scripts/build_flatpak/requirements.txt -sed -i '/sys_platform == \"darwin\"/d' ./scripts/build_flatpak/requirements.txt -sed -i '/sys_platform == \"win32\"/d' ./scripts/build_flatpak/requirements.txt -sed -i 's/ and python_version < \"3.11\"//g' ./scripts/build_flatpak/requirements.txt -./scripts/tools/flatpak-pip-generator \ - -r ./scripts/build_flatpak/requirements.txt \ - -o ./scripts/build_flatpak/python3-requirements - -# Update nsis vars -sed -bi "s/!define APP_VERSION.*/!define APP_VERSION \"$1\"/g" scripts/build_win32/openfreebuds.nsi - -# Update debian pkg changelog -prev_changelog=`cat scripts/build_debian/debian/changelog` -echo "openfreebuds ($1-1) $DEB_CODENAMES; urgency=medium - - * Changelog isn't provided - - -- $DEVELOPER_SIGN $(date -R) - -$prev_changelog" > scripts/build_debian/debian/changelog diff --git a/scripts/bump_version_git.sh b/scripts/bump_version_git.sh deleted file mode 100755 index 968268f..0000000 --- a/scripts/bump_version_git.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -cd "$(dirname "$0")" -./bump_version.sh "0.99.git.$(git rev-parse HEAD)" From cc72f8e5050a3defc036db270f4e0a4f0ea72771 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Sun, 22 Sep 2024 16:49:19 +0700 Subject: [PATCH 15/20] [Fix] Flatpak appdata path --- openfreebuds_backend/linux/linux_misc.py | 2 ++ scripts/build_flatpak/pw.mmk.OpenFreebuds.yml | 2 -- scripts/constants.sh | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) delete mode 100755 scripts/constants.sh diff --git a/openfreebuds_backend/linux/linux_misc.py b/openfreebuds_backend/linux/linux_misc.py index 664d410..8183f0d 100644 --- a/openfreebuds_backend/linux/linux_misc.py +++ b/openfreebuds_backend/linux/linux_misc.py @@ -7,6 +7,8 @@ def get_app_storage_path(): + if pathlib.Path('/app/is_container').exists(): + return pathlib.Path.home() / ".var/app/pw.mmk.OpenFreebuds/config" return pathlib.Path.home() / ".config" diff --git a/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml b/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml index 1adf06c..11f77cd 100644 --- a/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml +++ b/scripts/build_flatpak/pw.mmk.OpenFreebuds.yml @@ -20,8 +20,6 @@ finish-args: - --system-talk-name=org.bluez # Display tray icon - --talk-name=org.kde.StatusNotifierWatcher - # Store settings - - --persist=.config/openfreebuds cleanup-commands: - /app/cleanup-BaseApp.sh diff --git a/scripts/constants.sh b/scripts/constants.sh deleted file mode 100755 index ea56e1f..0000000 --- a/scripts/constants.sh +++ /dev/null @@ -1,2 +0,0 @@ -DEB_CODENAMES="bookworm jammy mantic" -DEVELOPER_SIGN="MelianMiko " From 3c04a8f49331de619dafaf6e61ab6b0f4ba654ac Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Sun, 22 Sep 2024 20:12:13 +0700 Subject: [PATCH 16/20] [UI] Add force X11 checkbox for GNOMEs, fixes --- openfreebuds_qt/app/module/linux_related.py | 14 ++++++++ .../designer/dialog_manual_connect.ui | 21 ++++++++--- openfreebuds_qt/designer/linux_extras.ui | 35 +++++++++++++++++-- openfreebuds_qt/launcher.py | 2 +- openfreebuds_qt/main.py | 8 +++++ .../utils/icon/dual_connect_device.py | 8 ++--- 6 files changed, 77 insertions(+), 11 deletions(-) diff --git a/openfreebuds_qt/app/module/linux_related.py b/openfreebuds_qt/app/module/linux_related.py index 71218a7..0325073 100644 --- a/openfreebuds_qt/app/module/linux_related.py +++ b/openfreebuds_qt/app/module/linux_related.py @@ -1,10 +1,12 @@ import os import webbrowser +from contextlib import suppress from PyQt6.QtCore import pyqtSlot from PyQt6.QtWidgets import QMessageBox from qasync import asyncSlot +from openfreebuds import STORAGE_PATH from openfreebuds_qt.app.module.common import OfbQtCommonModule from openfreebuds_qt.config import OfbQtConfigParser from openfreebuds_qt.constants import LINK_WEBSITE_HELP @@ -23,6 +25,9 @@ def __init__(self, *args, **kwargs): self.setupUi(self) with blocked_signals(self.mpris_helper_checkbox): self.mpris_helper_checkbox.setChecked(self.config.get("mpris", "enabled", False)) + with blocked_signals(self.force_x11_checkbox): + self.force_x11_checkbox.setChecked((STORAGE_PATH / "force_xorg").is_file()) + if os.environ.get("XDG_SESSION_TYPE") != "wayland": self.wayland_root.setVisible(False) @@ -30,6 +35,15 @@ def __init__(self, *args, **kwargs): def on_hotkeys_doc(self): webbrowser.open(LINK_WEBSITE_HELP) + @asyncSlot(bool) + async def on_force_x11_toggle(self, value: bool): + file = STORAGE_PATH / "force_xorg" + if value: + with open(file, "w") as f: + f.write("ON") + else: + file.unlink(missing_ok=True) + @asyncSlot(bool) async def on_mpris_toggle(self, value: bool): if value and self.config.is_containerized_app: diff --git a/openfreebuds_qt/designer/dialog_manual_connect.ui b/openfreebuds_qt/designer/dialog_manual_connect.ui index 7e28f8b..91272be 100644 --- a/openfreebuds_qt/designer/dialog_manual_connect.ui +++ b/openfreebuds_qt/designer/dialog_manual_connect.ui @@ -7,11 +7,11 @@ 0 0 417 - 208 + 250 - + 0 0 @@ -19,13 +19,13 @@ 417 - 208 + 250 417 - 208 + 250 @@ -48,6 +48,19 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/openfreebuds_qt/designer/linux_extras.ui b/openfreebuds_qt/designer/linux_extras.ui index a2e1673..ea3520d 100644 --- a/openfreebuds_qt/designer/linux_extras.ui +++ b/openfreebuds_qt/designer/linux_extras.ui @@ -7,7 +7,7 @@ 0 0 588 - 413 + 534 @@ -17,7 +17,7 @@ - Media playback control + Compatibility @@ -37,6 +37,20 @@ + + + + Force use X11 backend (may look better in GNOME-based desktop environments) + + + + + + + Restart application to apply. + + + @@ -150,9 +164,26 @@ + + force_x11_checkbox + toggled(bool) + OfbQtLinuxExtrasModule + on_force_x11_toggle(bool) + + + 293 + 182 + + + 293 + 266 + + + on_hotkeys_doc() on_mpris_toggle(bool) + on_force_x11_toggle(bool) diff --git a/openfreebuds_qt/launcher.py b/openfreebuds_qt/launcher.py index 27ea6aa..edb72e3 100644 --- a/openfreebuds_qt/launcher.py +++ b/openfreebuds_qt/launcher.py @@ -29,7 +29,7 @@ def main(): args = parser.parse_args() - OfbQtApplication(args).exec_async() + OfbQtApplication.start(args) if __name__ == "__main__": diff --git a/openfreebuds_qt/main.py b/openfreebuds_qt/main.py index ea0a643..cf7237f 100644 --- a/openfreebuds_qt/main.py +++ b/openfreebuds_qt/main.py @@ -1,5 +1,6 @@ import asyncio import logging +import os import sys from contextlib import suppress from typing import Optional @@ -73,6 +74,13 @@ def __init__(self, args): self.close_event = asyncio.Event() self.aboutToQuit.connect(self.close_event.set) + @staticmethod + def start(args): + if (STORAGE_PATH / "force_xorg").is_file(): + print("Enforce xcb Qt backend due to setting") + os.environ["QT_QPA_PLATFORM"] = "xcb" + return OfbQtApplication(args).exec_async() + async def boot(self): try: await self._stage_setup_ofb() diff --git a/openfreebuds_qt/utils/icon/dual_connect_device.py b/openfreebuds_qt/utils/icon/dual_connect_device.py index b059eef..bac0c88 100644 --- a/openfreebuds_qt/utils/icon/dual_connect_device.py +++ b/openfreebuds_qt/utils/icon/dual_connect_device.py @@ -36,10 +36,10 @@ def create_dual_connect_icon( if cache_key not in _cached_icons: palette = QApplication.palette() - if is_connected: - main_icon_color = palette.text().color().getRgb() - else: - main_icon_color = palette.placeholderText().color().getRgb() + main_icon_color = palette.text().color().getRgb() + if not is_connected: + r, g, b, _ = main_icon_color + main_icon_color = r, g, b, 128 icon = image_combine_mask(BASE_DC_DEVICE_ICONS[kind], foreground=Image.new("RGBA", ICON_SIZE, color=main_icon_color), From 0133675f844011f3322f8882cd81ec726836cd27 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Mon, 23 Sep 2024 18:42:50 +0700 Subject: [PATCH 17/20] [Fix] Memory leak --- openfreebuds/driver/huawei/driver/generic.py | 26 +++++++++----------- openfreebuds/manager/main.py | 6 ++--- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/openfreebuds/driver/huawei/driver/generic.py b/openfreebuds/driver/huawei/driver/generic.py index 92d4caa..0d659f9 100644 --- a/openfreebuds/driver/huawei/driver/generic.py +++ b/openfreebuds/driver/huawei/driver/generic.py @@ -1,4 +1,5 @@ import asyncio +from contextlib import suppress from openfreebuds.driver.generic import OfbDriverHandlerGeneric, OfbDriverSppGeneric from openfreebuds.driver.huawei.package import HuaweiSppPackage @@ -105,8 +106,6 @@ async def _loop_recv(self, reader: asyncio.StreamReader): while True: try: await self.__recv_pacakge(reader) - except asyncio.TimeoutError: - pass except (asyncio.CancelledError, ConnectionResetError, ConnectionAbortedError, OSError): log.debug(f"Stop recv loop due to connection failure") return @@ -115,18 +114,17 @@ async def _loop_recv(self, reader: asyncio.StreamReader): await asyncio.sleep(2) async def __recv_pacakge(self, reader: asyncio.StreamReader): - async with asyncio.timeout(5): - heading = await reader.read(4) - if len(heading) == 0: - log.debug("Got empty package, seems like socked is closed") - raise ConnectionResetError - if heading[0:2] == b"Z\x00": - length = heading[2] - if length < 4: - await reader.read(length) - else: - pkg = heading + await reader.read(length) - await self._handle_raw_pkg(pkg) + heading = await reader.read(4) + if len(heading) == 0: + log.debug("Got empty package, seems like socked is closed") + raise ConnectionResetError + if heading[0:2] == b"Z\x00": + length = heading[2] + if length < 4: + await reader.read(length) + else: + pkg = heading + await reader.read(length) + await self._handle_raw_pkg(pkg) def _add_on_package_handler(self, handler): for pkg_id in handler.commands: diff --git a/openfreebuds/manager/main.py b/openfreebuds/manager/main.py index 088171b..6e8a746 100644 --- a/openfreebuds/manager/main.py +++ b/openfreebuds/manager/main.py @@ -1,6 +1,6 @@ import asyncio from asyncio import Task -from contextlib import asynccontextmanager +from contextlib import asynccontextmanager, suppress from typing import Optional from aiohttp.web_routedef import RouteTableDef @@ -131,10 +131,8 @@ async def _set_paused(self, value: bool): await self._driver.stop() async def _mainloop(self): - try: + with suppress(asyncio.CancelledError): await self._mainloop_inner() - except asyncio.CancelledError: - pass async def _mainloop_inner(self): log.debug(f"Started mainloop task") From cd2966419c6f83a0623c90d29a61df9a13ccb0c5 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Mon, 23 Sep 2024 19:14:22 +0700 Subject: [PATCH 18/20] [Fix] Tray menu update behaviour --- openfreebuds_qt/tray/main.py | 2 +- openfreebuds_qt/tray/menu.py | 33 ++++++++++++---------------- openfreebuds_qt/tray/menu_generic.py | 2 +- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/openfreebuds_qt/tray/main.py b/openfreebuds_qt/tray/main.py index 3f932ad..087155f 100644 --- a/openfreebuds_qt/tray/main.py +++ b/openfreebuds_qt/tray/main.py @@ -92,7 +92,7 @@ async def _update_ui(self, event: OfbCoreEvent): else: self.setToolTip("OpenFreebuds") - await self.menu.on_core_event(event) + await self.menu.on_core_event(event, state) async def _get_tooltip_text(self, event: OfbCoreEvent): """ diff --git a/openfreebuds_qt/tray/menu.py b/openfreebuds_qt/tray/menu.py index 9dc7790..4be1fb8 100644 --- a/openfreebuds_qt/tray/menu.py +++ b/openfreebuds_qt/tray/menu.py @@ -55,7 +55,6 @@ def __init__(self, tray: IOfbTrayIcon, context: IOfbQtApplication, ofb: IOpenFre # Battery items self.battery_section = self.new_section() - self.battery_is_tws: Optional[bool] = None self.battery_actions: dict[str, QAction] = { "left": self.add_item("", visible=False, enabled=False), "right": self.add_item("", visible=False, enabled=False), @@ -90,28 +89,26 @@ def __init__(self, tray: IOfbTrayIcon, context: IOfbQtApplication, ofb: IOpenFre self.add_item(self.tr("Leave application"), callback=self.do_exit) - async def on_core_event(self, event: OfbCoreEvent): - if event.kind_match(OfbEventKind.DEVICE_CHANGED): + async def on_core_event(self, event: OfbCoreEvent, state: int): + if event.kind_in([OfbEventKind.STATE_CHANGED, OfbEventKind.QT_SETTINGS_CHANGED]): + self.is_connected = state == IOpenFreebuds.STATE_CONNECTED + device_name, device_addr = await self.ofb.get_device_tags() + self.device_name_action.setVisible(device_name != "") self.device_name_action.setText(device_name) - self.device_name_action.setVisible(True) self.device_mac_address = device_addr - if event.kind_in([OfbEventKind.STATE_CHANGED, OfbEventKind.QT_SETTINGS_CHANGED]): - state = await self.ofb.get_state() - self.is_connected = state == IOpenFreebuds.STATE_CONNECTED - self.connect_action.setVisible(state == IOpenFreebuds.STATE_DISCONNECTED) - self.disconnect_action.setVisible(state == IOpenFreebuds.STATE_CONNECTED) - self.set_section_visible(self.battery_section, state == IOpenFreebuds.STATE_CONNECTED) - self.set_section_visible(self.anc_section, state == IOpenFreebuds.STATE_CONNECTED) + self.disconnect_action.setVisible(self.is_connected) + self.set_section_visible(self.battery_section, self.is_connected) + self.set_section_visible(self.anc_section, self.is_connected) self.equalizer_action.setVisible( - state == IOpenFreebuds.STATE_CONNECTED + self.is_connected and self.config.get("ui", "tray_show_equalizer", False) and await self.ofb.get_property("sound", "equalizer_preset", None) is not None ) self.dual_connect_action.setVisible( - state == IOpenFreebuds.STATE_CONNECTED + self.is_connected and self.config.get("ui", "tray_show_dual_connect", False) and await self.ofb.get_property("dual_connect", "preferred_device", None) is not None ) @@ -139,12 +136,10 @@ async def on_core_event(self, event: OfbCoreEvent): async def _update_battery(self, battery: dict): battery_is_tws = "case" in battery - if battery_is_tws != self.battery_is_tws: - self.battery_actions["left"].setVisible(battery_is_tws) - self.battery_actions["right"].setVisible(battery_is_tws) - self.battery_actions["case"].setVisible(battery_is_tws) - self.battery_actions["global"].setVisible(not battery_is_tws) - self.battery_is_tws = battery_is_tws + self.battery_actions["left"].setVisible(battery_is_tws) + self.battery_actions["right"].setVisible(battery_is_tws) + self.battery_actions["case"].setVisible(battery_is_tws) + self.battery_actions["global"].setVisible(not battery_is_tws) # Update menu items for code in battery: diff --git a/openfreebuds_qt/tray/menu_generic.py b/openfreebuds_qt/tray/menu_generic.py index 8ff8df0..abfc4c3 100644 --- a/openfreebuds_qt/tray/menu_generic.py +++ b/openfreebuds_qt/tray/menu_generic.py @@ -14,7 +14,7 @@ def __init__(self, parent: QWidget, ofb: IOpenFreebuds): self._section_visible: list[bool] = [True] self.ofb: IOpenFreebuds = ofb - async def on_core_event(self, event: OfbCoreEvent): + async def on_core_event(self, event: OfbCoreEvent, state: int): pass def new_section(self): From d7a4ffbf8c2fe41d8164307f47a32708fa990dc9 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Mon, 23 Sep 2024 19:30:15 +0700 Subject: [PATCH 19/20] [Fix] Launch without Bluetooth service --- openfreebuds_backend/linux/bluez_io.py | 35 ++++++++++++++------------ 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/openfreebuds_backend/linux/bluez_io.py b/openfreebuds_backend/linux/bluez_io.py index cc10b72..cb47169 100644 --- a/openfreebuds_backend/linux/bluez_io.py +++ b/openfreebuds_backend/linux/bluez_io.py @@ -1,5 +1,7 @@ import asyncio import logging +from contextlib import suppress +from typing import Optional from dbus_next import BusType from dbus_next.errors import DBusError @@ -18,6 +20,7 @@ class DBusConn: async def prepare(): if DBusConn.system is None: DBusConn.system = await MessageBus(bus_type=BusType.SYSTEM).connect() + if DBusConn.bluez_introspect is None or DBusConn.bluez is None: DBusConn.bluez_introspect = await DBusConn.system.introspect("org.bluez", "/") DBusConn.bluez = DBusConn.system.get_proxy_object("org.bluez", "/", DBusConn.bluez_introspect) @@ -25,19 +28,17 @@ async def prepare(): # noinspection PyUnresolvedReferences async def bt_is_connected(address): - try: + with suppress(AttributeError): device, device_introspect = await _dbus_find_bt_device(address) if device is None: return None interface = device.get_interface("org.bluez.Device1") return await interface.get_connected() - except AttributeError: - log.exception(f"Failed to check connection state of {address}") - return False + + return False -# noinspection PyUnresolvedReferences async def bt_connect(address): try: device, device_introspect = await _dbus_find_bt_device(address) @@ -45,6 +46,7 @@ async def bt_connect(address): return None interface = device.get_interface("org.bluez.Device1") + # noinspection PyUnresolvedReferences await interface.call_connect() await asyncio.sleep(1) return True @@ -53,7 +55,6 @@ async def bt_connect(address): return False -# noinspection PyUnresolvedReferences async def bt_disconnect(address): try: device, device_introspect = await _dbus_find_bt_device(address) @@ -61,6 +62,7 @@ async def bt_disconnect(address): return None interface = device.get_interface("org.bluez.Device1") + # noinspection PyUnresolvedReferences await interface.call_disconnect() await asyncio.sleep(1) return True @@ -69,12 +71,13 @@ async def bt_disconnect(address): return False -# noinspection PyUnresolvedReferences async def bt_list_devices(): scan_results = [] - try: + with suppress(DBusError): await DBusConn.prepare() + if DBusConn.bluez is None: + return scan_results obj_manager = DBusConn.bluez.get_interface("org.freedesktop.DBus.ObjectManager") # noinspection PyUnresolvedReferences all_objects = await obj_manager.call_get_managed_objects() @@ -84,6 +87,7 @@ async def bt_list_devices(): device_introspect = await DBusConn.system.introspect("org.bluez", path) device = DBusConn.system.get_proxy_object("org.bluez", path, device_introspect) properties = device.get_interface("org.freedesktop.DBus.Properties") + # noinspection PyUnresolvedReferences props = await properties.call_get_all("org.bluez.Device1") try: @@ -94,16 +98,15 @@ async def bt_list_devices(): }) except AttributeError: log.debug(f"Skip broken bluez device {path}") - except DBusError: - log.exception("Failed to list devices") return scan_results -# noinspection PyUnresolvedReferences -async def _dbus_find_bt_device(address: str) -> tuple[ProxyObject, Node]: - try: +async def _dbus_find_bt_device(address: str) -> tuple[Optional[ProxyObject], Optional[Node]]: + with suppress(DBusError): await DBusConn.prepare() + if DBusConn.bluez is None: + return None, None obj_manager = DBusConn.bluez.get_interface("org.freedesktop.DBus.ObjectManager") # noinspection PyUnresolvedReferences all_objects = await obj_manager.call_get_managed_objects() @@ -113,6 +116,7 @@ async def _dbus_find_bt_device(address: str) -> tuple[ProxyObject, Node]: device_introspect = await DBusConn.system.introspect("org.bluez", path) device = DBusConn.system.get_proxy_object("org.bluez", path, device_introspect) properties = device.get_interface("org.freedesktop.DBus.Properties") + # noinspection PyUnresolvedReferences addr = await properties.call_get("org.bluez.Device1", "Address") try: @@ -120,9 +124,8 @@ async def _dbus_find_bt_device(address: str) -> tuple[ProxyObject, Node]: return device, device_introspect except AttributeError: pass - except DBusError: - log.exception("Failed to find device") - return None, None + + return None, None if __name__ == "__main__": From 18007a6d49242960fa327d7e112cdfb0659a1350 Mon Sep 17 00:00:00 2001 From: MelianMiko Date: Mon, 23 Sep 2024 19:51:52 +0700 Subject: [PATCH 20/20] [Refactor] Code cleanup --- openfreebuds/driver/generic/base.py | 1 - openfreebuds/driver/huawei/driver/generic.py | 1 - openfreebuds/driver/huawei/package.py | 2 +- openfreebuds/driver/huawei/utils.py | 3 --- openfreebuds/manager/main.py | 1 - openfreebuds/utils/event_bus.py | 1 + openfreebuds_backend/errors.py | 2 -- openfreebuds_backend/windows/bt_win32.py | 3 +-- openfreebuds_backend/windows/misc_win32.py | 1 - openfreebuds_backend/windows/ui_win32.py | 1 - openfreebuds_cmd/__main__.py | 2 +- openfreebuds_qt/app/module/about.py | 2 +- openfreebuds_qt/app/module/dual_connect.py | 16 ++++++---------- openfreebuds_qt/app/module/linux_related.py | 1 - openfreebuds_qt/app/module/sound_quality.py | 2 +- openfreebuds_qt/assets/icon.ico | Bin 8407 -> 0 bytes openfreebuds_qt/config/config_lock.py | 4 ++-- openfreebuds_qt/config/main.py | 2 +- openfreebuds_qt/constants.py | 2 +- openfreebuds_qt/main.py | 5 ++--- openfreebuds_qt/tray/menu.py | 13 +++++-------- openfreebuds_qt/tray/menu_dual_connect.py | 2 +- openfreebuds_qt/utils/hotkeys/recorder.py | 2 +- openfreebuds_qt/utils/mpris/service.py | 2 +- openfreebuds_qt/utils/report_tool.py | 2 +- openfreebuds_qt/utils/updater/service.py | 3 +-- scripts/bump_version.py | 3 ++- 27 files changed, 30 insertions(+), 49 deletions(-) delete mode 100644 openfreebuds_backend/errors.py delete mode 100644 openfreebuds_qt/assets/icon.ico diff --git a/openfreebuds/driver/generic/base.py b/openfreebuds/driver/generic/base.py index 8c15a20..9a2efd3 100644 --- a/openfreebuds/driver/generic/base.py +++ b/openfreebuds/driver/generic/base.py @@ -1,4 +1,3 @@ -import json from typing import Optional from openfreebuds.constants import OfbEventKind diff --git a/openfreebuds/driver/huawei/driver/generic.py b/openfreebuds/driver/huawei/driver/generic.py index 0d659f9..7dc56fc 100644 --- a/openfreebuds/driver/huawei/driver/generic.py +++ b/openfreebuds/driver/huawei/driver/generic.py @@ -1,5 +1,4 @@ import asyncio -from contextlib import suppress from openfreebuds.driver.generic import OfbDriverHandlerGeneric, OfbDriverSppGeneric from openfreebuds.driver.huawei.package import HuaweiSppPackage diff --git a/openfreebuds/driver/huawei/package.py b/openfreebuds/driver/huawei/package.py index 1ce12a7..91d8e32 100644 --- a/openfreebuds/driver/huawei/package.py +++ b/openfreebuds/driver/huawei/package.py @@ -60,7 +60,7 @@ def to_table_string(self): out += "\n" return out - def find_param(self, *args, **kwargs) -> bytes: + def find_param(self, *args) -> bytes: """ Get parameter value by one of provided types """ diff --git a/openfreebuds/driver/huawei/utils.py b/openfreebuds/driver/huawei/utils.py index e957bdb..5076fea 100644 --- a/openfreebuds/driver/huawei/utils.py +++ b/openfreebuds/driver/huawei/utils.py @@ -1,6 +1,3 @@ -from array import array - - def build_table_row(ln, val, description_table=None): if description_table is not None and val in description_table: val = f"{val} ({description_table[val]})" diff --git a/openfreebuds/manager/main.py b/openfreebuds/manager/main.py index 6e8a746..249db74 100644 --- a/openfreebuds/manager/main.py +++ b/openfreebuds/manager/main.py @@ -5,7 +5,6 @@ from aiohttp.web_routedef import RouteTableDef -import openfreebuds_backend from openfreebuds import webserver from openfreebuds.constants import OfbEventKind from openfreebuds.driver import DEVICE_TO_DRIVER_MAP diff --git a/openfreebuds/utils/event_bus.py b/openfreebuds/utils/event_bus.py index 753d0e7..27a8944 100644 --- a/openfreebuds/utils/event_bus.py +++ b/openfreebuds/utils/event_bus.py @@ -27,6 +27,7 @@ def include_subscription(self, callback_id: str, subscription): self._child_subs[callback_id].cancel() async def _handler(): + # noinspection PyProtectedMember queue = subscription._new_queue(callback_id, None) while True: await self.send_message(*(await queue.get())) diff --git a/openfreebuds_backend/errors.py b/openfreebuds_backend/errors.py deleted file mode 100644 index 9f4747d..0000000 --- a/openfreebuds_backend/errors.py +++ /dev/null @@ -1,2 +0,0 @@ -class BluetoothNotAvailableError(ValueError): - pass diff --git a/openfreebuds_backend/windows/bt_win32.py b/openfreebuds_backend/windows/bt_win32.py index c6644d2..74de726 100644 --- a/openfreebuds_backend/windows/bt_win32.py +++ b/openfreebuds_backend/windows/bt_win32.py @@ -10,7 +10,6 @@ # noinspection PyUnresolvedReferences,PyPackageRequirements from winsdk.windows.networking import HostName -from openfreebuds_backend.errors import BluetoothNotAvailableError from openfreebuds_backend.exception import OfbBackendDependencyMissingError extra_tools_dir = 'C:\\Program Files (x86)\\Bluetooth Command Line Tools\\bin' @@ -76,7 +75,7 @@ async def bt_list_devices(): selector = BluetoothDevice.get_device_selector_from_pairing_state(True) devices = await DeviceInformation.find_all_async(selector, [], DeviceInformationKind.DEVICE) except OSError: - raise BluetoothNotAvailableError("Got OSError, looks like bluetooth isn't installed") + return [] for a in devices: try: diff --git a/openfreebuds_backend/windows/misc_win32.py b/openfreebuds_backend/windows/misc_win32.py index c0b0fd6..4c2b78f 100644 --- a/openfreebuds_backend/windows/misc_win32.py +++ b/openfreebuds_backend/windows/misc_win32.py @@ -1,4 +1,3 @@ -import os import pathlib import subprocess import sys diff --git a/openfreebuds_backend/windows/ui_win32.py b/openfreebuds_backend/windows/ui_win32.py index 3395cb7..f6ee34d 100644 --- a/openfreebuds_backend/windows/ui_win32.py +++ b/openfreebuds_backend/windows/ui_win32.py @@ -1,4 +1,3 @@ -import logging import winreg diff --git a/openfreebuds_cmd/__main__.py b/openfreebuds_cmd/__main__.py index a1f9a6c..b2ca018 100644 --- a/openfreebuds_cmd/__main__.py +++ b/openfreebuds_cmd/__main__.py @@ -1,3 +1,3 @@ from .launcher import main -main() \ No newline at end of file +main() diff --git a/openfreebuds_qt/app/module/about.py b/openfreebuds_qt/app/module/about.py index efcf062..ba7b30f 100644 --- a/openfreebuds_qt/app/module/about.py +++ b/openfreebuds_qt/app/module/about.py @@ -5,7 +5,7 @@ from openfreebuds import DEVICE_TO_DRIVER_MAP from openfreebuds_qt.app.module.common import OfbQtCommonModule -from openfreebuds_qt.constants import LINK_WEBSITE, LINK_GITHUB, ASSETS_PATH +from openfreebuds_qt.constants import LINK_WEBSITE, LINK_GITHUB from openfreebuds_qt.designer.about_module import Ui_OfbQtAboutModule from openfreebuds_qt.version_info import VERSION, LIBRARIES diff --git a/openfreebuds_qt/app/module/dual_connect.py b/openfreebuds_qt/app/module/dual_connect.py index 7e56d18..ff420e7 100644 --- a/openfreebuds_qt/app/module/dual_connect.py +++ b/openfreebuds_qt/app/module/dual_connect.py @@ -68,16 +68,12 @@ async def on_connect_toggle(self): async with qt_error_handler("OfbQtDualConnectModule_ToggleConnect", self.ctx): addr, data = self._all_data[self._current_index] - try: - self.button_toggle_connect.setEnabled(False) - await self.ofb.set_property( - "dual_connect", - f"{addr}:connected", - json.dumps(not data["connected"]) - ) - except Exception: - log.exception(f"Trying to switch connection state of {addr}") - self.button_toggle_connect.setEnabled(True) + self.button_toggle_connect.setEnabled(False) + await self.ofb.set_property( + "dual_connect", + f"{addr}:connected", + json.dumps(not data["connected"]) + ) def _update_current_device_view(self, addr: str, data: dict): self.current_device_name.setText(data['name']) diff --git a/openfreebuds_qt/app/module/linux_related.py b/openfreebuds_qt/app/module/linux_related.py index 0325073..ea38605 100644 --- a/openfreebuds_qt/app/module/linux_related.py +++ b/openfreebuds_qt/app/module/linux_related.py @@ -1,6 +1,5 @@ import os import webbrowser -from contextlib import suppress from PyQt6.QtCore import pyqtSlot from PyQt6.QtWidgets import QMessageBox diff --git a/openfreebuds_qt/app/module/sound_quality.py b/openfreebuds_qt/app/module/sound_quality.py index c506977..7040270 100644 --- a/openfreebuds_qt/app/module/sound_quality.py +++ b/openfreebuds_qt/app/module/sound_quality.py @@ -2,7 +2,7 @@ import json from PyQt6.QtCore import Qt -from PyQt6.QtWidgets import QSlider, QMenu, QInputDialog, QMessageBox, QFileDialog, QApplication +from PyQt6.QtWidgets import QSlider, QMenu, QInputDialog, QMessageBox, QFileDialog from qasync import asyncSlot from openfreebuds.exceptions import OfbTooManyItemsError diff --git a/openfreebuds_qt/assets/icon.ico b/openfreebuds_qt/assets/icon.ico deleted file mode 100644 index e80999b69557dd5f07bca1c39df9432fb9a46221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8407 zcmd6NcR1T$7;lWCMQN*Osnyo5Rcgg3N~KC0d+)vXUPV!>HdRqnt%e#wsMViQn;M}( zs98i11VQe%_x^MLyw82^A2)fDe9!lsoaa67d*1i`e9rp?fyjXOzZV&Z3-p5v1Y!oR z6JKd-T)TS>xT4p5t_J+cTbxZ9=KCtF*)4Y3Y)F^Uh3en`Aym2)p)*2E0$4(hWr2aYg29-N3Ir)3ms(5g7zqvMN7WdgUI%=zIZyRe2+gy zAf{@r2}?lEny(Q%=y}CS7q@%pTOb1N$@@`)Sez#veVJGjHcycy^uJ8droV6 zi-mxHJ9M7XjKPIkjNC4o)r!J^XiK#h%_~Ozu|H3m?)$axR>{H4w%X{_m7{Z7cr-5f zI>cQUvOqOoV#NSyr7oqU3B6*daCEyVS*eM%Lty%RLdis$MBd&+B<(hlw3#o%rD{i~r{ zX-r{^Wi`}){2V#)(N}GUlNy`4pNftBZqohxqyGL&a;ubNaS<=Jy{k*MU1+428be0B zxage|%f39^Y?H!VjK9bb;ljFXijV2sG^_QhSI9RL`j4Op$}s961A*zC?htAAt5N!U z3S$Nk^J?Mkh$Tx3)I?$Fxe4o1viQ1C-zLcetzDceLQM8EorI0xoSDn`#+h1H zTfffE^JiNo+x?9*1Q$$T%px<}Q>Rf-Du?W6r$Q)(dY){aE_tH!zA!`pS}93UK$Y0v z<}b@eXG_;>6P^E8Gx_S5eKUdHrExLjJO~mOXc|>)QLCF*SPT`QZc;G#Nj*y5c?Cum zK?QDe4GZKCkvY2*;!yD6CkwlK0`|Ja&3{W-BHzY~Uk41^418@+1{HWL>wO)A+co~? zj;2dX&VZD)wa$N<-j;IsQeI)8I%(k)l^aDJMQR78gBQj9b+wldSska27M*O(xqbze zA}*7~mko(O=WqTV(msf6aBO8JZ*qSu*Ay27p37c4`XK%mQZ_t%$TZ?mA*W+O-O=J2 zMzFmQRJJ_cE7iE(8%-iVe;5w#wR|q{%){zd!4rCG<94TE1_QXk^8DOmr*Qv;^&ER~ zU_LdT>9UNYw3!ccbI$ML<{~Vag;yy^^e1U;eSxUZ_5&Do*TnsJiN;nB#b4Y0qI}Fr z;#n9i38Z40*N^}+t=3CeXO;bGymaOey1@xLD@KUy1*azK)eys3x7VUw70s`e`&9v<#iGkENsr%qnMb zCBla^d;1o!tA{&g%?pF1z}U|RLPI=7oYr=Bcq;fg=v{H~vXuERqnzIHaWS^K0}7*@ zk)J;u4o+|A1&N$0lAoKm)f}pccAhG9Ssr02&Kn z+nIb+v)x2Ue-+!s^4p*9Rl5wuiNaDJ$5%(=)DTG;iIz2wcVZ*+EV+t{q%Ml+IqLZ}NQ6&Hhh zq3Lkb=A*Xf#kR@a_!={$!WhFOyuP^3fBVV1G9Fdc;H>&H?l@0`#sxx{Mrr7E9A7AExzx*hMpztBZ zq5PMyU2-2mssmS?702dVhn>Fgn>O*+$Gxoak?|T|V~8;lZgR@{?2b-OakqAHd8c05 zB*IpRGEWT00P~20!C{(Ptu<{TwUz}baw#F_hN6>cNRIj-pAUATM2&II1>bm7iUbeM7Eb2R8JZ`i*uFSnsPb1ef0UT zSQ35$IgW84TR}XqoL5LR_!1sv*GXNjDZLD?-!u-SC(37qD}`nExRXd z+7E4s*wSJsb6t>)eu_ux3S$!AtHB@m54j3Qhu}0D?||twA!bKW^u|KjJrv`g51#QL4h4D!4q;BO{pa>A~$>;$G$r6z1s-> zC?D#OZy0KLxhIAV-yZz4FLQdn*Gkj$iaKiMgPDhwKB1fqJ|QStcfsP?K1e0MBPqX1g@vr?Du zn|tU;`DT;5@7B~+2<=@;KpZb|Y`DwO!6}%#hO|r$P!$|7(sOxrq*PKKYGuz0OyrSHX5gl?Bwt3avcU z*IB$X)7I2DF-tZq?I?e}Re^D%XWy17=}OdXX_$!pWdo3}Z}q27v(hR!Ue};)81kDL~>~tjFl_My9h@gOfGWGVW>jR+JdhjzWK&1 zLfs&W+0AQcS#WDR3VuQ7{s>E6k;53QpGwI6ACHD_KcXo^nB4yWJ;p z?9;b?tc*b`r%Eg+g}NL!<2Jbql?e=75P_TAq3bG6O)WTADxU@UvoZX4hl)}1H{V}7 zFV|20^)uuMaz;P-d&QBgT`;l};qYqfayB;FtYws3%co=Sk)+Y-4GjqIZ&~dr=>A@Qh?ohRGDgG9qx})sJ|zkxy12;-e^A?!_SPse;C?& zd3n9GCDr!S>lyYr#um;*EXDj>rCZ|ZV|9~1DUoD*`6DDvxta159GgP=dS!A^RJxEMbSisb<%i%)H}=Rfd?(3az7b{Wx~ zEilb+J<5JLu}E7?6J-Kd5B8|x+x}2QP!v{*+U&Hz-C9G+x*$w+X8a$97u}v^Rjt$` zHxZamx^#d`Su{io=`h}GG`R@%H>g1D4%fba{@^S^V4Uz6G={H0ZBK0Vny9)+0rz@^G{igtH! z(=H@YiZc$-(OF!|E0J7TUk7BqQ_RGsHO*A$)Ho7$wsiO0ne zBRUTe^vbR;ZC`g*FAwK8KYwu36~^E-om^~DU5wz(-x{Ttg!kSBkCmFiYy$$`+7v6- z87+n5I;(|-FclHLd#F_(id8DA*+%F0esVDl!~dzz{2+u^WlQAPA03{B0_owg?QSJVBPj3W*YYdwDac;u=--BA7W^2czJ zgfn!2X+Ma(-@gt!L=rI}N*25nT$9Mu)zz!MeV}>@!y4l4^FMxE?MbwKvAdnl5LI^4 zF}AAiW4Q*~Rzm1PaoeZB1)uQnqn65qhQeK`{P_TVSH>~8;h`8^5 z9!fKlIeMdG!s_9L4BTo@)_;rAaSXtXNO*wczbagX&+m7`b66JHWbg zb9da(+&~f-S^w$K@OiRQ>dKGv=n^xLe>&dT8Gd({)pYwWP9~~@D$3o|kS;1XMLh<; zF(xkV&C&0z`QYY*OwF5#5B6J<+}jG@7LNKOHzwSkI7_-rxk$Mnz{(^WP>xU7l5eM6eTdp|}_sUh9G7+;~{mSX8Bnw&>j1PM`?(w4| zDNq*l!Og^)!+wZ8%hRhan2h4CM&8;Tf;wXfDhry#Yl_Y7ppM#ZEuLk3n)%)o$?sO} zceceDiJ}k3QBnR}^TDcTrA*%SG&X4C7SNW+w{mbe&TxHE*BAuuURvU`f^V3Ii$XUJvx?4sb8SdSE*MsG7}l(!uGXA@TVLxCtc zHKOKq)rFA+>Po$n`(AkMWYXl}_t71N>eE8@{%*oW2hLViRn?qxvff~s|4L&&iQ%z= z!gO=AbjM6`YN`!d+cED8&NX?W(DA#_6^Jpd`c)Htd(A5h@9hPIhs^y3-RM{+&%)O= zh>wos=Z?=k?N^8#o`tfL&9Fdp)1AA6@h%>{XI#>Ghug)@cv#e&QZvO_mhC5*x z&om}DVk6!t82tk(JjBDCl&)Q_$(tF@x#KHa3~Wod>C?&2lg{8;sc6;GiBEHGO`M0` zf8Q^T7TPqWxT6dEKA&c%Ax%m>c+AHsD7`n~1SzFVBw3ZK7Tr%)DbHKHw>dc%=GyH03MA|Osl=Cwq0 z>(!_v_(qDzOi@Z}XB^>=8qE!vs~~P3Epp`qnoJNQ&yNS7*aWfv^IO7uL^h!{*X!}=yjMJd z6ly%UCSiH@i-Ohmq^ms;FS;12VVFz$^+FWC!l`tvYeR`-48+s6*7J%CkWn$pBD9d2 zGb~TN6uF6m2rLpV3ExP&@)Vx7#L$FEoDpRk(_ zG9t63BOU7KOgc%{xhJ`!n{14kfv{U{P`!VsOWkr|P7E=aU~YTGO+{5tcb#5@U&bg$ z5}&XJEaMf@jLND%wHZI4b9oh{qj2O33;L7m1b3D+L6!IA&Afh9IeOzpj*^f0`Q=c1 zK$$(Z4QsGS>L7@;U3a?jMw|+MRPrJw3Ddw1_b;b2l)FppNV7LiT5O&Q$w5=S$o3V; zMZf)X@Bn1sY`tbwRdRkAfIf@IP44rdxQO~W;Xc*~A{yhp zx8$oQm_6#KTgenS?=2rnSfuPyWw^)#sBPxZTFd%}d*{1>q7>h3`_U&|)W?|vpIK_Z zo7agP7hu5slR8Qe-qFz^Z~ZG4h!A2v9q(AIOF9jKUtUV99dmus@eA0?l27+ zyVq=M%&Y_6r?rSU)dxsT5pmw}n|pz0B(Y6POH1s@lferDNeBc?5qzCJC?}--U-(tm zV5u!dz%(N+@s>X8!^nWS+o$J@ftU-T8>Yh@S@cSni)`E;VN$44tX3z}Ki9A!uhBL) zM_#FyLEI&B-MW=|zNw*vWk(1Pskpu@e)Xp~p2Hg51YgCg>Qy5~>j93mVBEjs7VRc7 zq(H=(yw1Nn!W*Y@b*MgQubWd>BzF$!OFiw9f{P@@Pr3Mm+|VknG2##ZnL9ZpMMAM7 z$+0LL7DHV`?Zi3JO^}LHNjHIymMdM9C(TH6hTvgA=b8b#L2T$I_fiYbSNvJec?${& zdV;sF#oa`jU5~1)bdERx*hOtFB&k!WG4(7Be8AtIS_t?DZ{`;>5nX;JAZ)MUi%1_2 znZ8C*Dl4=1FEx_1G=8Mjzih$!n17K0T%^gSg0Dpu$ zJUA^Ltq0T{xzAEW&SXhCldjaO(lY>$MVh5T%6?Uzb6)&MoF$GH z@MlB7dtD?o*OB32Vde5%YcH=`MHf4r-QI4%(plKSC*aJ?$&x9;$}V{G;*X`Jr4qspCX!DT+xhaPIZe8rMBH}k zgUo>|sEMQ@c}!<*7EeCJf6>=FI6fW^y1k^IlHZBSgX!6ALv3atu#j#kd_Oe)#aTRLU zN0JJ67Ko!AIiBtBL7NTjp`JXM=HLjff{_|$I zFIfYcFo6RB^WVm0mP&p!snj_>*Wh?Mpu<72)WLumnt5dUM)0@2zMy^wz7R*Y2P4dn z!W2-VryY(k*`L+59omA~t7)VYOOX(F1j}OZkLBjkzyGAN|Z_Fhah2!FrEI2s^EPWO{=)h;2 zW6n=R=fQp>Qu0wV2!AjK5JC24Z99z)k$!S76^j@)3xsn<9PZq?<6vWxK|u{$>xy=i zubpe^&3R-C+L=ejL|$%SUW*u>5Iae`CH6bN5%>%;>5Va+y#<`&>}m6gjN9UT>+oDh zxI8t3B5;Bq&k;g7RG-jm(-nu!8e>R*{-9#o1#otDpu4%Efa!PVz^*qec-=UaQ)vLm zt|?cFIKNlWLWMQRt>TVxok?|duX%ZSS>~_LSE)%a2L1Oin~NjOn{>gsvA2Am)fU)8 z!}QXP+U34T;iA*w@*wPys-DpFXg#!&DfHM3GdG9XPc;XS^-WKVX>FDbZbbTZ?exHg z=|X5--q5|k@3fyLbG+&%M(!69gm*Xt+2fUn4aDHnHA8`HNTE=65YH$A$BNVYUEt9g z9R%*H)Ggot?Z}t&@6d7mE!#0@sZ|8n%Zka)^!g&%>v=F3Hy|Dsf!jP>!33>vu=lSY z{%s!r{mpmdI>6EdnBLi;Q;GoqsYJpntszhr0654TLcH1fnJ$e+Hz5>`G2twwrTET7 zi@ngDbZ?LlQ_%LyGB8VJQXR1Uxh=x>Z$m2|MB=3*1*FRpsxts^w-CLmq6y$c{AZCN zJBj2}4_*$-ke)(DYo1(?N^G7PISn`Y{r^W;Z10HDfA!eDAD#w;^Y2GWBh$D| z9e$_;+WI@U&L++lpQ%S9pF(4gq9xhSs zjgfHbc592rSI%d*co;_PlSEcmzM{M46EItST(m z7)#Q=JQ_M1%drnX!pa96*?%^}kXtPR#XzcP(UK_^arHOKZejY2XX(Hr0pb6i1%SM? z9nOsw#Q`', - f' https://github.com/melianmiko/OpenFreebuds/blob/main/CHANGELOG.md#v{NEW_VERSION}', + f' {BASE_CHANGELOG_URL}#v{NEW_VERSION}', f' ', f'
    ', *[f"
  • {escape(line[2:])}
  • " for line in CHANGELOG],