コード例 #1
0
class UpdateManager(gtk.Window):
    time_count = 1

    def __init__(self, parent = None):
        gtk.Window.__init__(self)

        self.__settings = TweakSettings()

        self.set_modal(True)
        self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
        self.set_size_request(360, 40)
        self.set_title(_('Update Manager'))
        self.connect('destroy', lambda *w: self.destroy())
        if parent:
            self.set_transient_for(parent)

        self.progress_bar = gtk.ProgressBar()
        self.add(self.progress_bar)
        self.downloader = Downloader()
        self.downloader.connect('downloading', self.on_downloading)

        self.show_all()
        self.start_download(self.__settings.get_url())

    def on_downloading(self, widget):
        percentage = self.downloader.percentage

        if percentage < 1:
            self.progress_bar.set_text(_('Downloading...%d') % int(percentage * 100)+ '%')
            self.progress_bar.set_fraction(percentage)

            return True
        else:
            gobject.timeout_add(1000, self.on_start_install)

    def on_start_install(self):
        thread.start_new_thread(self.start_install, ())

    def start_install(self):
        gtk.gdk.threads_enter()

        os.system('gdebi-gtk %s &' % self.downloader.save_to)
        gtk.main_quit()

        gtk.gdk.threads_leave()

    def start_download(self, url):
        thread.start_new_thread(self.download_thread, (url,))

    def download_thread(self, url):
        self.downloader.start(url)

    def check_percentage(self):
        percentage = self.downloader.percentage

        if percentage < 1:
            self.progress_bar.set_text(_("Downloading...%d") % int(percentage * 100)+ '%')
            self.progress_bar.set_fraction(percentage)

            return True
        else:
            self.progress_bar.set_text(_("Finished"))
            self.progress_bar.set_fraction(1)
            gobject.timeout_add(1000, self.on_start_install)

    def main(self):
        gtk.gdk.threads_enter()
        gtk.main()
        gtk.gdk.threads_leave()