source: home-eraser/trunk/fuentes/home-eraser-gui.install/usr/share/home-eraser/HomeEraser.py @ 7554

Last change on this file since 7554 was 7554, checked in by daduve, 17 months ago

Adding log

File size: 7.2 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*
3
4import gi
5gi.require_version('Gtk', '3.0')
6from gi.repository import Gtk,GObject, GLib
7
8import signal
9import gettext
10import sys
11import threading
12import copy
13import subprocess
14import os
15import N4dManager
16import xmlrpc.client
17import ssl
18import time
19#import HomeEraserServer
20
21signal.signal(signal.SIGINT, signal.SIG_DFL)
22gettext.textdomain('lliurex-pefilreset')
23_ = gettext.gettext
24
25
26
27class Spinner:
28    busy = False
29    delay = 0.1
30
31    @staticmethod
32    def spinning_cursor():
33        while 1: 
34            for cursor in '|/-\\': yield cursor
35
36    def __init__(self, delay=None):
37        self.spinner_generator = self.spinning_cursor()
38        if delay and float(delay): self.delay = delay
39
40    def spinner_task(self):
41        while self.busy:
42            sys.stdout.write(next(self.spinner_generator))
43            sys.stdout.flush()
44            time.sleep(self.delay)
45            sys.stdout.write('\b')
46            sys.stdout.flush()
47
48    def start(self):
49        self.busy = True
50        threading.Thread(target=self.spinner_task).start()
51
52    def stop(self):
53        self.busy = False
54        time.sleep(self.delay)
55
56
57
58
59
60
61
62class HomeEraser:
63       
64        net="net"
65        home="home"
66        students="students"
67        teachers="teachers"
68        admins="admins"
69        #log="/var/log/home_eraser.log"
70       
71        detect_connected_clients_cancelled=False
72       
73        DEBUG=True
74       
75        def dprint(self,arg):
76                self.n4d_man.lprint(self.user_val, "[HomeEraserGUI] %s"%arg)
77                if HomeEraser.DEBUG:
78                        print("[HomeEraserGUI] %s"%arg)
79               
80        #def dprint     
81       
82       
83        def __init__(self,args_dic):
84               
85                self.perfilreset_bin="/usr/sbin/home-eraser"
86               
87                self.n4d_man=N4dManager.N4dManager()
88                self.n4d_man.set_server(args_dic["server"])
89               
90                if args_dic["gui"]:
91                       
92                        self.start_gui()
93                        GObject.threads_init()
94                        Gtk.main()
95               
96        #def __init__(self):
97       
98       
99        def start_gui(self):
100
101                builder=Gtk.Builder()
102                builder.set_translation_domain('home-eraser')
103                builder.add_from_file("/usr/share/home-eraser/rsrc/home-eraser.ui")
104                self.main_window=builder.get_object("main_window")
105                self.main_window.set_icon_from_file('/usr/share/home-eraser/rsrc/home-eraser-icon.svg')
106               
107                self.main_box=builder.get_object("main_box")
108               
109                self.apply_button=builder.get_object("apply_button")
110                self.checkb1 = builder.get_object("checkbutton1")
111                self.checkb2 = builder.get_object("checkbutton2")
112                self.checkb3 = builder.get_object("checkbutton3")
113                self.checkb4 = builder.get_object("checkbutton4")
114                self.checkb5 = builder.get_object("checkbutton5")
115                self.checkb6 = builder.get_object("checkbutton6")
116                self.num_clients_glade=builder.get_object("num_clients_glade")
117               
118                self.connect_signals()
119                self.main_window.show()
120               
121        #def start_gui
122       
123       
124        def connect_signals(self):
125               
126                # ####################
127                #HACKED TESTING GUI
128                self.login_clicked()
129                # ######
130               
131                self.main_window.connect("destroy",Gtk.main_quit)
132               
133                self.apply_button.connect("clicked",self.apply_button_clicked)
134               
135               
136        #def connect_signals
137       
138       
139        # SIGNALS ########################################################
140       
141        #def login_clicked(self,widget):
142       
143        def login_clicked(self):
144                # HACK
145               
146                user="lliurex"
147                password="lliurex"
148                server="localhost"
149               
150                self.user_val=[user,password]
151                self.n4d_man.user_val=self.user_val
152               
153                self.n4d_man.get_client_list()
154                       
155               
156               
157                self.dprint("Clients connected: %s"%self.n4d_man.detected_clients)
158                self.num_clients_glade.set_text(str(self.n4d_man.detected_clients))
159               
160                t2=threading.Thread(target=self.n4d_man.update_client_list_thread)
161                t2.daemon=True
162                t2.start()
163               
164                GLib.timeout_add(5000,self.client_list_listener)
165               
166                '''user=self.user_entry.get_text()
167                password=self.password_entry.get_text()
168                server=self.server_ip_entry.get_text()         
169
170                if server!="":
171                        self.n4d_man.set_server(server)
172               
173               
174                self.login_msg_label.set_text(_("Validating user..."))
175               
176                self.login_button.set_sensitive(False)'''
177                #self.validate_user(user,password)
178               
179        #def login_clicked
180               
181       
182       
183        def client_list_listener(self):
184               
185                self.num_clients_glade.set_text(str(self.n4d_man.detected_clients))
186                return True
187               
188        #def  client_list_listener
189
190
191
192       
193        def apply_button_clicked(self,widget=True):
194               
195                try:                   
196                       
197                        delete={}
198                        delete[self.home]=[]
199                        delete[self.net]=[]
200                       
201                        info={}
202                        info[self.students]={}
203                       
204                       
205                        info[self.students][self.home]=self.checkb1.get_active()
206                        if info[self.students][self.home]:
207                                delete[self.home].append("students")
208                        info[self.students][self.net]=self.checkb4.get_active()
209                        if info[self.students][self.net]:
210                                delete[self.net].append("students")
211                        info[self.teachers]={}
212                        info[self.teachers][self.home]=self.checkb2.get_active()
213                        if info[self.teachers][self.home]:
214                                delete[self.home].append("teachers")
215                        info[self.teachers][self.net]=self.checkb5.get_active()
216                        if info[self.teachers][self.net]:
217                                delete[self.net].append("teachers")
218                        info[self.admins]={}
219                        info[self.admins][self.home]=self.checkb3.get_active()
220                        if info[self.admins][self.home]:
221                                delete[self.home].append("admins")
222                        info[self.admins][self.net]=self.checkb6.get_active()
223                        if info[self.admins][self.net]:
224                                delete[self.net].append("admins")
225                       
226                       
227                       
228                        for g in info:
229                                print(g)
230                                for d in info[g]:
231                                        print("\t %s : %s"%(d,info[g][d]))
232
233                        self.dprint("Summary to remove this elements: %s"%(delete))
234                       
235                        #Are you sure to delete????
236                       
237                        if ( len(delete[self.home]) >0 ) or ( len(delete[self.net]) >0 ):
238                               
239                                dialog = Gtk.MessageDialog(None,0,Gtk.MessageType.WARNING, Gtk.ButtonsType.YES_NO, "HOME ERASER")
240                                dialog.format_secondary_text(_("Are you sure to delete?"))
241                                response=dialog.run()
242                                dialog.destroy()
243                                if response == Gtk.ResponseType.YES:
244                               
245                                        self.apply_delete_methods(delete)
246                                        self.detect_connected_clients_cancelled=True
247                                        Gtk.main_quit()
248                                        sys.exit(0)
249                        else:
250                                dialog = Gtk.MessageDialog(None,0,Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "HOME ERASER")
251                                dialog.format_secondary_text(_("You don't select any option to delete."))
252                                response=dialog.run()
253                                dialog.destroy()
254
255                       
256                       
257                       
258                       
259                except Exception as e:
260                        print ("[HomeEraserGUI] %s"%e)
261                        return [False,str(e)]
262               
263        #def check_changes
264       
265       
266       
267       
268       
269        def apply_delete_methods(self,delete):
270               
271                try:
272                        resume_home={}
273                        resume_net=[]
274                       
275                        #DELETE LOCAL HOMES IN FAT CLIENTS
276                        if ( len(delete[self.home] ) > 0 ):
277                                ips_detele=self.n4d_man.ips_connected
278                                self.dprint("Apply to clients: %s"%(ips_detele))
279                                r=self.n4d_man.delete_clients_homes(self.user_val,ips_detele, delete[self.home])
280                                if r[0]:
281                                        #shared in resume all ips and paths deleted
282                                        resume_home={**resume_home,**r[1]}
283                       
284                        #print resume home deleted in fat clients
285                        if (  len(resume_home) >0 ):
286                                self.dprint("")
287                                self.dprint("Summary for HOMES deleted")
288                                for i in resume_home:
289                                        self.dprint("%s : %s"%(i,resume_home[i]))
290                       
291                       
292                        #DELETE /NET DIRECTORIES
293                        if ( len(delete[self.net] ) > 0 ):
294                                rnet=self.n4d_man.delete_net_homes(self.user_val,delete[self.net])
295                                if rnet[0]:
296                                        resume_net=rnet[1]
297                                        self.dprint("")
298                                        self.dprint("Summary for paths in /NET deleted:")
299                                        for i in rnet[1]:
300                                                self.dprint(i)
301                                               
302                        return[True,resume_home,resume_net]
303                                       
304                except Exception as e:
305                        print ("[HomeEraserGUI] %s"%e)
306                        return [False,str(e)]
307               
308               
309        #def_apply_delete_methods
310
311
312#class LliurexPerfilreset
313
314
315if __name__=="__main__":
316       
317        pass
318       
Note: See TracBrowser for help on using the repository browser.