feat(todo): the weather: a forecast on days, tasks tied to it, the days that fit (ADR 0033, D40)

A task can need weather: dry, sunny, calm and a temperature range (not
freezing, warm, or from and to as typed), set from Weather in its
details (a chip beside Priority, then a row of its own once it needs
any) and kept in its sealed payload (`weather`, schema stays 1).
Where its day's forecast misses any of it, its row carries a mark and
its details say what is missing; nothing moves and its reminder stays.
Its date picker lists the coming days the forecast fits, at its time or
from 8:00 to 20:00 without one.

The forecast is for the place set in Settings' new Weather card, kept in
the sealed settings; else, for a task with a place, its first place. The
device's location is never read for it. `ForecastCubit` asks the
instance for each place (`InstanceWeather`, rounded to about a
kilometre) as it comes, as the app opens, hourly and on a pull, and
holds the answers in memory alone. With a place in Settings, each day's
heading in Today and Upcoming shows its sky and temperatures, the 3-day
grid its icon. Settings says where the instance gives no forecasts, and
credits Open-Meteo as its licence asks.

Whats-New: A task can need dry, sunny, calm or mild weather: it is marked when the forecast doesn't fit, and its date picker shows the days that do; days show the forecast for the place set in Settings.
Whats-New-De: Eine Aufgabe kann trockenes, sonniges, windstilles oder mildes Wetter brauchen: Sie wird markiert, wenn die Vorhersage nicht passt, und ihre Datumsauswahl zeigt die passenden Tage; die Tage zeigen die Vorhersage für den Ort aus den Einstellungen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-10 14:51:52 +01:00
commit 8502fb38f0
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -409,5 +409,33 @@
"projectCalendarAddress": "Kalenderadresse (iCal)",
"projectCalendarHelp": "Seine Termine stehen neben den Aufgaben dieses Projekts, nur zum Lesen. Jedes deiner Geräte ruft ihn selbst ab.",
"projectCalendarInvalid": "Eine Adresse, die mit https:// oder webcal:// beginnt",
"eventFromCalendar": "Aus dem Kalender von {project}"
"eventFromCalendar": "Aus dem Kalender von {project}",
"weatherTitle": "Wetter",
"weatherNeedDry": "Trocken",
"weatherNeedSunny": "Sonnig",
"weatherNeedCalm": "Windstill",
"weatherTemperature": "Temperatur",
"weatherAnyTemperature": "Egal",
"weatherNotFreezing": "Kein Frost",
"weatherWarm": "Warm",
"weatherOwnRange": "Von … bis …",
"weatherFromLabel": "Ab",
"weatherToLabel": "Bis",
"weatherFrom": "ab {degrees} °C",
"weatherUpTo": "bis {degrees} °C",
"weatherBetween": "{low}–{high} °C",
"weatherDone": "Fertig",
"weatherFits": "Die Vorhersage passt",
"weatherDoesNotFit": "Die Vorhersage passt nicht: {missed}",
"weatherMiss": "{need, select, dry{Regen} sunny{Wolken} temperature{Temperatur} calm{Wind} other{Wetter}}",
"weatherConditions": "{conditions, select, clear{Klar} partlyCloudy{Teils bewölkt} cloudy{Bedeckt} fog{Nebel} drizzle{Nieselregen} rain{Regen} freezingRain{Gefrierender Regen} snow{Schnee} rainShowers{Schauer} snowShowers{Schneeschauer} thunderstorm{Gewitter} other{Wetter}}",
"weatherFittingDays": "Tage mit passendem Wetter",
"weatherNoFittingDay": "Kein Tag der Vorhersage passt",
"weatherSettings": "Wetter",
"weatherPlace": "Ort der Vorhersage",
"weatherPlaceNone": "Keiner: der eigene Ort jeder Aufgabe",
"weatherPlaceHelp": "Die Tage zeigen die Vorhersage für diesen Ort, und Aufgaben, die vom Wetter abhängen, richten sich nach ihr. Der Standort deines Geräts wird dafür nie verwendet.",
"weatherPlaceRemove": "Ort entfernen",
"weatherOff": "Diese Instanz liefert keine Vorhersagen.",
"weatherBy": "Wetterdaten von Open-Meteo.com"
}