Better handling of missing files
This commit is contained in:
		
							parent
							
								
									4ececd850b
								
							
						
					
					
						commit
						2d8cb68628
					
				@ -414,11 +414,12 @@ class AlpacaWindow(Adw.ApplicationWindow):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def preview_file(self, file_path, file_type):
 | 
					    def preview_file(self, file_path, file_type):
 | 
				
			||||||
        content = self.get_content_of_file(file_path, file_type)
 | 
					        content = self.get_content_of_file(file_path, file_type)
 | 
				
			||||||
        buffer = self.file_preview_text_view.get_buffer()
 | 
					        if content:
 | 
				
			||||||
        buffer.delete(buffer.get_start_iter(), buffer.get_end_iter())
 | 
					            buffer = self.file_preview_text_view.get_buffer()
 | 
				
			||||||
        buffer.insert(buffer.get_start_iter(), content, len(content))
 | 
					            buffer.delete(buffer.get_start_iter(), buffer.get_end_iter())
 | 
				
			||||||
        self.file_preview_dialog.set_title(os.path.basename(file_path))
 | 
					            buffer.insert(buffer.get_start_iter(), content, len(content))
 | 
				
			||||||
        self.file_preview_dialog.present(self)
 | 
					            self.file_preview_dialog.set_title(os.path.basename(file_path))
 | 
				
			||||||
 | 
					            self.file_preview_dialog.present(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def convert_history_to_ollama(self):
 | 
					    def convert_history_to_ollama(self):
 | 
				
			||||||
        messages = []
 | 
					        messages = []
 | 
				
			||||||
@ -429,13 +430,15 @@ class AlpacaWindow(Adw.ApplicationWindow):
 | 
				
			|||||||
                new_message['content'] = ''
 | 
					                new_message['content'] = ''
 | 
				
			||||||
                for name, file_type in message['files'].items():
 | 
					                for name, file_type in message['files'].items():
 | 
				
			||||||
                    file_path = os.path.join(self.data_dir, "chats", self.chats['selected_chat'], id, name)
 | 
					                    file_path = os.path.join(self.data_dir, "chats", self.chats['selected_chat'], id, name)
 | 
				
			||||||
                    new_message['content'] += f"```[{name}]\n{self.get_content_of_file(file_path, file_type)}\n```"
 | 
					                    file_data = self.get_content_of_file(file_path, file_type)
 | 
				
			||||||
 | 
					                    if file_data: new_message['content'] += f"```[{name}]\n{file_data}\n```"
 | 
				
			||||||
                new_message['content'] += message['content']
 | 
					                new_message['content'] += message['content']
 | 
				
			||||||
            if 'images' in message and len(message['images']) > 0:
 | 
					            if 'images' in message and len(message['images']) > 0:
 | 
				
			||||||
                new_message['images'] = []
 | 
					                new_message['images'] = []
 | 
				
			||||||
                for name in message['images']:
 | 
					                for name in message['images']:
 | 
				
			||||||
                    file_path = os.path.join(self.data_dir, "chats", self.chats['selected_chat'], id, name)
 | 
					                    file_path = os.path.join(self.data_dir, "chats", self.chats['selected_chat'], id, name)
 | 
				
			||||||
                    new_message['images'].append(self.get_content_of_file(file_path, 'image'))
 | 
					                    image_data = self.get_content_of_file(file_path, 'image')
 | 
				
			||||||
 | 
					                    if image_data: new_message['images'].append(image_data)
 | 
				
			||||||
            messages.append(new_message)
 | 
					            messages.append(new_message)
 | 
				
			||||||
        return messages
 | 
					        return messages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -497,8 +500,9 @@ class AlpacaWindow(Adw.ApplicationWindow):
 | 
				
			|||||||
                child=image_container
 | 
					                child=image_container
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            for image in images:
 | 
					            for image in images:
 | 
				
			||||||
                if os.path.exists(os.path.join(self.data_dir, "chats", self.chats['selected_chat'], id, image)):
 | 
					                raw_data = self.get_content_of_file(os.path.join(self.data_dir, "chats", self.chats['selected_chat'], id, image), "image")
 | 
				
			||||||
                    image_data = base64.b64decode(self.get_content_of_file(os.path.join(self.data_dir, "chats", self.chats['selected_chat'], id, image), "image"))
 | 
					                if raw_data:
 | 
				
			||||||
 | 
					                    image_data = base64.b64decode(raw_data)
 | 
				
			||||||
                    loader = GdkPixbuf.PixbufLoader.new()
 | 
					                    loader = GdkPixbuf.PixbufLoader.new()
 | 
				
			||||||
                    loader.write(image_data)
 | 
					                    loader.write(image_data)
 | 
				
			||||||
                    loader.close()
 | 
					                    loader.close()
 | 
				
			||||||
@ -1104,6 +1108,7 @@ class AlpacaWindow(Adw.ApplicationWindow):
 | 
				
			|||||||
        self.verify_connection()
 | 
					        self.verify_connection()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_content_of_file(self, file_path, file_type):
 | 
					    def get_content_of_file(self, file_path, file_type):
 | 
				
			||||||
 | 
					        if not os.path.exists(file_path) return None
 | 
				
			||||||
        if file_type == 'image':
 | 
					        if file_type == 'image':
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
                with Image.open(file_path) as img:
 | 
					                with Image.open(file_path) as img:
 | 
				
			||||||
@ -1134,26 +1139,26 @@ class AlpacaWindow(Adw.ApplicationWindow):
 | 
				
			|||||||
    def attach_file(self, file_path, file_type):
 | 
					    def attach_file(self, file_path, file_type):
 | 
				
			||||||
        name = self.generate_numbered_name(os.path.basename(file_path), self.attachments.keys())
 | 
					        name = self.generate_numbered_name(os.path.basename(file_path), self.attachments.keys())
 | 
				
			||||||
        content = self.get_content_of_file(file_path, file_type)
 | 
					        content = self.get_content_of_file(file_path, file_type)
 | 
				
			||||||
 | 
					        if content:
 | 
				
			||||||
 | 
					            shown_name='.'.join(name.split(".")[:-1])[:20] + (name[20:] and '..') + f".{name.split('.')[-1]}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        shown_name='.'.join(name.split(".")[:-1])[:20] + (name[20:] and '..') + f".{name.split('.')[-1]}"
 | 
					            button_content = Adw.ButtonContent(
 | 
				
			||||||
 | 
					                label=shown_name,
 | 
				
			||||||
 | 
					                icon_name={"image": "image-x-generic-symbolic", "plain_text": "document-text-symbolic"}[file_type]
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            button = Gtk.Button(
 | 
				
			||||||
 | 
					                vexpand=True,
 | 
				
			||||||
 | 
					                valign=3,
 | 
				
			||||||
 | 
					                name=name,
 | 
				
			||||||
 | 
					                css_classes=["flat"],
 | 
				
			||||||
 | 
					                tooltip_text=name,
 | 
				
			||||||
 | 
					                child=button_content
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        button_content = Adw.ButtonContent(
 | 
					            self.attachments[name] = {"path": file_path, "type": file_type, "content": content, "button": button}
 | 
				
			||||||
            label=shown_name,
 | 
					            button.connect("clicked", lambda button: dialogs.remove_attached_file(self, button))
 | 
				
			||||||
            icon_name={"image": "image-x-generic-symbolic", "plain_text": "document-text-symbolic"}[file_type]
 | 
					            self.attachment_container.append(button)
 | 
				
			||||||
        )
 | 
					            self.attachment_box.set_visible(True)
 | 
				
			||||||
        button = Gtk.Button(
 | 
					 | 
				
			||||||
            vexpand=True,
 | 
					 | 
				
			||||||
            valign=3,
 | 
					 | 
				
			||||||
            name=name,
 | 
					 | 
				
			||||||
            css_classes=["flat"],
 | 
					 | 
				
			||||||
            tooltip_text=name,
 | 
					 | 
				
			||||||
            child=button_content
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.attachments[name] = {"path": file_path, "type": file_type, "content": content, "button": button}
 | 
					 | 
				
			||||||
        button.connect("clicked", lambda button: dialogs.remove_attached_file(self, button))
 | 
					 | 
				
			||||||
        self.attachment_container.append(button)
 | 
					 | 
				
			||||||
        self.attachment_box.set_visible(True)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, **kwargs):
 | 
					    def __init__(self, **kwargs):
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user