diff --git a/modules/message_handler.py b/modules/message_handler.py index f156bfa..3de64cc 100644 --- a/modules/message_handler.py +++ b/modules/message_handler.py @@ -472,7 +472,40 @@ class MessageHandler: name = advert_data.get('name', 'No name') location = "" if 'lat' in advert_data and 'lon' in advert_data: - location = f" at {advert_data['lat']:.4f},{advert_data['lon']:.4f}" + # Try to get resolved location from database if available + try: + if hasattr(self.bot, 'repeater_manager'): + # Look up the contact to get resolved location + public_key = advert_data.get('public_key') + if public_key: + contact_query = self.bot.db_manager.execute_query( + 'SELECT city, state, country FROM complete_contact_tracking WHERE public_key = ?', + (public_key,) + ) + if contact_query: + contact = contact_query[0] + city = contact.get('city') + state = contact.get('state') + if city and state: + location = f" at {city}, {state}" + elif city: + location = f" at {city}" + else: + # Fallback to coordinates if no resolved location + location = f" at {advert_data['lat']:.4f},{advert_data['lon']:.4f}" + else: + # No contact found yet, use coordinates + location = f" at {advert_data['lat']:.4f},{advert_data['lon']:.4f}" + else: + # No public key, use coordinates + location = f" at {advert_data['lat']:.4f},{advert_data['lon']:.4f}" + else: + # No repeater manager, use coordinates + location = f" at {advert_data['lat']:.4f},{advert_data['lon']:.4f}" + except Exception as e: + # If lookup fails, fallback to coordinates + self.logger.debug(f"Could not get resolved location for logging: {e}") + location = f" at {advert_data['lat']:.4f},{advert_data['lon']:.4f}" # Show hop count in log hop_count = signal_info.get('hops', 0) diff --git a/modules/repeater_manager.py b/modules/repeater_manager.py index 1852bd6..283706e 100644 --- a/modules/repeater_manager.py +++ b/modules/repeater_manager.py @@ -1327,7 +1327,7 @@ class RepeaterManager: if location: address = location.raw.get('address', {}) - # Get city name from various fields + # Get city name from various fields (in order of preference) city = (address.get('city') or address.get('town') or address.get('village') or @@ -1335,6 +1335,15 @@ class RepeaterManager: address.get('municipality') or address.get('suburb')) + # If no city found, try county as fallback (for rural areas) + # Keep "County" in the name to disambiguate from cities with the same name + if not city: + county = address.get('county') + if county: + # Keep full county name to distinguish from cities (e.g., "Snohomish County" vs "Snohomish" city) + city = county # Keep "County" suffix to avoid ambiguity + self.logger.debug(f"Using county '{county}' as location name for coordinates {latitude}, {longitude}") + if city: # For large cities, try to get neighborhood information neighborhood = self._get_neighborhood_for_large_city(address, city) @@ -1405,7 +1414,7 @@ class RepeaterManager: address = location.raw.get('address', {}) self.logger.debug(f"Geocoding API returned address data: {list(address.keys())}") - # Get city name from various fields + # Get city name from various fields (in order of preference) city = (address.get('city') or address.get('town') or address.get('village') or @@ -1413,6 +1422,15 @@ class RepeaterManager: address.get('municipality') or address.get('suburb')) + # If no city found, try county as fallback (for rural areas) + # Keep "County" in the name to disambiguate from cities with the same name + if not city: + county = address.get('county') + if county: + # Keep full county name to distinguish from cities (e.g., "Snohomish County" vs "Snohomish" city) + city = county # Keep "County" suffix to avoid ambiguity + self.logger.debug(f"Using county '{county}' as location name for coordinates {latitude}, {longitude}") + if city: # For large cities, try to get neighborhood information neighborhood = self._get_neighborhood_for_large_city(address, city) @@ -1422,11 +1440,10 @@ class RepeaterManager: location_info['city'] = city self.logger.debug(f"Extracted city: {location_info['city']}") - # Get state/province information + # Get state/province information (don't use county here since we may have used it for city) state = (address.get('state') or address.get('province') or - address.get('region') or - address.get('county')) + address.get('region')) if state: location_info['state'] = state self.logger.debug(f"Extracted state: {state}")