Beispiel #1
0
 def __init__(self, clock=reactor):
     """Initialize this instance."""
     self.clock = clock
     try:
         self.launcher = UbuntuOneLauncher()
     except TypeError:
         # Unity GIR can cause a TypeError here so we should not fail
         self.launcher = DummyLauncher()
Beispiel #2
0
class ProgressBar(object):
    """Update a progressbar no more than 10 times a second."""
    pulsating = True
    visible = False
    progress = 0.0
    updates_delay = 0.1
    timer = None
    inhibitor_defer = None

    def __init__(self, clock=reactor):
        """Initialize this instance."""
        self.clock = clock
        try:
            self.launcher = UbuntuOneLauncher()
        except TypeError:
            # Unity GIR can cause a TypeError here so we should not fail
            self.launcher = DummyLauncher()

    def cleanup(self):
        """Cleanup this instance."""
        if self.timer:
            self.timer.cleanup()
            self.timer = None

    def _timeout(self, result):
        """The aggregating timer has expired, so update the UI."""
        self.timer = None
        self.launcher.set_progress(self.progress)
        logger.debug("progressbar updated: %f", self.progress)

    def set_progress(self, progress):
        """Steps amount changed. Set up a timer if there isn't one ticking."""
        self.progress = progress
        if not self.visible:
            self.visible = True
            self.launcher.show_progressbar()
            logger.debug("progressbar shown")
            if self.inhibitor_defer is None:
                self.inhibitor_defer = session.inhibit_logout_suspend(
                                                         FILE_SYNC_IN_PROGRESS)
        if not self.timer:
            self.timer = Timer(self.updates_delay, clock=self.clock)
            self.timer.addCallback(self._timeout)

    def completed(self):
        """All has completed."""
        self.cleanup()
        self.visible = False
        self.launcher.hide_progressbar()
        logger.debug("progressbar hidden")
        if self.inhibitor_defer is not None:

            def inhibitor_callback(inhibitor):
                """The inhibitor was found, so cancel it."""
                self.inhibitor_defer = None
                return inhibitor.cancel()

            self.inhibitor_defer.addCallback(inhibitor_callback)