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

Last change on this file since 7387 was 7387, checked in by jrpelegrina, 18 months ago

Wip in get PID, new banner, resizing the window and indicator

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