From 35dbbe4ece4b60822d8b291f31e610f07cc26289 Mon Sep 17 00:00:00 2001
From: Remy Moll <me@moll.re>
Date: Sat, 21 Oct 2023 15:34:24 +0200
Subject: [PATCH] cleaner journal date entry

---
 bot/commands/journal.py | 36 +++++++++++++++++++++++-------------
 1 file changed, 23 insertions(+), 13 deletions(-)

diff --git a/bot/commands/journal.py b/bot/commands/journal.py
index 482988e..86df783 100644
--- a/bot/commands/journal.py
+++ b/bot/commands/journal.py
@@ -20,7 +20,7 @@ class JournalHandler(BaseHandler):
             states={
                 ENTRY_OPTIONS: [
                     CallbackQueryHandler(self.date_button, pattern=r"^\d{8}$"), # a serialized date
-                    CallbackQueryHandler(self.date_custom, pattern=r"^\d{1,3}$"), # a ~ small delta
+                    CallbackQueryHandler(self.date_custom, pattern=r"^\d{1,3}$"), # a ~ small delta, symbolizing a new range to show
                     CallbackQueryHandler(self.option_delete, pattern="delete"),
                     MessageHandler(filters.ALL, self.date_entry),
                     ],
@@ -40,7 +40,8 @@ class JournalHandler(BaseHandler):
             await update.message.reply_text("You are not authorized to use this bot")
             return ConversationHandler.END
 
-        dates = [(datetime.datetime.now() - datetime.timedelta(days = i)).date() for i in range(BUTTON_COUNT)][::-1]
+        dates = [(datetime.datetime.now() - datetime.timedelta(days = i)).date() for i in range(BUTTON_COUNT + 2)][::-1]
+        # since there are two buttons additional buttons, we need to have two more days
         names = [d.strftime("%d.%m.") for d in dates]
         callbacks = [d.strftime("%d%m%Y") for d in dates]
         names[-1] = "Today"
@@ -48,9 +49,16 @@ class JournalHandler(BaseHandler):
 
         options = [
             [
-                InlineKeyboardButton("<<", callback_data=BUTTON_COUNT)
-                ] + [
-                InlineKeyboardButton(n, callback_data=c) for n,c in zip(names, callbacks)
+                InlineKeyboardButton(names[-1], callback_data=callbacks[-1])
+            ],
+            [
+                InlineKeyboardButton(names[-2], callback_data=callbacks[-2])
+            ],
+            [
+                InlineKeyboardButton(n, callback_data=c) for n,c in zip(names[:-2], callbacks[:-2])
+            ],
+            [
+                InlineKeyboardButton("<<", callback_data=BUTTON_COUNT + 2)
             ],
             [
                 InlineKeyboardButton("Delete", callback_data="delete")
@@ -87,24 +95,26 @@ class JournalHandler(BaseHandler):
         await query.answer()
         delta = int(query.data)
 
-        dates = [(datetime.datetime.now() - datetime.timedelta(days = i + delta)).date() for i in range(BUTTON_COUNT - 1)][::-1]
+        dates = [(datetime.datetime.now() - datetime.timedelta(days = i + delta)).date() for i in range(BUTTON_COUNT)][::-1]
         names = [d.strftime("%d.%m.") for d in dates]
         callbacks = [d.strftime("%d%m%Y") for d in dates]
 
         options = [
             [
-                InlineKeyboardButton("<<", callback_data=delta + (BUTTON_COUNT - 1))
-                ] + [
+                InlineKeyboardButton(">>", callback_data=delta - BUTTON_COUNT)
+            ],
+            [
                 InlineKeyboardButton(n, callback_data=c) for n,c in zip(names, callbacks)
-                ] + [
-                InlineKeyboardButton(">>", callback_data=delta - (BUTTON_COUNT - 1))
+            ],
+            [
+                InlineKeyboardButton("<<", callback_data=delta + BUTTON_COUNT)
             ],
             [
                 InlineKeyboardButton("Delete", callback_data="delete")
             ]
         ]
         keyboard = InlineKeyboardMarkup(options)
-        await query.edit_message_text("Please choose a date \(or type it in the format _DDMMYYYY_\)", parse_mode=ParseMode.MARKDOWN_V2)
+        await query.edit_message_text("Please choose a date \(or type it in the format _DDMMYYYY_\)", parse_mode=ParseMode.MARKDOWN_V2, reply_markup=keyboard)
 
         return ENTRY_OPTIONS
 
@@ -161,7 +171,7 @@ class JournalHandler(BaseHandler):
                 self.current_model.save_media(file_bytes, file_path)
 
                 self.current_model.text = update.message.caption
-            
+
             self.current_model.save()
 
         await update.message.reply_text(f"Saved entry ✅")
@@ -180,4 +190,4 @@ class JournalHandler(BaseHandler):
         with self.models.db:
             self.current_model.delete_instance()
         context.chat_data["delete"] = False
-        await update.message.reply_text(text="Entry deleted ✅")
\ No newline at end of file
+        await update.message.reply_text(text="Entry deleted ✅")