config migration for receiver_gps
This commit is contained in:
		| @@ -219,8 +219,8 @@ | ||||
|  | ||||
|                             map = new google.maps.Map($('.openwebrx-map')[0], { | ||||
|                                 center: { | ||||
|                                     lat: config.receiver_gps[0], | ||||
|                                     lng: config.receiver_gps[1] | ||||
|                                     lat: config.receiver_gps.lat, | ||||
|                                     lng: config.receiver_gps.lon | ||||
|                                 }, | ||||
|                                 zoom: 5, | ||||
|                                 mapTypeId: mapTypeId | ||||
|   | ||||
| @@ -1097,7 +1097,7 @@ function on_ws_recv(evt) { | ||||
|                     case "receiver_details": | ||||
|                         var r = json['value']; | ||||
|                         e('webrx-rx-title').innerHTML = r['receiver_name']; | ||||
|                         var query = encodeURIComponent(r['receiver_gps'][0] + ',' + r['receiver_gps'][1]); | ||||
|                         var query = encodeURIComponent(r['receiver_gps']['lat'] + ',' + r['receiver_gps']['lon']); | ||||
|                         e('webrx-rx-desc').innerHTML = r['receiver_location'] + ' | Loc: ' + r['locator'] + ', ASL: ' + r['receiver_asl'] + ' m, <a href="https://www.google.com/maps/search/?api=1&query=' + query + '" target="_blank" onclick="dont_toggle_rx_photo();">[maps]</a>'; | ||||
|                         e('webrx-rx-photo-title').innerHTML = r['photo_title']; | ||||
|                         e('webrx-rx-photo-desc').innerHTML = r['photo_desc']; | ||||
|   | ||||
| @@ -3,6 +3,7 @@ import importlib.util | ||||
| import os | ||||
| import logging | ||||
| import json | ||||
| from abc import ABC, abstractmethod | ||||
|  | ||||
| logger = logging.getLogger(__name__) | ||||
|  | ||||
| @@ -20,8 +21,27 @@ class ConfigError(object): | ||||
|         return "Configuration Error (key: {0}): {1}".format(self.key, self.message) | ||||
|  | ||||
|  | ||||
| class ConfigMigrator(ABC): | ||||
|     @abstractmethod | ||||
|     def migrate(self, config): | ||||
|         pass | ||||
|  | ||||
|  | ||||
| class ConfigMigratorVersion1(ConfigMigrator): | ||||
|     def migrate(self, config): | ||||
|         gps = config["receiver_gps"] | ||||
|         config["receiver_gps"] = {"lat": gps[0], "lon": gps[1]} | ||||
|  | ||||
|         config["version"] = 2 | ||||
|         return config | ||||
|  | ||||
|  | ||||
| class Config: | ||||
|     sharedConfig = None | ||||
|     currentVersion = 2 | ||||
|     migrators = { | ||||
|         1: ConfigMigratorVersion1() | ||||
|     } | ||||
|  | ||||
|     @staticmethod | ||||
|     def _loadPythonFile(file): | ||||
| @@ -45,7 +65,7 @@ class Config: | ||||
|  | ||||
|     @staticmethod | ||||
|     def _loadConfig(): | ||||
|         for file in ["settings.json", "/etc/openwebrx/config_webrx.py", "./config_webrx.py"]: | ||||
|         for file in ["./settings.json", "/etc/openwebrx/config_webrx.py", "./config_webrx.py"]: | ||||
|             try: | ||||
|                 if file.endswith(".py"): | ||||
|                     return Config._loadPythonFile(file) | ||||
| @@ -60,7 +80,7 @@ class Config: | ||||
|     @staticmethod | ||||
|     def get(): | ||||
|         if Config.sharedConfig is None: | ||||
|             Config.sharedConfig = Config._loadConfig() | ||||
|             Config.sharedConfig = Config._migrate(Config._loadConfig()) | ||||
|         return Config.sharedConfig | ||||
|  | ||||
|     @staticmethod | ||||
| @@ -89,3 +109,13 @@ class Config: | ||||
|         if not os.access(pm[key], os.W_OK): | ||||
|             return ConfigError(key, "temporary directory is not writable") | ||||
|         return None | ||||
|  | ||||
|     @staticmethod | ||||
|     def _migrate(config): | ||||
|         version = config["version"] if "version" in config else 1 | ||||
|         if version == Config.currentVersion: | ||||
|             return config | ||||
|  | ||||
|         logger.debug("migrating config from version %i", version) | ||||
|         migrator = Config.migrators[version] | ||||
|         return migrator.migrate(config) | ||||
|   | ||||
| @@ -10,6 +10,8 @@ import json | ||||
| class StatusController(Controller): | ||||
|     def indexAction(self): | ||||
|         pm = Config.get() | ||||
|         # convert to old format | ||||
|         gps = (pm["receiver_gps"]["lat"], pm["receiver_gps"]["lon"]) | ||||
|         # TODO keys that have been left out since they are no longer simple strings: sdr_hw, bands, antenna | ||||
|         vars = { | ||||
|             "status": "active", | ||||
| @@ -17,7 +19,7 @@ class StatusController(Controller): | ||||
|             "op_email": pm["receiver_admin"], | ||||
|             "users": ClientRegistry.getSharedInstance().clientCount(), | ||||
|             "users_max": pm["max_clients"], | ||||
|             "gps": pm["receiver_gps"], | ||||
|             "gps": gps, | ||||
|             "asl": pm["receiver_asl"], | ||||
|             "loc": pm["receiver_location"], | ||||
|             "sw_version": openwebrx_version, | ||||
| @@ -44,12 +46,11 @@ class StatusController(Controller): | ||||
|     def jsonAction(self): | ||||
|         pm = Config.get() | ||||
|  | ||||
|         gps = pm["receiver_gps"] | ||||
|         status = { | ||||
|             "receiver": { | ||||
|                 "name": pm["receiver_name"], | ||||
|                 "admin": pm["receiver_admin"], | ||||
|                 "gps": {"lat": gps[0], "lon": gps[1]}, | ||||
|                 "gps": pm["receiver_gps"], | ||||
|                 "asl": pm["receiver_asl"], | ||||
|                 "location": pm["receiver_location"], | ||||
|             }, | ||||
|   | ||||
| @@ -39,7 +39,8 @@ IGLOGIN {callsign} {password} | ||||
|             ) | ||||
|  | ||||
|             if pm["aprs_igate_beacon"]: | ||||
|                 (lat, lon) = pm["receiver_gps"] | ||||
|                 lat = pm["receiver_gps"]["lat"] | ||||
|                 lon = pm["receiver_gps"]["lon"] | ||||
|                 direction_ns = "N" if lat > 0 else "S" | ||||
|                 direction_we = "E" if lon > 0 else "W" | ||||
|                 lat = abs(lat) | ||||
|   | ||||
| @@ -2,7 +2,8 @@ class Locator(object): | ||||
|     @staticmethod | ||||
|     def fromCoordinates(coordinates, depth=3): | ||||
|  | ||||
|         lat, lon = coordinates | ||||
|         lat = coordinates["lat"] | ||||
|         lon = coordinates["lon"] | ||||
|  | ||||
|         lon = lon + 180 | ||||
|         lat = lat + 90 | ||||
|   | ||||
| @@ -135,7 +135,8 @@ class DaylightSchedule(TimerangeSchedule): | ||||
|  | ||||
|     def getSunTimes(self, date): | ||||
|         pm = Config.get() | ||||
|         lat, lng = pm["receiver_gps"] | ||||
|         lat = pm["receiver_gps"]["lat"] | ||||
|         lng = pm["receiver_gps"]["lon"] | ||||
|         degtorad = math.pi / 180 | ||||
|         radtodeg = 180 / math.pi | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jakob Ketterl
					Jakob Ketterl