Example #1
0
    def export_to_file(self, file_path):
        from dao.XMLUtils import dump_activity_to_file

        AUX_FOLDER = os.path.join(os.path.expanduser('~'), "activity_auxiliary_folder")
        try:
            os.mkdir(AUX_FOLDER)
        except OSError:
            shutil.rmtree(AUX_FOLDER)
            os.mkdir(AUX_FOLDER)
        with open(os.path.join(AUX_FOLDER, "photo.xml"), "wt") as f:
            dump_activity_to_file(self, f)
        for i, t in enumerate(self.tags):
            # Make one aux folder for each tag to place media files
            tag_folder = os.path.join(AUX_FOLDER, str(i))
            os.mkdir(tag_folder)
            for img in get_folder_images(t.path):
                file_name = os.path.basename(img)
                shutil.copyfile(img, os.path.join(tag_folder, file_name))
                if len(t.sounds) > 0:
                    sounds_dir = os.path.join(tag_folder, "sounds")
                    try:
                        os.mkdir(sounds_dir)
                    except OSError:
                        shutil.rmtree(sounds_dir)
                        os.mkdir(sounds_dir)
                    for sound in t.sounds:
                        file_name = os.path.basename(sound.path)
                        shutil.copyfile(sound.path, os.path.join(sounds_dir, file_name))
        pack_folder_and_remove(AUX_FOLDER, file_path)
Example #2
0
    def play(self, writer):
        """
        Plays activity tags.
        @param writer: Object that write tags info.
        """

        self.return_code = EXIT_SUCCESS_CODE

        try:
            for tag in self.tags:
                images = get_folder_images(tag.path)
                shuffle(images)
                self.images[tag] = images
        except OSError:
            raise MissingFiles()

        background = (0, 0, 0)
        pygame.init()
        info_object = pygame.display.Info()

        screen_width = info_object.current_w
        screen_height = info_object.current_h
        size = (screen_width, screen_height)
        screen = pygame.display.set_mode(size, pygame.FULLSCREEN)
        pygame.mouse.set_visible(False)

        pygame.mixer.init(FREQ, BITSIZE, CHANNELS, BUFFER)
        self.zero_time = datetime.now()

        for tag in self.tags:
            self.ended_tag = False
            self.sound_player_thread = None
            if tag.associated_sound == "Yes":
                self.sound_player_thread = self.play_tag_sounds(
                    [sound.path for sound in tag.sounds])
            beg = (datetime.now() - self.zero_time).total_seconds()
            for img in self.images[tag]:
                start = time.time()
                img = pygame.image.load(img).convert()
                factor = min((1.0 * screen_width / img.get_width()),
                             (1.0 * screen_height / img.get_height()))
                new_width = int(img.get_width() * factor)
                new_height = int(img.get_height() * factor)
                img = pygame.transform.scale(img, (new_width, new_height))
                screen.fill(background)
                screen.blit(img, ((screen_width - img.get_width()) / 2,
                                  ((screen_height - img.get_height()) / 2)))
                pygame.display.flip()
                clock = pygame.time.Clock()
                while time.time() - start < self.gap and not self.done:
                    for event in pygame.event.get(pygame.KEYDOWN):
                        if event.key == ABORT_KEY:
                            self.done = True
                    clock.tick(FRAMERATE)
                if self.done:
                    self.return_code = EXIT_ABORT_CODE
                    break
            self.ended_tag = True
            if self.sound_player_thread:
                self.sound_player_thread.join()
            if self.done:
                end = (datetime.now() - self.zero_time).total_seconds()
                writer.write_tag_value(tag.name, beg, end)
                break
            end = (datetime.now() - self.zero_time).total_seconds()
            writer.write_tag_value(tag.name, beg, end)
        self.stop()
        self.raise_if_needed(self.return_code)
    def play(self, writer):
        """
        Plays activity tags.
        @param writer: Object that write tags info.
        """

        self.return_code = EXIT_SUCCESS_CODE

        try:
            for tag in self.tags:
                images = get_folder_images(tag.path)
                shuffle(images)
                self.images[tag] = images
        except OSError:
            raise MissingFiles()

        background = (0, 0, 0)
        pygame.init()
        info_object = pygame.display.Info()

        screen_width = info_object.current_w
        screen_height = info_object.current_h
        size = (screen_width, screen_height)
        screen = pygame.display.set_mode(size, pygame.FULLSCREEN)
        pygame.mouse.set_visible(False)

        pygame.mixer.init(FREQ, BITSIZE, CHANNELS, BUFFER)
        self.zero_time = datetime.now()

        for tag in self.tags:
            self.ended_tag = False
            self.sound_player_thread = None
            if tag.associated_sound == "Yes":
                self.sound_player_thread = self.play_tag_sounds([sound.path for sound in tag.sounds])
            beg = (datetime.now() - self.zero_time).total_seconds()
            for img in self.images[tag]:
                start = time.time()
                img = pygame.image.load(img).convert()
                factor = min((1.0 * screen_width / img.get_width()), (1.0 * screen_height / img.get_height()))
                new_width = int(img.get_width() * factor)
                new_height = int(img.get_height() * factor)
                img = pygame.transform.scale(img, (new_width, new_height))
                screen.fill(background)
                screen.blit(img, ((screen_width - img.get_width()) / 2, ((screen_height - img.get_height()) / 2)))
                pygame.display.flip()
                clock = pygame.time.Clock()
                while time.time() - start < self.gap and not self.done:
                    for event in pygame.event.get(pygame.KEYDOWN):
                        if event.key == ABORT_KEY:
                            self.done = True
                    clock.tick(FRAMERATE)
                if self.done:
                    self.return_code = EXIT_ABORT_CODE
                    break
            self.ended_tag = True
            if self.sound_player_thread:
                self.sound_player_thread.join()
            if self.done:
                end = (datetime.now() - self.zero_time).total_seconds()
                writer.write_tag_value(tag.name, beg, end)
                break
            end = (datetime.now() - self.zero_time).total_seconds()
            writer.write_tag_value(tag.name, beg, end)
        self.stop()
        self.raise_if_needed(self.return_code)