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

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

Restore pinning file when lliurex-upgrade -s mode ends

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