pymidi-controller 0.2.0__tar.gz → 0.3.1__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 (31) hide show
  1. {pymidi_controller-0.2.0/pymidi_controller.egg-info → pymidi_controller-0.3.1}/PKG-INFO +7 -1
  2. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/README.md +6 -0
  3. pymidi_controller-0.3.1/pymidi_controller/data/systemd/pymidi-controller.service +16 -0
  4. pymidi_controller-0.2.0/pymidi_controller/data/systemd/pymidi-controller.service → pymidi_controller-0.3.1/pymidi_controller/data/systemd/pymidi-controller.system.service +3 -2
  5. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/utils/service_manager.py +5 -1
  6. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1/pymidi_controller.egg-info}/PKG-INFO +7 -1
  7. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller.egg-info/SOURCES.txt +1 -0
  8. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pyproject.toml +1 -1
  9. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/LICENSE +0 -0
  10. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/MANIFEST.in +0 -0
  11. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/__init__.py +0 -0
  12. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/actions/__init__.py +0 -0
  13. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/actions/elgato.py +0 -0
  14. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/actions/elgato_discovery.py +0 -0
  15. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/actions/hue.py +0 -0
  16. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/actions/hue_discovery.py +0 -0
  17. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/cli.py +0 -0
  18. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/config.py +0 -0
  19. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/core.py +0 -0
  20. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/data/default_config.yaml +0 -0
  21. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/utils/__init__.py +0 -0
  22. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/utils/color_cycle.py +0 -0
  23. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/utils/config_manager.py +0 -0
  24. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/utils/function_manager.py +0 -0
  25. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/utils/midi_utils.py +0 -0
  26. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller/utils/state_manager.py +0 -0
  27. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller.egg-info/dependency_links.txt +0 -0
  28. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller.egg-info/entry_points.txt +0 -0
  29. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller.egg-info/requires.txt +0 -0
  30. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/pymidi_controller.egg-info/top_level.txt +0 -0
  31. {pymidi_controller-0.2.0 → pymidi_controller-0.3.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pymidi-controller
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: Daemon that maps MIDI events to system actions (Elgato, Hue, or custom functions).
5
5
  Author-email: Alex Sandilands <sandilands.alex@gmail.com>
6
6
  License-Expression: MIT
@@ -306,6 +306,12 @@ To run automatically at login:
306
306
  pymidi service install --user
307
307
  ```
308
308
 
309
+ The user service starts with your graphical session (`graphical-session.target`), after the desktop compositor is up. It does not pull that target in itself, so it can't make other autostart apps start early.
310
+
311
+ If your window manager doesn't start `graphical-session.target` (Plasma and GNOME do; some minimal setups such as i3, sway or Hyprland don't unless configured to), the service won't start at login. Start the target from your session startup, e.g. `systemctl --user start graphical-session.target`.
312
+
313
+ > **Upgrading from 0.3.0 or earlier?** Rerun `pymidi service install --user` (or `--system` for a system-wide install) once. It replaces the old unit and removes its stale `default.target` link. `pymidi service enable` alone doesn't refresh the unit file.
314
+
309
315
  Logs:
310
316
 
311
317
  ```bash
@@ -282,6 +282,12 @@ To run automatically at login:
282
282
  pymidi service install --user
283
283
  ```
284
284
 
285
+ The user service starts with your graphical session (`graphical-session.target`), after the desktop compositor is up. It does not pull that target in itself, so it can't make other autostart apps start early.
286
+
287
+ If your window manager doesn't start `graphical-session.target` (Plasma and GNOME do; some minimal setups such as i3, sway or Hyprland don't unless configured to), the service won't start at login. Start the target from your session startup, e.g. `systemctl --user start graphical-session.target`.
288
+
289
+ > **Upgrading from 0.3.0 or earlier?** Rerun `pymidi service install --user` (or `--system` for a system-wide install) once. It replaces the old unit and removes its stale `default.target` link. `pymidi service enable` alone doesn't refresh the unit file.
290
+
285
291
  Logs:
286
292
 
287
293
  ```bash
@@ -0,0 +1,16 @@
1
+ [Unit]
2
+ Description=🎹 MIDI Controller Background Service
3
+ After=graphical-session.target sound.target
4
+ Wants=sound.target
5
+
6
+ [Service]
7
+ Type=simple
8
+ Environment=PATH=%h/.local/bin:/usr/local/bin:/usr/bin:/bin
9
+ ExecStart=/usr/bin/env pymidi-controller run --mode blocking
10
+ Restart=always
11
+ RestartSec=5
12
+ StandardOutput=journal
13
+ StandardError=journal
14
+
15
+ [Install]
16
+ WantedBy=graphical-session.target
@@ -1,6 +1,7 @@
1
1
  [Unit]
2
2
  Description=🎹 MIDI Controller Background Service
3
- After=network.target
3
+ After=sound.target
4
+ Wants=sound.target
4
5
 
5
6
  [Service]
6
7
  Type=simple
@@ -12,4 +13,4 @@ StandardOutput=journal
12
13
  StandardError=journal
13
14
 
14
15
  [Install]
15
- WantedBy=default.target
16
+ WantedBy=multi-user.target
@@ -22,20 +22,24 @@ def install(scope: ServiceScope):
22
22
  if scope == ServiceScope.USER:
23
23
  target_dir = Path.home() / ".config/systemd/user"
24
24
  ctl = ["systemctl", "--user"]
25
+ src_name = "pymidi-controller.service"
25
26
  elif scope == ServiceScope.SYSTEM:
26
27
  target_dir = Path("/etc/systemd/system")
27
28
  ctl = ["systemctl"]
29
+ src_name = "pymidi-controller.system.service"
28
30
  else:
29
31
  print("⚠️ Invalid scope for install.")
30
32
  return
31
33
 
32
34
  target_dir.mkdir(parents=True, exist_ok=True)
33
- src = resources.files("pymidi_controller") / "data/systemd/pymidi-controller.service"
35
+ src = resources.files("pymidi_controller") / "data/systemd" / src_name
34
36
  dst = target_dir / "pymidi-controller.service"
35
37
  shutil.copy(src, dst)
36
38
  print(f"✔️ Installed service unit to {dst}")
37
39
 
38
40
  subprocess.run(ctl + ["daemon-reload"], check=True)
41
+ # Drop links from older units (e.g. default.target.wants) before enabling
42
+ subprocess.run(ctl + ["disable", "pymidi-controller.service"], check=False)
39
43
  subprocess.run(ctl + ["enable", "--now", "pymidi-controller.service"], check=True)
40
44
  print("✅ Service enabled and started.")
41
45
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pymidi-controller
3
- Version: 0.2.0
3
+ Version: 0.3.1
4
4
  Summary: Daemon that maps MIDI events to system actions (Elgato, Hue, or custom functions).
5
5
  Author-email: Alex Sandilands <sandilands.alex@gmail.com>
6
6
  License-Expression: MIT
@@ -306,6 +306,12 @@ To run automatically at login:
306
306
  pymidi service install --user
307
307
  ```
308
308
 
309
+ The user service starts with your graphical session (`graphical-session.target`), after the desktop compositor is up. It does not pull that target in itself, so it can't make other autostart apps start early.
310
+
311
+ If your window manager doesn't start `graphical-session.target` (Plasma and GNOME do; some minimal setups such as i3, sway or Hyprland don't unless configured to), the service won't start at login. Start the target from your session startup, e.g. `systemctl --user start graphical-session.target`.
312
+
313
+ > **Upgrading from 0.3.0 or earlier?** Rerun `pymidi service install --user` (or `--system` for a system-wide install) once. It replaces the old unit and removes its stale `default.target` link. `pymidi service enable` alone doesn't refresh the unit file.
314
+
309
315
  Logs:
310
316
 
311
317
  ```bash
@@ -19,6 +19,7 @@ pymidi_controller/actions/hue.py
19
19
  pymidi_controller/actions/hue_discovery.py
20
20
  pymidi_controller/data/default_config.yaml
21
21
  pymidi_controller/data/systemd/pymidi-controller.service
22
+ pymidi_controller/data/systemd/pymidi-controller.system.service
22
23
  pymidi_controller/utils/__init__.py
23
24
  pymidi_controller/utils/color_cycle.py
24
25
  pymidi_controller/utils/config_manager.py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pymidi-controller"
3
- version = "0.2.0"
3
+ version = "0.3.1"
4
4
  description = "Daemon that maps MIDI events to system actions (Elgato, Hue, or custom functions)."
5
5
  readme = { file = "README.md", content-type = "text/markdown" }
6
6
  license = "MIT"