source: lliurex-up/trunk/fuentes/lliurex-up-gui/lliurex-up.py @ 3127

Last change on this file since 3127 was 3127, checked in by jrpelegrina, 3 years ago

WIP in new gui. Add checking for errors in upgrade

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