Пример #1
0
    def test_is_active_fails(self):
        """
        This method tests that 'screensaver mode' activity does change. The expected result of the test is that the
        is_active method returns inactivity.
        """
        input = "---\n---\n---"
        previous = "---\n---\n---"
        sm = ScreensaverMode(input, previous)

        for _ in range(0, 3):
            # For each frame of the pause

            # Assert the mode is still active.
            assert sm.is_active()
            sm.get_display_pattern()

        for i, _ in enumerate(previous.split("\n")):
            # For each cell in the previous pattern.

            # Assert the mode is still active.
            assert sm.is_active()
            # Calculate the next pattern to be displayed.
            sm.get_display_pattern()

        # Assert that the mode is no longer active.
        assert not sm.is_active()
Пример #2
0
    def test_is_active(self):
        """
        This method tests that 'screensaver mode' is still active, especially in its clearing state. The expected
        result of this tests is for the check to show the mode is still active.
        """
        input = "-*-\n-*-\n-*-"
        previous = "---\n---\n---"
        sm = ScreensaverMode(input, previous)

        for _ in range(0, 3):
            # For each frame of the pause

            # Assert the mode is still active.
            assert sm.is_active()
            sm.get_display_pattern()

        for i, _ in enumerate(previous.split("\n")):
            # For each cell in the previous pattern

            # Assert the mode is still active.
            assert sm.is_active()
            # Calculate the next pattern to be displayed.
            sm.get_display_pattern()
            # Assert the mode is still active.
            assert sm.is_active()

        # Calculate the next pattern to be displayed.
        sm.get_display_pattern()
        # Assert the mode is still active.
        assert sm.is_active()
Пример #3
0
    def start(self):
        """
        Starts the application: begins checking the current time and working out what information needs to be sent
        to the display at that time.
        """
        mode = ScreensaverMode(self._db_helper.get_random_screensaver())
        last_pattern = None
        last_check_time = datetime.datetime.now() - datetime.timedelta(minutes=10)

        while True:
            # Check the current time and make it accurate to the second
            current_time = datetime.datetime.now()
            min_current_time = minutify(current_time)

            if (current_time.minute % 5) == 0 and (min_current_time > last_check_time):
                # If the current time is on one of the five min. intervals, attempt to pull a pattern from the
                # internal database.
                last_check_time = min_current_time
                t_format = "%Y-%m-%d %H:%M:00.000000"
                pattern = self._db_helper.get_run_for_time(current_time.strftime(t_format))
                if pattern:
                    # If a pattern is successfully pulled, run the display's 'run mode' on it.
                    mode = RunMode(pattern)
                else:
                    # Otherwise pull a random screensaver from the internal database and run that in 'screensaver
                    # mode'
                    mode = ScreensaverMode(self._db_helper.get_random_screensaver(), last_pattern)

            if not mode.is_active():
                # If the current pattern finishes before the five minute timer has stopped, switch to
                # screensaver mode
                mode = ScreensaverMode(self._db_helper.get_random_screensaver(), last_pattern)

            # Retrieve the latest pattern to be sent to the display
            last_pattern = mode.get_display_pattern()

            # Send the pattern to the display controller for printing.
            self._display_controller.output_pattern(last_pattern)

            # While not working, sleep
            sleep_until_time = current_time + datetime.timedelta(seconds=sleep_time)
            time.sleep((sleep_until_time - datetime.datetime.now()).microseconds / 1000000)

            self.logger.warn("Outputted pattern at: %s" % current_time)