feat: auto-detect iPod connection via QTimer polling + fix AlreadyMounted in _mount_linux
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import logging
|
||||
from typing import Set
|
||||
|
||||
from PyQt6.QtCore import QObject, QTimer, pyqtSignal
|
||||
|
||||
from ipod_device import IPodDevice
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DeviceMonitor(QObject):
|
||||
|
||||
state_changed = pyqtSignal(list)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.timer = QTimer(self)
|
||||
self.timer.timeout.connect(self._poll)
|
||||
self._device_ids: Set[str] = set()
|
||||
|
||||
def start(self, interval_ms: int = 3000):
|
||||
self._device_ids.clear()
|
||||
self._poll()
|
||||
self.timer.start(interval_ms)
|
||||
|
||||
def stop(self):
|
||||
self.timer.stop()
|
||||
self._device_ids.clear()
|
||||
|
||||
def _poll(self):
|
||||
try:
|
||||
devices = IPodDevice().detect_devices()
|
||||
current_ids = {d["id"] for d in devices}
|
||||
if current_ids != self._device_ids:
|
||||
self._device_ids = current_ids
|
||||
self.state_changed.emit(devices)
|
||||
except Exception:
|
||||
logger.exception("DeviceMonitor poll failed")
|
||||
Reference in New Issue
Block a user