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

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

Adding files to GUI

File size: 6.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
26class Spinner:
27    busy = False
28    delay = 0.1
29
30    @staticmethod
31    def spinning_cursor():
32        while 1: 
33            for cursor in '|/-\\': yield cursor
34
35    def __init__(self, delay=None):
36        self.spinner_generator = self.spinning_cursor()
37        if delay and float(delay): self.delay = delay
38
39    def spinner_task(self):
40        while self.busy:
41            sys.stdout.write(next(self.spinner_generator))
42            sys.stdout.flush()
43            time.sleep(self.delay)
44            sys.stdout.write('\b')
45            sys.stdout.flush()
46
47    def start(self):
48        self.busy = True
49        threading.Thread(target=self.spinner_task).start()
50
51    def stop(self):
52        self.busy = False
53        time.sleep(self.delay)
54
55
56
57
58
59
60
61class HomeEraser:
62       
63        net="net"
64        home="home"
65        students="students"
66        teachers="teachers"
67        admins="admins"
68       
69        detect_connected_clients_cancelled=False
70       
71        DEBUG=True
72       
73        def dprint(self,arg):
74               
75                if HomeEraser.DEBUG:
76                        print("[HomeEraserGUI] %s"%arg)
77               
78        #def dprint
79       
80       
81       
82        def __init__(self,args_dic):
83               
84                self.perfilreset_bin="/usr/sbin/home-eraser"
85               
86                self.n4d_man=N4dManager.N4dManager()
87                self.n4d_man.set_server(args_dic["server"])
88               
89                if args_dic["gui"]:
90                       
91                        self.start_gui()
92                        GObject.threads_init()
93                        Gtk.main()
94               
95        #def __init__(self):
96       
97       
98        def start_gui(self):
99
100                builder=Gtk.Builder()
101                builder.set_translation_domain('home-eraser')
102                builder.add_from_file("/usr/share/home-eraser/rsrc/home-eraser.ui")
103                self.main_window=builder.get_object("main_window")
104                self.main_window.set_icon_from_file('/usr/share/home-eraser/rsrc/home-eraser-icon.svg')
105               
106                self.main_box=builder.get_object("main_box")
107               
108                self.apply_button=builder.get_object("apply_button")
109                self.checkb1 = builder.get_object("checkbutton1")
110                self.checkb2 = builder.get_object("checkbutton2")
111                self.checkb3 = builder.get_object("checkbutton3")
112                self.checkb4 = builder.get_object("checkbutton4")
113                self.checkb5 = builder.get_object("checkbutton5")
114                self.checkb6 = builder.get_object("checkbutton6")
115                self.num_clients_glade=builder.get_object("num_clients_glade")
116               
117                self.connect_signals()
118                self.main_window.show()
119               
120        #def start_gui
121       
122       
123        def connect_signals(self):
124               
125                # ####################
126                #HACKED TESTING GUI
127                self.login_clicked()
128                # ######
129               
130                self.main_window.connect("destroy",Gtk.main_quit)
131               
132                self.apply_button.connect("clicked",self.apply_button_clicked)
133               
134               
135        #def connect_signals
136       
137       
138        # SIGNALS ########################################################
139       
140        #def login_clicked(self,widget):
141       
142        def login_clicked(self):
143                # HACK
144               
145                user="lliurex"
146                password="lliurex"
147                server="localhost"
148               
149                self.user_val=[user,password]
150                self.n4d_man.user_val=self.user_val
151               
152                self.n4d_man.get_client_list()
153                       
154               
155               
156                self.dprint("Clients connected: %s"%self.n4d_man.detected_clients)
157                self.num_clients_glade.set_text(str(self.n4d_man.detected_clients))
158               
159                t2=threading.Thread(target=self.n4d_man.update_client_list_thread)
160                t2.daemon=True
161                t2.start()
162               
163                GLib.timeout_add(5000,self.client_list_listener)
164               
165                '''user=self.user_entry.get_text()
166                password=self.password_entry.get_text()
167                server=self.server_ip_entry.get_text()         
168
169                if server!="":
170                        self.n4d_man.set_server(server)
171               
172               
173                self.login_msg_label.set_text(_("Validating user..."))
174               
175                self.login_button.set_sensitive(False)'''
176                #self.validate_user(user,password)
177               
178        #def login_clicked
179               
180       
181       
182        def client_list_listener(self):
183               
184                self.num_clients_glade.set_text(str(self.n4d_man.detected_clients))
185                return True
186               
187        #def  client_list_listener
188
189
190
191       
192        def apply_button_clicked(self,widget=True):
193               
194                try:                   
195                       
196                        delete={}
197                        delete[self.home]=[]
198                        delete[self.net]=[]
199                       
200                        info={}
201                        info[self.students]={}
202                       
203                       
204                        info[self.students][self.home]=self.checkb1.get_active()
205                        if info[self.students][self.home]:
206                                delete[self.home].append("students")
207                        info[self.students][self.net]=self.checkb4.get_active()
208                        if info[self.students][self.net]:
209                                delete[self.net].append("students")
210                        info[self.teachers]={}
211                        info[self.teachers][self.home]=self.checkb2.get_active()
212                        if info[self.teachers][self.home]:
213                                delete[self.home].append("teachers")
214                        info[self.teachers][self.net]=self.checkb5.get_active()
215                        if info[self.teachers][self.net]:
216                                delete[self.net].append("teachers")
217                        info[self.admins]={}
218                        info[self.admins][self.home]=self.checkb3.get_active()
219                        if info[self.admins][self.home]:
220                                delete[self.home].append("admins")
221                        info[self.admins][self.net]=self.checkb6.get_active()
222                        if info[self.admins][self.net]:
223                                delete[self.net].append("admins")
224                       
225                       
226                       
227                        for g in info:
228                                print(g)
229                                for d in info[g]:
230                                        print("\t %s : %s"%(d,info[g][d]))
231
232                        self.dprint("Summary to remove this elements: %s"%(delete))
233                       
234                        resume={}
235                       
236                        #DELETE LOCAL HOMES IN FAT CLIENTS
237                        if ( len(delete[self.home] ) > 0 ):
238                                ips_detele=self.n4d_man.ips_connected
239                                self.dprint("Apply to clients: %s"%(ips_detele))
240                                r=self.n4d_man.delete_clients_homes(self.user_val,ips_detele, delete[self.home])
241                                if r[0]:
242                                        #shared in resume all ips and paths deleted
243                                        resume={**resume,**r[1]}
244                       
245                        #print resume home deleted in fat clients
246                        if (  len(resume) >0 ):
247                                self.dprint("")
248                                self.dprint("Summary for HOMES deleted")
249                                for i in resume:
250                                        self.dprint("%s : %s"%(i,resume[i]))
251                       
252                       
253                        #DELETE /NET DIRECTORIES
254                        if ( len(delete[self.net] ) > 0 ):
255                                r=self.n4d_man.delete_net_homes(self.user_val,delete[self.net])
256                                if r[0]:
257                                        self.dprint("")
258                                        self.dprint("Summary for paths in /NET deleted:")
259                                        for i in r[1]:
260                                                self.dprint(i)
261                                       
262                                       
263                        self.detect_connected_clients_cancelled=True
264                        Gtk.main_quit()
265                        sys.exit(0)
266                       
267                except Exception as e:
268                        print ("[HomeEraserGUI] %s"%e)
269                        return [False,str(e)]
270               
271        #def check_changes
272
273
274#class LliurexPerfilreset
275
276
277if __name__=="__main__":
278       
279        pass
280       
Note: See TracBrowser for help on using the repository browser.