From 8d8bb938a9d2248bd44ed53fdb0b87eff9ee2dd9 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Mon, 2 Oct 2023 21:50:10 +0200
Subject: [PATCH] Improve calories counter.

---
 calories.py | 45 ++++++++++++++++++++++++++++++---------------
 1 file changed, 30 insertions(+), 15 deletions(-)

diff --git a/calories.py b/calories.py
index 0f65aeb..54fb64e 100644
--- a/calories.py
+++ b/calories.py
@@ -24,6 +24,7 @@ td, th {
 <th>add from DB:</th>
 </tr>
 <tr>
+<input type="hidden" name="keep_visible" value="0">
 <td><select name="eatable_key">{eatables_selection}</select></td>
 <td><input class="unit_count" name="unit_count" type="number" step="1" min="0" value="0" /></td>
 <td></td>
@@ -55,7 +56,7 @@ var unit_count_inputs = document.getElementsByClassName("unit_count");
 for (let i = 0; i < unit_count_inputs.length; i++) {
     let input = unit_count_inputs[i];
     let button = document.createElement('button');
-    button.innerHTML = '+1'; 
+    button.innerHTML = '+1';
     button.onclick = function(event) {
         event.preventDefault();
         input.value = parseInt(input.value) + 1;
@@ -72,12 +73,13 @@ class LockFileDetected(Exception):
 
 class Eatable:
 
-    def __init__(self, title, cals, sugar_g, standard_g=100, comments=""):
+    def __init__(self, title, cals, sugar_g, standard_g=100, comments="", popularity=0):
         self.title = title
         self.cals = cals  # per 100g
         self.sugar_g = sugar_g  # per 100g
         self.standard_g = standard_g  # common unit weight
-        self.comments = comments 
+        self.comments = comments
+        self.popularity = popularity
 
     def to_dict(self):
         return {
@@ -85,19 +87,22 @@ class Eatable:
             "cals": self.cals,
             "sugar_g": self.sugar_g,
             "standard_g": self.standard_g,
-            "comments": self.comments
+            "comments": self.comments,
+            "popularity": self.popularity
         }
 
 class Consumption:
 
-    def __init__(self, eatable_key, unit_count=None):
-        self.eatable_key = eatable_key 
+    def __init__(self, eatable_key, unit_count=None, keep_visible=0):
+        self.eatable_key = eatable_key
         self.unit_count = unit_count
+        self.keep_visible = keep_visible
 
     def to_dict(self):
         return {
             "eatable_key": self.eatable_key,
             "unit_count": self.unit_count,
+            "keep_visible": self.keep_visible
         }
 
 class Day:
@@ -112,7 +117,7 @@ class Day:
             "sugar_g": self.sugar_g,
         }
 
-class Database: 
+class Database:
 
     def __init__(self, load_from_file=True):
         db_name = "calories_db"
@@ -168,12 +173,12 @@ class Database:
         self.eatables[id_] = eatable
 
     def add_consumption(self, consumption):
-        self.consumptions += [consumption] 
+        self.consumptions += [consumption]
 
     def add_day(self, date, day, archives_today=False):
         if archives_today:
             date = date + str(datetime.datetime.now())[10:]
-        self.days[date] = day 
+        self.days[date] = day
 
     def set_today_date(self, today_date):
         self.today_date = today_date
@@ -217,23 +222,23 @@ class MyServer(BaseHTTPRequestHandler):
                 if uuid not in to_delete:
                     e = Eatable(decode("title", i, False), decode("cals", i), decode("sugar_g", i), decode("standard_g", i), decode("comments", i, False))
                     db.add_eatable(uuid, e)
-                i += 1    
+                i += 1   
         if 'title' in postvars.keys() and len(postvars['title'][i]) > 0:
              e = Eatable(decode("title", i, False), decode("cals", i), decode("sugar_g", i), decode("standard_g", i), decode("comments", i, False))
              db.add_eatable(str(uuid4()), e)
         i = 0
         if 'eatable_key' in postvars.keys():
             for eatable_key in postvars['eatable_key']:
-                c = Consumption(decode("eatable_key", i, False), decode("unit_count", i))
-                i += 1 
-                if c.unit_count == 0:
+                c = Consumption(decode("eatable_key", i, False), decode("unit_count", i), decode("keep_visible", i))
+                i += 1
+                if c.unit_count == 0 and c.keep_visible == 0:
                     continue
                 db.add_consumption(c)
         i = 0
         if 'day_date' in postvars.keys():
             for date in postvars['day_date']:
                 db.add_day((date), Day(decode("day_cals", i), decode("day_sugar", i)))
-                i += 1 
+                i += 1
         if 'new_date' in postvars.keys():
             db.set_today_date(postvars["new_date"][0])
         if 'archive_day' in postvars.keys():
@@ -241,7 +246,16 @@ class MyServer(BaseHTTPRequestHandler):
             new_sugar = postvars["new_day_sugar"][0]
             db.add_day(db.today_date, Day(float(new_cals), float(new_sugar)), archives_today=True)
             db.set_today_date(str(datetime.datetime.now())[:10])
+            for c in db.consumptions:
+                if c.unit_count > 0:
+                    db.eatables[c.eatable_key].popularity += 1
             db.consumptions = []
+            default_slots = 7
+            for k, v in sorted(db.eatables.items(), key=lambda item: -item[1].popularity):
+                db.add_consumption(Consumption(k, 0))
+                default_slots -= 1
+                if (default_slots <= 0):
+                    break
         try:
             db.write()
             self.send_response(302)
@@ -273,6 +287,7 @@ class MyServer(BaseHTTPRequestHandler):
         for c in db.consumptions:
             r = db.calc_consumption(c)
             consumptions += "<tr />"\
+                    "<input type=\"hidden\" name=\"keep_visible\" value=\"1\">"\
                     "<td><select name=\"eatable_key\">%s</select></td>"\
                     "<td><input class=\"unit_count\" name=\"unit_count\" type=\"number\" min=\"0\" value=\"%d\" /></td>"\
                     "<td></td>"\
@@ -301,7 +316,7 @@ class MyServer(BaseHTTPRequestHandler):
 
 hostName = "localhost"
 serverPort = 8081
-if __name__ == "__main__":        
+if __name__ == "__main__":
     webServer = HTTPServer((hostName, serverPort), MyServer)
     print("Server started http://%s:%s" % (hostName, serverPort))
     try:
-- 
2.30.2