424 lines
18 KiB
Python
424 lines
18 KiB
Python
import npyscreen
|
|
from fonctions import *
|
|
import time
|
|
from os import system
|
|
import curses.ascii
|
|
import threading
|
|
|
|
|
|
class Thread_messages(threading.Thread):
|
|
def __init__(self, messages ,nom = '',):
|
|
threading.Thread.__init__(self)
|
|
self.nom = nom
|
|
self.Messages = messages
|
|
self.Terminated = False
|
|
|
|
def run(self):
|
|
update = 0
|
|
while not self.Terminated:
|
|
status = charger_message(self.Messages.group_id)
|
|
if status[0] == False:
|
|
return
|
|
message_list = status[2]
|
|
if len(message_list) > update:
|
|
update = len(message_list)
|
|
self.Messages.values = []
|
|
for i in message_list:
|
|
message = ''
|
|
message = str(i[1]) +' '+ str(i[3])
|
|
self.Messages.values.append(message)
|
|
self.Messages.values.append(str(i[2]))
|
|
self.Messages.values.append("")
|
|
self.Messages.display()
|
|
time.sleep(1)
|
|
def stop(self):
|
|
self.Terminated = True
|
|
|
|
class MyApplication(npyscreen.NPSAppManaged):
|
|
def onStart(self):
|
|
self.pseudo = ''
|
|
self.user_id = 0
|
|
self.list_ami = []
|
|
self.list_group = []
|
|
self.logo ="""
|
|
██████╗░██╗░░░██╗░░░░░░░█████╗░░█████╗░██████╗░██████╗░
|
|
██╔══██╗╚██╗░██╔╝░░░░░░██╔══██╗██╔══██╗██╔══██╗██╔══██╗
|
|
██████╔╝░╚████╔╝░█████╗██║░░╚═╝██║░░██║██████╔╝██║░░██║
|
|
██╔═══╝░░░╚██╔╝░░╚════╝██║░░██╗██║░░██║██╔══██╗██║░░██║
|
|
██║░░░░░░░░██║░░░░░░░░░╚█████╔╝╚█████╔╝██║░░██║██████╔╝
|
|
╚═╝░░░░░░░░╚═╝░░░░░░░░░░╚════╝░░╚════╝░╚═╝░░╚═╝╚═════╝░
|
|
"""
|
|
self.addForm('POST_CO', Menu_principal, name='PY-CORD')
|
|
self.addForm('SIGNUP',Menu_Inscription, name = 'PY-CORD')
|
|
self.addForm('LOGIN', Menu_Connexion, name='PY-CORD')
|
|
self.addForm('MAIN', Menu_accueil, name='PY-CORD')
|
|
|
|
def change_form(self, name):
|
|
self.switchForm(name)
|
|
self.resetHistory()
|
|
|
|
class InputBox(npyscreen.BoxTitle):
|
|
_contained_widget = npyscreen.MultiLineEdit
|
|
|
|
"""
|
|
class NewMultiLineClass(npyscreen.MultiLine):
|
|
def __init__(self):
|
|
super(MultiLineEdit, self).__init__(screen, **keywords)
|
|
self.group_index = None
|
|
self.group_id = []
|
|
"""
|
|
|
|
class GroupeBox(npyscreen.BoxTitle):
|
|
_contained_widget = npyscreen.MultiLine
|
|
|
|
class MessageBox(npyscreen.BoxTitle):
|
|
_contained_widget = npyscreen.MultiLine
|
|
|
|
class Menu_principal(npyscreen.FormBaseNewWithMenus):
|
|
|
|
def create(self):
|
|
"""
|
|
liste_ami = ['neo','Segpa'] // liste a afficher
|
|
liste_ami.id_list = [None,7] // liste des id de groupe
|
|
liste_ami.group_index = None // l'index du group actuel
|
|
message.group_id // id du groupe actuel
|
|
"""
|
|
|
|
self.commandes = {
|
|
'/help' : self.print_help,
|
|
'/ajouter_ami' : self.add_to_friend,
|
|
'/creer_groupe' : self.new_group,
|
|
'/ajouter_dans_groupe' : self.add_to_group,
|
|
'/suprimer_du_groupe' : self.remove_from_group,
|
|
'/changer_groupe' : self.change_current_grp_cmd,
|
|
}
|
|
|
|
y , x = self.useable_space()
|
|
|
|
############################################
|
|
# #
|
|
# Creation des widgets #
|
|
# #
|
|
############################################
|
|
# old self.profil = self.add(npyscreen.BoxTitle, name='profil',rely= 2,relx= 2, max_width = (x//4), max_height = (y//4) - 2 )
|
|
# old self.liste_ami= self.add(GroupeBox, name = 'amis/groupe',rely= y - (y//4*3),max_width = x//4)
|
|
|
|
|
|
self.liste_ami = self.add(GroupeBox, name = 'amis/groupe',rely= 2,relx= 2,max_width = x//4 - 15)
|
|
self.boite_texte = self.add(InputBox, name = "Partagez votre savoir",rely= y - (y//8) ,relx= x - (x//4 * 3) -14 )
|
|
self.Messages = self.add(MessageBox, name='grp',rely= 2,relx= x - (x//4 * 3) - 14 ,max_width = x//4 * 3 - 9, max_height = y - (y//8) - 2 )
|
|
self.liste_user = self.add(GroupeBox, name = 'membres',rely= 2,relx= x - x//10, max_height = y - (y//8) - 2)
|
|
|
|
|
|
self.liste_ami.group_index = None
|
|
self.Messages.group_id = None
|
|
self.thread = ""
|
|
#
|
|
#self.liste_ami.handlers.update({27:self.change_current_grp})
|
|
self.liste_ami.handlers.update({curses.ascii.NL :self.test }) # curses.ascii.NL means the New Line key (Enter)
|
|
self.liste_ami.add_handlers({"^H" :self.change_current_grp })
|
|
self.boite_texte.add_handlers({"^S" :self.send_message })
|
|
self.boite_texte.handlers[curses.ascii.NL] = self.send_message
|
|
|
|
############################################
|
|
# #
|
|
# Gestion des menu #
|
|
# #
|
|
############################################
|
|
|
|
self.m1 = self.add_menu(name='Menu utilisateur',shortcut='^M')
|
|
self.m1.addItemsFromList([
|
|
('Deconnection',self.change_to_main,"d",),
|
|
('DEBUG',self.debug,'Q'),
|
|
('Aide',self.print_help,'Q'),
|
|
('Fermer ce menu',self.change_to_post_co,"f")
|
|
])
|
|
self.m4 = self.m1.addNewSubmenu(name='supprimer un ami')
|
|
|
|
|
|
self.m2 = self.add_menu(name='Menu groupe',shortcut='^G')
|
|
self.m2.addItemsFromList([
|
|
('retirer un ami dans le groupe',self.change_to_post_co,'g'),
|
|
('Suprimer le groupe',self.change_to_post_co,"f")
|
|
])
|
|
self.m3 = self.m2.addNewSubmenu(name='Ajouter un ami dans le groupe')
|
|
|
|
############################################
|
|
# #
|
|
# Gestion des amis #
|
|
# #
|
|
############################################
|
|
|
|
def update_menu_amis(self):
|
|
liste_ajout_ami_grp = []
|
|
liste_retait_ami = []
|
|
for i in range(len(self.liste_ami.values)):
|
|
if self.liste_ami.id_list[i] == None:
|
|
liste_ajout_ami_grp.append((self.liste_ami.values[i], self.add_to_group, None ,None,(str(self.liste_ami.values[i]),)))
|
|
liste_retait_ami.append((self.liste_ami.values[i], self.remove_from_friend, None ,None,(str(self.liste_ami.values[i]),)))
|
|
self.m3.addItemsFromList(liste_ajout_ami_grp)
|
|
self.m4.addItemsFromList(liste_retait_ami)
|
|
|
|
def update_liste_amis(self):
|
|
self.liste_ami.id_list = []
|
|
self.liste_ami.group_index = None
|
|
self.liste_ami.values = []
|
|
amis = charger_amis(self.parentApp.user_id)
|
|
if amis[0]== True:
|
|
for i in amis[2]:
|
|
self.liste_ami.values.append(i)
|
|
self.liste_ami.id_list.append(None)
|
|
groupes = charger_groupe(self.parentApp.user_id)
|
|
if groupes[0] == True:
|
|
for i in groupes[2]:
|
|
self.liste_ami.values.append(i[0])
|
|
self.liste_ami.id_list.append(i[1])
|
|
self.update_menu_amis()
|
|
|
|
def add_to_friend(self,pseudo_ami):
|
|
status = ajouter_amis(self.parentApp.pseudo,pseudo_ami)
|
|
if status[0] == True:
|
|
npyscreen.notify_confirm(pseudo_ami + ' a été ajouté a vos amis')
|
|
self.update_liste_amis()
|
|
else:
|
|
npyscreen.notify_confirm(status[1])
|
|
|
|
def remove_from_friend(self,pseudo_ami):
|
|
status = retirer_amis(self.parentApp.pseudo,pseudo_ami)
|
|
if status[0] == True:
|
|
npyscreen.notify_confirm(pseudo_ami + ' a été retiré de vos amis')
|
|
self.update_liste_amis()
|
|
else:
|
|
npyscreen.notify_confirm(status[1])
|
|
|
|
############################################
|
|
# #
|
|
# Gestion des groupes #
|
|
# #
|
|
############################################
|
|
|
|
def change_current_grp_cmd(self,grp_name):
|
|
if grp_name in self.liste_ami.values:
|
|
valeur = self.liste_ami.values.index(grp_name)
|
|
if self.liste_ami.group_index != valeur :
|
|
self.liste_ami.group_index = valeur
|
|
self.Messages.name = self.liste_ami.values[self.liste_ami.group_index]
|
|
self.Messages.group_id = self.liste_ami.id_list[self.liste_ami.group_index]
|
|
#if self.Messages.group_id != None: self.load_messages()
|
|
self.Messages.display()
|
|
self.update_grp_member_list()
|
|
else:npyscreen.notify_confirm('Groupe introuvable')
|
|
|
|
def change_current_grp(self,wut):
|
|
if self.liste_ami.group_index != self.liste_ami.value :
|
|
self.liste_ami.group_index = self.liste_ami.value
|
|
self.Messages.name = self.liste_ami.values[self.liste_ami.group_index]
|
|
self.Messages.group_id = self.liste_ami.id_list[self.liste_ami.group_index]
|
|
#if self.Messages.group_id != None: self.load_messages()
|
|
self.Messages.display()
|
|
self.update_grp_member_list()
|
|
|
|
def new_group(self,nom_grp):
|
|
status = ajouter_dans_groupe(self.parentApp.pseudo,nom_grp)
|
|
if status[0] == True:
|
|
npyscreen.notify_confirm('Le groupe a été crée')
|
|
self.update_liste_amis()
|
|
else:
|
|
npyscreen.notify_confirm(status[1])
|
|
|
|
def remove_from_group(self,pseudo):
|
|
if self.Messages.group_id != None:
|
|
status = retirer_dans_groupe(pseudo,self.Messages.name)
|
|
npyscreen.notify_confirm(str(status[1]))
|
|
else:
|
|
npyscreen.notify_confirm("Selectionnez un groupe avant de performer cet operation")
|
|
|
|
def add_to_group(self, pseudo_ami):
|
|
if self.Messages.group_id != None:
|
|
status = ajouter_dans_groupe(pseudo_ami,self.Messages.name)
|
|
npyscreen.notify_confirm(str(status[1]))
|
|
else:
|
|
npyscreen.notify_confirm("Selectionnez un groupe avant de performer cet operation")
|
|
|
|
def update_grp_member_list(self):
|
|
if self.Messages.group_id != None:
|
|
status = charger_utilisateurs_groupe(int(self.Messages.group_id))
|
|
if not status[0]:
|
|
nptscreen.notify_confirm(str(status[1]))
|
|
return
|
|
#npyscreen.notify_confirm(str(status[2]))
|
|
for i in status[2]:
|
|
self.liste_user.values.append(i)
|
|
|
|
def debug(self):
|
|
npyscreen.notify_confirm([
|
|
f" nombre d'amis/groupe :{str(len(self.liste_ami.values))}",
|
|
f" d'amis/groupe : {str(self.liste_ami.values)}",
|
|
f" id des nombre d'amis/groupe :{str(self.liste_ami.id_list)}",
|
|
f" pseudo :{str(self.parentApp.pseudo)}",
|
|
f" id du groupe chargé : {str(self.Messages.group_id)}",
|
|
f" widget focused : {self.widget_focused()}",
|
|
f" membre du groupe charge : {self.liste_user.values}"
|
|
])
|
|
|
|
def widget_focused(self):
|
|
for i in self._widgets_by_id.keys():
|
|
if i == self.editw: return self._widgets_by_id[i].name
|
|
return 'pastrouvélol'
|
|
|
|
def test(self,wut):
|
|
npyscreen.notify_confirm('boo')
|
|
|
|
############################################
|
|
# #
|
|
# Gestion des messages #
|
|
# #
|
|
############################################
|
|
|
|
def send_message(self,wut):
|
|
if self.boite_texte.value[0] == '/':
|
|
commande = self.boite_texte.value.split()
|
|
if len(commande) > 1:
|
|
args = ''
|
|
for i in commande:
|
|
if '/' in i:pass
|
|
else:
|
|
args += i
|
|
try:
|
|
self.commandes[commande[0]](args)
|
|
self.boite_texte.value = ''
|
|
except:
|
|
npyscreen.notify_confirm('commande inexistante')
|
|
else:
|
|
try:
|
|
self.commandes[commande[0]]()
|
|
self.boite_texte.value = ''
|
|
except:
|
|
npyscreen.notify_confirm('commande inexistante')
|
|
else:
|
|
if self.thread != '':
|
|
self.thread.stop()
|
|
if self.Messages.group_id != None:
|
|
message = self.boite_texte.value
|
|
envoyer_message(self.parentApp.user_id,self.Messages.group_id,str(message))
|
|
self.boite_texte.value = ''
|
|
self.load_messages()
|
|
else:
|
|
pass
|
|
|
|
def load_messages_old(self):
|
|
status = charger_message(self.Messages.group_id)
|
|
if status[0] == False:
|
|
return
|
|
message_list = status[2]
|
|
self.Messages.values = []
|
|
for i in message_list:
|
|
message = ''
|
|
message = str(i[1]) +' '+ str(i[3])
|
|
self.Messages.values.append(message)
|
|
self.Messages.values.append(str(i[2]))
|
|
self.Messages.values.append("")
|
|
self.change_to_post_co()
|
|
|
|
def load_messages(self):
|
|
self.thread = Thread_messages(self.Messages)
|
|
self.thread.start()
|
|
|
|
######################################################
|
|
def print_help(self):
|
|
npyscreen.notify_confirm([
|
|
"A cause d'un soucis au niveau de la bibliotheque, pour charger les messages du groupe selectioné veuillez appuyer sur ctrl + h et pour envoyer un message ctrl + s",
|
|
"",
|
|
"",
|
|
"Commandes",
|
|
"Tab et shift + Tab pour changer le focus",
|
|
"/help : affiche cette pop up",
|
|
"/ajouter_ami [pseudo] : ajoute un utilisateur dans la liste d'amis",
|
|
"/creer_groupe [nom du groupe] : Crée un groupe",
|
|
'/changer_groupe [nom du groupe] : change le groupe actuel',
|
|
"/ajouter_dans_groupe [pseudo] : ajoute un utilisateur dans le groupe",
|
|
"/suprimer_du_groupe [pseudo] : supprime un utilisateur du groupe",
|
|
],'Aide',wrap = True,)
|
|
|
|
def change_to_main(self):
|
|
self.Messages.values = []
|
|
self.Messages.name = 'groupe'
|
|
self.parentApp.change_form('MAIN')
|
|
|
|
def change_to_post_co(self):
|
|
self.parentApp.change_form('POST_CO')
|
|
########################################################
|
|
class Menu_accueil(npyscreen.FormBaseNew):
|
|
|
|
def create(self):
|
|
y , x = self.useable_space()
|
|
self.add(InputBox, editable = False,value= self.parentApp.logo, max_width = 60,max_height=10, relx=(x//2) - 60 //2 )
|
|
self.add(npyscreen.ButtonPress, name="Connection", when_pressed_function=self.to_login,relx=(x//2) - 10 //2, rely= y//2 - 2)
|
|
self.add(npyscreen.ButtonPress, name="Inscription", when_pressed_function=self.to_signup,relx=(x//2) - 10 //2, rely= y//2 )
|
|
self.add(npyscreen.ButtonPress, name="Quitter", when_pressed_function=self.exit_application,relx=(x//2) - 10 //2, rely= y//2 + 2)
|
|
|
|
def to_login(self):
|
|
self.parentApp.change_form('LOGIN')
|
|
|
|
def to_signup(self):
|
|
self.parentApp.change_form('SIGNUP')
|
|
|
|
def exit_application(self):
|
|
self.parentApp.setNextForm(None)
|
|
self.editing = False
|
|
self.parentApp.switchFormNow()
|
|
|
|
class Menu_Connexion(npyscreen.ActionForm):
|
|
|
|
def create(self):
|
|
y , x = self.useable_space()
|
|
self.add(InputBox, editable = False, value = self.parentApp.logo, max_width = 60,max_height=10, relx=(x//2) - 60 //2 )
|
|
self.pseudo = self.add(npyscreen.TitleText, name='Pseudo:',relx=(x//3) - 10 //2, rely= y//2 - 2)
|
|
self.mot_de_passe = self.add(npyscreen.TitlePassword, name='Mot de passe:',relx=(x//3) - 10 //2, rely= y//2)
|
|
|
|
def on_ok(self):
|
|
etat = connexion(self.pseudo.value,self.mot_de_passe.value)
|
|
if etat[0] == True:
|
|
self.parentApp.pseudo = self.pseudo.value
|
|
self.parentApp.user_id = etat[2]
|
|
|
|
self.parentApp._Forms['POST_CO'].update_liste_amis()
|
|
|
|
npyscreen.notify_confirm('bienvenue '+ self.pseudo.value + '\n' + ' Entrée pour continuer')
|
|
self.parentApp.change_form('POST_CO')
|
|
else:
|
|
npyscreen.notify_confirm(etat[1])
|
|
self.pseudo.value = ''
|
|
self.mot_de_passe.value = ''
|
|
self.parentApp.change_form('LOGIN')
|
|
|
|
def on_cancel(self):
|
|
self.parentApp.change_form('MAIN')
|
|
|
|
|
|
class Menu_Inscription(npyscreen.ActionForm):
|
|
|
|
def create(self):
|
|
y , x = self.useable_space()
|
|
self.add(InputBox, editable = False, value = self.parentApp.logo, max_width = 60,max_height=10, relx=(x//2) - 60 //2 )
|
|
self.pseudo = self.add(npyscreen.TitleText, name='Pseudo:',relx=(x//3), rely= y//2 - 2)
|
|
self.mot_de_passe = self.add(npyscreen.TitlePassword, name='Mot de passe:',relx=(x//3), rely= y//2)
|
|
self.mot_de_passe_conf = self.add(npyscreen.TitlePassword, name='Confirmez le mdp:',relx=(x//3) - 10 //2, rely= y//2 + 2)
|
|
|
|
def on_ok(self):
|
|
etat = inscription(self.pseudo.value,self.mot_de_passe.value,self.mot_de_passe_conf.value)
|
|
if etat[0] == True:
|
|
npyscreen.notify_confirm('compte crée' + '\n' + ' Entrée pour continuer')
|
|
else:
|
|
npyscreen.notify_confirm(etat[1])
|
|
self.pseudo.value = ''
|
|
self.mot_de_passe.value = ''
|
|
self.mot_de_passe_conf.value = ''
|
|
|
|
def on_cancel(self):
|
|
self.parentApp.change_form('MAIN')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
TestApp = MyApplication().run()
|