pywiim 2.2.2__tar.gz → 2.2.3__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.
- {pywiim-2.2.2/pywiim.egg-info → pywiim-2.2.3}/PKG-INFO +1 -1
- {pywiim-2.2.2 → pywiim-2.2.3}/pyproject.toml +1 -1
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/__init__.py +1 -1
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/parser.py +19 -5
- {pywiim-2.2.2 → pywiim-2.2.3/pywiim.egg-info}/PKG-INFO +1 -1
- {pywiim-2.2.2 → pywiim-2.2.3}/LICENSE +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/README.md +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/__init__.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/audio_pro.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/audio_settings.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/base.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/bluetooth.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/constants.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/device.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/diagnostics.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/endpoints.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/eq.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/firmware.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/group.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/lms.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/loop_mode.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/misc.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/peq.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/playback.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/preset.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/ssl.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/subwoofer.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/api/timer.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/backoff.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/capabilities.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/cli/__init__.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/cli/diagnostics.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/cli/discovery_cli.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/cli/group_test_cli.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/cli/join_test_cli.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/cli/monitor_cli.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/cli/verify_cli.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/client.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/device_capabilities.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/discovery.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/exceptions.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/group.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/group_helpers.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/mcp/__init__.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/mcp/__main__.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/mcp/config.example.json +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/mcp/config.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/mcp/context.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/mcp/server.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/metadata.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/model_names.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/models.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/normalize.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/__init__.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/audio.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/base.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/bluetooth.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/coverart.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/debounce.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/diagnostics.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/groupops.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/media.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/playback.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/properties.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/source_capabilities.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/statemgr.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/stream.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/stream_enricher.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/player/volume.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/polling.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/profiles.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/py.typed +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/role.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/state.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/upnp/__init__.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/upnp/client.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/upnp/eventer.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim/upnp/health.py +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim.egg-info/SOURCES.txt +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim.egg-info/dependency_links.txt +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim.egg-info/entry_points.txt +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim.egg-info/requires.txt +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/pywiim.egg-info/top_level.txt +0 -0
- {pywiim-2.2.2 → pywiim-2.2.3}/setup.cfg +0 -0
|
@@ -469,7 +469,7 @@ def _handle_qobuz_connect_state_quirks(data: dict[str, Any], raw: dict[str, Any]
|
|
|
469
469
|
"""Handle Qobuz Connect state detection quirks.
|
|
470
470
|
|
|
471
471
|
Addresses GitHub issue #35: Qobuz Connect shows playing briefly then switches to idle.
|
|
472
|
-
|
|
472
|
+
Also handles HTTP ``status: "none"`` with live timeline/metadata (mjcumming/wiim#222).
|
|
473
473
|
|
|
474
474
|
Args:
|
|
475
475
|
data: Parsed data dictionary (modified in place)
|
|
@@ -477,16 +477,30 @@ def _handle_qobuz_connect_state_quirks(data: dict[str, Any], raw: dict[str, Any]
|
|
|
477
477
|
"""
|
|
478
478
|
current_status = data.get("play_status", "").lower()
|
|
479
479
|
|
|
480
|
-
# Only
|
|
481
|
-
|
|
482
|
-
|
|
480
|
+
# Only skip when the device already reports a normal transport state we should not override.
|
|
481
|
+
# Qobuz Connect often reports ``status: "none"`` while ``curpos`` / ``totlen`` and metadata
|
|
482
|
+
# still reflect an active stream (see mjcumming/wiim#222); ``none`` must not bypass this path.
|
|
483
|
+
if current_status in {
|
|
484
|
+
"play",
|
|
485
|
+
"playing",
|
|
486
|
+
"pause",
|
|
487
|
+
"paused",
|
|
488
|
+
"paused playback",
|
|
489
|
+
"load",
|
|
490
|
+
"loading",
|
|
491
|
+
"buffering",
|
|
492
|
+
"transitioning",
|
|
493
|
+
}:
|
|
494
|
+
return
|
|
483
495
|
|
|
484
496
|
# Enhanced detection: Look for multiple indicators that suggest active playback
|
|
485
497
|
# This mimics the improved logic from python-linkplay v0.2.9
|
|
486
498
|
|
|
487
499
|
title = data.get("title")
|
|
488
500
|
has_track_info = bool(title and isinstance(title, str) and title.strip() and title != "Unknown")
|
|
489
|
-
has_position_info =
|
|
501
|
+
has_position_info = (
|
|
502
|
+
data.get("position") is not None or raw.get("curpos") is not None or raw.get("offset_pts") is not None
|
|
503
|
+
)
|
|
490
504
|
has_duration_info = bool(data.get("duration") or raw.get("totlen"))
|
|
491
505
|
has_artwork = bool(data.get("entity_picture") or raw.get("cover") or raw.get("albumArtURI"))
|
|
492
506
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|