From 365e39a20ad6e722cb5bef5e07f7f2ed71ba0848 Mon Sep 17 00:00:00 2001 From: jeffser Date: Wed, 29 May 2024 15:58:09 -0600 Subject: [PATCH] New Icons and fixed delete message button --- src/alpaca.gresource.xml | 3 +++ src/icons/controls-big-symbolic.svg | 2 ++ src/icons/globe-symbolic.svg | 2 ++ src/icons/library-symbolic.svg | 2 ++ src/window.py | 39 ++++++++++++++++------------- src/window.ui | 4 +-- 6 files changed, 32 insertions(+), 20 deletions(-) create mode 100644 src/icons/controls-big-symbolic.svg create mode 100644 src/icons/globe-symbolic.svg create mode 100644 src/icons/library-symbolic.svg diff --git a/src/alpaca.gresource.xml b/src/alpaca.gresource.xml index 071b811..3f30c15 100644 --- a/src/alpaca.gresource.xml +++ b/src/alpaca.gresource.xml @@ -3,7 +3,10 @@ style.css style-dark.css + icons/library-symbolic.svg icons/paper-plane-symbolic.svg + icons/globe-symbolic.svg + icons/controls-big-symbolic.svg window.ui gtk/help-overlay.ui diff --git a/src/icons/controls-big-symbolic.svg b/src/icons/controls-big-symbolic.svg new file mode 100644 index 0000000..7965431 --- /dev/null +++ b/src/icons/controls-big-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/src/icons/globe-symbolic.svg b/src/icons/globe-symbolic.svg new file mode 100644 index 0000000..812ec51 --- /dev/null +++ b/src/icons/globe-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/src/icons/library-symbolic.svg b/src/icons/library-symbolic.svg new file mode 100644 index 0000000..f9f7515 --- /dev/null +++ b/src/icons/library-symbolic.svg @@ -0,0 +1,2 @@ + + diff --git a/src/window.py b/src/window.py index f6cd054..d1fb19f 100644 --- a/src/window.py +++ b/src/window.py @@ -50,7 +50,6 @@ class AlpacaWindow(Adw.ApplicationWindow): model_tweaks = {"temperature": 0.7, "seed": 0, "keep_alive": 5} local_models = [] pulling_models = {} - current_chat_elements = [] #Used for deleting chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": "New Chat"} attached_image = {"path": None, "base64": None} @@ -284,11 +283,11 @@ class AlpacaWindow(Adw.ApplicationWindow): self.get_application().send_notification(None, notification) def delete_message(self, message_element): - message_index = self.current_chat_elements.index(message_element) - del self.chats["chats"][self.chats["selected_chat"]]["messages"][message_index] - self.chat_container.remove(message_element) - del self.current_chat_elements[message_index] - self.save_history() + message_index = int(message_element.get_name()) + if message_index < len(self.chats["chats"][self.chats["selected_chat"]]["messages"]): + self.chats["chats"][self.chats["selected_chat"]]["messages"][message_index] = None + self.chat_container.remove(message_element) + self.save_history() def show_message(self, msg:str, bot:bool, footer:str=None, image_base64:str=None): message_text = Gtk.TextView( @@ -342,12 +341,12 @@ class AlpacaWindow(Adw.ApplicationWindow): message_box.append(image) message_box.append(message_text) - self.current_chat_elements.append(Gtk.Overlay(css_classes=["message"])) - self.current_chat_elements[-1].set_child(message_box) + overlay = Gtk.Overlay(css_classes=["message"], name=str(len(self.chats["chats"][self.chats["selected_chat"]]["messages"])-1)) + overlay.set_child(message_box) - delete_button.connect("clicked", lambda button, element=self.current_chat_elements[-1]: self.delete_message(element)) - self.current_chat_elements[-1].add_overlay(delete_button) - self.chat_container.append(self.current_chat_elements[-1]) + delete_button.connect("clicked", lambda button, element=overlay: self.delete_message(element)) + overlay.add_overlay(delete_button) + self.chat_container.append(overlay) if bot: self.bot_message = message_buffer @@ -630,7 +629,7 @@ class AlpacaWindow(Adw.ApplicationWindow): subtitle = "Image recognition" if model_info["image"] else None ) link_button = Gtk.Button( - icon_name = "web-browser-symbolic", + icon_name = "globe-symbolic", vexpand = False, valign = 3, css_classes = ["success"] @@ -654,12 +653,13 @@ class AlpacaWindow(Adw.ApplicationWindow): def load_history_into_chat(self): for widget in list(self.chat_container): self.chat_container.remove(widget) for message in self.chats['chats'][self.chats["selected_chat"]]['messages']: - if message['role'] == 'user': - self.show_message(message['content'], False, f"\n\n{message['date']}", message['images'][0] if 'images' in message and len(message['images']) > 0 else None) - else: - self.show_message(message['content'], True, f"\n\n{message['model']}\t|\t{message['date']}") - self.add_code_blocks() - self.bot_message = None + if message: + if message['role'] == 'user': + self.show_message(message['content'], False, f"\n\n{message['date']}", message['images'][0] if 'images' in message and len(message['images']) > 0 else None) + else: + self.show_message(message['content'], True, f"\n\n{message['model']}\t|\t{message['date']}") + self.add_code_blocks() + self.bot_message = None def load_history(self): if os.path.exists(os.path.join(self.config_dir, "chats.json")): @@ -668,6 +668,9 @@ class AlpacaWindow(Adw.ApplicationWindow): self.chats = json.load(f) if "selected_chat" not in self.chats or self.chats["selected_chat"] not in self.chats["chats"]: self.chats["selected_chat"] = list(self.chats["chats"].keys())[0] if len(list(self.chats["chats"].keys())) == 0: self.chats["chats"][_("New Chat")] = {"messages": []} + for chat_name, content in self.chats['chats'].items(): + for i, content in enumerate(content['messages']): + if not content: del self.chats['chats'][chat_name]['messages'][i] except Exception as e: self.chats = {"chats": {_("New Chat"): {"messages": []}}, "selected_chat": _("New Chat")} self.load_history_into_chat() diff --git a/src/window.ui b/src/window.ui index f537bae..66bdb92 100644 --- a/src/window.ui +++ b/src/window.ui @@ -103,7 +103,7 @@ Manage models - view-more-horizontal-symbolic + controls-big-symbolic @@ -242,7 +242,7 @@ - edit-delete-symbolic + media-playback-stop-symbolic