harbour-volumio/qml/pages/upnpscan.py
2025-06-17 21:25:16 +02:00

51 lines
1.3 KiB
Python

import pyotherside
import threading
import socket
import re
# 'ST:urn:schemas-upnp-org:device:MediaRenderer:1',
def slow_function():
msg = "\r\n".join([
'M-SEARCH * HTTP/1.1',
'HOST:239.255.255.250:1900',
'MAN:"ssdp:discover"',
'ST:urn:schemas-upnp-org:device:MediaRenderer:1',
'MX:2',
'',
'',
])
bytesmsg = msg.encode()
mr = "urn:schemas-upnp-org:device:MediaRenderer:1".encode()
# mr = ".".encode()
se = "(?P<url>https?://[^\s]+)".encode()
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.settimeout(3)
s.sendto(bytesmsg, ('239.255.255.250', 1900))
try:
while True:
data = s.recvfrom(65507)
for line in data:
if mr in line:
url = re.search(se, line).group("url")
pyotherside.send('progress', url)
except socket.timeout:
pyotherside.send('finished', "DONE")
class Discoverer:
def __init__(self):
self.bgthread = threading.Thread()
self.bgthread.start()
def discover(self):
if self.bgthread.is_alive():
return
self.bgthread = threading.Thread(target=slow_function)
self.bgthread.start()
discoverer = Discoverer()