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

Last change on this file since 4506 was 4506, checked in by jrpelegrina, 4 years ago

Improve n4d checking and fix function to show changelogs

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