encryptare + adaugare de imagini

This commit is contained in:
andrei-mihnea-cerbu
2024-01-19 04:05:05 +02:00
parent 67b7a241d7
commit 2d4cca0e80
11 changed files with 167 additions and 48 deletions
+46 -40
View File
@@ -1,15 +1,10 @@
import tkinter as tk
import emoji
from PIL import Image, ImageTk
from PIL import Image, ImageTk, UnidentifiedImageError
import io
import base64
import emoji
class MessageView(tk.Frame):
"""
This view is the message that appears in main windows of the chat. This is configured to hold text and images.
"""
def __init__(self, master, message, current_logged_user, user_data, *args, **kwargs):
super().__init__(master, *args, **kwargs)
self.current_logged_user = current_logged_user
@@ -18,49 +13,49 @@ class MessageView(tk.Frame):
def create_widgets(self, message):
is_sent_by_current_user = 1
sender_name = None
if is_sent_by_current_user:
sender_name = self.current_logged_user['username']
else:
sender_name = self.user_data['username']
message_frame = tk.Frame(self) # Set a background color for the message frame
message_label = None
image_label = None
sender_name = (
self.current_logged_user["username"]
if is_sent_by_current_user
else self.user_data["username"]
)
message_frame = tk.Frame(self)
pack = None
match message['message_type']:
case 'text':
decoded_message = self.decode_emoji(f"sender: {sender_name}\nmessage: {message['message']}")
pack = tk.Label(message_frame, text=decoded_message, bg='white')
case 'image':
decoded_image = self.decode_image(message['message'])
match message["message_type"]:
case "text":
decoded_message = self.decode_emoji(
f"sender: {sender_name}\nmessage: {message['message']}"
)
pack = tk.Label(message_frame, text=decoded_message, bg="white")
self.decoded_message = decoded_message # Keep a reference to prevent garbage collection
case "image":
decoded_image = self.decode_image(message["message"])
pack = tk.Label(message_frame, image=decoded_image)
pack.image = decoded_image # Keep a reference to prevent garbage collection
pack.pack()
if is_sent_by_current_user:
alignment = 'right'
alignment = "right"
else:
alignment = 'left'
alignment = "left"
message_frame.pack(side=alignment, padx=5, pady=5)
def decode_emoji(self, message):
emoji_mapping = {
':)': '😊',
':(': '☹️',
':D': '😃',
':P': '😛',
';)': '😉',
'XD': '😆',
'<3': '❤️',
'O:)': '😇',
':/': '😕',
':*': '😘',
'8)': '😎',
":)": "😊",
":(": "☹️",
":D": "😃",
":P": "😛",
";)": "😉",
"XD": "😆",
"<3": "❤️",
"O:)": "😇",
":/": "😕",
":*": "😘",
"8)": "😎",
}
for emoji_string, unicode_character in emoji_mapping.items():
@@ -68,8 +63,19 @@ class MessageView(tk.Frame):
return message
def decode_image(self, encoded_image):
# Assume encoded_image is a base64-encoded image
decoded_image = base64.b64decode(encoded_image)
image = Image.open(io.BytesIO(decoded_image))
image = ImageTk.PhotoImage(image)
return image
try:
decoded_image = base64.b64decode(encoded_image)
image_io = io.BytesIO(decoded_image)
original_image = Image.open(image_io)
resized_image = original_image.resize((100, 100), Image.ADAPTIVE)
self.image = resized_image
image = ImageTk.PhotoImage(self.image)
return image
except UnidentifiedImageError as e:
print(f"Error decoding image: {e}")
return None
except Exception as e:
print(f"Unexpected error: {e}")
return None