Subject: [PATCH] #23841: Bing: Automatically reload all tiles with `Error: Attribution is not loaded yet` after su...
---
Index: src/org/openstreetmap/gui/jmapviewer/interfaces/TileCache.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileCache.java b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileCache.java
--- a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileCache.java	(revision 36292)
+++ b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileCache.java	(date 1723052578594)
@@ -48,6 +48,14 @@
      */
     void clear();
 
+    /**
+     * Removes error tiles from memory.
+     * This is implementation specific; the default calls {@link #clear()}.
+     */
+    default void clearErrorTiles() {
+        this.clear();
+    }
+
     /**
      * Size of the cache.
      * @return maximum number of tiles in cache
Index: src/org/openstreetmap/gui/jmapviewer/MemoryTileCache.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/gui/jmapviewer/MemoryTileCache.java b/src/org/openstreetmap/gui/jmapviewer/MemoryTileCache.java
--- a/src/org/openstreetmap/gui/jmapviewer/MemoryTileCache.java	(revision 36292)
+++ b/src/org/openstreetmap/gui/jmapviewer/MemoryTileCache.java	(date 1723052521229)
@@ -1,10 +1,12 @@
 // License: GPL. For details, see Readme.txt file.
 package org.openstreetmap.gui.jmapviewer;
 
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
@@ -103,6 +105,13 @@
         lruTiles.clear();
     }
 
+    @Override
+    public synchronized void clearErrorTiles() {
+        Collection<CacheEntry> toRemove = hash.values().stream().filter(cacheEntry -> cacheEntry.tile.hasError()).collect(Collectors.toList());
+        hash.values().removeAll(toRemove);
+        toRemove.forEach(lruTiles::removeEntry);
+    }
+
     @Override
     public synchronized int getTileCount() {
         return hash.size();
