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:
parent
a91aa98817
commit
8502fb38f0
1 changed files with 2315 additions and 22 deletions
|
|
@ -1287,5 +1287,150 @@
|
|||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"weatherTitle": "Weather",
|
||||
"@weatherTitle": {
|
||||
"description": "A task's weather it needs, in its details and the sheet choosing it (ADR 0033, D40)."
|
||||
},
|
||||
"weatherNeedDry": "Dry",
|
||||
"@weatherNeedDry": {
|
||||
"description": "A task needs no rain or snow over its hours (D40)."
|
||||
},
|
||||
"weatherNeedSunny": "Sunny",
|
||||
"@weatherNeedSunny": {
|
||||
"description": "A task needs a clear or partly cloudy sky (D40)."
|
||||
},
|
||||
"weatherNeedCalm": "Calm",
|
||||
"@weatherNeedCalm": {
|
||||
"description": "A task needs little wind (D40)."
|
||||
},
|
||||
"weatherTemperature": "Temperature",
|
||||
"@weatherTemperature": {
|
||||
"description": "The temperatures a task needs (D40)."
|
||||
},
|
||||
"weatherAnyTemperature": "Any",
|
||||
"@weatherAnyTemperature": {
|
||||
"description": "No temperature needed (D40)."
|
||||
},
|
||||
"weatherNotFreezing": "Not freezing",
|
||||
"@weatherNotFreezing": {
|
||||
"description": "From 1 °C on (D40)."
|
||||
},
|
||||
"weatherWarm": "Warm",
|
||||
"@weatherWarm": {
|
||||
"description": "From 18 °C on (D40)."
|
||||
},
|
||||
"weatherOwnRange": "From … to …",
|
||||
"@weatherOwnRange": {
|
||||
"description": "Temperatures typed (D40)."
|
||||
},
|
||||
"weatherFromLabel": "From",
|
||||
"@weatherFromLabel": {
|
||||
"description": "The lowest temperature typed, in °C (D40)."
|
||||
},
|
||||
"weatherToLabel": "To",
|
||||
"@weatherToLabel": {
|
||||
"description": "The highest temperature typed, in °C (D40)."
|
||||
},
|
||||
"weatherFrom": "from {degrees} °C",
|
||||
"@weatherFrom": {
|
||||
"description": "A task needs at least this temperature (D40).",
|
||||
"placeholders": {
|
||||
"degrees": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"weatherUpTo": "up to {degrees} °C",
|
||||
"@weatherUpTo": {
|
||||
"description": "A task needs at most this temperature (D40).",
|
||||
"placeholders": {
|
||||
"degrees": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"weatherBetween": "{low}–{high} °C",
|
||||
"@weatherBetween": {
|
||||
"description": "A range of temperatures (D40).",
|
||||
"placeholders": {
|
||||
"low": {
|
||||
"type": "String"
|
||||
},
|
||||
"high": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"weatherDone": "Done",
|
||||
"@weatherDone": {
|
||||
"description": "Closes the sheet of a task's weather, keeping what was chosen (D40)."
|
||||
},
|
||||
"weatherFits": "The forecast fits",
|
||||
"@weatherFits": {
|
||||
"description": "Under a task's weather where its day's forecast gives what it needs (D40)."
|
||||
},
|
||||
"weatherDoesNotFit": "The forecast doesn't fit: {missed}",
|
||||
"@weatherDoesNotFit": {
|
||||
"description": "Under a task's weather, and its row's mark, where its day's forecast doesn't give what it needs (D40).",
|
||||
"placeholders": {
|
||||
"missed": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"weatherMiss": "{need, select, dry{rain} sunny{clouds} temperature{temperature} calm{wind} other{weather}}",
|
||||
"@weatherMiss": {
|
||||
"description": "What of the weather a task needs its forecast misses (D40).",
|
||||
"placeholders": {
|
||||
"need": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"weatherConditions": "{conditions, select, clear{Clear} partlyCloudy{Partly cloudy} cloudy{Overcast} fog{Fog} drizzle{Drizzle} rain{Rain} freezingRain{Freezing rain} snow{Snow} rainShowers{Showers} snowShowers{Snow showers} thunderstorm{Thunderstorm} other{Weather}}",
|
||||
"@weatherConditions": {
|
||||
"description": "A day's sky by its forecast, from Open-Meteo's weather code (D40).",
|
||||
"placeholders": {
|
||||
"conditions": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"weatherFittingDays": "Days the weather fits",
|
||||
"@weatherFittingDays": {
|
||||
"description": "The date picker's days whose forecast gives what the task needs (D40)."
|
||||
},
|
||||
"weatherNoFittingDay": "No day of the forecast fits",
|
||||
"@weatherNoFittingDay": {
|
||||
"description": "The date picker, where no day of the forecast fits (D40)."
|
||||
},
|
||||
"weatherSettings": "Weather",
|
||||
"@weatherSettings": {
|
||||
"description": "Settings' group of the forecast (D40)."
|
||||
},
|
||||
"weatherPlace": "Place of the forecast",
|
||||
"@weatherPlace": {
|
||||
"description": "Settings: the place days' forecasts and tasks' weather are for (D40)."
|
||||
},
|
||||
"weatherPlaceNone": "None: each task's own place",
|
||||
"@weatherPlaceNone": {
|
||||
"description": "Settings, where no place is set (D40)."
|
||||
},
|
||||
"weatherPlaceHelp": "Days show this place's forecast, and tasks tied to the weather are judged by it. Your device's location is never used for it.",
|
||||
"@weatherPlaceHelp": {
|
||||
"description": "Settings, below the place of the forecast (D40)."
|
||||
},
|
||||
"weatherPlaceRemove": "Remove the place",
|
||||
"@weatherPlaceRemove": {
|
||||
"description": "Settings: takes the place of the forecast away (D40)."
|
||||
},
|
||||
"weatherOff": "This instance gives no forecasts.",
|
||||
"@weatherOff": {
|
||||
"description": "Settings, where the instance's operator switched the weather off (D40)."
|
||||
},
|
||||
"weatherBy": "Weather data by Open-Meteo.com",
|
||||
"@weatherBy": {
|
||||
"description": "The credit Open-Meteo's licence asks for next to its data (D40)."
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue