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

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

WIP in fixed code

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