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

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

WIP in change updated button performance

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