something-x-dev 1.2.3.dev4__tar.gz → 1.3.0.dev5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. {something_x_dev-1.2.3.dev4/something_x_dev.egg-info → something_x_dev-1.3.0.dev5}/PKG-INFO +1 -1
  2. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/pages/device.py +6 -1
  3. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/protocol.py +27 -21
  4. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/pyproject.toml +1 -1
  5. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5/something_x_dev.egg-info}/PKG-INFO +1 -1
  6. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/LICENSE +0 -0
  7. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/README.md +0 -0
  8. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/__init__.py +0 -0
  9. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/application.py +0 -0
  10. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/bluetooth.py +0 -0
  11. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/data/__init__.py +0 -0
  12. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/data/com.something.x.omarchy.desktop +0 -0
  13. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/data/style.css +0 -0
  14. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/pages/__init__.py +0 -0
  15. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/pages/home.py +0 -0
  16. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/profiles.py +0 -0
  17. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/splash.py +0 -0
  18. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/nothing_app/window.py +0 -0
  19. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/setup.cfg +0 -0
  20. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/something_x_dev.egg-info/SOURCES.txt +0 -0
  21. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/something_x_dev.egg-info/dependency_links.txt +0 -0
  22. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/something_x_dev.egg-info/entry_points.txt +0 -0
  23. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/something_x_dev.egg-info/requires.txt +0 -0
  24. {something_x_dev-1.2.3.dev4 → something_x_dev-1.3.0.dev5}/something_x_dev.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: something-x-dev
3
- Version: 1.2.3.dev4
3
+ Version: 1.3.0.dev5
4
4
  Summary: Something X device manager for Omarchy / Linux
5
5
  Author: Raphael
6
6
  License: MIT
@@ -265,7 +265,12 @@ def _settings_row(title: str, subtitle: str = "", right_widget: Gtk.Widget | Non
265
265
 
266
266
 
267
267
  class DevicePage(Gtk.Box):
268
- def __init__(self, bt_device: BluetoothDevice, bt_manager: BluetoothManager, nothing_dev: NothingDevice | None = None):
268
+ def __init__(
269
+ self,
270
+ bt_device: BluetoothDevice,
271
+ bt_manager: BluetoothManager,
272
+ nothing_dev: NothingDevice | None = None,
273
+ ):
269
274
  super().__init__(orientation=Gtk.Orientation.VERTICAL)
270
275
  self._bt_device = bt_device
271
276
  self._bt = bt_manager
@@ -147,7 +147,7 @@ class NothingDevice(GObject.Object):
147
147
  self._anc_pending_mode: int = ANCMode.OFF
148
148
  self._last_anc_level: int = _ANC_STRONG
149
149
  self._thread: threading.Thread | None = None
150
- self._low_bat_notified: set[str] = set()
150
+ self._low_bat_notified: dict[str, set[int]] = {}
151
151
 
152
152
  # ── Public API ────────────────────────────────────────────────────────────
153
153
 
@@ -602,29 +602,35 @@ class NothingDevice(GObject.Object):
602
602
  eq_val = EQ_PRESETS.get(p["eq"], 0)
603
603
  self._x55_send(_CMD_SET_EQ, bytes([eq_val]), label=f"restore EQ={p['eq']}")
604
604
 
605
+ _LOW_BAT_THRESHOLDS = (20, 15, 10, 5)
606
+
605
607
  def _check_low_battery(self, slot: str, pct: int, label: str):
606
608
  if pct < 0:
607
609
  return
608
- if pct <= 20 and slot not in self._low_bat_notified:
609
- self._low_bat_notified.add(slot)
610
- threading.Thread(
611
- target=subprocess.run,
612
- args=(
613
- [
614
- "notify-send",
615
- "-u",
616
- "critical",
617
- "-i",
618
- "battery-caution",
619
- "Something X",
620
- f"{label}: {pct}% battery remaining",
621
- ],
622
- ),
623
- kwargs={"capture_output": True},
624
- daemon=True,
625
- ).start()
626
- elif pct > 25:
627
- self._low_bat_notified.discard(slot)
610
+ if pct > 25:
611
+ self._low_bat_notified.pop(slot, None)
612
+ return
613
+ notified = self._low_bat_notified.setdefault(slot, set())
614
+ for threshold in self._LOW_BAT_THRESHOLDS:
615
+ if pct <= threshold and threshold not in notified:
616
+ notified.add(threshold)
617
+ threading.Thread(
618
+ target=subprocess.run,
619
+ args=(
620
+ [
621
+ "notify-send",
622
+ "-u",
623
+ "critical",
624
+ "-i",
625
+ "battery-caution",
626
+ "Something X",
627
+ f"{label}: {pct}% battery remaining",
628
+ ],
629
+ ),
630
+ kwargs={"capture_output": True},
631
+ daemon=True,
632
+ ).start()
633
+ break
628
634
 
629
635
  def _activation_fallback(self):
630
636
  if not self._activated and self._rfcomm_connected:
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "something-x-dev"
7
- version = "1.2.3.dev4"
7
+ version = "1.3.0.dev5"
8
8
  description = "Something X device manager for Omarchy / Linux"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: something-x-dev
3
- Version: 1.2.3.dev4
3
+ Version: 1.3.0.dev5
4
4
  Summary: Something X device manager for Omarchy / Linux
5
5
  Author: Raphael
6
6
  License: MIT