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)
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)