support public listing on rx.kiwisdr.com
This commit is contained in:
@ -9,6 +9,7 @@ from owrx.config import Config
|
||||
from owrx.feature import FeatureDetector
|
||||
from owrx.sdr import SdrService
|
||||
from socketserver import ThreadingMixIn
|
||||
from owrx.listing import ListingUpdater
|
||||
from owrx.service import Services
|
||||
from owrx.websocket import WebSocketConnection
|
||||
from owrx.pskreporter import PskReporter
|
||||
@ -57,6 +58,10 @@ Support and info: https://groups.io/g/openwebrx
|
||||
|
||||
# Get error messages about unknown / unavailable features as soon as possible
|
||||
SdrService.loadProps()
|
||||
|
||||
if "listing_key" in pm and pm["public_listing"]:
|
||||
updater = ListingUpdater()
|
||||
updater.start()
|
||||
|
||||
Services.start()
|
||||
|
||||
|
@ -244,6 +244,18 @@ class GeneralSettingsController(AdminController):
|
||||
infotext="This callsign will be used to send spots to pskreporter.info",
|
||||
),
|
||||
),
|
||||
Section(
|
||||
"rx.kiwisdr.com",
|
||||
TextInput(
|
||||
"listing_key",
|
||||
"rx.kiwisdr.com key",
|
||||
infotext='Please obtain your listing key via email from support@kiwisdr.com',
|
||||
),
|
||||
CheckboxInput(
|
||||
"public_listing", "List on rx.kiwisdr.com", "List my receiver publicly on rx.kiwisdr.com"
|
||||
),
|
||||
TextInput("server_hostname", "Hostname"),
|
||||
),
|
||||
]
|
||||
|
||||
def render_sections(self):
|
||||
|
@ -27,7 +27,7 @@ class StatusController(Controller):
|
||||
|
||||
def indexAction(self):
|
||||
pm = Config.get()
|
||||
|
||||
avatar_path = pkg_resources.resource_filename("htdocs", "gfx/openwebrx-avatar.png")
|
||||
status = {
|
||||
"receiver": {
|
||||
"name": pm["receiver_name"],
|
||||
@ -36,8 +36,10 @@ class StatusController(Controller):
|
||||
"asl": pm["receiver_asl"],
|
||||
"location": pm["receiver_location"],
|
||||
},
|
||||
"clients": ClientRegistry.getSharedInstance().clientCount(),
|
||||
"max_clients": pm["max_clients"],
|
||||
"version": openwebrx_version,
|
||||
"sw_version": openwebrx_version,
|
||||
"avatar_mtime": os.path.getmtime(avatar_path),
|
||||
"sdrs": [self.getReceiverStats(r) for r in SdrService.getSources().values()]
|
||||
}
|
||||
self.send_response(json.dumps(status), content_type="application/json")
|
||||
|
43
owrx/listing.py
Normal file
43
owrx/listing.py
Normal file
@ -0,0 +1,43 @@
|
||||
import threading
|
||||
import time
|
||||
from owrx.config import Config
|
||||
from urllib import request, parse
|
||||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ListingUpdater(threading.Thread):
|
||||
def __init__(self):
|
||||
self.doRun = True
|
||||
super().__init__(daemon=True)
|
||||
|
||||
def update(self):
|
||||
pm = Config.get().filter("server_hostname", "web_port", "listing_key")
|
||||
data = parse.urlencode({
|
||||
"url": "http://{server_hostname}:{web_port}".format(**pm.__dict__()),
|
||||
"key": pm["listing_key"]
|
||||
}).encode()
|
||||
|
||||
res = request.urlopen("http://kiwisdr.com/php/update.php", data=data)
|
||||
if res.getcode() < 200 or res.getcode() >= 300:
|
||||
logger.warning('rx.kiwisdr.com update failed with error code %i', res.getcode())
|
||||
return 2
|
||||
|
||||
returned = res.read().decode("utf-8")
|
||||
if "UPDATE:" not in returned:
|
||||
logger.warning("Update failed, your receiver cannot be listed on rx.kiwisdr.com!")
|
||||
return 2
|
||||
|
||||
value = returned.split("UPDATE:")[1].split("\n", 1)[0]
|
||||
if value.startswith("SUCCESS"):
|
||||
logger.info("Update succeeded!")
|
||||
else:
|
||||
logger.warning("Update failed, your receiver cannot be listed on rx.kiwisdr.com! Reason: %s", value)
|
||||
return 20
|
||||
|
||||
def run(self):
|
||||
while self.doRun:
|
||||
retrytime_mins = self.update()
|
||||
time.sleep(60 * retrytime_mins)
|
Reference in New Issue
Block a user