fix: always fetch fresh photo URLs for map markers instead of using stored HTTP URLs

This commit is contained in:
Maurice
2026-04-01 19:48:58 +02:00
parent 43fc4db00e
commit 71403e6303
4 changed files with 187 additions and 196 deletions

View File

@@ -264,7 +264,7 @@ function RouteLabel({ midpoint, walkingText, drivingText }: RouteLabelProps) {
}
// Module-level photo cache shared with PlaceAvatar
import { getCached, isLoading, fetchPhoto, onPhotoLoaded, onThumbReady, getAllThumbs, urlToBase64 } from '../../services/photoService'
import { getCached, isLoading, fetchPhoto, onThumbReady, getAllThumbs } from '../../services/photoService'
// Live location tracker — blue dot with pulse animation (like Apple/Google Maps)
function LocationTracker() {
@@ -400,7 +400,6 @@ export const MapView = memo(function MapView({
}
for (const place of places) {
// Already have a base64 data URL — nothing to do
if (place.image_url && place.image_url.startsWith('data:')) continue
const cacheKey = place.google_place_id || place.osm_id || `${place.lat},${place.lng}`
if (!cacheKey) continue
@@ -414,15 +413,7 @@ export const MapView = memo(function MapView({
// Subscribe for when thumb becomes available
cleanups.push(onThumbReady(cacheKey, thumb => setThumb(cacheKey, thumb)))
// Place has an HTTP image URL stored in DB — convert to base64 directly
if (place.image_url && !isLoading(cacheKey)) {
urlToBase64(place.image_url).then(thumb => {
if (thumb) setThumb(cacheKey, thumb)
})
continue
}
// No image URL — fetch from API
// Always fetch through API — returns fresh URL + converts to base64
if (!cached && !isLoading(cacheKey)) {
const photoId = place.google_place_id || place.osm_id
if (photoId || (place.lat && place.lng)) {
@@ -449,7 +440,7 @@ export const MapView = memo(function MapView({
const markers = useMemo(() => places.map((place) => {
const isSelected = place.id === selectedPlaceId
const pck = place.google_place_id || place.osm_id || `${place.lat},${place.lng}`
const resolvedPhoto = place.image_url || (pck && photoUrls[pck]) || null
const resolvedPhoto = (pck && photoUrls[pck]) || (place.image_url?.startsWith('data:') ? place.image_url : null) || null
const orderNumbers = dayOrderMap[place.id] ?? null
const icon = createPlaceIcon({ ...place, image_url: resolvedPhoto }, orderNumbers, isSelected)