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

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

Fix code

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