source: lliurex-up/trunk/fuentes/lliurex-up/usr/share/lliurex-up/lliurex-up.py @ 4619

Last change on this file since 4619 was 4619, checked in by jrpelegrina, 2 years ago

Improve startup of gui

  • Property svn:executable set to *
File size: 46.4 KB
Line 
1#!/usr/bin/env python
2import gi
3gi.require_version('Gtk', '3.0')
4gi.require_version('PangoCairo', '1.0')
5gi.require_version('Vte', '2.91')
6
7import cairo
8import os
9import shutil
10import threading
11import ConfigParser
12import platform
13import subprocess
14import sys
15import time
16import commands
17from gi.repository import Gtk, Gdk, GdkPixbuf, GObject, GLib, PangoCairo, Pango, Vte
18
19
20import LliurexUpConnect
21
22import signal
23signal.signal(signal.SIGINT, signal.SIG_DFL)
24
25import gettext
26gettext.textdomain('lliurex-up')
27_ = gettext.gettext
28
29
30
31BASE_DIR="/usr/share/lliurex-up/"
32GLADE_FILE=BASE_DIR+"rsrc/lliurex-up.ui"
33CACHED_ICON=BASE_DIR+"rsrc/cached.png"
34DONE_ICON=BASE_DIR+"rsrc/done.png"
35ERROR_ICON=BASE_DIR+"rsrc/error.png"
36NEWPACKAGE_ICON=BASE_DIR +"rsrc/newpackage.png"
37UPDATEPACKAGE_ICON=BASE_DIR + "rsrc/updatepackage.png" 
38DESKTOP_PATH="/usr/share/applications"
39LOCK_PATH="/var/run/lliurexUp.lock"
40
41class Package:
42
43        #def __init__(self,name,version,size,desktop_file,changelog_file):
44        def __init__(self,installed,name,version,size):
45                self.name=name
46                self.version=version
47                self.size=size
48                desktop_file=os.path.join(DESKTOP_PATH,name+".desktop")
49                self.parse_desktop(desktop_file)
50                #self.parse_changelog(changelog_file)
51                self.parse_installed_icon(CACHED_ICON)
52                self.parse_newpackage_icon(installed)
53
54        #def__init__
55       
56        def parse_desktop(self,desktop_file):
57               
58                try:
59                        config = ConfigParser.ConfigParser()
60                        config.optionxform=str
61
62                        config.read(desktop_file)
63                       
64                        if config.has_section("Desktop Entry") and config.has_option("Desktop Entry","Icon"):
65                                self.icon=config.get("Desktop Entry","Icon")
66                                icon_extension=os.path.splitext(self.icon)[1]
67                                if icon_extension==".xpm":
68                                        self.icon="package"
69                        else:
70                                self.icon="package"
71                               
72                except Exception as e:
73                       
74                        self.icon="package"
75                       
76        #def parse_desktop
77
78        '''
79        def parse_changelog(self,changelog_file):
80               
81                try:
82                       
83                        f=open(changelog_file,"r")
84                        self.changelog=f.readlines()
85                        f.close()
86                                               
87                except Exception as e:
88                       
89                        self.changelog="Changelog not found"
90
91        #def parse_changelog
92        '''
93       
94        def parse_installed_icon(self, icon_file):
95               
96                        image=Gtk.Image()
97                        image.set_from_file(icon_file)         
98                        self.installed=image.get_pixbuf()
99
100
101        #def parse_installed_icon
102
103
104        def parse_newpackage_icon(self, installed):
105               
106                        image=Gtk.Image()
107                        if installed==str(None):
108                                icon_file=NEWPACKAGE_ICON
109                        else:
110                                icon_file=UPDATEPACKAGE_ICON
111
112                        image.set_from_file(icon_file)         
113                        self.type=image.get_pixbuf()
114
115
116class LliurexUp:
117
118        def __init__(self):
119                self.islliurexup_running()
120                self.check_root()
121                #self.free_space_check()
122                self.llxup_connect=LliurexUpConnect.LliurexUpConnect()
123                #print "  [Lliurex-up]: Checking metapackage"
124                #self.checkFlavour=self.llxup_connect.checkFlavour()
125                #self.previousFlavours=self.llxup_connect.previousFlavours
126                #self.start_gui()
127
128                       
129        #def __init__           
130
131        def islliurexup_running(self):
132
133                if os.path.exists(LOCK_PATH):
134                        dialog = Gtk.MessageDialog(None,0,Gtk.MessageType.ERROR, Gtk.ButtonsType.CANCEL, "Lliurex UP")
135                        dialog.format_secondary_text(_("Lliurex Up is now running."))
136                        dialog.run()
137                        sys.exit(1)
138
139        def check_root(self):
140               
141                try:
142                        print "  [Lliurex-up]: Checking root"
143                        f=open("/etc/lliurex-up.token","w")
144                        f.close()
145                        os.remove("/etc/lliurex-up.token")
146                except:
147                        print "  [Lliurex-up]: No administration privileges"
148                        dialog = Gtk.MessageDialog(None,0,Gtk.MessageType.ERROR, Gtk.ButtonsType.CANCEL, "Lliurex UP")
149                        dialog.format_secondary_text(_("You need administration privileges to run this application."))
150                        dialog.run()
151                        sys.exit(1)
152               
153        #def check_root
154
155        def free_space_check(self):
156               
157                if ((os.statvfs("/").f_bfree * os.statvfs("/").f_bsize) / (1024*1024*1024)) < 2: #less than 2GB available?
158                        return False
159                        '''
160                        md = Gtk.MessageDialog(None, 0,Gtk.MessageType.ERROR, Gtk.ButtonsType.CANCEL," Lliurex UP")
161                        md.format_secondary_text(_("There's not enough space on disk to upgrade (2 GB needed)"))
162                        md.run()
163                        md.destroy()
164                        sys.exit(1)
165                        '''
166                else:
167                        return True     
168
169        # def free_space_check
170                       
171        def start_gui(self):
172               
173                builder=Gtk.Builder()
174                builder.set_translation_domain('lliurex-up')
175
176                glade_path=GLADE_FILE
177                builder.add_from_file(glade_path)
178
179                self.stack = Gtk.Stack()
180                self.stack.set_transition_duration(1000)
181                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
182
183
184                self.window=builder.get_object("main_window")
185                self.main_box=builder.get_object("main_box")
186                self.pbar=builder.get_object("progressbar")
187                self.pbar_label=builder.get_object("progressbar_label")
188               
189
190                self.cancel_button_box=builder.get_object("cancel_button_box")
191                self.cancel_button_eb=builder.get_object("cancel_button_eventbox")
192                self.cancel_button_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK )
193                self.cancel_button_eb.connect("button-press-event", self.quit)
194                self.cancel_button_eb.connect("motion-notify-event", self.mouse_over_cancel)
195                self.cancel_button_eb.connect("leave-notify-event", self.mouse_exit_cancel)
196                self.cancel_button_label=builder.get_object("cancel_button_label")
197
198
199                self.gather_box=builder.get_object("gather_box")
200                self.yes_button_box=builder.get_object("yes_button_box")
201                self.yes_button_eb=builder.get_object("yes_button_eventbox")
202                self.yes_button_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK )
203                self.yes_button_eb.connect("button-release-event", self.yes_button_clicked)
204                self.yes_button_eb.connect("motion-notify-event", self.mouse_over_yes)
205                self.yes_button_eb.connect("leave-notify-event", self.mouse_exit_yes)
206                self.yes_button_label=builder.get_object("yes_button_label")
207
208                self.no_button_box=builder.get_object("no_button_box")
209                self.no_button_eb=builder.get_object("no_button_eventbox")
210                self.no_button_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK )
211                self.no_button_eb.connect("button-release-event", self.no_button_clicked)
212                self.no_button_eb.connect("motion-notify-event", self.mouse_over_no)
213                self.no_button_eb.connect("leave-notify-event",self.mouse_exit_no)
214                self.no_button_label=builder.get_object("no_button_label")
215                self.gather_logo_box=builder.get_object("gather_logo_box")
216                self.gather_label=builder.get_object("gather_label")
217                self.spinner=builder.get_object("spinner")
218
219                self.update_box=builder.get_object("update_box")
220                self.current_version_label=builder.get_object("current_version_label")
221                self.current_version_label_info=builder.get_object("current_version_info_label")
222                self.version_available_label=builder.get_object("version_available_label")
223                self.version_available_label_info=builder.get_object("version_available_info_label")
224                self.version_update_label=builder.get_object("version_update_label")
225                self.version_update_label_info=builder.get_object("version_update_info_label")
226                self.number_packages_label=builder.get_object("number_packages_label")
227                self.number_packages_label_info=builder.get_object("number_packages_info_label")
228
229                self.size_update_label=builder.get_object("size_update_label")
230                self.size_update_label_info=builder.get_object("size_update_info_label")
231
232                self.view_packages_button_box=builder.get_object("view_packages_button_box")
233                self.view_packages_eb=builder.get_object("view_packages_eventbox")
234                self.view_packages_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK )
235                self.view_packages_eb.connect("button-release-event", self.view_packages_clicked)
236                self.view_packages_eb.connect("motion-notify-event", self.mouse_over_view_packages)
237                self.view_packages_eb.connect("leave-notify-event", self.mouse_exit_view_packages)
238
239                self.view_packages_label=builder.get_object("view_packages_label")
240
241                self.update_button_box=builder.get_object("update_button_box")
242                self.update_button_eb=builder.get_object("update_button_eventbox")
243                self.update_button_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK)
244                self.update_button_eb.connect("button-release-event", self.upgrade_process)
245                self.update_button_eb.connect("motion-notify-event", self.mouse_over_update_button)
246                self.update_button_eb.connect("leave-notify-event", self.mouse_exit_update_button)
247
248                self.update_button_label=builder.get_object("update_button_label")
249                self.terminal_label=builder.get_object("terminal_label")
250                self.viewport=builder.get_object("viewport")
251                self.terminal_scrolled=builder.get_object("terminalScrolledWindow")
252                self.vterminal=Vte.Terminal()
253                self.vterminal.spawn_sync(
254                        Vte.PtyFlags.DEFAULT,
255                        os.environ['HOME'],
256                        #["/usr/sbin/dpkg-reconfigure", "xdm"],
257                        ["/bin/bash"],
258                        [],
259                        GLib.SpawnFlags.DO_NOT_REAP_CHILD,
260                        None,
261                        None,
262                )
263                font_terminal = Pango.FontDescription("monospace normal 10")
264                self.vterminal.set_font(font_terminal)
265                self.vterminal.set_scrollback_lines(-1)
266                self.vterminal.set_sensitive(False)
267                self.terminal_scrolled.add(self.vterminal)
268               
269
270                self.packages_box=builder.get_object("packages_box")
271                self.return_arrow_box=builder.get_object("return_arrow_box")
272                self.return_arrow_eb=builder.get_object("return_arrow_eventbox")
273                self.return_arrow_eb.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK)
274                self.return_arrow_eb.connect("button-release-event", self.arrow_clicked)
275                self.return_arrow_eb.connect("motion-notify-event",self.mouse_over_return_arrow)
276                self.return_arrow_eb.connect("leave-notify-event",self.mouse_exit_return_arrow)
277                self.packages_label=builder.get_object("packages_label")
278                self.packages_tv=builder.get_object("packages_treeview")
279                self.changelog_texview=builder.get_object("changelog_textview")
280
281                #self.packages_store=Gtk.ListStore(str,str,str,GdkPixbuf.Pixbuf)
282                self.packages_store=Gtk.ListStore(GdkPixbuf.Pixbuf,str,str,str,GdkPixbuf.Pixbuf)
283                self.packages_tv.set_model(self.packages_store)
284
285                column=Gtk.TreeViewColumn("")
286                cell=Gtk.CellRendererPixbuf()
287                column.pack_start(cell,True)
288                column.add_attribute(cell,"pixbuf",0)
289                self.packages_tv.append_column(column)
290
291                column=Gtk.TreeViewColumn("")
292                cell=Gtk.CellRendererPixbuf()
293                cell.set_property("stock-size",Gtk.IconSize.DIALOG)
294                column.pack_start(cell,True)
295                column.add_attribute(cell,"icon-name",1)
296                self.packages_tv.append_column(column)
297               
298                column=Gtk.TreeViewColumn(_("Package"))
299                cell=Gtk.CellRendererText()
300                column.pack_start(cell,True)
301                column.add_attribute(cell,"markup",2)
302                column.set_expand(True)
303
304               
305                self.packages_tv.append_column(column)
306                self.packages_tv.connect("button-release-event",self.package_clicked)
307               
308                column=Gtk.TreeViewColumn(_("Size"))
309                cell=Gtk.CellRendererText()
310                cell.set_property("alignment",Pango.Alignment.CENTER)
311                column.pack_start(cell,False)
312                column.add_attribute(cell,"markup",3)
313                self.packages_tv.append_column(column)         
314
315
316                # done_icon=Gtk.Image()
317                # done_icon.set_from_file(CACHED_ICON)
318                # pixbuf=done_icon.get_pixbuf()
319                column=Gtk.TreeViewColumn(_("State"))
320                cell=Gtk.CellRendererPixbuf()
321                column.pack_start(cell,True)
322                column.add_attribute(cell,"pixbuf",4)
323                self.packages_tv.append_column(column)
324               
325                self.changelog_textview=builder.get_object("changelog_textview")
326                self.changelog_label=builder.get_object("changelog_label")
327
328
329                self.stack.add_titled(self.gather_box,"gather","Gather")
330                self.stack.add_titled(self.update_box,"update", "Update")
331                self.stack.add_titled(self.packages_box, "packages", "Packages")
332
333                self.main_box.pack_start(self.stack,True,False,5)
334
335                self.window.show_all()
336                self.terminal_scrolled.hide()
337                self.viewport.hide()
338                self.terminal_label.hide()
339                self.cancel_button_box.hide()
340                self.yes_button_box.hide()
341                self.no_button_box.hide()
342
343                self.pbar_label.show()
344                self.pbar.show()
345               
346                self.window.connect("destroy",self.quit)
347               
348                self.set_css_info()
349
350                msg_gather="<span><b>"+_("Checking system")+"</b></span>"
351                self.gather_label.set_markup(msg_gather)
352                GLib.timeout_add(100,self.pulsate_checksystem)
353
354                self.initactions_process_t=threading.Thread(target=self.initActions_process)
355                self.check_lliurexup_t=threading.Thread(target=self.check_lliurexup_version)
356                self.install_lliurexup_t=threading.Thread(target=self.install_lliurexup)
357                self.check_mirror_t=threading.Thread(target=self.check_mirror)
358                #self.wait_response_t=threading.Thread(target=self.wait_response)
359                self.execute_lliurexmirror_t=threading.Thread(target=self.execute_lliurexmirror)
360                self.get_lliurexversionlocal_t=threading.Thread(target=self.get_lliurexversionlocal)
361                self.get_lliurexversionnet_t=threading.Thread(target=self.get_lliurexversionnet)
362                self.checkInitialFlavourToInstall_t=threading.Thread(target=self.checkInitialFlavourToInstall)
363                self.gather_packages_t=threading.Thread(target=self.gather_packages)
364                self.preactions_process_t=threading.Thread(target=self.preactions_process)
365                self.update_process_t=threading.Thread(target=self.update_process)
366                self.checkFinalFlavourToInstall_t=threading.Thread(target=self.checkFinalFlavourToInstall)
367                self.postactions_process_t=threading.Thread(target=self.postactions_process)
368
369                self.initactions_process_t.daemon=True
370                self.check_lliurexup_t.daemon=True
371                self.install_lliurexup_t.daemon=True
372                self.check_mirror_t.daemon=True
373                #self.wait_response_t.daemon=True
374                self.execute_lliurexmirror_t.daemon=True
375                self.get_lliurexversionlocal_t.daemon=True
376                self.get_lliurexversionnet_t.daemon=True
377                self.checkInitialFlavourToInstall_t.daemon=True
378                self.gather_packages_t.daemon=True
379                self.preactions_process_t.daemon=True
380                self.update_process_t.daemon=True
381                self.checkFinalFlavourToInstall_t.daemon=True
382                self.postactions_process_t.daemon=True
383
384                self.initactions_process_t.done=False
385                self.check_lliurexup_t.done=False
386                self.install_lliurexup_t.done=False
387                self.check_mirror_t.done=False
388                #self.wait_response_t.done=False
389                self.execute_lliurexmirror_t.done=False
390                self.get_lliurexversionlocal_t.done=False
391                self.get_lliurexversionnet_t.done=False
392                self.checkInitialFlavourToInstall_t.done=False
393                self.gather_packages_t.done=False
394                self.preactions_process_t.done=False
395                self.update_process_t.done=False
396                self.checkFinalFlavourToInstall_t.done=False
397                self.postactions_process_t.done=False
398               
399                self.initactions_process_t.launched=False
400                self.check_lliurexup_t.launched=False
401                self.install_lliurexup_t.launched=False
402                self.check_mirror_t.launched=False
403                #self.wait_response_t.launched=False
404                self.execute_lliurexmirror_t.launched=False
405                self.get_lliurexversionlocal_t.launched=False
406                self.get_lliurexversionnet_t.launched=False
407                self.checkInitialFlavourToInstall_t.launched=False
408                self.gather_packages_t.launched=False
409                self.preactions_process_t.launched=False
410                self.update_process_t.launched=False
411                self.checkFinalFlavourToInstall_t.launched=False
412                self.postactions_process_t.launched=False
413               
414                self.spinner.start()
415                self.package_list=[]
416                self.max_seconds=5.0
417                self.current_second=0
418                self.number_process=8
419
420                GObject.threads_init()
421                Gtk.main()
422
423        #def start_gui
424       
425        def set_css_info(self):
426       
427                css = """
428
429
430                #WHITE_BACKGROUND {
431                        background-image:-gtk-gradient (linear, left top, left bottom, from (#ffffff),  to (#ffffff));;
432               
433                }
434
435                #BUTTON_LABEL{
436                        color:white;
437                        font: Roboto 10;
438                }
439
440                #DISABLED_BUTTON_OVER{
441                        background-image:-gtk-gradient (linear, left top, left bottom, from (#888888),  to (#888888));;
442                }
443               
444                #DISABLED_BUTTON{
445                        background-image:-gtk-gradient (linear, left top, left bottom, from (#666666),  to (#666666));;
446                }
447               
448                #CANCEL_BUTTON{
449                        background-image:-gtk-gradient (linear, left top, left bottom, from (#D32F2F),  to (#D32F2F));;
450                }
451               
452                #CANCEL_BUTTON_OVER{
453                        background-image:-gtk-gradient (linear, left top, left bottom, from (#F44336),  to (#F44336));;
454                }
455
456                #BUTTON_COLOR {
457                        background-image:-gtk-gradient (linear, left top, left bottom, from (#448AFF),  to (#448AFF));;
458               
459                }
460               
461                #BUTTON_OVER_COLOR {
462                        background-image:-gtk-gradient (linear, left top, left bottom, from (#449fff),  to (#449fff));;
463                       
464               
465                }
466
467                #UPDATE_BUTTON_LABEL{
468                        color:white;
469                        font: Roboto 11;
470                }
471               
472                #UPDATE_CORRECT_BUTTON_COLOR {
473                        background-image:-gtk-gradient (linear, left top, left bottom, from (#43A047),  to (#43A047));;
474               
475                }
476
477                #UPDATE_OVER_COLOR {
478                        background-image:-gtk-gradient (linear, left top, left bottom, from (#53b757),  to (#53b757));;
479               
480                }
481
482
483                #UPDATE_ERROR_BUTTON_COLOR {
484                        background-image:-gtk-gradient (linear, left top, left bottom, from (#D32F2F),  to (#D32F2F));;
485               
486                }
487
488                #UPDATE_LAUNCHED_OVER_COLOR {
489                        background-image:-gtk-gradient (linear, left top, left bottom, from (#F44336),  to (#F44336));;
490               
491                }
492
493                #UPDATE_BUTTON_LAUNCHED_COLOR {
494                        background-image:-gtk-gradient (linear, left top, left bottom, from (#bdbdbd), to (#bdbdbd));;
495
496                }
497                               
498                #GATHER_ICON_COLOR {
499                        background-image:-gtk-gradient (linear, left top, left bottom, from (#b0bec5),  to (#b0bec5));;
500               
501                }
502               
503               
504                #BLUE_FONT {
505                        color: #3366cc;
506                        font: Roboto Bold 11;
507                       
508                }       
509               
510
511                #CHANGELOG_FONT {
512                        color: #3366cc;
513                        font: Roboto 11;
514                       
515                }
516
517                #LABEL_OPTION{
518               
519                        color: #808080;
520                        font: Roboto 11;
521                }
522
523                #ERROR_FONT {
524                        color: #CC0000;
525                        font: Roboto Bold 11;
526                }
527               
528                #DISABLED_BUTTON{
529                        background-image:-gtk-gradient (linear, left top, left bottom, from (#666666),  to (#666666));;
530                }
531                """
532
533                self.style_provider=Gtk.CssProvider()
534                self.style_provider.load_from_data(css)
535                Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),self.style_provider,Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
536               
537                self.window.set_name("WHITE_BACKGROUND")
538                self.update_box.set_name("WHITE_BACKGROUND")
539                self.gather_box.set_name("WHITE_BACKGROUND")
540                self.packages_box.set_name("WHITE_BACKGROUND")
541                self.gather_label.set_name("CHANGELOG_FONT")
542                self.pbar_label.set_name("CHANGELOG_FONT")
543
544                self.yes_button_box.set_name("BUTTON_COLOR")
545                self.yes_button_label.set_name("BUTTON_LABEL")
546
547                self.no_button_box.set_name("BUTTON_COLOR")
548                self.no_button_label.set_name("BUTTON_LABEL")
549
550                self.view_packages_button_box.set_name("BUTTON_COLOR")
551                self.view_packages_label.set_name("BUTTON_LABEL")
552
553                self.cancel_button_box.set_name("BUTTON_COLOR")
554                self.cancel_button_label.set_name("BUTTON_LABEL")       
555
556                self.current_version_label.set_name("LABEL_OPTION")
557                self.version_available_label.set_name("LABEL_OPTION")
558                self.version_update_label.set_name("LABEL_OPTION")     
559                self.number_packages_label.set_name("LABEL_OPTION")
560                self.size_update_label.set_name("LABEL_OPTION")
561                self.update_button_label.set_name("UPDATE_BUTTON_LABEL")
562                self.update_button_box.set_name("BUTTON_COLOR")
563                self.terminal_label.set_name("CHANGELOG_FONT")
564                self.current_version_label_info.set_name("BLUE_FONT")
565                self.version_available_label_info.set_name("BLUE_FONT")
566                self.version_update_label_info.set_name("BLUE_FONT")
567                self.number_packages_label_info.set_name("BLUE_FONT")
568                self.size_update_label_info.set_name("BLUE_FONT")
569
570
571                self.packages_label.set_name("LABEL_OPTION")
572                #self.changelog_label.set_name("LABEL_OPTION")
573                self.changelog_texview.set_name("CHANGELOG_FONT")
574                self.return_arrow_box.set_name("BUTTON_COLOR")
575               
576        #def set_css_info       
577
578
579        def pulsate_checksystem(self):
580
581                #self.pbar.pulse()
582
583                abort=False
584                if not self.initactions_process_t.launched:
585                        print "  [Lliurex-up]: Checking system: connection to lliurex.net and init-actions"
586                        self.initactions_process_t.start()
587                        self.initactions_process_t.launched=True
588                        self.show_number_process_executing(1,"")
589                # if not self.check_lliurexup_t.launched:
590                #       print "[Lliurex-up]: Checking Lliurex-up version"
591                #       self.check_lliurexup_t.start()
592                #       self.check_lliurexup_t.launched=True
593                #       self.show_number_process_executing(1,"")
594
595                if self.initactions_process_t.done:
596                        if self.free_space:
597                                if self.statusN4d:
598                                        if self.can_connect:
599                                                #is_mirror_running_inserver=self.llxup_connect.clientCheckingMirrorIsRunning()
600                                                if self.is_mirror_running_inserver==False:
601
602                                                        if  not self.check_lliurexup_t.is_alive() and not self.check_lliurexup_t.launched:
603                                                                print "  [Lliurex-up]: Checking Lliurex-up version"
604                                                                msg_gather="<span><b>"+_("Looking for new version of LliureX Up")+"</b></span>"
605                                                                self.gather_label.set_markup(msg_gather)
606                                                                self.check_lliurexup_t.start()
607                                                                self.check_lliurexup_t.launched=True
608                                                                self.show_number_process_executing(2,"")
609
610
611                                                        if  self.check_lliurexup_t.done:
612                                                                if not self.is_lliurexup_updated:
613                                                                        if  not self.install_lliurexup_t.is_alive() and not self.install_lliurexup_t.launched:
614                                                                                print "  [Lliurex-up]: Updating Lliurex-up"
615                                                                                msg_gather="<span><b>"+_("Updating LliureX Up")+"</b></span>"
616                                                                                self.gather_label.set_markup(msg_gather)
617                                                                                self.install_lliurexup_t.start()
618                                                                                self.install_lliurexup_t.launched=True
619                                                                                self.show_number_process_executing(3,"")
620
621                                                                        else:
622                                                                                if self.install_lliurexup_t.done:
623                                                                                        print "  [Lliurex-up]: Reboot Lliurex-up"
624                                                                                        #msg_gather="<span><b>"+_("Lliurex-up is now updated and will be reboot")+"</b></span>"
625                                                                                        #self.pbar.hide()
626                                                                                        #self.gather_label.set_markup(msg_gather)
627                                                                                        #self.t=threading.Thread(target=self.reboot_lliurexup)
628                                                                                        self.pbar_label.hide()
629                                                                                        self.msg_wait="<span><b>"+_("LliureX Up is now updated and will be reboot in %s seconds...")+"</b></span>"
630                                                                                        GLib.timeout_add(10,self.wait_to_reboot)
631                                                                                        #self.t.daemon=True
632                                                                                        #self.t.start()
633                                                                                        return False
634                                                                else:
635                                                                        if not self.check_mirror_t.is_alive() and not self.check_mirror_t.launched:
636                                                                                print "  [Lliurex-up]: Checking if mirror exist"
637                                                                                msg_gather="<span><b>"+_("Checking if mirror exist and there is updated")+"</b></span>"
638                                                                                self.gather_label.set_markup(msg_gather)
639                                                                                self.check_mirror_t.start()
640                                                                                self.check_mirror_t.launched=True
641                                                                                self.show_number_process_executing(4,"")
642
643
644                                                                       
645                                                                        if      self.check_mirror_t.done:
646                                                                                is_mirror_running=self.llxup_connect.lliurexMirrorIsRunning()
647
648                                                                                if not self.is_mirror_updated:
649                                                                                        if not is_mirror_running:
650                                                                                                print "  [Lliurex-up]: Asking if mirror will be update"
651                                                                                                self.yes_button_box.show()
652                                                                                                self.no_button_box.show()
653                                                                                                self.pbar.hide()
654                                                                                                self.pbar_label.hide()
655                                                                                                #self.spinner.stop()
656                                                                                                msg_gather="<span><b>"+_("Your mirror is not update. Do you want to update it?")+"</b></span>"
657                                                                                                self.gather_label.set_markup(msg_gather)
658                                                                                                #GLib.timeout_add(100,self.pulsate_wait_response)
659                                                                                                return False
660
661                                                                                        else:
662                                                                                                self.mirror_running_msg()
663                                                                                                return False
664
665                                                                                else:   
666                                                                                        if is_mirror_running:
667                                                                                                self.mirror_running_msg()
668                                                                                                return False
669                                                                                        else:   
670                                                                                                print "  [Lliurex-up]: Nothing to do with mirror"
671                                                                                                GLib.timeout_add(100,self.pulsate_get_info)
672                                                                                                return False
673                                       
674                                                else:
675                                                        abort=True
676                                                        '''
677                                                        self.spinner.stop()
678                                                        self.pbar.hide()
679                                                        self.pbar_label.hide()
680                                                        self.cancel_button_box.show()
681                                                        self.gather_label.set_name("ERROR_FONT")
682                                                        '''
683                                                        if self.is_mirror_running_inserver:
684                                                                msg_gather="<span><b>"+_("Mirror is being updated in server. Unable to update the system")+"</b></span>"
685                                                                print "  [Lliurex-up]: Mirror is being updated in server"
686                                                        else:
687                                                                msg_gather="<span><b>"+_("Unable to connect with server")+"</b></span>"
688                                                                print "  [Lliurex-up]: Unable to connect with server"
689
690
691                                                        #self.gather_label.set_markup(msg_gather)
692                                                        #return False
693
694
695                                        else:
696                                                abort=True
697                                                '''
698                                                self.spinner.stop()
699                                                self.pbar.hide()
700                                                self.pbar_label.hide()
701                                                self.cancel_button_box.show()
702                                                self.gather_label.set_name("ERROR_FONT")
703                                                '''
704                                                msg_gather="<span><b>"+_("Unable to connect to lliurex.net")+"</b></span>"
705                                                #self.gather_label.set_markup(msg_gather)
706                                                print "  [Lliurex-up]: Unable to connect to lliurex.net"
707                                                #return False
708
709                                else:
710                                        abort=True
711                                        '''
712                                        self.spinner.stop()
713                                        self.pbar.hide()
714                                        self.pbar_label.hide()
715                                        self.cancel_button_box.show()
716                                        self.gather_label.set_name("ERROR_FONT")
717                                        '''
718                                        msg_gather="<span><b>"+_('N4d is not working. Restart the service and try againg')+"</b></span>"
719                                        #self.gather_label.set_markup(msg_gather)
720                                        print "  [Lliurex-up]: N4d is not working"
721                                        #return False
722                        else:
723                                abort=True
724                                msg_gather="<span><b>"+_("There's not enough space on disk to upgrade (2 GB needed)")+"</b></span>"
725                                print "  [Lliurex-up]: Not enough space on disk"
726                                                               
727                if abort:
728                        self.spinner.stop()
729                        self.pbar.hide()
730                        self.pbar_label.hide()
731                        self.cancel_button_box.show()
732                        self.gather_label.set_name("ERROR_FONT")
733                        self.gather_label.set_markup(msg_gather)
734                        return False
735               
736                               
737                if self.initactions_process_t.is_alive():
738                        return True                                     
739
740                if  self.check_lliurexup_t.launched:
741                        if self.check_lliurexup_t.is_alive():
742                                return True
743
744                if self.install_lliurexup_t.launched: 
745                        if self.install_lliurexup_t.is_alive():
746                                return True     
747                                       
748                if self.check_mirror_t.launched:
749                        if self.check_mirror_t.is_alive():
750                                return True
751
752               
753        #def pulsate_checksystem       
754
755        def wait_to_reboot(self):
756
757                csecond=int(self.max_seconds+1-self.current_second)
758                self.gather_label.set_markup(self.msg_wait%csecond)
759                self.pbar.set_fraction(self.current_second/self.max_seconds)
760
761                self.current_second+=0.01
762
763                if self.current_second>=self.max_seconds:
764                        self.llxup_connect.cleanLliurexUpLock()
765                        os.execl(sys.executable, sys.executable, *sys.argv)     
766                        return False
767                else:
768                        return True
769
770        #def wait_to_reboot
771
772       
773        def initActions_process(self):
774                time.sleep(5)
775                self.free_space=self.free_space_check()
776                if self.free_space:
777                        self.statusN4d=self.llxup_connect.checkInitialN4dStatus()
778                        if self.statusN4d:
779                                self.llxup_connect.checkInitialFlavour()
780                                self.can_connect=self.llxup_connect.canConnectToLliurexNet()
781                                if self.can_connect:
782                                        self.is_mirror_running_inserver=self.llxup_connect.clientCheckingMirrorIsRunning()
783                                        self.llxup_connect.initActionsScript()
784
785                self.initactions_process_t.done=True
786       
787        def check_lliurexup_version(self):
788
789                #time.sleep(5) 
790                self.is_lliurexup_updated=self.llxup_connect.isLliurexUpIsUpdated()
791                self.check_lliurexup_t.done=True
792               
793        #def check_lliurexup_version   
794               
795        def install_lliurexup(self):
796
797                self.is_lliurexup_installed=self.llxup_connect.installLliurexUp()
798                self.install_lliurexup_t.done=True
799
800        #def install_lliurexup 
801
802               
803        def check_mirror(self):
804
805                self.is_mirror_updated=self.llxup_connect.lliurexMirrorIsUpdated()
806                self.check_mirror_t.done=True
807       
808        #def check_mirror       
809
810        def no_button_clicked(self,widget,event):
811               
812                #self.response=0
813                self.pbar.show()
814                self.pbar_label.show() 
815                GLib.timeout_add(100,self.pulsate_get_info)
816                self.yes_button_box.hide()
817                self.no_button_box.hide()
818                log_msg="Update lliurex-mirror: No"
819                self.llxup_connect.log(log_msg)
820
821        #def def no_button_clicked
822               
823        def yes_button_clicked(self,widget,event):
824       
825                #self.response=1
826                self.pbar.show()
827                self.pbar_label.show()
828                print "[Lliurex-up]: Updating mirror"
829                self.updated_percentage(0)
830                #self.spinner.start()
831                self.yes_button_box.hide()
832                self.no_button_box.hide()
833                #msg_gather="<span><b>"+_("Mirror is being updated. The process may take several minutes")+"</b></span>"
834                #self.gather_label.set_markup(msg_gather)
835                self.execute_lliurexmirror_t.start()
836                self.mirror_running_msg()
837                #GLib.timeout_add(1000,self.pulsate_updating_mirror)
838                log_msg="Update lliurex-mirror: Yes"
839                print log_msg
840                self.llxup_connect.log(log_msg)
841
842        #def yes_button_clicked
843
844        def pulsate_updating_mirror(self):
845
846                self.is_mirror_running=self.llxup_connect.lliurexMirrorIsRunning()
847
848                if self.is_mirror_running or self.execute_lliurexmirror_t.is_alive():
849                        mirror_percentage=self.llxup_connect.getPercentageLliurexMirror()
850                        self.updated_percentage(mirror_percentage)
851                        return True
852               
853                else:
854                        #self.spinner.stop()
855                        #self.pbar_label.hide()
856                        GLib.timeout_add(100,self.pulsate_get_info)
857                        return False   
858
859        #def pulsate_updating_mirro             
860
861        def execute_lliurexmirror(self):
862               
863                commands.getoutput('/usr/sbin/lliurex-mirror-gui')
864
865        #def def execute_lliurexmirror 
866
867        def mirror_running_msg(self):
868
869                self.spinner.start()
870                msg_gather="<span><b>"+_("Mirror is being updated. The process may take several minutes")+"</b></span>"
871                self.gather_label.set_markup(msg_gather)
872                GLib.timeout_add(1000,self.pulsate_updating_mirror)
873
874        #def mirror_running_msg
875
876
877        def pulsate_get_info(self):
878
879                #self.pbar.pulse()
880 
881                if not self.get_lliurexversionlocal_t.launched:
882                        print "  [Lliurex-up]: Looking for LliurexVersion from local repository "
883                        msg_gather="<span><b>"+_("Looking for new version to update")+"</b></span>"
884                        self.gather_label.set_markup(msg_gather)
885                        self.get_lliurexversionlocal_t.start()
886                        self.get_lliurexversionlocal_t.launched=True
887                        self.show_number_process_executing(5,"")
888
889
890
891                if self.get_lliurexversionlocal_t.done:
892                        if not self.get_lliurexversionnet_t.is_alive() and not self.get_lliurexversionnet_t.launched:
893                                print "  [Lliurex-up]: Looking for LliurexVersion from Lliurex net"
894                                msg_gather="<span><b>"+_("Looking for new version available")+"</b></span>"
895                                self.gather_label.set_markup(msg_gather)
896                                self.get_lliurexversionnet_t.start()   
897                                self.get_lliurexversionnet_t.launched=True
898                                self.show_number_process_executing(6,"")
899
900
901
902                        if self.get_lliurexversionnet_t.done:
903
904                                if not self.checkInitialFlavourToInstall_t.is_alive() and not self.checkInitialFlavourToInstall_t.launched:
905                                        print "  [Lliurex-up]: Checking if installation of metapackage is required"
906                                        msg_gather="<span><b>"+_("Checking if installation of metapackage is required")+"</b></span>"
907                                        self.gather_label.set_markup(msg_gather)
908                                        self.checkInitialFlavourToInstall_t.start()
909                                        self.checkInitialFlavourToInstall_t.launched=True
910                                        self.show_number_process_executing(7,"")
911
912
913
914                                if self.checkInitialFlavourToInstall_t.done:
915
916                                        if not self.gather_packages_t.is_alive() and not self.gather_packages_t.launched:
917                                                print "  [Lliurex-up]: Looking for for new updates"
918                                                msg_gather="<span><b>"+_("Looking for new updates")+"</b></span>"
919                                                self.gather_label.set_markup(msg_gather)
920                                                self.gather_packages_t.start()
921                                                self.gather_packages_t.launched=True
922                                                self.show_number_process_executing(8,"")
923
924
925                                        if self.gather_packages_t.done:
926                                                self.spinner.stop()
927                                                self.pbar.hide()
928                                                self.pbar_label.hide()
929                                                self.cancel_button_box.show()   
930
931                                                if len(self.packages)==0:
932                                                                system_update=True
933
934                                                                if self.is_flavour_installed!=0:
935                                                                        system_update=False
936                                                                else:   
937
938                                                                        if self.version_update["candidate"]!=None:
939
940                                                                                if self.version_update["installed"]!=self.version_update["candidate"]:
941                                                                                        system_update=False
942                                                                                                                       
943                                                                        else:
944                                                                                if self.version_update["installed"]!=self.version_available:
945                                                                                        system_update=False
946
947                                                                if not system_update:
948                                                                                self.gather_label.set_name("ERROR_FONT")
949                                                                                msg_gather="<span><b>"+_("Updated abort. An error occurred in the search for updates")+"</b></span>"
950                                                                                self.gather_label.set_markup(msg_gather)
951                                                                                print "  [Lliurex-up]: Error in search for updates"
952                                                                                return False
953                                                                else:
954                                                                        self.cancel_button_label.set_label(_("Close"))
955                                                                        msg_gather="<span><b>"+_("Your system is update")+"</b></span>"
956                                                                        self.gather_label.set_markup(msg_gather)
957                                                                        print "  [Lliurex-up]: System update. Nothing to do"
958                                                                        return False
959                                                                                                       
960                                                else:
961                                                        if not self.incorrect_flavours:
962
963                                                                print "  [Lliurex-up]: System nor update"       
964
965                                                                #self.requires_installing_metapackage()
966                                                                self.parse_packages_updated()
967                                                                self.populate_packages_tv()
968                                                                self.get_update_summary()
969                                                                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
970                                                                self.stack.set_visible_child_name("update")     
971                                                                return False
972                                                        else:
973                                                                self.gather_label.set_name("ERROR_FONT")
974                                                                msg_gather="<span><b>"+_("Updated abort for incorrect metapackages detected in update")+"</b></span>"
975                                                                self.gather_label.set_markup(msg_gather)
976                                                                #self.pbar.hide()
977                                                                print "  [Lliurex-up]: Update abort. Detect incorrect metapackages in new updates"
978                                                                return False                                                   
979               
980
981                if self.get_lliurexversionlocal_t.launched:
982                        if self.get_lliurexversionlocal_t.is_alive():
983                                return True     
984
985                if self.get_lliurexversionnet_t.launched:
986                        if self.get_lliurexversionnet_t.is_alive():
987                                return True                             
988
989                if self.checkInitialFlavourToInstall_t.launched:
990                        if self.checkInitialFlavourToInstall_t.is_alive():
991                                return True
992
993                if self.gather_packages_t.launched:
994                        if self.gather_packages_t.is_alive():
995                                return True
996
997        #def pulsate_get_info   
998
999        def get_lliurexversionlocal(self):
1000                self.version_update=self.llxup_connect.getLliurexVersionLocal()
1001                self.get_lliurexversionlocal_t.done=True
1002
1003        #def get_lliurexversionlocal
1004       
1005        def get_lliurexversionnet(self):
1006                self.version_available=self.llxup_connect.getLliurexVersionNet()
1007                self.get_lliurexversionnet_t.done=True
1008
1009
1010        #def get_lliurexversionlocal   
1011       
1012        def checkInitialFlavourToInstall(self):
1013                self.is_flavour_installed=0
1014                self.targetMetapackage=self.llxup_connect.targetMetapackage
1015
1016                if self.targetMetapackage == None:
1017                        # self.flavourToInstall=self.llxup_connect.requiresInstallFlavour()
1018                        # if self.flavourToInstall != None:
1019                        #       print self.flavourToInstall
1020                        #       print "  [Lliurex-up]: Installation of flavour is required"
1021                        #       self.is_flavour_installed=self.llxup_connect.installInitialFlavour(self.flavourToInstall)       
1022                        #       self.checkInitialFlavourToInstall_t.done=True   
1023                        # else:
1024                        print "  [Lliurex-up]: Installation of metapackage is not required"
1025                        self.checkInitialFlavourToInstall_t.done=True   
1026
1027                else:
1028                        print "  [Lliurex-up]: Installation of metapackage is required: " +str(self.targetMetapackage)
1029                        self.is_flavour_installed=self.llxup_connect.installInitialFlavour(self.targetMetapackage)     
1030                        self.checkInitialFlavourToInstall_t.done=True                   
1031
1032        #def checkInitialFlavourToInstall(
1033       
1034        def gather_packages(self):
1035
1036                self.packages,self.size_update=self.llxup_connect.getPackagesToUpdate()
1037                self.incorrect_flavours=self.llxup_connect.checkIncorrectFlavours()
1038                self.gather_packages_t.done=True
1039
1040               
1041        #def gather_info
1042
1043
1044        def get_update_summary(self):
1045
1046                #self.version_available=self.llxup_connect.getLliurexVersionNet()
1047                if self.version_update["installed"]==None:
1048                        msg_current_version_info=_("Not available")
1049
1050                else:
1051                        msg_current_version_info=str(self.version_update["installed"])
1052
1053
1054                if self.version_available==None:
1055                        if 'client' in self.llxup_connect.previousFlavours or self.targetMetapackage=='lliurex-meta-client':
1056                                msg_version_available_info=_("Not available for clients")
1057
1058                        else:
1059                                self.version_available_label_info.set_name("ERROR_FONT")
1060                                msg_version_available_info=_("Not available. Check conexion to lliurex.net")
1061
1062                else:
1063                        msg_version_available_info=self.version_available
1064
1065
1066                if self.version_update["candidate"]==None:
1067                        msg_version_update_info=_("Not available")
1068
1069                else:
1070                        msg_version_update_info=self.version_update["candidate"]
1071
1072                self.number_pkg=len(self.packages)
1073                 
1074                self.size_update_label.show()
1075
1076                msg_number_info=str(self.number_pkg)+ " ("  +str(self.newpackages)+ _(" new)")
1077
1078                msg_size=self.size_update
1079
1080               
1081                self.current_version_label_info.set_markup(msg_current_version_info)
1082                self.version_available_label_info.set_markup(msg_version_available_info)
1083                self.version_update_label_info.set_markup(msg_version_update_info)
1084                self.number_packages_label_info.set_markup(msg_number_info)
1085                self.size_update_label_info.set_markup(msg_size)
1086               
1087        #def get_update_summary
1088               
1089        def updated_percentage(self,completed):
1090
1091                percentage=completed/100.0
1092
1093                self.pbar.set_fraction(percentage)
1094               
1095                msg_value=format(completed,'.0f')
1096               
1097                msg_percentage="<span><b>"+msg_value+"%"+"</b></span>"
1098                self.pbar_label.set_markup(msg_percentage)
1099               
1100               
1101        #def updated_percentage
1102               
1103        def show_number_process_executing(self, execprocess, processname):
1104
1105                self.total_process=self.number_process+1.0
1106                self.pbar.set_fraction(execprocess/self.total_process)
1107                if processname =="":
1108                        msg_pbar=_("Executing process: ") + str(execprocess) + _(" of ") + str(self.number_process)
1109                else:
1110                        msg_pbar=_("Executing process: ") + str(execprocess) + _(" of ") + str(self.number_process) + ". " + processname
1111       
1112                msg_pbar="<span><b>"+msg_pbar+"</b></span>" 
1113                self.pbar_label.set_markup(msg_pbar)
1114
1115        #def show_number_process_executing
1116       
1117        def populate_packages_tv(self):
1118               
1119                for package in self.package_list:
1120                        #self.packages_store.append((package.icon,"<span font='Roboto'><b>"+package.name+"</b></span>\n"+"<span font='Roboto' size='small'>"+package.version+"</span>","<span font='Roboto' size='large'><b>"+package.size+"</b></span>",package.installed))
1121                        self.packages_store.append((package.type,package.icon,"<span font='Roboto'><b>"+package.name+"</b></span>\n"+"<span font='Roboto' size='small'>"+package.version+"</span>","<span font='Roboto' size='small'>"+package.size+"</span>", package.installed))
1122                       
1123                #print len(self.packages_store)
1124               
1125        #def populate_packages_tv
1126       
1127        def parse_packages_updated(self):
1128               
1129                self.newpackages=0     
1130                for item in self.packages:
1131                        tmp=item.split(";")
1132                        if len(tmp)>1:
1133                                pack=Package(tmp[3],tmp[0],tmp[1],tmp[2])
1134                                self.package_list.append(pack)
1135                                if tmp[3]==str(None):
1136                                        self.newpackages=int(self.newpackages)+1       
1137
1138        #def parse_simulate_output
1139       
1140        def package_clicked(self,x,y):
1141
1142                default_text="Downloading changelog..."
1143                selection=self.packages_tv.get_selection()
1144                model,iter=selection.get_selected()
1145                self.changelog_textview.get_buffer().set_text("".join(default_text))
1146
1147                #name=self.packages_store.get_value(iter,1)
1148                name=model[iter][2]
1149                name=name[name.find("<b>")+3:name.find("</b>")]
1150                changelog=self.llxup_connect.getPackageChangelog(name)
1151                self.changelog_textview.get_buffer().set_text("".join(changelog))
1152               
1153       
1154        #def package_clicked                   
1155
1156        def upgrade_process(self,widget, event=None):
1157
1158               
1159                self.msg_upgrade_running=_("The update process is running. Wait a moment please")
1160
1161                if not self.preactions_process_t.launched:
1162                        self.number_process=4
1163                        self.pbar.show()
1164                        #self.pbar.pulse()
1165                        self.viewport.show()
1166                        self.terminal_scrolled.show()
1167                        self.terminal_label.show()
1168                        self.msg_terminal=_("Update process details")
1169                        self.terminal_label.set_markup(self.msg_terminal)
1170                        GLib.timeout_add(100,self.dist_upgrade)
1171
1172                        # self.preactions_process_t.start()
1173                        # self.preactions_process_t.launched=True
1174
1175
1176                else:
1177                        if not self.postactions_process_t.done:
1178                                self.terminal_label.set_name("ERROR_FONT")
1179                                self.terminal_label.set_markup(self.msg_upgrade_running)
1180
1181        #def upgrade_process
1182       
1183        def dist_upgrade(self):
1184
1185                if not self.preactions_process_t.launched:
1186                        print "  [Lliurex-up]: Executing pre-actions"
1187                        self.pbar_label.show()
1188                        self.cancel_button_box.hide()
1189
1190                        self.preactions_process_t.start()
1191                        self.preactions_process_t.launched=True
1192                        self.show_number_process_executing(1,_("Preparing system to the update"))
1193                        self.update_button_box.set_name("UPDATE_BUTTON_LAUNCHED_COLOR")
1194
1195                else:
1196
1197                        if self.preactions_process_t.done:
1198                                if not self.update_process_t.is_alive() and not self.update_process_t.launched:
1199                                        print "  [Lliurex-up]: Executing dist-upgrade"
1200                                        self.update_process_t.start()
1201                                        self.update_process_t.launched=True
1202                                        self.show_number_process_executing(2,_("Downloading and installing packages"))
1203
1204                               
1205                                if self.update_process_t.done:
1206                                        if not self.postactions_process_t.is_alive() and not self.postactions_process_t.launched:
1207                                                print "  [Lliurex-up]: Executing post-actions"
1208                                                self.postactions_process_t.start()
1209                                                self.postactions_process_t.launched=True
1210                                                self.show_number_process_executing(3,_("Ending the update"))
1211                                       
1212                                        if self.postactions_process_t.done:
1213
1214                               
1215                                                if not self.checkFinalFlavourToInstall_t.is_alive() and not self.checkFinalFlavourToInstall_t.launched:
1216                                                        print "  [Lliurex-up]: Checking Final metapackage"
1217                                                        self.checkFinalFlavourToInstall_t.start()
1218                                                        self.checkFinalFlavourToInstall_t.launched=True
1219                                                        self.show_number_process_executing(4,_("Checking metapackage"))
1220                                                                                                       
1221                                                               
1222                                                if self.checkFinalFlavourToInstall_t.done:                               
1223                                                        self.cancel_button_box.show()
1224                                                        self.cancel_button_label.set_label(_("Close"))
1225                                                        self.pbar.hide()
1226                                                        self.pbar_label.hide()
1227                                                        self.update_installed_icon()
1228                                                               
1229                                                        self.terminal_label.set_name("CHANGELOG_FONT")
1230                                                                               
1231                                                        if not self.llxup_connect.checkErrorDistUpgrade():
1232                                                                self.msg_upgrade_running="<span><b>" + _("The system is now update") + "</b></span>"
1233                                                                self.update_button_box.set_name("UPDATE_CORRECT_BUTTON_COLOR")
1234
1235                                                        else:
1236                                                                self.terminal_label.set_name("ERROR_FONT")
1237                                                                self.msg_upgrade_running="<span><b>" + _("The updated process has endend with errors") + "</b></span>"
1238                                                                self.update_button_box.set_name("UPDATE_ERROR_BUTTON_COLOR")
1239                                                                #self.update_button_box.set_name("UPDATE_BUTTON_END_COLOR")
1240                                                                               
1241                                                       
1242                                                        self.terminal_label.set_markup(self.msg_upgrade_running)
1243                                                        return False   
1244       
1245
1246                if self.preactions_process_t.launched:
1247                        if      not self.preactions_process_t.done:
1248                                if not os.path.exists(self.llxup_connect.preactions_token):
1249                                        return True
1250                                else:
1251                                        self.preactions_process_t.done=True
1252                                        return True
1253
1254
1255                if self.update_process_t.launched:
1256                        if      not self.update_process_t.done:
1257                                if not os.path.exists(self.llxup_connect.upgrade_token):
1258                                        return True
1259                                else:
1260                                        self.update_process_t.done=True 
1261                                        return True
1262                                       
1263                if self.postactions_process_t.launched:
1264                        if      not self.postactions_process_t.done:
1265                               
1266                                if not os.path.exists(self.llxup_connect.postactions_token):
1267                                        return True
1268                                else:
1269                                        self.postactions_process_t.done=True
1270                                        return True             
1271
1272               
1273
1274                if self.checkFinalFlavourToInstall_t.launched:
1275                        if not self.checkFinalFlavourToInstall_t.done:
1276                                if not os.path.exists(self.llxup_connect.installflavour_token):
1277                                        return True
1278                                else:
1279                                        self.checkFinalFlavourToInstall_t.done=True     
1280                                        return True                             
1281
1282                       
1283        #def dist_upgrade
1284
1285
1286        def preactions_process(self):
1287
1288                self.command=self.llxup_connect.preActionsScript()
1289                #self.command=self.llxup_connect.preActionsScript() + ' | tee ' + TMP_FILE + ';rm ' + TMP_FILE +'\n'
1290                length=len(self.command)
1291                self.vterminal.feed_child(self.command, length)
1292
1293        #def preactions_process
1294       
1295        def update_process(self):
1296                 
1297                #self.command='apt-get dist-upgrade -sV | tee '+ TMP_FILE + ';rm ' + TMP_FILE +'\n'
1298                self.command=self.llxup_connect.distUpgradeProcess()
1299                length=len(self.command)
1300                self.vterminal.feed_child(self.command, length)
1301
1302        #def update_process             
1303
1304
1305        def postactions_process(self):
1306
1307                self.command=self.llxup_connect.postActionsScript()
1308                #self.command=self.llxup_connect.preActionsScript() + ' | tee ' + TMP_FILE + ';rm ' + TMP_FILE +'\n'
1309                length=len(self.command)
1310                self.vterminal.feed_child(self.command, length)
1311
1312        #def postactions_process
1313
1314       
1315        def checkFinalFlavourToInstall(self):
1316
1317               
1318                time.sleep(5)
1319                self.flavourToInstall=self.llxup_connect.checkFinalFlavour()
1320
1321                if self.flavourToInstall !=None:
1322                        print "  [Lliurex-up]: Check Final Metapackage: Instalation of metapackage is required"
1323                        self.installFinalFlavour(self.flavourToInstall)
1324                else:
1325                        print "  [Lliurex-up]: Check Final Metapackage: Nothing to do"
1326                        self.command='exit ' + '\n'
1327                        length=len(self.command)
1328                        self.vterminal.feed_child(self.command, length)
1329                        self.checkFinalFlavourToInstall_t.done=True     
1330       
1331        #def checkFinalFlavourToInstall
1332
1333        def installFinalFlavour(self,flavourToInstall):
1334
1335                self.command=self.llxup_connect.installFinalFlavour(flavourToInstall)
1336                length=len(self.command)
1337                self.vterminal.feed_child(self.command, length)
1338                               
1339        #def installFinalFlavour
1340       
1341       
1342        def view_packages_clicked(self,widget,event):
1343
1344                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
1345                self.stack.set_visible_child_name("packages")
1346               
1347        #def view_packages_clicked     
1348       
1349
1350        def arrow_clicked(self,widget,event):
1351       
1352                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
1353                self.stack.set_visible_child_name("update")     
1354               
1355        #def arrow_clicked
1356
1357        def update_installed_icon(self):
1358       
1359                imagok=Gtk.Image()
1360                imagok.set_from_file(DONE_ICON)         
1361                iconok=imagok.get_pixbuf()
1362
1363                imagerr=Gtk.Image()
1364                imagerr.set_from_file(ERROR_ICON)               
1365                iconerr=imagerr.get_pixbuf()
1366                packages_status=self.llxup_connect.getStatusPackage()
1367
1368                for item in self.packages_store:
1369                        name=item[2].split(">")[2]
1370                        name=name.split("<")[0]
1371                        version=item[2].split(">")[5]
1372                        version=version.split("<")[0]
1373                        tmp=str(name)+"_"+str(version)
1374                        if tmp in packages_status:
1375                                item[4]=iconok
1376                        else:
1377                                item[4]=iconerr
1378                       
1379        #def update_installed_icon     
1380
1381        def mouse_over_yes(self,widget,event):
1382
1383                self.yes_button_box.set_name("BUTTON_OVER_COLOR")
1384
1385        #def mouse_over_yes     
1386
1387        def mouse_exit_yes(self,widget,event):
1388
1389                self.yes_button_box.set_name("BUTTON_COLOR")
1390
1391        #def mouse_exit_yes     
1392
1393        def mouse_over_no(self,widget,event):
1394
1395                self.no_button_box.set_name("BUTTON_OVER_COLOR")
1396
1397        #def mouse_over_no     
1398
1399        def mouse_exit_no(self,widget,event):
1400
1401                self.no_button_box.set_name("BUTTON_COLOR")
1402
1403        #def mouse_exit_no     
1404                       
1405        def mouse_over_view_packages(self,widget,event):
1406
1407                self.view_packages_button_box.set_name("BUTTON_OVER_COLOR")     
1408
1409        #def mouse_over_view_packages   
1410
1411        def mouse_exit_view_packages(self,widget,event):
1412
1413                self.view_packages_button_box.set_name("BUTTON_COLOR")
1414
1415        #def mouse_exit_view_packages   
1416                       
1417        def mouse_over_update_button(self,widget,event):
1418
1419                if not self.preactions_process_t.launched and not self.postactions_process_t.done:
1420                        self.update_button_box.set_name("BUTTON_OVER_COLOR")
1421                else:
1422                        if self.preactions_process_t.launched and not self.postactions_process_t.done :
1423                                self.terminal_label.set_name("ERROR_FONT")
1424                                self.terminal_label.set_markup(self.msg_upgrade_running)
1425
1426        #def mouse_over_update_button
1427                       
1428        def mouse_exit_update_button(self,widget,event):
1429
1430                if self.preactions_process_t.launched and not self.postactions_process_t.done:
1431                        self.terminal_label.set_name("CHANGELOG_FONT")
1432                        self.terminal_label.set_markup(self.msg_terminal)
1433                else:
1434                        if not self.preactions_process_t.launched:
1435                                self.update_button_box.set_name("BUTTON_COLOR")
1436
1437        #def mouse_exit_update_button
1438                       
1439        def mouse_over_cancel(self,widget,event):
1440
1441                self.cancel_button_box.set_name("BUTTON_OVER_COLOR")   
1442
1443        #def mouse_over_cancel 
1444
1445        def mouse_exit_cancel(self,widget,event):
1446
1447                self.cancel_button_box.set_name("BUTTON_COLOR") 
1448
1449        #def mouse_exit_cancel
1450
1451        def mouse_over_return_arrow(self,widget,event):
1452
1453                self.return_arrow_box.set_name("BUTTON_OVER_COLOR")     
1454
1455        #def mouse_over_return_arrow   
1456
1457        def mouse_exit_return_arrow(self,widget,event):
1458
1459                self.return_arrow_box.set_name("BUTTON_COLOR")         
1460
1461        #def mouse_exit_return_arrow   
1462
1463        def quit(self,widget,event=None):
1464                self.llxup_connect.cleanEnvironment()
1465                self.llxup_connect.cleanLliurexUpLock()
1466                Gtk.main_quit() 
1467
1468        #def quit       
1469
1470#class LliurexMirror
1471
1472lup=LliurexUp()
1473lup.start_gui()         
1474 
Note: See TracBrowser for help on using the repository browser.