import json import tkinter as tk from app.http import request_builder from app.views.message import MessageView class ChatWindow(tk.Toplevel): def __init__(self, master=None, user_data=None, current_logged_user=None): super().__init__(master) self.user_data = user_data self.current_logged_user = current_logged_user self.define_get_conversation_url_params() self.geometry("700x700") self.conversation_url = self.get_conversation_url() self.define_get_conversation_params() self.create_widgets(self.get_conversation()) self.after(1000, self.update_chat) def define_get_conversation_url_params(self): self.url = (f"http://localhost:8000/messages/get_conversation_url/" f"{self.user_data['id']}/{self.current_logged_user['id']}") self.headers = {} self.method = "GET" self.params = {} self.body = None def define_get_conversation_params(self): self.url = f"http://localhost:8000/messages/get_conversation/{self.conversation_url}" self.headers = {} self.method = "GET" self.params = {} self.body = None def define_send_message_params(self, message, message_type): self.url = "http://localhost:8000/messages/send" self.headers = {"Content-Type": "application/json"} self.method = "POST" self.params = {} self.body = { 'conversation_url': self.conversation_url, 'message': message, 'message_type': message_type, 'sender': self.current_logged_user['id'] } def create_widgets(self, conversation): # Create a frame for displaying messages self.messages_frame = tk.Frame(self) self.messages_frame.pack() # Display existing conversation for message in conversation: message_view = MessageView(self.messages_frame, message, self.current_logged_user, self.user_data) message_view.pack() # Create a frame for the text box and submit button self.input_frame = tk.Frame(self) self.input_frame.pack(side=tk.BOTTOM, fill=tk.X) # Create an entry widget for typing messages self.entry_widget = tk.Entry(self.input_frame) self.entry_widget.pack(side=tk.LEFT, expand=True, fill=tk.X) # Create a button to send messages self.send_button = tk.Button(self.input_frame, text="Send", command=lambda: self.send_message()) self.send_button.pack(side=tk.RIGHT) def update_chat(self): self.messages_frame.destroy() self.messages_frame = tk.Frame(self) self.messages_frame.pack() self.define_get_conversation_params() for message in self.get_conversation(): message_view = MessageView(self.messages_frame, message, self.current_logged_user, self.user_data) message_view.pack() self.after(2000, self.update_chat) def send_message_image(self): pass def send_message(self): message = self.entry_widget.get() self.define_send_message_params(message, "text") if not message: return request_builder.set_url(self.url) request_builder.set_body(self.body) request_builder.set_headers(self.headers) request_builder.set_method(self.method) request_builder.set_params(self.params) request_builder.build().make_request() self.update_chat() def get_conversation_url(self): request_builder.set_url(self.url) request_builder.set_body(self.body) request_builder.set_headers(self.headers) request_builder.set_method(self.method) request_builder.set_params(self.params) json_string = request_builder.build().make_request().text data = json.loads(json_string) return data['conversation_url'] def get_conversation(self): request_builder.set_url(self.url) request_builder.set_body(self.body) request_builder.set_headers(self.headers) request_builder.set_method(self.method) request_builder.set_params(self.params) json_string = request_builder.build().make_request().text data = json.loads(json_string) return data.get('chat', [])