synodic-client 0.0.1.dev26__tar.gz → 0.0.1.dev28__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 (54) hide show
  1. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/PKG-INFO +3 -3
  2. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/pyproject.toml +5 -5
  3. synodic_client-0.0.1.dev28/synodic_client/_version.py +1 -0
  4. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/bootstrap.py +8 -0
  5. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/qt.py +13 -2
  6. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/__init__.py +2 -0
  7. synodic_client-0.0.1.dev28/synodic_client/application/screen/action_card.py +789 -0
  8. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/install.py +454 -254
  9. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/screen.py +46 -6
  10. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/spinner.py +9 -2
  11. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/tray.py +31 -2
  12. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/theme.py +119 -0
  13. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/client.py +1 -0
  14. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/config.py +18 -0
  15. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/resolution.py +16 -0
  16. synodic_client-0.0.1.dev28/synodic_client/startup.py +91 -0
  17. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/updater.py +8 -1
  18. synodic_client-0.0.1.dev28/tests/unit/qt/test_action_card.py +928 -0
  19. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/qt/test_install_preview.py +365 -6
  20. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/test_config.py +24 -0
  21. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/test_resolution.py +23 -0
  22. synodic_client-0.0.1.dev28/tests/unit/windows/test_startup.py +192 -0
  23. synodic_client-0.0.1.dev26/synodic_client/_version.py +0 -1
  24. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/LICENSE.md +0 -0
  25. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/README.md +0 -0
  26. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/__init__.py +0 -0
  27. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/__main__.py +0 -0
  28. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/__init__.py +0 -0
  29. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/icon.py +0 -0
  30. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/instance.py +0 -0
  31. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/card.py +0 -0
  32. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/screen/log_panel.py +0 -0
  33. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/application/uri.py +0 -0
  34. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/cli.py +0 -0
  35. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/logging.py +0 -0
  36. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/protocol.py +0 -0
  37. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/synodic_client/py.typed +0 -0
  38. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/__init__.py +0 -0
  39. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/conftest.py +0 -0
  40. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/__init__.py +0 -0
  41. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/qt/__init__.py +0 -0
  42. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/qt/conftest.py +0 -0
  43. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/qt/test_log_panel.py +0 -0
  44. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/qt/test_logging.py +0 -0
  45. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/test_cli.py +0 -0
  46. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/test_client_updater.py +0 -0
  47. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/test_client_version.py +0 -0
  48. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/test_examples.py +0 -0
  49. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/test_install.py +0 -0
  50. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/test_updater.py +0 -0
  51. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/test_uri.py +0 -0
  52. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/windows/__init__.py +0 -0
  53. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/windows/conftest.py +0 -0
  54. {synodic_client-0.0.1.dev26 → synodic_client-0.0.1.dev28}/tests/unit/windows/test_protocol.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: synodic_client
3
- Version: 0.0.1.dev26
3
+ Version: 0.0.1.dev28
4
4
  Author-Email: Synodic Software <contact@synodic.software>
5
5
  License: LGPL-3.0-or-later
6
6
  Project-URL: homepage, https://github.com/synodic/synodic-client
@@ -8,10 +8,10 @@ Project-URL: repository, https://github.com/synodic/synodic-client
8
8
  Requires-Python: <3.15,>=3.14
9
9
  Requires-Dist: pyside6>=6.10.2
10
10
  Requires-Dist: packaging>=26.0
11
- Requires-Dist: porringer>=0.2.1.dev31
11
+ Requires-Dist: porringer>=0.2.1.dev48
12
12
  Requires-Dist: qasync>=0.28.0
13
13
  Requires-Dist: velopack>=0.0.1369.dev7516
14
- Requires-Dist: typer>=0.24.0
14
+ Requires-Dist: typer>=0.24.1
15
15
  Description-Content-Type: text/markdown
16
16
 
17
17
  # Synodic Client
@@ -10,12 +10,12 @@ requires-python = ">=3.14, <3.15"
10
10
  dependencies = [
11
11
  "pyside6>=6.10.2",
12
12
  "packaging>=26.0",
13
- "porringer>=0.2.1.dev31",
13
+ "porringer>=0.2.1.dev48",
14
14
  "qasync>=0.28.0",
15
15
  "velopack>=0.0.1369.dev7516",
16
- "typer>=0.24.0",
16
+ "typer>=0.24.1",
17
17
  ]
18
- version = "0.0.1.dev26"
18
+ version = "0.0.1.dev28"
19
19
 
20
20
  [project.license]
21
21
  text = "LGPL-3.0-or-later"
@@ -35,8 +35,8 @@ build = [
35
35
  "pyinstaller>=6.19.0",
36
36
  ]
37
37
  lint = [
38
- "ruff>=0.15.1",
39
- "pyrefly>=0.53.0",
38
+ "ruff>=0.15.2",
39
+ "pyrefly>=0.54.0",
40
40
  ]
41
41
  test = [
42
42
  "pytest>=9.0.2",
@@ -0,0 +1 @@
1
+ __version__ = '0.0.1.dev28'
@@ -18,6 +18,8 @@ import sys
18
18
  from synodic_client.config import set_dev_mode
19
19
  from synodic_client.logging import configure_logging
20
20
  from synodic_client.protocol import register_protocol
21
+ from synodic_client.resolution import resolve_auto_start, resolve_config
22
+ from synodic_client.startup import register_startup, remove_startup
21
23
  from synodic_client.updater import initialize_velopack
22
24
 
23
25
  _PROTOCOL_SCHEME = 'synodic'
@@ -32,6 +34,12 @@ initialize_velopack()
32
34
  if not _dev_mode:
33
35
  register_protocol(sys.executable)
34
36
 
37
+ _config = resolve_config()
38
+ if resolve_auto_start(_config):
39
+ register_startup(sys.executable)
40
+ else:
41
+ remove_startup()
42
+
35
43
  # Heavy imports happen here — PySide6, porringer, etc.
36
44
  from synodic_client.application.qt import application # noqa: E402
37
45
 
@@ -24,7 +24,8 @@ from synodic_client.client import Client
24
24
  from synodic_client.config import GlobalConfiguration, set_dev_mode
25
25
  from synodic_client.logging import configure_logging
26
26
  from synodic_client.protocol import register_protocol
27
- from synodic_client.resolution import resolve_config, resolve_update_config
27
+ from synodic_client.resolution import resolve_auto_start, resolve_config, resolve_update_config
28
+ from synodic_client.startup import register_startup, remove_startup
28
29
  from synodic_client.updater import initialize_velopack
29
30
 
30
31
 
@@ -135,6 +136,12 @@ def application(*, uri: str | None = None, dev_mode: bool = False) -> None:
135
136
  initialize_velopack()
136
137
  register_protocol(sys.executable)
137
138
 
139
+ startup_config = resolve_config()
140
+ if resolve_auto_start(startup_config):
141
+ register_startup(sys.executable)
142
+ else:
143
+ remove_startup()
144
+
138
145
  if uri:
139
146
  logger.info('Received URI: %s', uri)
140
147
 
@@ -159,7 +166,11 @@ def application(*, uri: str | None = None, dev_mode: bool = False) -> None:
159
166
 
160
167
  def _handle_install_uri(manifest_url: str) -> None:
161
168
  logger.info('Opening install preview for: %s', manifest_url)
162
- window = InstallPreviewWindow(porringer, manifest_url)
169
+ window = InstallPreviewWindow(
170
+ porringer,
171
+ manifest_url,
172
+ config=config,
173
+ )
163
174
  _install_windows.append(window)
164
175
  window.show()
165
176
  window.raise_()
@@ -43,7 +43,9 @@ def plugin_kind_group_label(kind: PluginKind) -> str:
43
43
 
44
44
  SKIP_REASON_LABELS: dict[SkipReason, str] = {
45
45
  SkipReason.ALREADY_INSTALLED: 'Already installed',
46
+ SkipReason.ALREADY_LATEST: 'Already latest',
46
47
  SkipReason.NO_PROJECT_DIRECTORY: 'No project directory',
48
+ SkipReason.UPDATE_AVAILABLE: 'Update available',
47
49
  }
48
50
 
49
51