What's Changed
Google Maps geocoding provider
- Reverse geocode via Google Geocoding API, extracts structured address components
- Forward search with index-based PlaceIDs
- Rate limiter (50ms/req, burst 10), in-memory cache
Chain geocoder replacing fallback geocoder
GEOCODE_PROVIDERnow accepts comma-separated values (ex:here,google)- Nominatim is always first, then providers are tried in order
chainGeocoderreplaces the old two-providerfallbackGeocoderdescribeProvider()for accurate startup logging
Provider-specific API keys
- New env vars:
HERE_API_KEY,GOOGLE_API_KEY GEOCODE_API_KEYkept as legacy fallback viaresolveKey()
Language parameter on ReverseGeocode
ReverseGeocodenow accepts lang string (was hardcoded "en")- All providers default to "en" when empty
- Sync service passes "en", HTTP handlers can pass browser language
Rate limit handling improvements
- Nominatim
ForwardSearchnow has adaptive 429 handling (was missing) - HERE
ForwardSearchnow returns descriptive 429 errors - Shared
adaptRateLimiter()method eliminates code duplication - All
ForwardSearchimplementations default lang to "en"
Config/docs
- Documented chain format, provider-specific keys
- Added missing
IMMICH_EXTERNAL_URLandDAWARICH_URLpass-through
Full Changelog: v1.0.6...v1.0.7