194 lines
7.3 KiB
Python
194 lines
7.3 KiB
Python
import ast
|
|
import communicate
|
|
import tkinter as tk
|
|
from tkinter import messagebox
|
|
import threading
|
|
import tkinter.ttk as ttk
|
|
import os
|
|
import time
|
|
|
|
file = open("config.config", 'r')
|
|
file = file.read()
|
|
config = ast.literal_eval(file)
|
|
sessionid = ""
|
|
global conversations
|
|
conversations = []
|
|
def updateconfig():
|
|
global config
|
|
file = open("config.config", 'w')
|
|
file.write(str(config))
|
|
file.close()
|
|
|
|
def registeeer(name, password):
|
|
global container
|
|
global sessionid
|
|
name = name.get()
|
|
password = password.get()
|
|
back = communicate.get(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "register", "name": name, "pass": password})
|
|
if back[0] == " ":
|
|
messagebox.showinfo("erfolgreich!", "sie haben sich erfolgreich registriert!")
|
|
config["logindata"]["name"] = name
|
|
config["logindata"]["pass"] = password
|
|
updateconfig()
|
|
sessionid = back
|
|
container.destroy()
|
|
else:
|
|
messagebox.showerror("fehler!", "kann nicht registrieren: name wird schon benutzt")
|
|
|
|
def register():
|
|
global container
|
|
container.destroy()
|
|
container = tk.Tk("registrieren")
|
|
namevar = tk.StringVar(container)
|
|
passvar = tk.StringVar(container)
|
|
nameentry = tk.Entry(container, textvariable=namevar)
|
|
passentry = tk.Entry(container, textvariable=passvar)
|
|
registerbutton = tk.Button(container, text="registrieren", command=lambda: registeeer(namevar, passvar))
|
|
namelabel = tk.Label(container, text="Name")
|
|
passlabel = tk.Label(container, text="Passwort")
|
|
namelabel.grid()
|
|
nameentry.grid()
|
|
passlabel.grid()
|
|
passentry.grid()
|
|
registerbutton.grid()
|
|
container.mainloop()
|
|
|
|
def loginnn(name, password):
|
|
global container
|
|
global sessionid
|
|
name = name.get()
|
|
password = password.get()
|
|
back = communicate.get(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "getsessionid", "name": name, "pass": password})
|
|
if back[0] == " ":
|
|
messagebox.showinfo("erfolgreich!", "sie haben sich erfolgreich angemeldet!")
|
|
config["logindata"]["name"] = name
|
|
config["logindata"]["pass"] = password
|
|
updateconfig()
|
|
sessionid = back
|
|
container.destroy()
|
|
else:
|
|
messagebox.showerror("fehler!", "kann nicht anmelden: falscher name oder passwort")
|
|
|
|
def login():
|
|
global container
|
|
container.destroy()
|
|
container = tk.Tk("anmelden")
|
|
namevar = tk.StringVar(container)
|
|
passvar = tk.StringVar(container)
|
|
nameentry = tk.Entry(container, textvariable=namevar)
|
|
passentry = tk.Entry(container, textvariable=passvar)
|
|
registerbutton = tk.Button(container, text="anmelden", command=lambda: loginnn(namevar, passvar))
|
|
namelabel = tk.Label(container, text="Name")
|
|
passlabel = tk.Label(container, text="Passwort")
|
|
namelabel.grid()
|
|
nameentry.grid()
|
|
passlabel.grid()
|
|
passentry.grid()
|
|
registerbutton.grid()
|
|
container.mainloop()
|
|
|
|
def send(message, conversation):
|
|
global sessionid
|
|
message = message.get()
|
|
communicate.patch(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "send", "sessionid": sessionid, "message": message, "conversation": conversation})
|
|
|
|
def turnback(target):
|
|
temp = ""
|
|
for i in target:
|
|
temp = temp + i + "\n"
|
|
return temp
|
|
|
|
def showconversation(conversation2):
|
|
global conversations
|
|
container2 = tk.Tk("conversation")
|
|
conversationtext = conversations[conversation2]["conversation"]
|
|
conversation = tk.Text(container2)
|
|
conversation.insert(tk.END, conversationtext)
|
|
conversation.config(state=tk.DISABLED)
|
|
conversation.grid(padx=2, pady=2)
|
|
scrollbar = ttk.Scrollbar(container2, command=conversation.yview)
|
|
scrollbar.grid(column=3)
|
|
conversation['yscrollcommand'] = scrollbar.set
|
|
sendvar = tk.StringVar(container2)
|
|
entry = tk.Entry(container2, textvariable=sendvar)
|
|
sendbutton = tk.Button(container2, command=lambda: send(sendvar, conversations[conversation2]["speakers"]), text="senden")
|
|
entry.grid()
|
|
sendbutton.grid()
|
|
while True:
|
|
temp = communicate.get(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "update", "sessionid": sessionid})[conversation2]["conversation"].split("\n")
|
|
for i in conversationtext.split("\n"):
|
|
try:
|
|
temp.remove(i)
|
|
except Exception as e:
|
|
print(e)
|
|
print(conversationtext)
|
|
print(temp)
|
|
if len(temp) != 0:
|
|
conversation.grid_forget()
|
|
conversation.config(state=tk.NORMAL)
|
|
conversation.insert(tk.END, turnback(temp))
|
|
conversation.config(state=tk.DISABLED)
|
|
conversation.grid(row=0)
|
|
conversationtext = conversationtext + turnback(temp)
|
|
container2.update()
|
|
time.sleep(0.1)
|
|
|
|
def updatescreen():
|
|
global container
|
|
global conversations
|
|
global conversationbuttons
|
|
global config
|
|
if True:
|
|
for temp in range(len(conversations)):
|
|
temp2 = conversations[temp]["speakers"].split("<splitedaccountname>")
|
|
temp2.remove(config["logindata"]["name"])
|
|
temp2 = temp2[0]
|
|
if not temp2 in conversationbuttons:
|
|
conversationbuttons[temp2] = tk.Button(container, text=temp2, command=lambda temp=temp: showconversation(temp))
|
|
conversationbuttons[temp2].grid()
|
|
|
|
def update():
|
|
global sessionid
|
|
global conversations
|
|
while True:
|
|
conversations = communicate.get(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "update", "sessionid": sessionid})
|
|
|
|
def newww(name, container2):
|
|
global sessionid
|
|
name = name.get()
|
|
communicate.patch(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "newconv", "sessionid": sessionid, "target": name})
|
|
container2.destroy()
|
|
|
|
def newconversation():
|
|
container2 = tk.Tk("new conversation")
|
|
namelabel = tk.Label(container2, text="name des benutzers: ")
|
|
namelabel.grid()
|
|
stringvar = tk.StringVar(container2)
|
|
entry = tk.Entry(container2, textvariable=stringvar)
|
|
entry.grid()
|
|
gobutton = tk.Button(container2, text="konversation erstellen", command=lambda: newww(stringvar, container2))
|
|
gobutton.grid()
|
|
container2.mainloop()
|
|
|
|
if config["logindata"]["name"] == None:
|
|
container = tk.Tk("PM")
|
|
messagebox.showinfo("nicht angemeldet!", "sie sind nicht angemeldet bitte melden sie sich an!")
|
|
registerbutton = tk.Button(container, text="registrieren", command=register)
|
|
loginbutton = tk.Button(container, text="anmelden", command=login)
|
|
loginbutton.grid()
|
|
registerbutton.grid()
|
|
container.mainloop()
|
|
else:
|
|
sessionid = communicate.get(config["serveraddress"]+":"+config["port"], {"targetserver": "python messages main server", "targetfunction": "getsessionid", "name": config["logindata"]["name"], "pass": config["logindata"]["pass"]})
|
|
conversationbuttons = {}
|
|
updatethread = threading.Thread(target=update)
|
|
container = tk.Tk("PM")
|
|
updatethread.start()
|
|
|
|
newconversationbutton = tk.Button(container, text="neue konversation", command=newconversation)
|
|
newconversationbutton.grid()
|
|
|
|
while True:
|
|
container.update()
|
|
updatescreen()
|