remotedesktop 0.11.0__tar.gz → 0.12.0__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 (55) hide show
  1. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/PKG-INFO +1 -1
  2. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/__init__.py +1 -1
  3. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/client.py +4 -1
  4. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/performance.py +13 -3
  5. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/server.py +4 -1
  6. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_performance.py +16 -0
  7. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/.github/workflows/ci.yml +0 -0
  8. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/.gitignore +0 -0
  9. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/CLAUDE.md +0 -0
  10. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/LICENSE +0 -0
  11. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/pyproject.toml +0 -0
  12. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/readme.md +0 -0
  13. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/run_claude.bat +0 -0
  14. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/run_client.bat +0 -0
  15. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/run_server.bat +0 -0
  16. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/scripts/make_coverage_badge.py +0 -0
  17. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/scripts/make_venv.bat +0 -0
  18. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/autostart.py +0 -0
  19. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/clipboard.py +0 -0
  20. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/config.py +0 -0
  21. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/db.py +0 -0
  22. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/discovery.py +0 -0
  23. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/frames.py +0 -0
  24. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/icon.py +0 -0
  25. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/input_injection.py +0 -0
  26. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/inventory.py +0 -0
  27. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/logs.py +0 -0
  28. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/modal_loop.py +0 -0
  29. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/preferences.py +0 -0
  30. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/protocol.py +0 -0
  31. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/sharing.py +0 -0
  32. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/tls.py +0 -0
  33. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/viewer.py +0 -0
  34. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/src/remotedesktop/window_state.py +0 -0
  35. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/conftest.py +0 -0
  36. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_autostart.py +0 -0
  37. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_client_window.py +0 -0
  38. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_clipboard.py +0 -0
  39. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_config.py +0 -0
  40. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_discovery.py +0 -0
  41. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_frames.py +0 -0
  42. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_icon.py +0 -0
  43. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_input.py +0 -0
  44. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_input_injection.py +0 -0
  45. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_inventory.py +0 -0
  46. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_logs.py +0 -0
  47. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_modal_loop.py +0 -0
  48. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_preferences.py +0 -0
  49. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_protocol.py +0 -0
  50. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_server_window.py +0 -0
  51. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_sharing.py +0 -0
  52. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_smoke.py +0 -0
  53. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_tls.py +0 -0
  54. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/tests/test_window_state.py +0 -0
  55. {remotedesktop-0.11.0 → remotedesktop-0.12.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remotedesktop
3
- Version: 0.11.0
3
+ Version: 0.12.0
4
4
  Summary: Remote desktop client/server for Windows computers on the same LAN, with autodiscovery. Provides screen, keyboard, mouse, and clipboard sharing without RDP or Microsoft authentication.
5
5
  Author-email: James Abel <j@abel.co>
6
6
  License-Expression: MIT
@@ -1,3 +1,3 @@
1
1
  """Remote desktop client/server for Windows computers on the same LAN."""
2
2
 
3
- __version__ = "0.11.0"
3
+ __version__ = "0.12.0"
@@ -110,7 +110,10 @@ class ClientWindow(QMainWindow):
110
110
  InventoryTab(self.inventory, "Forget server", self._forget_server),
111
111
  "Servers on LAN",
112
112
  )
113
- tabs.addTab(PerformanceTab(self.performance), "Performance")
113
+ tabs.addTab(
114
+ PerformanceTab(self.performance, local="client", remote="server"),
115
+ "Performance",
116
+ )
114
117
  self.setCentralWidget(tabs)
115
118
 
116
119
  self.discovery_panel = DiscoveryPanel(self)
@@ -418,7 +418,14 @@ class PerformanceTab(QWidget):
418
418
  monitor regardless, but a background tab schedules zero paint work.
419
419
  """
420
420
 
421
- def __init__(self, monitor: PerformanceMonitor, parent: QWidget | None = None) -> None:
421
+ def __init__(
422
+ self,
423
+ monitor: PerformanceMonitor,
424
+ *,
425
+ local: str = "client",
426
+ remote: str = "server",
427
+ parent: QWidget | None = None,
428
+ ) -> None:
422
429
  super().__init__(parent)
423
430
  self._monitor = monitor
424
431
  self.bandwidth_graph = GraphWidget(
@@ -431,11 +438,14 @@ class PerformanceTab(QWidget):
431
438
  format_rate,
432
439
  tick_unit=rate_unit,
433
440
  )
441
+ # Each line is named for the side that sent the ping, so the same
442
+ # line has the same name in both apps ("client → server" is the
443
+ # client-measured round trip on either end).
434
444
  self.ping_graph = GraphWidget(
435
445
  "Round-trip time",
436
446
  [
437
- ("this side", QColor("#ff9800"), monitor.rtt_ms),
438
- ("peer", QColor("#9c27b0"), monitor.peer_rtt_ms),
447
+ (f"{local} → {remote}", QColor("#ff9800"), monitor.rtt_ms),
448
+ (f"{remote} → {local}", QColor("#9c27b0"), monitor.peer_rtt_ms),
439
449
  ],
440
450
  monitor,
441
451
  format_ms,
@@ -108,7 +108,10 @@ class ServerWindow(QMainWindow):
108
108
  InventoryTab(self.inventory, "Revoke access", self._revoke_client),
109
109
  "Clients on LAN",
110
110
  )
111
- tabs.addTab(PerformanceTab(self.performance), "Performance")
111
+ tabs.addTab(
112
+ PerformanceTab(self.performance, local="server", remote="client"),
113
+ "Performance",
114
+ )
112
115
  tabs.addTab(log_tab, "Connection log")
113
116
  tabs.addTab(PreferencesTab(self._settings, self.performance), "Preferences")
114
117
  self.setCentralWidget(tabs)
@@ -351,6 +351,22 @@ def test_rate_unit_matches_format_rate_unit():
351
351
  assert unit * nice_ceiling(70000.0 / unit) == 100.0 * 1024.0
352
352
 
353
353
 
354
+ def test_rtt_lines_are_named_for_the_side_that_pings(qapp):
355
+ monitor = PerformanceMonitor()
356
+ client_tab = PerformanceTab(monitor, local="client", remote="server")
357
+ server_tab = PerformanceTab(monitor, local="server", remote="client")
358
+ # This side's own measurement (rtt_ms) is listed first; the same physical
359
+ # measurement carries the same name in both apps.
360
+ assert [label for label, _c, series in client_tab.ping_graph._series] == [
361
+ "client → server",
362
+ "server → client",
363
+ ]
364
+ assert [label for label, _c, series in server_tab.ping_graph._series] == [
365
+ "server → client",
366
+ "client → server",
367
+ ]
368
+
369
+
354
370
  def test_graph_widgets_render_headless(qapp):
355
371
  seeded = PerformanceMonitor()
356
372
  seeded.send_bps.add(100.0)
File without changes
File without changes
File without changes
File without changes