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

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

WIP in clients checks

  • Property svn:executable set to *
File size: 44.6 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(_("This applications 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.can_connect:
591                                if not self.llxup_connect.clientCheckingMirrorIsRunning():
592
593                                        if  not self.check_lliurexup_t.is_alive() and not self.check_lliurexup_t.launched:
594                                                print "  [Lliurex-up]: Checking Lliurex-up version"
595                                                msg_gather="<span><b>"+_("Looking for new version of Lliurex-up")+"</b></span>"
596                                                self.gather_label.set_markup(msg_gather)
597                                                self.check_lliurexup_t.start()
598                                                self.check_lliurexup_t.launched=True
599                                                self.show_number_process_executing(2,"")
600
601
602                                        if  self.check_lliurexup_t.done:
603                                                if not self.is_lliurexup_updated:
604                                                        if  not self.install_lliurexup_t.is_alive() and not self.install_lliurexup_t.launched:
605                                                                print "  [Lliurex-up]: Updating Lliurex-up"
606                                                                msg_gather="<span><b>"+_("Updating Lliurex-up")+"</b></span>"
607                                                                self.gather_label.set_markup(msg_gather)
608                                                                self.install_lliurexup_t.start()
609                                                                self.install_lliurexup_t.launched=True
610                                                                self.show_number_process_executing(3,"")
611
612                                                        else:
613                                                                if self.install_lliurexup_t.done:
614                                                                        print "  [Lliurex-up]: Reboot Lliurex-up"
615                                                                        #msg_gather="<span><b>"+_("Lliurex-up is now updated and will be reboot")+"</b></span>"
616                                                                        #self.pbar.hide()
617                                                                        #self.gather_label.set_markup(msg_gather)
618                                                                        #self.t=threading.Thread(target=self.reboot_lliurexup)
619                                                                        self.pbar_label.hide()
620                                                                        self.msg_wait="<span><b>"+_("Lliurex-up is now updated and will be reboot in %s seconds...")+"</b></span>"
621                                                                        GLib.timeout_add(10,self.wait_to_reboot)
622                                                                        #self.t.daemon=True
623                                                                        #self.t.start()
624                                                                        return False
625                                                else:
626                                                        if not self.check_mirror_t.is_alive() and not self.check_mirror_t.launched:
627                                                                print "  [Lliurex-up]: Checking if mirror exist"
628                                                                msg_gather="<span><b>"+_("Checking if mirror exist and there is updated")+"</b></span>"
629                                                                self.gather_label.set_markup(msg_gather)
630                                                                self.check_mirror_t.start()
631                                                                self.check_mirror_t.launched=True
632                                                                self.show_number_process_executing(4,"")
633
634
635                                                       
636                                                        if      self.check_mirror_t.done:
637                                                                is_mirror_running=self.llxup_connect.lliurexMirrorIsRunning()
638
639                                                                if not self.is_mirror_updated:
640                                                                        if not is_mirror_running:
641                                                                                print "  [Lliurex-up]: Asking if mirror will be update"
642                                                                                self.yes_button_box.show()
643                                                                                self.no_button_box.show()
644                                                                                self.pbar.hide()
645                                                                                self.pbar_label.hide()
646                                                                                #self.spinner.stop()
647                                                                                msg_gather="<span><b>"+_("Your mirror is not update. Do you want to update it?")+"</b></span>"
648                                                                                self.gather_label.set_markup(msg_gather)
649                                                                                #GLib.timeout_add(100,self.pulsate_wait_response)
650                                                                                return False
651
652                                                                        else:
653                                                                                self.mirror_running_msg()
654                                                                                return False
655
656                                                                else:   
657                                                                        if is_mirror_running:
658                                                                                self.mirror_running_msg()
659                                                                                return False
660                                                                        else:   
661                                                                                print "  [Lliurex-up]: Nothing to do with mirror"
662                                                                                GLib.timeout_add(100,self.pulsate_get_info)
663                                                                                return False
664                       
665                                else:
666                                        self.spinner.stop()
667                                        self.pbar.hide()
668                                        self.pbar_label.hide()
669                                        self.cancel_button_box.show()
670                                        self.gather_label.set_name("ERROR_FONT")
671                                        msg_gather="<span><b>"+_("Mirror is being updated. Unable to update the system")+"</b></span>"
672                                        self.gather_label.set_markup(msg_gather)
673                                        print "  [Lliurex-up]: Mirror is being updated. Unable to update the system"
674                                        return False
675
676
677                        else:
678                                self.spinner.stop()
679                                self.pbar.hide()
680                                self.pbar_label.hide()
681                                self.cancel_button_box.show()
682                                self.gather_label.set_name("ERROR_FONT")
683                                msg_gather="<span><b>"+_("Unable to connect to lliurex.net")+"</b></span>"
684                                self.gather_label.set_markup(msg_gather)
685                                print "  [Lliurex-up]: Unable to connect to lliurex.net"
686                                return False
687
688                if self.initactions_process_t.is_alive():
689                        return True                                     
690
691                if  self.check_lliurexup_t.launched:
692                        if self.check_lliurexup_t.is_alive():
693                                return True
694
695                if self.install_lliurexup_t.launched: 
696                        if self.install_lliurexup_t.is_alive():
697                                return True     
698                                       
699                if self.check_mirror_t.launched:
700                        if self.check_mirror_t.is_alive():
701                                return True
702
703               
704        #def pulsate_checksystem       
705
706        def wait_to_reboot(self):
707
708                csecond=int(self.max_seconds+1-self.current_second)
709                self.gather_label.set_markup(self.msg_wait%csecond)
710                self.pbar.set_fraction(self.current_second/self.max_seconds)
711
712                self.current_second+=0.01
713
714                if self.current_second>=self.max_seconds:
715                        self.llxup_connect.cleanLliurexUpLock()
716                        os.execl(sys.executable, sys.executable, *sys.argv)     
717                        return False
718                else:
719                        return True
720
721        #def wait_to_reboot
722
723       
724        def initActions_process(self):
725                time.sleep(5)
726                self.can_connect=self.llxup_connect.canConnectToLliurexNet()
727                if self.can_connect:
728                        self.llxup_connect.initActionsScript()
729                self.initactions_process_t.done=True
730       
731        def check_lliurexup_version(self):
732
733                #time.sleep(5) 
734                self.is_lliurexup_updated=self.llxup_connect.isLliurexUpIsUpdated()
735                self.check_lliurexup_t.done=True
736               
737        #def check_lliurexup_version   
738               
739        def install_lliurexup(self):
740
741                self.is_lliurexup_installed=self.llxup_connect.installLliurexUp()
742                self.install_lliurexup_t.done=True
743
744        #def install_lliurexup 
745
746               
747        def check_mirror(self):
748
749                self.is_mirror_updated=self.llxup_connect.lliurexMirrorIsUpdated()
750                self.check_mirror_t.done=True
751       
752        #def check_mirror       
753
754        def no_button_clicked(self,widget,event):
755               
756                #self.response=0
757                self.pbar.show()
758                self.pbar_label.show() 
759                GLib.timeout_add(100,self.pulsate_get_info)
760                self.yes_button_box.hide()
761                self.no_button_box.hide()
762                log_msg="Update lliurex-mirror: No"
763                self.llxup_connect.log(log_msg)
764
765        #def def no_button_clicked
766               
767        def yes_button_clicked(self,widget,event):
768       
769                #self.response=1
770                self.pbar.show()
771                self.pbar_label.show()
772                print "[Lliurex-up]: Updating mirror"
773                self.updated_percentage(0)
774                #self.spinner.start()
775                self.yes_button_box.hide()
776                self.no_button_box.hide()
777                #msg_gather="<span><b>"+_("Mirror is being updated. The process may take several minutes")+"</b></span>"
778                #self.gather_label.set_markup(msg_gather)
779                self.execute_lliurexmirror_t.start()
780                self.mirror_running_msg()
781                #GLib.timeout_add(1000,self.pulsate_updating_mirror)
782                log_msg="Update lliurex-mirror: Yes"
783                print log_msg
784                self.llxup_connect.log(log_msg)
785
786        #def yes_button_clicked
787
788        def pulsate_updating_mirror(self):
789
790                self.is_mirror_running=self.llxup_connect.lliurexMirrorIsRunning()
791
792                if self.is_mirror_running or self.execute_lliurexmirror_t.is_alive():
793                        mirror_percentage=self.llxup_connect.getPercentageLliurexMirror()
794                        self.updated_percentage(mirror_percentage)
795                        return True
796               
797                else:
798                        #self.spinner.stop()
799                        #self.pbar_label.hide()
800                        GLib.timeout_add(100,self.pulsate_get_info)
801                        return False   
802
803        #def pulsate_updating_mirro             
804
805        def execute_lliurexmirror(self):
806               
807                commands.getoutput('/usr/sbin/lliurex-mirror-gui')
808
809        #def def execute_lliurexmirror 
810
811        def mirror_running_msg(self):
812
813                self.spinner.start()
814                msg_gather="<span><b>"+_("Mirror is being updated. The process may take several minutes")+"</b></span>"
815                self.gather_label.set_markup(msg_gather)
816                GLib.timeout_add(1000,self.pulsate_updating_mirror)
817
818        #def mirror_running_msg
819
820
821        def pulsate_get_info(self):
822
823                #self.pbar.pulse()
824 
825                if not self.get_lliurexversionlocal_t.launched:
826                        print "  [Lliurex-up]: Looking for LliurexVersion from local repository "
827                        msg_gather="<span><b>"+_("Looking for new version to update")+"</b></span>"
828                        self.gather_label.set_markup(msg_gather)
829                        self.get_lliurexversionlocal_t.start()
830                        self.get_lliurexversionlocal_t.launched=True
831                        self.show_number_process_executing(5,"")
832
833
834
835                if self.get_lliurexversionlocal_t.done:
836                        if not self.get_lliurexversionnet_t.is_alive() and not self.get_lliurexversionnet_t.launched:
837                                print "  [Lliurex-up]: Looking for LliurexVersion from Lliurex net"
838                                msg_gather="<span><b>"+_("Looking for new version available")+"</b></span>"
839                                self.gather_label.set_markup(msg_gather)
840                                self.get_lliurexversionnet_t.start()   
841                                self.get_lliurexversionnet_t.launched=True
842                                self.show_number_process_executing(6,"")
843
844
845
846                        if self.get_lliurexversionnet_t.done:
847
848                                if not self.checkInitialFlavourToInstall_t.is_alive() and not self.checkInitialFlavourToInstall_t.launched:
849                                        print "  [Lliurex-up]: Checking if installation of metapackage is required"
850                                        msg_gather="<span><b>"+_("Checking if installation of metapackage is required")+"</b></span>"
851                                        self.gather_label.set_markup(msg_gather)
852                                        self.checkInitialFlavourToInstall_t.start()
853                                        self.checkInitialFlavourToInstall_t.launched=True
854                                        self.show_number_process_executing(7,"")
855
856
857
858                                if self.checkInitialFlavourToInstall_t.done:
859
860                                        if not self.gather_packages_t.is_alive() and not self.gather_packages_t.launched:
861                                                print "  [Lliurex-up]: Looking for for new updates"
862                                                msg_gather="<span><b>"+_("Looking for new updates")+"</b></span>"
863                                                self.gather_label.set_markup(msg_gather)
864                                                self.gather_packages_t.start()
865                                                self.gather_packages_t.launched=True
866                                                self.show_number_process_executing(8,"")
867
868
869                                        if self.gather_packages_t.done:
870                                                self.spinner.stop()
871                                                self.pbar.hide()
872                                                self.pbar_label.hide()
873                                                self.cancel_button_box.show()   
874
875                                                if len(self.packages)==0:
876                                                                system_update=True
877
878                                                                if self.is_flavour_installed!=0:
879                                                                        system_update=False
880                                                                else:   
881
882                                                                        if self.version_update["candidate"]!=None:
883
884                                                                                if self.version_update["installed"]!=self.version_update["candidate"]:
885                                                                                        system_update=False
886                                                                                                                       
887                                                                        else:
888                                                                                if self.version_update["installed"]!=self.version_available:
889                                                                                        system_update=False
890
891                                                                if not system_update:
892                                                                                self.gather_label.set_name("ERROR_FONT")
893                                                                                msg_gather="<span><b>"+_("Updated abort. An error occurred in the search for updates")+"</b></span>"
894                                                                                self.gather_label.set_markup(msg_gather)
895                                                                                print "  [Lliurex-up]: Error in search for updates"
896                                                                                return False
897                                                                else:
898                                                                        self.cancel_button_label.set_label(_("Close"))
899                                                                        msg_gather="<span><b>"+_("Your system is update")+"</b></span>"
900                                                                        self.gather_label.set_markup(msg_gather)
901                                                                        print "  [Lliurex-up]: System update. Nothing to do"
902                                                                        return False
903                                                                                                       
904                                                else:
905                                                        if not self.incorrect_flavours:
906
907                                                                print "  [Lliurex-up]: System nor update"       
908
909                                                                #self.requires_installing_metapackage()
910                                                                self.parse_packages_updated()
911                                                                self.populate_packages_tv()
912                                                                self.get_update_summary()
913                                                                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
914                                                                self.stack.set_visible_child_name("update")     
915                                                                return False
916                                                        else:
917                                                                self.gather_label.set_name("ERROR_FONT")
918                                                                msg_gather="<span><b>"+_("Updated abort for incorrect metapackages detected in update")+"</b></span>"
919                                                                self.gather_label.set_markup(msg_gather)
920                                                                #self.pbar.hide()
921                                                                print "  [Lliurex-up]: Update abort. Detect incorrect metapackages in new updates"
922                                                                return False                                                   
923               
924
925                if self.get_lliurexversionlocal_t.launched:
926                        if self.get_lliurexversionlocal_t.is_alive():
927                                return True     
928
929                if self.get_lliurexversionnet_t.launched:
930                        if self.get_lliurexversionnet_t.is_alive():
931                                return True                             
932
933                if self.checkInitialFlavourToInstall_t.launched:
934                        if self.checkInitialFlavourToInstall_t.is_alive():
935                                return True
936
937                if self.gather_packages_t.launched:
938                        if self.gather_packages_t.is_alive():
939                                return True
940
941        #def pulsate_get_info   
942
943        def get_lliurexversionlocal(self):
944                self.version_update=self.llxup_connect.getLliurexVersionLocal()
945                self.get_lliurexversionlocal_t.done=True
946
947        #def get_lliurexversionlocal
948       
949        def get_lliurexversionnet(self):
950                self.version_available=self.llxup_connect.getLliurexVersionNet()
951                self.get_lliurexversionnet_t.done=True
952
953
954        #def get_lliurexversionlocal   
955       
956        def checkInitialFlavourToInstall(self):
957                self.is_flavour_installed=0
958                self.targetMetapackage=self.llxup_connect.targetMetapackage
959
960                if self.targetMetapackage == None:
961                        # self.flavourToInstall=self.llxup_connect.requiresInstallFlavour()
962                        # if self.flavourToInstall != None:
963                        #       print self.flavourToInstall
964                        #       print "  [Lliurex-up]: Installation of flavour is required"
965                        #       self.is_flavour_installed=self.llxup_connect.installInitialFlavour(self.flavourToInstall)       
966                        #       self.checkInitialFlavourToInstall_t.done=True   
967                        # else:
968                        print "  [Lliurex-up]: Installation of metapackage is not required"
969                        self.checkInitialFlavourToInstall_t.done=True   
970
971                else:
972                        print "  [Lliurex-up]: Installation of metapackage is required: " +str(self.targetMetapackage)
973                        self.is_flavour_installed=self.llxup_connect.installInitialFlavour(self.targetMetapackage)     
974                        self.checkInitialFlavourToInstall_t.done=True                   
975
976        #def checkInitialFlavourToInstall(
977       
978        def gather_packages(self):
979
980                self.packages,self.size_update=self.llxup_connect.getPackagesToUpdate()
981                self.incorrect_flavours=self.llxup_connect.checkIncorrectFlavours()
982                self.gather_packages_t.done=True
983
984               
985        #def gather_info
986
987
988        def get_update_summary(self):
989
990                #self.version_available=self.llxup_connect.getLliurexVersionNet()
991                if self.version_update["installed"]==None:
992                        msg_current_version_info=_("Not available")
993
994                else:
995                        msg_current_version_info=str(self.version_update["installed"])
996
997
998                if self.version_available==None:
999                        if 'client' in self.llxup_connect.previousFlavours or self.targetMetapackage=='lliurex-meta-client':
1000                                msg_version_available_info=_("Not available for clients")
1001
1002                        else:
1003                                self.version_available_label_info.set_name("ERROR_FONT")
1004                                msg_version_available_info=_("Not available. Check conexion to lliurex.net")
1005
1006                else:
1007                        msg_version_available_info=self.version_available
1008
1009
1010                if self.version_update["candidate"]==None:
1011                        msg_version_update_info=_("Not available")
1012
1013                else:
1014                        msg_version_update_info=self.version_update["candidate"]
1015
1016                self.number_pkg=len(self.packages)
1017                 
1018                self.size_update_label.show()
1019
1020                msg_number_info=str(self.number_pkg)+ " ("  +str(self.newpackages)+ _(" new)")
1021
1022                msg_size=self.size_update
1023
1024               
1025                self.current_version_label_info.set_markup(msg_current_version_info)
1026                self.version_available_label_info.set_markup(msg_version_available_info)
1027                self.version_update_label_info.set_markup(msg_version_update_info)
1028                self.number_packages_label_info.set_markup(msg_number_info)
1029                self.size_update_label_info.set_markup(msg_size)
1030               
1031        #def get_update_summary
1032               
1033        def updated_percentage(self,completed):
1034
1035                percentage=completed/100.0
1036
1037                self.pbar.set_fraction(percentage)
1038               
1039                msg_value=format(completed,'.0f')
1040               
1041                msg_percentage="<span><b>"+msg_value+"%"+"</b></span>"
1042                self.pbar_label.set_markup(msg_percentage)
1043               
1044               
1045        #def updated_percentage
1046               
1047        def show_number_process_executing(self, execprocess, processname):
1048
1049                self.total_process=self.number_process+1.0
1050                self.pbar.set_fraction(execprocess/self.total_process)
1051                if processname =="":
1052                        msg_pbar=_("Executing process: ") + str(execprocess) + _(" of ") + str(self.number_process)
1053                else:
1054                        msg_pbar=_("Executing process: ") + str(execprocess) + _(" of ") + str(self.number_process) + ". " + processname
1055       
1056                msg_pbar="<span><b>"+msg_pbar+"</b></span>" 
1057                self.pbar_label.set_markup(msg_pbar)
1058
1059        #def show_number_process_executing
1060       
1061        def populate_packages_tv(self):
1062               
1063                for package in self.package_list:
1064                        #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))
1065                        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))
1066                       
1067                #print len(self.packages_store)
1068               
1069        #def populate_packages_tv
1070       
1071        def parse_packages_updated(self):
1072               
1073                self.newpackages=0     
1074                for item in self.packages:
1075                        tmp=item.split(";")
1076                        if len(tmp)>1:
1077                                pack=Package(tmp[3],tmp[0],tmp[1],tmp[2])
1078                                self.package_list.append(pack)
1079                                if tmp[3]==str(None):
1080                                        self.newpackages=int(self.newpackages)+1       
1081
1082        #def parse_simulate_output
1083       
1084        def package_clicked(self,x,y):
1085
1086                default_text="Downloading changelog..."
1087                selection=self.packages_tv.get_selection()
1088                model,iter=selection.get_selected()
1089                self.changelog_textview.get_buffer().set_text("".join(default_text))
1090
1091                #name=self.packages_store.get_value(iter,1)
1092                name=model[iter][2]
1093                name=name[name.find("<b>")+3:name.find("</b>")]
1094                changelog=self.llxup_connect.getPackageChangelog(name)
1095                self.changelog_textview.get_buffer().set_text("".join(changelog))
1096               
1097       
1098        #def package_clicked                   
1099
1100        def upgrade_process(self,widget, event=None):
1101
1102               
1103                self.msg_upgrade_running=_("The update process is running. Wait a moment please")
1104
1105                if not self.preactions_process_t.launched:
1106                        self.number_process=4
1107                        self.pbar.show()
1108                        #self.pbar.pulse()
1109                        self.viewport.show()
1110                        self.terminal_scrolled.show()
1111                        self.terminal_label.show()
1112                        self.msg_terminal=_("Update process details")
1113                        self.terminal_label.set_markup(self.msg_terminal)
1114                        GLib.timeout_add(100,self.dist_upgrade)
1115
1116                        # self.preactions_process_t.start()
1117                        # self.preactions_process_t.launched=True
1118
1119
1120                else:
1121                        if not self.postactions_process_t.done:
1122                                self.terminal_label.set_name("ERROR_FONT")
1123                                self.terminal_label.set_markup(self.msg_upgrade_running)
1124
1125        #def upgrade_process
1126       
1127        def dist_upgrade(self):
1128
1129                if not self.preactions_process_t.launched:
1130                        print "  [Lliurex-up]: Executing pre-actions"
1131                        self.pbar_label.show()
1132                        self.cancel_button_box.hide()
1133
1134                        self.preactions_process_t.start()
1135                        self.preactions_process_t.launched=True
1136                        self.show_number_process_executing(1,_("Preparing system to the update"))
1137                        self.update_button_box.set_name("UPDATE_BUTTON_LAUNCHED_COLOR")
1138
1139                else:
1140
1141                        if self.preactions_process_t.done:
1142                                if not self.update_process_t.is_alive() and not self.update_process_t.launched:
1143                                        print "  [Lliurex-up]: Executing dist-upgrade"
1144                                        self.update_process_t.start()
1145                                        self.update_process_t.launched=True
1146                                        self.show_number_process_executing(2,_("Downloading and installing packages"))
1147
1148                               
1149                                if self.update_process_t.done:
1150                                        if not self.postactions_process_t.is_alive() and not self.postactions_process_t.launched:
1151                                                print "  [Lliurex-up]: Executing post-actions"
1152                                                self.postactions_process_t.start()
1153                                                self.postactions_process_t.launched=True
1154                                                self.show_number_process_executing(3,_("Ending the update"))
1155                                       
1156                                        if self.postactions_process_t.done:
1157
1158                                                if not self.checkFinalFlavourToInstall_t.is_alive() and not self.checkFinalFlavourToInstall_t.launched:
1159                                                        print "  [Lliurex-up]: Checking Final metapackage"
1160                                                        self.checkFinalFlavourToInstall_t.start()
1161                                                        self.checkFinalFlavourToInstall_t.launched=True
1162                                                        self.show_number_process_executing(4,_("Checking metapackage"))
1163                                                                               
1164                                       
1165                                                if self.checkFinalFlavourToInstall_t.done:                               
1166
1167                                                        self.cancel_button_box.show()
1168                                                        self.cancel_button_label.set_label(_("Close"))
1169                                                        self.pbar.hide()
1170                                                        self.pbar_label.hide()
1171                                                        self.terminal_label.set_name("CHANGELOG_FONT")
1172                                                        self.update_installed_icon()
1173                                                        if not self.llxup_connect.checkErrorDistUpgrade():
1174                                                                self.msg_upgrade_running="<span><b>" + _("The system is now update") + "</b></span>"
1175                                                                self.update_button_box.set_name("UPDATE_CORRECT_BUTTON_COLOR")
1176
1177                                                        else:
1178                                                                self.terminal_label.set_name("ERROR_FONT")
1179                                                                self.msg_upgrade_running="<span><b>" + _("The updated process is endend with errors") + "</b></span>"
1180                                                                self.update_button_box.set_name("UPDATE_ERROR_BUTTON_COLOR")
1181
1182                                                                #self.update_button_box.set_name("UPDATE_BUTTON_END_COLOR")
1183                                                        self.terminal_label.set_markup(self.msg_upgrade_running)
1184                                                        return False
1185               
1186       
1187
1188                if self.preactions_process_t.launched:
1189                        if      not self.preactions_process_t.done:
1190                                if not os.path.exists(self.llxup_connect.preactions_token):
1191                                        return True
1192                                else:
1193                                        self.preactions_process_t.done=True
1194                                        return True
1195
1196
1197                if self.update_process_t.launched:
1198                        if      not self.update_process_t.done:
1199                                if not os.path.exists(self.llxup_connect.upgrade_token):
1200                                        return True
1201                                else:
1202                                        self.update_process_t.done=True 
1203                                        return True
1204                                       
1205                if self.postactions_process_t.launched:
1206                        if      not self.postactions_process_t.done:
1207                               
1208                                if not os.path.exists(self.llxup_connect.postactions_token):
1209                                        return True
1210                                else:
1211                                        self.postactions_process_t.done=True
1212                                        return True             
1213
1214
1215                if self.checkFinalFlavourToInstall_t.launched:
1216                        if not self.checkFinalFlavourToInstall_t.done:
1217                                if not os.path.exists(self.llxup_connect.installflavour_token):
1218                                        return True
1219                                else:
1220                                        self.checkFinalFlavourToInstall_t.done=True     
1221                                        return True                             
1222
1223                       
1224        #def dist_upgrade
1225
1226
1227        def preactions_process(self):
1228
1229                self.command=self.llxup_connect.preActionsScript()
1230                #self.command=self.llxup_connect.preActionsScript() + ' | tee ' + TMP_FILE + ';rm ' + TMP_FILE +'\n'
1231                length=len(self.command)
1232                self.vterminal.feed_child(self.command, length)
1233
1234        #def preactions_process
1235       
1236        def update_process(self):
1237                 
1238                #self.command='apt-get dist-upgrade -sV | tee '+ TMP_FILE + ';rm ' + TMP_FILE +'\n'
1239                self.command=self.llxup_connect.distUpgradeProcess()
1240                length=len(self.command)
1241                self.vterminal.feed_child(self.command, length)
1242
1243        #def update_process             
1244
1245
1246        def postactions_process(self):
1247
1248                self.command=self.llxup_connect.postActionsScript()
1249                #self.command=self.llxup_connect.preActionsScript() + ' | tee ' + TMP_FILE + ';rm ' + TMP_FILE +'\n'
1250                length=len(self.command)
1251                self.vterminal.feed_child(self.command, length)
1252
1253        #def postactions_process
1254
1255       
1256        def checkFinalFlavourToInstall(self):
1257
1258                self.flavourToInstall=self.llxup_connect.checkFinalFlavour()
1259
1260                if self.flavourToInstall !=None:
1261                        print "  [Lliurex-up]: Check Final Metapackage: Instalation of metapackage is required"
1262                        self.installFinalFlavour(self.flavourToInstall)
1263                else:
1264                        print "  [Lliurex-up]: Check Final Metapackage: Nothing to do"
1265                        self.command='exit ' + '\n'
1266                        length=len(self.command)
1267                        self.vterminal.feed_child(self.command, length)
1268                        self.checkFinalFlavourToInstall_t.done=True     
1269       
1270        #def checkFinalFlavourToInstall
1271
1272        def installFinalFlavour(self,flavourToInstall):
1273
1274                self.command=self.llxup_connect.installFinalFlavour(flavourToInstall)
1275                length=len(self.command)
1276                self.vterminal.feed_child(self.command, length)
1277                               
1278        #def installFinalFlavour
1279       
1280       
1281        def view_packages_clicked(self,widget,event):
1282
1283                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT)
1284                self.stack.set_visible_child_name("packages")
1285               
1286        #def view_packages_clicked     
1287       
1288
1289        def arrow_clicked(self,widget,event):
1290       
1291                self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_RIGHT)
1292                self.stack.set_visible_child_name("update")     
1293               
1294        #def arrow_clicked
1295
1296        def update_installed_icon(self):
1297       
1298                imagok=Gtk.Image()
1299                imagok.set_from_file(DONE_ICON)         
1300                iconok=imagok.get_pixbuf()
1301
1302                imagerr=Gtk.Image()
1303                imagerr.set_from_file(ERROR_ICON)               
1304                iconerr=imagerr.get_pixbuf()
1305                packages_status=self.llxup_connect.getStatusPackage()
1306
1307                for item in self.packages_store:
1308                        name=item[2].split(">")[2]
1309                        name=name.split("<")[0]
1310                        version=item[2].split(">")[5]
1311                        version=version.split("<")[0]
1312                        tmp=str(name)+"_"+str(version)
1313                        if tmp in packages_status:
1314                                item[4]=iconok
1315                        else:
1316                                item[4]=iconerr
1317                       
1318        #def update_installed_icon     
1319
1320        def mouse_over_yes(self,widget,event):
1321
1322                self.yes_button_box.set_name("BUTTON_OVER_COLOR")
1323
1324        #def mouse_over_yes     
1325
1326        def mouse_exit_yes(self,widget,event):
1327
1328                self.yes_button_box.set_name("BUTTON_COLOR")
1329
1330        #def mouse_exit_yes     
1331
1332        def mouse_over_no(self,widget,event):
1333
1334                self.no_button_box.set_name("BUTTON_OVER_COLOR")
1335
1336        #def mouse_over_no     
1337
1338        def mouse_exit_no(self,widget,event):
1339
1340                self.no_button_box.set_name("BUTTON_COLOR")
1341
1342        #def mouse_exit_no     
1343                       
1344        def mouse_over_view_packages(self,widget,event):
1345
1346                self.view_packages_button_box.set_name("BUTTON_OVER_COLOR")     
1347
1348        #def mouse_over_view_packages   
1349
1350        def mouse_exit_view_packages(self,widget,event):
1351
1352                self.view_packages_button_box.set_name("BUTTON_COLOR")
1353
1354        #def mouse_exit_view_packages   
1355                       
1356        def mouse_over_update_button(self,widget,event):
1357
1358                if not self.preactions_process_t.launched and not self.postactions_process_t.done:
1359                        self.update_button_box.set_name("BUTTON_OVER_COLOR")
1360                else:
1361                        if self.preactions_process_t.launched and not self.postactions_process_t.done :
1362                                self.terminal_label.set_name("ERROR_FONT")
1363                                self.terminal_label.set_markup(self.msg_upgrade_running)
1364
1365        #def mouse_over_update_button
1366                       
1367        def mouse_exit_update_button(self,widget,event):
1368
1369                if self.preactions_process_t.launched and not self.postactions_process_t.done:
1370                        self.terminal_label.set_name("CHANGELOG_FONT")
1371                        self.terminal_label.set_markup(self.msg_terminal)
1372                else:
1373                        if not self.preactions_process_t.launched:
1374                                self.update_button_box.set_name("BUTTON_COLOR")
1375
1376        #def mouse_exit_update_button
1377                       
1378        def mouse_over_cancel(self,widget,event):
1379
1380                self.cancel_button_box.set_name("BUTTON_OVER_COLOR")   
1381
1382        #def mouse_over_cancel 
1383
1384        def mouse_exit_cancel(self,widget,event):
1385
1386                self.cancel_button_box.set_name("BUTTON_COLOR") 
1387
1388        #def mouse_exit_cancel
1389
1390        def mouse_over_return_arrow(self,widget,event):
1391
1392                self.return_arrow_box.set_name("BUTTON_OVER_COLOR")     
1393
1394        #def mouse_over_return_arrow   
1395
1396        def mouse_exit_return_arrow(self,widget,event):
1397
1398                self.return_arrow_box.set_name("BUTTON_COLOR")         
1399
1400        #def mouse_exit_return_arrow   
1401
1402        def quit(self,widget,event=None):
1403                self.llxup_connect.cleanEnvironment()
1404                self.llxup_connect.cleanLliurexUpLock()
1405                Gtk.main_quit() 
1406
1407        #def quit       
1408
1409#class LliurexMirror
1410
1411lup=LliurexUp()
1412lup.start_gui()         
1413 
Note: See TracBrowser for help on using the repository browser.