From 2142941aacdd4f8c293f8bde3ed6922d0a552945 Mon Sep 17 00:00:00 2001
From: Remy Moll <mollator2@gmail.com>
Date: Mon, 8 Feb 2021 18:00:18 +0100
Subject: [PATCH] Fixed dashboard weather, better status.

---
 bot2/commands/help.py   | 20 +++++++++++++
 bot2/commands/status.py | 18 +++++++++++-
 dashboard/main.py       | 65 ++++++++++++++++++++++++-----------------
 3 files changed, 76 insertions(+), 27 deletions(-)

diff --git a/bot2/commands/help.py b/bot2/commands/help.py
index ece0299..4597cec 100644
--- a/bot2/commands/help.py
+++ b/bot2/commands/help.py
@@ -20,8 +20,12 @@ class Help(BotFunc):
                     CallbackQueryHandler(self.choose_specific, pattern="^specific$"),
                     CallbackQueryHandler(self.print_one, pattern='func-'),
                 ],
+                # ConversationHandler.TIMEOUT : [
+                #     CallbackQueryHandler(self.timeout)
+                # ]
             },
             fallbacks=[CommandHandler('help', self.entry_point)],
+            # conversation_timeout=5,
         )
         return conv_handler
 
@@ -83,3 +87,19 @@ class Help(BotFunc):
             parse_mode = ParseMode.MARKDOWN_V2
         )
         return ConversationHandler.END
+
+
+
+    def timeout(self, update: Update, context: CallbackContext) -> None:
+        """For dying conversation. Currently unused."""
+
+        query = update.callback_query
+        name = query.data.replace("func-", "")
+        query.answer()
+
+        message = name + ": `" + self.available_commands[name] + "`"
+        query.edit_message_text(
+            text= "EHHHHH",
+            parse_mode = ParseMode.MARKDOWN_V2
+        )
+        return ConversationHandler.END
\ No newline at end of file
diff --git a/bot2/commands/status.py b/bot2/commands/status.py
index eabb83f..cadaabe 100644
--- a/bot2/commands/status.py
+++ b/bot2/commands/status.py
@@ -5,6 +5,7 @@ import requests
 import socket
 import numpy as np
 import os
+import json
 
 
 FIRST = 1
@@ -59,6 +60,7 @@ class Status(BotFunc):
         message += "Reboots: `" + str(self.persistence["global"]["reboots"]) + "`\n"
         message += "IP (public): `" + ip + "`\n"
         message += "IP (private): `" + str(local_ips) + "`\n"
+        message += "URL: `" + str(self.get_ngrok_url())  "`\n"
         
         tot_r = np.array(self.persistence["bot"]["receive_activity"]["count"]).sum()
         message += "Total messages read: `" + str(tot_r) + "`\n"
@@ -80,4 +82,18 @@ class Status(BotFunc):
         with open("persistence/complete.log") as l:
             query.message.reply_document(l)
 
-        return ConversationHandler.END
\ No newline at end of file
+        return ConversationHandler.END
+
+
+    def get_ngrok_url(self):
+        try:
+            url = "http://localhost:4040/api/tunnels/"
+            res = requests.get(url)
+            res_unicode = res.content.decode("utf-8")
+            res_json = json.loads(res_unicode)
+            for i in res_json["tunnels"]:
+                if i['name'] == 'command_line':
+                    return i['public_url']
+                    break
+        except:
+            return "Not available"
\ No newline at end of file
diff --git a/dashboard/main.py b/dashboard/main.py
index bac4deb..c227b43 100644
--- a/dashboard/main.py
+++ b/dashboard/main.py
@@ -146,44 +146,56 @@ class DashBoard():
         return card
 
     def card_weather(self):
-        try:
-            body = [html.H4("Wetter", className="card-title")]
+        def weather_item(name, overview, temps):
+            if len(temps) == 2:
+                temp = "🌑(❄): " + str(temps[0]) + "Β°  ➑  🌑(πŸ”₯): " + str(temps[1]) + "Β°"
+            else:
+                temp = "🌑: " + str(temps[0]) + "°"
+            temp_line = html.P(temp, className="mb-1")
 
+            it = html.A([
+                html.Div([
+                    html.H5(name, className="mb-1"),
+                    html.Span(categories[overview], className="badge badge-primary badge-pill")
+                    ],
+                    className="d-flex w-100 justify-content-between"),
+                temp_line,
+                ],
+                href="#", className="list-group-item bg-dark list-group-item-action text-light"
+            )
+
+            return it
+
+        days = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]
+        categories = {"Clouds": "☁", "Rain": "🌧", "Thunderstorm": "🌩", "Drizzle": ":droplet:", "Snow": "❄", "Clear": "β˜€", "Mist": "🌫", "Smoke": "Smoke", "Haze": "Haze", "Dust": "Dust", "Fog": "Fog", "Sand": "Sand", "Dust": "Dust", "Ash": "Ash", "Squall": "Squall", "Tornado": "Tornado",}
+        today = datetime.datetime.today().weekday()
+
+        body = []
+        
+        try:
             content = self.bot.api_weather.show_weather([47.3769, 8.5417]) # still zΓΌrich
             
             wt = content.pop(0)
-            body.append(html.Span(children=[
-                html.H6("Jetzt: " + wt["short"]),
-                html.P("🌑 " + str(wt["temps"][0]) + "°")
-            ]))
-
-            days = ["Montag", "Dienstag", "Miitwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]
-            categories = {"Clouds": "☁", "Rain": "🌧", "Thunderstorm": "🌩", "Drizzle": ":droplet:", "Snow": "❄", "Clear": "β˜€", "Mist": "🌫", "Smoke": "Smoke", "Haze": "Haze", "Dust": "Dust", "Fog": "Fog", "Sand": "Sand", "Dust": "Dust", "Ash": "Ash", "Squall": "Squall", "Tornado": "Tornado",}
-
-            today = datetime.datetime.today().weekday()
+            body.append(weather_item("Jetzt", wt["short"], wt["temps"]))
 
             for i, day in enumerate(content):
                 tmp = []
                 if i == 0:
-                    tmp.append(html.H6("Heute: "+ categories[day["short"]]))
+                    day_name = "Heute"
                 else:
-                    tmp.append(html.H6(days[(today + i + 1) % 7] + ": " + categories[day["short"]]))
-                tmp.append(html.P("🌑 ❄  " + str(day["temps"][0]) + "Β° , 🌑 πŸ”₯ " + str(day["temps"][1]) + "Β°"))
+                    day_name = days[(today + i) % 7]
 
-                body.append(html.Span(children=tmp))
+                body.append(weather_item(day_name, day["short"], day["temps"]))
+            body = dbc.ListGroup(body, flush=True, style={"color":"black"})
 
 
-            card = dbc.Card(
-                [dbc.CardBody(body)],
-                color="dark",
-                inverse=True,
-                )
         except:
-            card = card = dbc.Card([
-                dbc.CardBody([
-                    html.H4("Could not load WEATHER", className="card-title"),
-                    ])
-            ],
+            body.append(html.H6("Konnte nicht geladen werden"))
+
+        card = dbc.Card(
+            [dbc.CardBody([
+                html.H4("Wetter", className="card-title"),
+                body])],
             color="dark",
             inverse=True,
             )
@@ -241,4 +253,5 @@ class DashBoard():
             color="dark",
             inverse=True,
             )
-        return card
\ No newline at end of file
+        return card
+