Record that downloads fill the Cache and ship the built app.
A failed open can repair the shell, and the installed PWA matches Ziele, Einstellungen, and the view download. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# 01: Open the Karte
|
||||
|
||||
**What to build:** A German app opens north-up at 1:25,000 on the middle of the Übersicht. The person can pan and pinch-zoom. Zoom stops at 36 km by 36 km and at one sheet pixel. A place the Übersicht knows is blank until its Kachel is on the device.
|
||||
|
||||
**Blocked by:** None (can start immediately).
|
||||
|
||||
**Status:** done
|
||||
|
||||
- [x] Opening the app shows the Karte in German, north-up, centered on the middle of the Übersicht at 1:25,000.
|
||||
- [x] The person can pan the Karte by touch.
|
||||
- [x] Pinch-zoom stops at the configured ground span, 36 km by 36 km unless that shipped value is changed, and the same span applies on phone and tablet.
|
||||
- [x] Pinch-zoom stops at one sheet pixel, 1.25 m on the ground.
|
||||
- [x] The person using the phone cannot edit the 36 km span.
|
||||
- [x] A place the Übersicht knows, whose Kachel is not in the Cache, is blank.
|
||||
|
||||
## Comments
|
||||
|
||||
The Karte opens north-up at 1:25,000 through the session. Pinch limits are the shipped 36 km span and 1.25 m per pixel. A known Kachel missing from the Cache stays blank.
|
||||
@@ -0,0 +1,18 @@
|
||||
# 02: Draw a Kachel from the Cache
|
||||
|
||||
**What to build:** One Blatt is prepared into Kacheln at every scale from the furthest view down to the native sheet pixel. A Kachel already in the Cache is drawn. A Kachel the Übersicht knows that is not in the Cache stays blank. The same preparation is the one that will later cover every Blatt. The phone never reads the original sheets.
|
||||
|
||||
**Blocked by:** 01: Open the Karte
|
||||
|
||||
**Status:** done
|
||||
|
||||
- [x] Preparing one Blatt writes its Kacheln at every scale from the 36 km view down to 1.25 m per pixel, and records them in the Übersicht.
|
||||
- [x] The same preparation accepts the rest of the Blätter on hand.
|
||||
- [x] A Kachel in the Cache is drawn on the Karte.
|
||||
- [x] A Kachel the Übersicht knows that is not in the Cache stays blank.
|
||||
- [x] With no Standort and with Kacheln already in the Cache, opening centers on the middle of those Kacheln at 1:25,000.
|
||||
- [x] The phone draws only Kacheln from the Cache and the Übersicht. It does not read the original Blätter.
|
||||
|
||||
## Comments
|
||||
|
||||
`prepare/prepare_kacheln.py` checks every Blatt and writes the Übersicht. One Blatt is cut into Kacheln. The session draws a cached Kachel and opens on the middle of the Cache when no Standort is known.
|
||||
@@ -0,0 +1,21 @@
|
||||
# 03: Fetch a missing Kachel while online
|
||||
|
||||
**What to build:** A Kachel the Übersicht knows, that is not in the Cache, is blank and then downloads while the app is open and the device is online. It stays in the Cache even if the view moves away before the download ends. Offline, it stays blank and the app says it is not on the device. A place the Übersicht does not know stays blank and is never downloaded. Leaving the app pauses the fetch. Opening the app again while online continues a fetch the current view still needs.
|
||||
|
||||
**Blocked by:** 02: Draw a Kachel from the Cache
|
||||
|
||||
**Status:** done
|
||||
|
||||
- [x] While the app is open and online, a known Kachel missing from the Cache is shown blank, then drawn once the download finishes.
|
||||
- [x] That Kachel remains in the Cache if the person pans away before the download finishes, and is drawn when the view returns to it.
|
||||
- [x] While offline, a known Kachel missing from the Cache stays blank and the app says, in German, that it is not on the device.
|
||||
- [x] When the app is later open and online and the view needs that Kachel, the download starts.
|
||||
- [x] A place the Übersicht does not know stays blank and is never downloaded.
|
||||
- [x] Only the Kacheln of the current view at the current scale are fetched this way.
|
||||
- [x] Leaving the app pauses an in-progress fetch.
|
||||
- [x] Opening the app again while online continues a fetch the current view still needs.
|
||||
- [x] A finished Kachel is still in the Cache after the app has been left and opened again.
|
||||
|
||||
## Comments
|
||||
|
||||
On-demand fetch runs only while the app is open and online, for the current view at the current scale. A finished Kachel stays in the Cache across leaving the app. Offline, the notice is "Nicht auf dem Gerät."
|
||||
@@ -0,0 +1,23 @@
|
||||
# 04: Name a Ziel
|
||||
|
||||
**What to build:** The person types one Koordinate as Gitter, Rechtswert, and Hochwert. The Gitter starts as `32U MA`. A valid Ziel is shown in red and the view centers on it at 1:25,000, even while its Kacheln are blank. A bad Koordinate, or one that no Blatt covers, is explained in German and leaves the previous Ziel and the view unchanged. A second Koordinate replaces the first. The Ziel is gone after the page is left.
|
||||
|
||||
**Blocked by:** 01: Open the Karte
|
||||
|
||||
**Status:** done
|
||||
|
||||
- [x] The entry is three fields labelled Gitter, Rechtswert, and Hochwert, and Gitter starts as `32U MA`.
|
||||
- [x] `32u ma` and `32UMA` are accepted as the same Gitter as `32U MA`.
|
||||
- [x] Rechtswert and Hochwert must be exactly five digits. Any other length is rejected with a German explanation.
|
||||
- [x] An impossible Gitter is rejected with a German explanation.
|
||||
- [x] A rejected Koordinate leaves the previous Ziel and the view unchanged.
|
||||
- [x] A Koordinate that no Blatt covers, including a hole between Blätter, is rejected and leaves the previous Ziel and the view unchanged.
|
||||
- [x] A valid Ziel is drawn in red and the view centers on it at 1:25,000, even when its Kacheln are still blank.
|
||||
- [x] The typed Gitter, Rechtswert, and Hochwert stay visible after a successful entry.
|
||||
- [x] Entering another Koordinate replaces the Ziel. There is only one Ziel.
|
||||
- [x] The Koordinate is decoded on the device, with no network required.
|
||||
- [x] Leaving or reloading the page drops the Ziel. It is not stored.
|
||||
|
||||
## Comments
|
||||
|
||||
The screen offers Gitter, Rechtswert, and Hochwert, starting at `32U MA`. A valid Ziel is red and centers the view at 1:25,000. A rejected Koordinate leaves the previous Ziel. A new session does not keep the Ziel.
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
# 05: Show the Standort and the distance
|
||||
|
||||
**What to build:** The Standort is the blue mark while the app is open. Opening centers on it when it is already known. A late first fix centers the view once, unless the person has already panned or entered a Ziel. After that the mark moves and the view stays put. The person can center on the Standort or the Ziel on purpose, at 1:25,000. When both exist, the straight-line distance is shown, in metres below 1000 m and in kilometres from 1000 m, and it updates as the Standort moves.
|
||||
|
||||
**Blocked by:** 01: Open the Karte. 04: Name a Ziel
|
||||
|
||||
**Status:** done
|
||||
|
||||
- [x] While the app is open, the device position is shown as a blue Standort.
|
||||
- [x] When a Standort is already known at opening, the view centers on it at 1:25,000.
|
||||
- [x] When the first Standort arrives after opening, and the person has not panned and has not entered a Ziel, the view centers on it once.
|
||||
- [x] When the first Standort arrives after the person has panned or entered a Ziel, only the blue mark moves.
|
||||
- [x] A denied Standort leaves the view on its opening center.
|
||||
- [x] Later Standort updates move the blue mark and do not move the view.
|
||||
- [x] No Standort is shown or updated while the app is closed.
|
||||
- [x] The person can center on the Standort, and on the Ziel, at 1:25,000.
|
||||
- [x] When both Ziel and Standort exist, the straight-line distance is shown: metres below 1000 m, kilometres from 1000 m.
|
||||
- [x] The distance updates as the Standort moves, including while the Kacheln under the Ziel are blank.
|
||||
- [x] The distance is hidden when either the Ziel or the Standort is missing.
|
||||
|
||||
## Comments
|
||||
|
||||
The Standort is the device position while the app is open, drawn blue. The first fix centers the view once unless the person has panned or named a Ziel. Distance is planar in EPSG:25832, in metres below 1000 m and kilometres from 1000 m.
|
||||
@@ -0,0 +1,22 @@
|
||||
# 06: Download Hessen
|
||||
|
||||
**What to build:** The person starts Hessen. It is marked heruntergeladen immediately, progress is shown, the current view is fetched first, then every other Kachel at every scale. Finished Kacheln stay. Closing the app pauses the rest. Opening it while online continues. After Hessen has arrived, panning and zooming work offline. While Hessen is not heruntergeladen, looking around still fetches only the current view at the current scale.
|
||||
|
||||
**Blocked by:** 03: Fetch a missing Kachel while online
|
||||
|
||||
**Status:** done
|
||||
|
||||
- [x] The screen offers Hessen as the one Gebiet to download. Hessen is every Kachel in the Übersicht, at every scale from the 36 km view down to the native sheet pixel.
|
||||
- [x] Starting Hessen marks it heruntergeladen before the last Kachel has arrived, and shows how much has arrived.
|
||||
- [x] Kacheln needed by the current view are fetched before the rest of Hessen.
|
||||
- [x] Kacheln already in the Cache can be used while the rest of Hessen is still downloading.
|
||||
- [x] Finished Kacheln stay on the device across a dropped connection and across leaving the app.
|
||||
- [x] Leaving the app pauses the remaining Hessen download. Opening the app while online continues it.
|
||||
- [x] Nothing is fetched while the app is closed or the device is offline.
|
||||
- [x] After Hessen has fully arrived, the person can pan and zoom offline across those Kacheln.
|
||||
- [x] While Hessen is not heruntergeladen, looking around fetches only the Kacheln of the current view at the current scale.
|
||||
- [x] The installed app keeps a finished download available offline, including decoding a Koordinate.
|
||||
|
||||
## Comments
|
||||
|
||||
Starting Hessen marks it heruntergeladen immediately and fetches the current view before the rest. Closing the app or losing the network pauses the queue. Koordinate decoding stays on the device.
|
||||
@@ -0,0 +1,20 @@
|
||||
# 07: Remove Hessen or the whole Cache
|
||||
|
||||
**What to build:** Removing Hessen, or deleting the whole Cache, asks first and names what will be removed. Removing Hessen stops the rest of its download and drops its Kacheln, except a Kachel that also lies in another Gebiet still marked heruntergeladen. Deleting the whole Cache clears every Kachel and every heruntergeladen mark, and does not start Hessen again. Hessen can be started again afterwards.
|
||||
|
||||
**Blocked by:** 06: Download Hessen
|
||||
|
||||
**Status:** done
|
||||
|
||||
- [x] Before Hessen is removed, the app asks in German and names Hessen. Declining leaves the Cache and the heruntergeladen mark unchanged.
|
||||
- [x] Removing Hessen stops the rest of its download.
|
||||
- [x] Removing Hessen removes its Kacheln from the Cache.
|
||||
- [x] A Kachel that also lies in another Gebiet still marked heruntergeladen stays. A Kachel that arrived only because the person looked at it has no protection of its own.
|
||||
- [x] Before the whole Cache is deleted, the app asks in German and names the whole Cache. Declining leaves everything unchanged.
|
||||
- [x] Deleting the whole Cache removes every Kachel and clears every heruntergeladen mark.
|
||||
- [x] After that delete, while online, the current view may fill again by on-demand fetch. Hessen does not start itself.
|
||||
- [x] Hessen can be started again after it has been removed.
|
||||
|
||||
## Comments
|
||||
|
||||
The screen asks in German and names Hessen, or names the ganzen Cache, before it tells the session to delete. Removing Hessen keeps a Kachel that still lies in another heruntergeladenes Gebiet. Deleting the Cache does not start Hessen again.
|
||||
Reference in New Issue
Block a user