From 1893e7c20123606ee5ff2b2a966ca68dcab045fb Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 18 May 2024 17:54:25 +0200 Subject: [PATCH 1/3] Fix weather alerts --- modules/weather.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/modules/weather.py b/modules/weather.py index 24627f3..7bbdeef 100644 --- a/modules/weather.py +++ b/modules/weather.py @@ -361,30 +361,38 @@ class WeatherAlerts: def gen_alerts(self): alerts = [] + lastStartTime = 0 + lastEndTime = 0 for alert in WeatherAPI().get_alerts(): - if alert["severity"] == "Moderate": - icon = "weather/wi-small-craft-advisory.png" - elif alert["severity"] != "Moderate": - icon = "weather/wi-gale-warning.png" - else: - icon = None + icon = "weather/wi-gale-warning.png" + startTime = WeatherAPI().read_timestamp(alert["start"]) + endTime = WeatherAPI().read_timestamp(alert["end"]-1) + vendTime = WeatherAPI().read_timestamp(alert["end"]) - startTime = WeatherAPI().read_timestamp(alert["effective"]) - endTime = WeatherAPI().read_timestamp(alert["expires"]) # Show alert timing if under a day - if startTime.hour != endTime.hour: + if startTime.hour != vendTime.hour: subtitle = startTime.strftime(("%x " if startTime.day != datetime.now().day else "") + "%X") + " - " + endTime.strftime(("%x " if startTime.day != endTime.day else "") + "%X") elif startTime.day != datetime.now().day: subtitle = startTime.strftime("%x") else: subtitle = "" + if len(alerts) >= 1 and alerts[len(alerts)-1]["title"] == alert["event"]: + startTime = lastStartTime + if startTime.hour != vendTime.hour: + alerts[len(alerts)-1]["subtitle"] = startTime.strftime(("%x " if startTime.day != datetime.now().day else "") + "%X") + " - " + endTime.strftime(("%x " if startTime.day != endTime.day else "") + "%X") + elif startTime.day != datetime.now().day: + alerts[len(alerts)-1]["subtitle"] = startTime.strftime("%x") + continue + lastStartTime = startTime + lastEndTime = vendTime + alerts.append({ "icon": icon, - "title": alert["headline"], + "title": alert["event"], "subtitle": subtitle, - "description": alert["desc"], + "description": alert["description"], }) return alerts From 452a6097e3dd1549b49b332b95ec27d26e9533af Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 18 May 2024 18:54:58 +0200 Subject: [PATCH 2/3] weather: Improve next hour --- modules/weather.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/weather.py b/modules/weather.py index 7bbdeef..e4e0905 100644 --- a/modules/weather.py +++ b/modules/weather.py @@ -147,8 +147,10 @@ class WeatherJumboCurrentModule: dayweather = list(itertools.islice(WeatherAPI().get_hourly(), 2)) - if dayweather[0]["weather"][0]["description"] != dayweather[1]["weather"][0]["description"]: - display_longtext(draw, (width*self.middle_align, height/1.28), dayweather[1]["weather"][0]["description"] + " la prochaine heure.\n" + thisdayweather["summary"] + ".", fill="black", anchor="lm", font=fnt_Rig, maxwidth=(1-self.middle_align)*width) + if dayweather[0]["weather"][0]["description"] != curweather["weather"][0]["description"]: + description = dayweather[0]["weather"][0]["description"] + description = description[0].upper() + description[1:] + display_longtext(draw, (width*self.middle_align, height/1.28), description + " la prochaine heure.\n" + thisdayweather["summary"] + ".", fill="black", anchor="lm", font=fnt_Rig, maxwidth=(1-self.middle_align)*width) else: display_longtext(draw, (width*self.middle_align, height/1.28), thisdayweather["summary"] + ".", fill="black", anchor="lm", font=fnt_Rig, maxwidth=(1-self.middle_align)*width) From b985ea7a9258d7ac16213cdc0905308e107c5c34 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Fri, 7 Jun 2024 09:53:26 +0200 Subject: [PATCH 3/3] ratp: Handle more disruptions cases --- modules/ratp.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/modules/ratp.py b/modules/ratp.py index 3c75ac9..41a9835 100644 --- a/modules/ratp.py +++ b/modules/ratp.py @@ -194,8 +194,16 @@ class IDFMAPI: def get_line_weather(self, res, disruptions, mode, line): for l in res["lines"]: if l["id"] == "line:IDFM:" + IDFMAPI.lines[mode][line]: + disruptionIds = [] + disruptionTypes = {} for impactedObject in l["impactedObjects"]: for disruptionId in impactedObject["disruptionIds"]: + if disruptionId not in disruptionIds: + disruptionTypes[disruptionId] = impactedObject["type"] + disruptionIds.append(disruptionId) + + for disruptionId in disruptionIds: + impactType = disruptionTypes[disruptionId] status = "past" for ap in disruptions[disruptionId]["applicationPeriods"]: end = datetime.strptime(ap["end"], "%Y%m%dT%H%M%S") @@ -209,7 +217,12 @@ class IDFMAPI: status = "active" break + + if "cause" in disruptions and disruptions["cause"] == "INFORMATION": + continue + disruptions[disruptionId]["status"] = status + disruptions[disruptionId]["scope"] = impactType yield disruptions[disruptionId] return None @@ -217,12 +230,17 @@ class IDFMAPI: def get_line_icon(config, mode, line, size, fill="gray", state=""): if mode == "M" or mode == "metros": icon_mode = "metro" + mode = "metros" line = line.replace("B", "bis") elif mode == "T" or mode == "tramways": icon_mode = "tram" + mode = "tramways" line = line.replace("T", "").lower() elif mode == "R" or mode == "rers": icon_mode = "RER" + mode = "rers" + elif mode == "B": + mode = "buses" img_line = None if mode == "rers" and fill != "white": @@ -415,15 +433,20 @@ class RATPWeatherModule: state = "" fill = "darkgray" - if "NO_SERVICE" in states: + if disruption["scope"] == "line" and ("NO_SERVICE" in states or "BLOQUANTE" in states): fill = "black" state = "_trafic_grand" - elif "REDUCED_SERVICE" in states or "UNKNOWN_EFFECT" in states or "OTHER_EFFECT" in states: + elif "PERTURBEE" in states: + fill = "brown" + state = "_trafic_moyen" + elif "REDUCED_SERVICE" in states or "UNKNOWN_EFFECT" in states or "OTHER_EFFECT" in states or "NO_SERVICE" in states or "BLOQUANTE" in states: fill = "teal" state = "_trafic_moyen" elif "BLOQUANTE TRAVAUX" in states: fill = "teal" state = "_travaux_moyen" + elif "INFORMATION" in states: + state = "_travaux_petit" elif len(states) > 0: fill = "gray" state = "_trafic_petit" @@ -518,6 +541,8 @@ class RATPNextStopModule: }) align -= int(line_height * 0.33) + if align < 0: + align = 0 image = image.crop((0,0,width, min(align, height))) return image, alerts