source: first-aid-kit/trunk/fuentes/first-aid-kit.install/usr/share/first-aid-kit/NetfilesBox.py @ 8481

Last change on this file since 8481 was 8481, checked in by daduve, 3 months ago

Adding new functions

File size: 12.3 KB
Line 
1import gi
2gi.require_version('Gtk', '3.0')
3from gi.repository import Gtk, Pango, GdkPixbuf, Gdk, Gio, GObject,GLib
4
5import copy
6import gettext
7import Core
8
9#import Dialog
10import time
11import threading
12import sys
13import os
14import xmlrpclib
15import datetime
16from dateutil import parser
17
18gettext.textdomain('first-aid-kit-gui')
19_=gettext.gettext
20
21
22RSRC="./rsrc/"
23
24
25class NetfilesBox(Gtk.VBox):
26       
27       
28        def __init__(self):
29               
30                Gtk.VBox.__init__(self)
31               
32                self.core=Core.Core.get_core()
33               
34                builder=Gtk.Builder()
35                builder.set_translation_domain('first-aid-kit-gui')
36                ui_path=RSRC + "first-aid-kit.ui"
37                builder.add_from_file(ui_path)
38                self.acl_time_path="/tmp/.fak_acl_timepath"
39               
40               
41                self.netfiles_box=builder.get_object("netfiles_box")
42                self.acl_box=builder.get_object("acl_box")
43                self.acl_button=builder.get_object("acl_button")
44                self.acl_spinner=builder.get_object("acl_spinner")
45                self.regenerate_button=builder.get_object("regenerate_button")
46                self.regenerate_spinner=builder.get_object("regenerate_spinner")
47                self.txt_check_netfiles=builder.get_object("txt_check_netfiles")
48                self.spinner_netfiles=builder.get_object("spinner_netfiles")
49                self.label10=builder.get_object("label10")
50                self.label7=builder.get_object("label7")
51                self.section_label_1=builder.get_object("section_label_1")
52                self.box11=builder.get_object("box11")
53
54                self.info_netfiles=builder.get_object("info_netfiles")
55                self.info_netfiles_into=builder.get_object("info_netfiles_into")
56                self.info_netfiles_txt=builder.get_object("info_netfiles_txt")
57                self.info_netfiles_spinner=builder.get_object("info_netfiles_spinner")
58               
59
60                self.add(self.netfiles_box)
61               
62                self.info_netfiles_stack=Gtk.Stack()
63                self.info_netfiles_stack.set_transition_type(Gtk.StackTransitionType.CROSSFADE)
64                self.info_netfiles_stack.set_transition_duration(500)
65                hbox=Gtk.HBox()
66                hbox.show()
67                self.info_netfiles_stack.add_titled(hbox,"empty_box_netfiles","Empty Box")
68                self.info_netfiles_stack.add_titled(self.info_netfiles,"info_netfiles","InfoNetfiles")
69
70                self.wawabox=Gtk.HBox()
71                self.wawabox.pack_start(self.info_netfiles_stack,True,True,0)
72
73                self.netfiles_box.pack_start(self.wawabox,False,False,5)
74
75
76                self.info_netfiles.set_margin_bottom(20)
77                self.info_netfiles.set_margin_left(5)
78                self.info_netfiles.set_margin_right(5)
79
80                self.info_netfiles_stack.set_visible_child_name("empty_box_netfiles")
81                self.acl_executed=False
82                self.regenerate_executed=False
83
84                proxy="https://localhost:9779"
85                self.client=xmlrpclib.ServerProxy(proxy)
86
87                self.acl_error=[False,"True"]
88                self.regenerate_error=[False,"True"]
89               
90                self.connect_signals()
91                self.set_css_info()
92
93
94        #def __init__
95       
96
97        def check_thread_on_startup(self):
98
99                try:
100                        #thread is alive, because was started before.....
101                        if self.client.is_acl_thread_alive(self.core.n4d_key,"NetFoldersManager"):
102                                self.regenerate_button.set_sensitive(False)
103                                self.acl_button.set_sensitive(False)
104                               
105                                if os.path.isfile(self.acl_time_path):
106                                        f=open(self.acl_time_path)
107                                        line=f.readline()
108                                        f.close()
109                                        self.acl_time_start=parser.parse(line)
110
111                                else:
112                                        self.acl_time_start=datetime.datetime.now()
113
114                                allocation=self.acl_button.get_allocation()
115                                w=allocation.width
116                                h=allocation.height
117
118                                self.acl_button.hide()
119                                self.acl_spinner.start()
120                                self.acl_spinner.set_size_request(w,h)
121                                self.acl_spinner.show()
122                                self.info_netfiles_stack.set_visible_child_name("info_netfiles")
123                                self.acl_elapsed=datetime.datetime.now() - self.acl_time_start
124                                self.acl_elapsed=self.time_formated(self.acl_elapsed)
125                                self.info_netfiles_txt.set_text(_("ACLs are still regenerating, time elapsed: %s "%self.acl_elapsed))
126                                self.core.dprint("ACLs are still regenerating, time elapsed: %s "%self.acl_elapsed)
127                                GLib.timeout_add(10000,self.check_acl_thread)
128                except Exception as e:
129                        print(e)
130
131        #def check_thread
132
133
134        def set_css_info(self):
135               
136                self.style_provider=Gtk.CssProvider()
137                f=Gio.File.new_for_path("first-aid-kit.css")
138                self.style_provider.load_from_file(f)
139                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
140               
141                self.box11.set_name("PKG_BOX")
142                self.acl_button.set_name("EXECUTE_BUTTON")
143                self.regenerate_button.set_name("EXECUTE_BUTTON")
144                self.label10.set_name("OPTION_LABEL")
145                self.label7.set_name("OPTION_LABEL")
146                self.section_label_1.set_name("SECTION_LABEL")
147
148                self.info_netfiles_txt.set_name("INFO_LABEL")
149                self.info_netfiles.set_name("PKG_BOX")
150                       
151        #def set-css_info
152
153
154
155
156
157
158        def connect_signals(self):
159               
160                self.acl_button.connect("clicked",self.acl_button_clicked)
161                self.regenerate_button.connect("clicked",self.regenerate_button_clicked)
162               
163        #def connect_signals
164
165
166
167
168
169        def acl_button_clicked(self,widget):
170
171                self.thread=threading.Thread(target=self.acl_button_thread)
172                self.regenerate_button.set_sensitive(False)
173                self.acl_button.set_sensitive(False)
174                self.info_netfiles_stack.set_visible_child_name("empty_box_netfiles")
175                self.thread.daemon=True
176                self.thread.start()
177               
178                allocation=self.acl_button.get_allocation()
179                w=allocation.width
180                h=allocation.height
181
182                self.acl_button.hide()
183                self.acl_spinner.start()
184                self.acl_spinner.set_size_request(w,h)
185                self.acl_spinner.show()
186                self.info_netfiles_stack.set_visible_child_name("info_netfiles")
187
188                self.acl_time_start=datetime.datetime.now()
189
190                if os.path.isfile(self.acl_time_path):
191                        os.remove(self.acl_time_path)
192                f=open(self.acl_time_path,'w')
193                f.write(self.acl_time_start.ctime())
194                f.close()
195
196                self.info_netfiles_txt.set_text(_("ACLs are still regenerating...... please, wait."))
197
198                GLib.timeout_add(10000,self.check_acl_thread)
199       
200        #def acl_button_clicked
201
202
203
204
205
206
207        def acl_button_thread(self):
208       
209                try:
210                        self.core.dprint("ACL regenerating in /net....")
211
212                        self.client.restore_acls_via_thread(self.core.n4d_key,"NetFoldersManager")
213
214                        self.thread_ret={"status":True,"msg":"BROKEN"}
215                       
216                except Exception as e:
217                        self.core.dprint("ACL thread execution Exception: %s"%e)
218                        return False
219                       
220        #def acl_button_thread
221
222
223
224
225
226
227        def check_acl_thread(self):
228               
229                try:
230                       
231                        if self.client.is_acl_thread_alive(self.core.n4d_key,"NetFoldersManager"):
232                                self.acl_elapsed=datetime.datetime.now() - self.acl_time_start
233                                self.acl_elapsed=self.time_formated(self.acl_elapsed)
234                                self.info_netfiles_txt.set_text(_("ACLs are still regenerating, time elapsed: %s "%self.acl_elapsed))
235                                self.core.dprint("ACLs are still regenerating, time elapsed %s "%self.acl_elapsed)
236
237                                return True
238
239                        self.core.dprint("ACLs have been regenerated.")
240                       
241                        self.acl_elapsed=datetime.datetime.now() - self.acl_time_start
242                        self.acl_elapsed=self.time_formated(self.acl_elapsed)
243                        self.acl_spinner.hide()
244                        self.acl_button.show()
245                        self.regenerate_button.set_sensitive(True)
246                        self.acl_button.set_sensitive(True)
247                        self.acl_error=[False,"Perfect"]
248
249                        self.acl_executed=True
250                        self.show_info()
251
252                except Exception as e:
253                        self.core.dprint("ACL check thread execution Exception: %s"%e)
254                        self.acl_spinner.hide()
255                        self.acl_button.show()
256                        self.regenerate_button.set_sensitive(True)
257                        self.acl_button.set_sensitive(True)
258                        self.acl_error=[True,e]
259                        return False
260               
261        #check_acl_thread
262
263
264
265
266
267
268
269        def regenerate_button_clicked(self,widget):
270               
271                self.thread=threading.Thread(target=self.regenerate_button_thread)
272                self.regenerate_button.set_sensitive(False)
273                self.acl_button.set_sensitive(False)
274                self.info_netfiles_stack.set_visible_child_name("empty_box_netfiles")
275                self.thread.daemon=True
276                self.thread.start()
277               
278                allocation=self.regenerate_button.get_allocation()
279                w=allocation.width
280                h=allocation.height
281
282                self.regenerate_button.hide()
283                self.regenerate_spinner.start()
284                self.regenerate_spinner.set_size_request(w,h)
285                self.regenerate_spinner.show()
286                self.info_netfiles_stack.set_visible_child_name("info_netfiles")
287                self.regenerate_time_start=datetime.datetime.now()
288                self.info_netfiles_txt.set_text(_("User folders are still regenerating...... please, wait."))
289
290                GLib.timeout_add(500,self.check_regenerate_thread)
291       
292        #def_regenerate_button_clicked
293
294
295
296
297
298
299        def regenerate_button_thread(self):
300       
301                try:
302                        self.core.dprint("Regenerating folders /net....")
303
304                        users=self.client.light_get_user_list(self.core.n4d_key,"Golem")
305                        for user in users:
306                                user_properties={}
307                                user_properties["profile"]=user[5]
308                                user_properties["uid"]=user[1]
309                                user_properties["uidNumber"]=user[2]
310                                self.core.dprint("User: %s"%user)
311                                self.core.dprint("user_properties: %s"%user_properties)
312                                self.core.dprint("Testing folders in /net, N4D service.....")
313                                self.client.exist_home_or_create(self.core.n4d_key,"Golem",user_properties)
314
315                        self.core.dprint("Restore GROUP folders /net, N4D service.....")
316                        self.client.restore_groups_folders(self.core.n4d_key,"Golem")
317                        self.core.dprint("End of all process")
318
319                        self.thread_ret={"status":True,"msg":"BROKEN"}
320                       
321                except Exception as e:
322                        self.core.dprint("Regenerate thread execution Exception: %s"%e)
323                        return False
324                       
325        #def regenerate_button_thread
326
327
328
329
330
331
332
333        def check_regenerate_thread(self):
334               
335                try:
336                        if self.thread.is_alive():
337                                self.regenerate_elapsed=datetime.datetime.now() - self.regenerate_time_start
338                                self.regenerate_elapsed=self.time_formated(self.regenerate_elapsed)
339                                self.info_netfiles_txt.set_text(_("User folders are still regenerating, time elapsed: %s "%self.regenerate_elapsed))
340                                self.core.dprint("User folders are still regenerating, time elapsed: %s "%self.regenerate_elapsed)
341                                return True
342                       
343                        self.regenerate_elapsed=datetime.datetime.now() - self.regenerate_time_start
344                        self.regenerate_elapsed=self.time_formated(self.regenerate_elapsed)
345                        self.regenerate_spinner.hide()
346                        self.regenerate_button.show()
347                        self.regenerate_button.set_sensitive(True)
348                        self.acl_button.set_sensitive(True)
349
350                        self.regenerate_executed=True
351                        self.show_info()
352
353                except Exception as e:
354                        self.core.dprint("Regenerate check thread execution Exception: %s"%e)
355                        self.regenerate_spinner.hide()
356                        self.regenerate_button.show()
357                        self.regenerate_button.set_sensitive(True)
358                        self.acl_button.set_sensitive(True)
359                        self.regenerate_error=[True,e]
360                        return False
361               
362        #check_regenerate_thread
363
364
365
366
367
368
369
370        def show_info(self):
371
372                if self.acl_error[0]== True:
373                        self.info_netfiles_stack.set_visible_child_name("info_netfiles")
374                        self.info_netfiles_txt.set_text(_("ACLs error: %s")%self.acl_error[1])
375                        if self.regenerate_error[0]==True:
376                                self.info_netfiles_stack.set_visible_child_name("info_netfiles")
377                                self.info_netfiles_txt.set_text(_("ACLs error: %s\nRegenerate error:%s")%(self.acl_error[1],self.regenerate_error[1]))
378                        return True
379                if self.regenerate_error[0]==True:
380                        self.info_netfiles_stack.set_visible_child_name("info_netfiles")
381                        self.info_netfiles_txt.set_text(_("Regenerate error:%s")%self.regenerate_error[1])
382                        return True
383
384                if self.acl_executed == True:
385                        if self.regenerate_executed == False:
386                                self.info_netfiles_stack.set_visible_child_name("info_netfiles")
387                                self.info_netfiles_txt.set_text(_("Finished!!!\nACLs of the files have been reviewed. Time elapsed to do %s"%self.acl_elapsed))
388                        else:
389                                self.info_netfiles_stack.set_visible_child_name("info_netfiles")
390                                self.info_netfiles_txt.set_text(_("Finished!!!\nACLs of the files have been reviewed, in %s.\nAll user folders have been regenerated if it's necessary in %s"%(self.acl_elapsed,self.regenerate_elapsed)))
391                else:
392                        if self.regenerate_executed == True:
393                                self.info_netfiles_stack.set_visible_child_name("info_netfiles")
394                                self.info_netfiles_txt.set_text(_("Finished!!!\nAll user folders have been regenerated if it's necessary. Time elapsed to do %s")%self.regenerate_elapsed)
395
396        #def show_info
397
398
399
400
401
402
403        def time_formated(self,time_timedelta):
404                try:
405
406                        hours=time_timedelta.seconds//3600
407                        minutes=time_timedelta.seconds//60
408                        seconds=time_timedelta.seconds-(minutes*60)
409
410                        if hours == 0:
411                                if minutes == 0:
412                                        return("%s seconds"%seconds)
413                                else:
414                                        if seconds == 0:
415                                                return("%s min"%minutes)
416                                        else:
417                                                if seconds<10:
418                                                        return("%s:%02d min"%(minutes,seconds))
419                                                else:
420                                                        return("%s:%s min"%(minutes,seconds))
421                        else:
422                                if minutes<10:
423                                        if seconds<10:
424                                                return("%s hours and %02d:%02d minutes"%(hours,minutes,seconds))
425                                        else:
426                                                return("%s hours and %02d:%s minutes"%(hours,minutes,seconds))
427                                else:
428                                        if seconds<10:
429                                                return("%s hours and %0s:%02d minutes"%(hours,minutes,seconds))
430                                        else:
431                                                return("%s hours and %0s:%s minutes"%(hours,minutes,seconds))
432
433                except Exception as e:
434                        self.core.dprint("Error in time_formated: %s"%e)
435
436        #def time_formated
Note: See TracBrowser for help on using the repository browser.