def get_play_info_string(self, duration_only=False): duration = util.format_time(self.total_time) if duration_only and self.total_time > 0: return duration elif self.current_position > 0 and \ self.current_position != self.total_time: position = util.format_time(self.current_position) return '%s / %s' % (position, duration) elif self.total_time > 0: return duration else: return '-'
def get_play_info_string(self, duration_only=False): duration = util.format_time(self.total_time) if duration_only and self.total_time > 0: return duration elif self.is_finished(): return "%s (%s)" % (_("Finished"), duration) elif self.current_position > 0 and self.current_position != self.total_time: position = util.format_time(self.current_position) return "%s / %s" % (position, duration) elif self.total_time > 0: return duration else: return "-"
def get_play_info_string(self, duration_only=False): duration = util.format_time(self.total_time) if duration_only and self.total_time > 0: return duration elif self.is_finished(): return '%s (%s)' % (_('Finished'), duration) elif self.current_position > 0 and \ self.current_position != self.total_time: position = util.format_time(self.current_position) return '%s / %s' % (position, duration) elif self.total_time > 0: return duration else: return '-'
def update_from_episode(self, track, episode, *, initial=False): if initial: # Set the initial bookmark on the device based on what we have locally track.initialize_bookmark(episode.is_new, episode.current_position * 1000) else: # Copy updated status from iPod if track.playcount > 0: episode.is_new = False if track.bookmark_time > 0: logger.info('Playback position from iPod: %s', util.format_time(track.bookmark_time / 1000)) episode.is_new = False episode.current_position = int(track.bookmark_time / 1000) episode.current_position_updated = time.time() episode.save()
def get_update_fields(self, episode, include_description): show_bullet = False show_padlock = False show_missing = False status_icon = None tooltip = [] view_show_undeleted = True view_show_downloaded = False view_show_unplayed = False icon_theme = Gtk.IconTheme.get_default() if episode.downloading: tooltip.append( '%s %d%%' % (_('Downloading'), int(episode.download_task.progress * 100))) index = int(self.PROGRESS_STEPS * episode.download_task.progress) status_icon = 'gpodder-progress-%d' % index view_show_downloaded = True view_show_unplayed = True else: if episode.state == gpodder.STATE_DELETED: tooltip.append(_('Deleted')) status_icon = self.ICON_DELETED view_show_undeleted = False elif episode.state == gpodder.STATE_NORMAL and \ episode.is_new: tooltip.append(_('New episode')) view_show_downloaded = True view_show_unplayed = True elif episode.state == gpodder.STATE_DOWNLOADED: tooltip = [] view_show_downloaded = True view_show_unplayed = episode.is_new show_bullet = episode.is_new show_padlock = episode.archive show_missing = not episode.file_exists() filename = episode.local_filename(create=False, check_only=True) file_type = episode.file_type() if file_type == 'audio': tooltip.append(_('Downloaded episode')) status_icon = self.ICON_AUDIO_FILE elif file_type == 'video': tooltip.append(_('Downloaded video episode')) status_icon = self.ICON_VIDEO_FILE elif file_type == 'image': tooltip.append(_('Downloaded image')) status_icon = self.ICON_IMAGE_FILE else: tooltip.append(_('Downloaded file')) status_icon = self.ICON_GENERIC_FILE # Try to find a themed icon for this file # doesn't work on win32 (opus files are showed as text) if filename is not None and have_gio and not gpodder.ui.win32: file = Gio.File.new_for_path(filename) if file.query_exists(): file_info = file.query_info( '*', Gio.FileQueryInfoFlags.NONE, None) icon = file_info.get_icon() for icon_name in icon.get_names(): if icon_theme.has_icon(icon_name): status_icon = icon_name break if show_missing: tooltip.append(_('missing file')) else: if show_bullet: if file_type == 'image': tooltip.append(_('never displayed')) elif file_type in ('audio', 'video'): tooltip.append(_('never played')) else: tooltip.append(_('never opened')) else: if file_type == 'image': tooltip.append(_('displayed')) elif file_type in ('audio', 'video'): tooltip.append(_('played')) else: tooltip.append(_('opened')) if show_padlock: tooltip.append(_('deletion prevented')) if episode.total_time > 0 and episode.current_position: tooltip.append('%d%%' % (100. * float(episode.current_position) / float(episode.total_time), )) if episode.total_time: total_time = util.format_time(episode.total_time) if total_time: tooltip.append(total_time) tooltip = ', '.join(tooltip) description = ''.join( self._format_description(episode, include_description)) return ( (self.C_STATUS_ICON, status_icon), (self.C_VIEW_SHOW_UNDELETED, view_show_undeleted), (self.C_VIEW_SHOW_DOWNLOADED, view_show_downloaded), (self.C_VIEW_SHOW_UNPLAYED, view_show_unplayed), (self.C_DESCRIPTION, description), (self.C_TOOLTIP, tooltip), (self.C_TIME, episode.get_play_info_string()), (self.C_TIME_VISIBLE, bool(episode.total_time)), (self.C_TOTAL_TIME, episode.total_time), (self.C_LOCKED, episode.archive), (self.C_FILESIZE_TEXT, self._format_filesize(episode)), (self.C_FILESIZE, episode.file_size), )
def update_by_iter(self, iter, downloading=None, include_description=False, \ generate_thumbnails=False, reload_from_db=True): episode = self.get_value(iter, self.C_EPISODE) if reload_from_db: episode.reload_from_db() if include_description or gpodder.ui.maemo: icon_size = 32 else: icon_size = 16 show_bullet = False show_padlock = False show_missing = False status_icon = None status_icon_to_build_from_file = False tooltip = [] view_show_undeleted = True view_show_downloaded = False view_show_unplayed = False icon_theme = gtk.icon_theme_get_default() if downloading is not None and downloading(episode): tooltip.append(_('Downloading')) status_icon = self.ICON_DOWNLOADING view_show_downloaded = True view_show_unplayed = True else: if episode.state == gpodder.STATE_DELETED: tooltip.append(_('Deleted')) status_icon = self.ICON_DELETED view_show_undeleted = False elif episode.state == gpodder.STATE_NORMAL and \ not episode.is_played: tooltip.append(_('New episode')) status_icon = self.ICON_NEW view_show_downloaded = True view_show_unplayed = True elif episode.state == gpodder.STATE_DOWNLOADED: tooltip = [] view_show_downloaded = True view_show_unplayed = not episode.is_played show_bullet = not episode.is_played show_padlock = episode.is_locked show_missing = not episode.file_exists() filename = episode.local_filename(create=False, check_only=True) file_type = episode.file_type() if file_type == 'audio': tooltip.append(_('Downloaded episode')) status_icon = self.ICON_AUDIO_FILE elif file_type == 'video': tooltip.append(_('Downloaded video episode')) status_icon = self.ICON_VIDEO_FILE elif file_type == 'image': tooltip.append(_('Downloaded image')) status_icon = self.ICON_IMAGE_FILE # Optional thumbnailing for image downloads if generate_thumbnails: if filename is not None: # set the status icon to the path itself (that # should be a good identifier anyway) status_icon = filename status_icon_to_build_from_file = True else: tooltip.append(_('Downloaded file')) status_icon = self.ICON_GENERIC_FILE # Try to find a themed icon for this file if filename is not None and have_gio: file = gio.File(filename) if file.query_exists(): file_info = file.query_info('*') icon = file_info.get_icon() for icon_name in icon.get_names(): if icon_theme.has_icon(icon_name): status_icon = icon_name break if show_missing: tooltip.append(_('missing file')) else: if show_bullet: if file_type == 'image': tooltip.append(_('never displayed')) elif file_type in ('audio', 'video'): tooltip.append(_('never played')) else: tooltip.append(_('never opened')) else: if file_type == 'image': tooltip.append(_('displayed')) elif file_type in ('audio', 'video'): tooltip.append(_('played')) else: tooltip.append(_('opened')) if show_padlock: tooltip.append(_('deletion prevented')) if episode.total_time > 0 and episode.current_position: tooltip.append('%d%%' % (100.*float(episode.current_position)/float(episode.total_time),)) if episode.total_time: total_time = util.format_time(episode.total_time) if total_time: tooltip.append(total_time) tooltip = ', '.join(tooltip) description = self._format_description(episode, include_description, downloading) self.set(iter, \ self.C_STATUS_ICON, status_icon, \ self.C_VIEW_SHOW_UNDELETED, view_show_undeleted, \ self.C_VIEW_SHOW_DOWNLOADED, view_show_downloaded, \ self.C_VIEW_SHOW_UNPLAYED, view_show_unplayed, \ self.C_DESCRIPTION, description, \ self.C_TOOLTIP, tooltip, \ self.C_TIME, episode.get_play_info_string(), \ self.C_TIME_VISIBLE, episode.total_time, \ self.C_LOCKED, episode.is_locked)
def get_update_fields(self, episode, include_description): show_bullet = False show_padlock = False show_missing = False status_icon = None tooltip = [] view_show_undeleted = True view_show_downloaded = False view_show_unplayed = False icon_theme = Gtk.IconTheme.get_default() if episode.downloading: tooltip.append('%s %d%%' % (_('Downloading'), int(episode.download_task.progress * 100))) index = int(self.PROGRESS_STEPS * episode.download_task.progress) status_icon = 'gpodder-progress-%d' % index view_show_downloaded = True view_show_unplayed = True else: if episode.state == gpodder.STATE_DELETED: tooltip.append(_('Deleted')) status_icon = self.ICON_DELETED view_show_undeleted = False elif episode.state == gpodder.STATE_NORMAL and \ episode.is_new: tooltip.append(_('New episode')) view_show_downloaded = True view_show_unplayed = True elif episode.state == gpodder.STATE_DOWNLOADED: tooltip = [] view_show_downloaded = True view_show_unplayed = episode.is_new show_bullet = episode.is_new show_padlock = episode.archive show_missing = not episode.file_exists() filename = episode.local_filename(create=False, check_only=True) file_type = episode.file_type() if file_type == 'audio': tooltip.append(_('Downloaded episode')) status_icon = self.ICON_AUDIO_FILE elif file_type == 'video': tooltip.append(_('Downloaded video episode')) status_icon = self.ICON_VIDEO_FILE elif file_type == 'image': tooltip.append(_('Downloaded image')) status_icon = self.ICON_IMAGE_FILE else: tooltip.append(_('Downloaded file')) status_icon = self.ICON_GENERIC_FILE # Try to find a themed icon for this file # doesn't work on win32 (opus files are showed as text) if filename is not None and have_gio and not gpodder.ui.win32: file = Gio.File.new_for_path(filename) if file.query_exists(): file_info = file.query_info('*', Gio.FileQueryInfoFlags.NONE, None) icon = file_info.get_icon() for icon_name in icon.get_names(): if icon_theme.has_icon(icon_name): status_icon = icon_name break if show_missing: tooltip.append(_('missing file')) else: if show_bullet: if file_type == 'image': tooltip.append(_('never displayed')) elif file_type in ('audio', 'video'): tooltip.append(_('never played')) else: tooltip.append(_('never opened')) else: if file_type == 'image': tooltip.append(_('displayed')) elif file_type in ('audio', 'video'): tooltip.append(_('played')) else: tooltip.append(_('opened')) if show_padlock: tooltip.append(_('deletion prevented')) if episode.total_time > 0 and episode.current_position: tooltip.append('%d%%' % (100. * float(episode.current_position) / float(episode.total_time),)) if episode.total_time: total_time = util.format_time(episode.total_time) if total_time: tooltip.append(total_time) tooltip = ', '.join(tooltip) description = ''.join(self._format_description(episode, include_description)) return ( (self.C_STATUS_ICON, status_icon), (self.C_VIEW_SHOW_UNDELETED, view_show_undeleted), (self.C_VIEW_SHOW_DOWNLOADED, view_show_downloaded), (self.C_VIEW_SHOW_UNPLAYED, view_show_unplayed), (self.C_DESCRIPTION, description), (self.C_TOOLTIP, tooltip), (self.C_TIME, episode.get_play_info_string()), (self.C_TIME_VISIBLE, bool(episode.total_time)), (self.C_TOTAL_TIME, episode.total_time), (self.C_LOCKED, episode.archive), (self.C_FILESIZE_TEXT, self._format_filesize(episode)), (self.C_FILESIZE, episode.file_size), )
def get_duration_string(self): return util.format_time(self.total_time)
def get_position_string(self): return util.format_time(self.current_position)
def update_by_iter(self, iter, include_description=False): episode = self.get_value(iter, self.C_EPISODE) show_bullet = False show_padlock = False show_missing = False status_icon = None tooltip = [] view_show_undeleted = True view_show_downloaded = False view_show_unplayed = False icon_theme = gtk.icon_theme_get_default() if episode.downloading: tooltip.append(_('Downloading')) status_icon = self.ICON_DOWNLOADING view_show_downloaded = True view_show_unplayed = True else: if episode.state == gpodder.STATE_DELETED: tooltip.append(_('Deleted')) status_icon = self.ICON_DELETED view_show_undeleted = False elif episode.state == gpodder.STATE_NORMAL and \ episode.is_new: tooltip.append(_('New episode')) view_show_downloaded = True view_show_unplayed = True elif episode.state == gpodder.STATE_DOWNLOADED: tooltip = [] view_show_downloaded = True view_show_unplayed = episode.is_new show_bullet = episode.is_new show_padlock = episode.archive show_missing = not episode.file_exists() filename = episode.local_filename(create=False, check_only=True) file_type = episode.file_type() if file_type == 'audio': tooltip.append(_('Downloaded episode')) status_icon = self.ICON_AUDIO_FILE elif file_type == 'video': tooltip.append(_('Downloaded video episode')) status_icon = self.ICON_VIDEO_FILE elif file_type == 'image': tooltip.append(_('Downloaded image')) status_icon = self.ICON_IMAGE_FILE else: tooltip.append(_('Downloaded file')) status_icon = self.ICON_GENERIC_FILE # Try to find a themed icon for this file if filename is not None and have_gio: file = gio.File(filename) if file.query_exists(): file_info = file.query_info('*') icon = file_info.get_icon() for icon_name in icon.get_names(): if icon_theme.has_icon(icon_name): status_icon = icon_name break if show_missing: tooltip.append(_('missing file')) else: if show_bullet: if file_type == 'image': tooltip.append(_('never displayed')) elif file_type in ('audio', 'video'): tooltip.append(_('never played')) else: tooltip.append(_('never opened')) else: if file_type == 'image': tooltip.append(_('displayed')) elif file_type in ('audio', 'video'): tooltip.append(_('played')) else: tooltip.append(_('opened')) if show_padlock: tooltip.append(_('deletion prevented')) if episode.total_time > 0 and episode.current_position: tooltip.append('%d%%' % (100.*float(episode.current_position)/float(episode.total_time),)) if episode.total_time: total_time = util.format_time(episode.total_time) if total_time: tooltip.append(total_time) tooltip = ', '.join(tooltip) description = self._format_description(episode, include_description) self.set(iter, \ self.C_STATUS_ICON, status_icon, \ self.C_VIEW_SHOW_UNDELETED, view_show_undeleted, \ self.C_VIEW_SHOW_DOWNLOADED, view_show_downloaded, \ self.C_VIEW_SHOW_UNPLAYED, view_show_unplayed, \ self.C_DESCRIPTION, description, \ self.C_TOOLTIP, tooltip, \ self.C_TIME, episode.get_play_info_string(duration_only=True), \ self.C_TIME_VISIBLE, bool(episode.total_time), \ self.C_TOTAL_TIME, episode.total_time, \ self.C_LOCKED, episode.archive, \ self.C_FILESIZE_TEXT, self._format_filesize(episode), \ self.C_FILESIZE, episode.file_size)
def update_by_iter(self, iter, downloading=None, include_description=False, \ generate_thumbnails=False, reload_from_db=True): episode = self.get_value(iter, self.C_EPISODE) if reload_from_db: episode.reload_from_db() if include_description or gpodder.ui.maemo: icon_size = 32 else: icon_size = 16 show_bullet = False show_padlock = False show_missing = False status_icon = None status_icon_to_build_from_file = False tooltip = [] view_show_undeleted = True view_show_downloaded = False view_show_unplayed = False icon_theme = gtk.icon_theme_get_default() if downloading is not None and downloading(episode): tooltip.append(_('Downloading')) status_icon = self.ICON_DOWNLOADING view_show_downloaded = True view_show_unplayed = True else: if episode.state == gpodder.STATE_DELETED: tooltip.append(_('Deleted')) status_icon = self.ICON_DELETED view_show_undeleted = False elif episode.state == gpodder.STATE_NORMAL and \ not episode.is_played: tooltip.append(_('New episode')) status_icon = self.ICON_NEW view_show_downloaded = True view_show_unplayed = True elif episode.state == gpodder.STATE_DOWNLOADED: tooltip = [] view_show_downloaded = True view_show_unplayed = not episode.is_played show_bullet = not episode.is_played show_padlock = episode.is_locked show_missing = not episode.file_exists() filename = episode.local_filename(create=False, check_only=True) file_type = episode.file_type() if file_type == 'audio': tooltip.append(_('Downloaded episode')) status_icon = self.ICON_AUDIO_FILE elif file_type == 'video': tooltip.append(_('Downloaded video episode')) status_icon = self.ICON_VIDEO_FILE elif file_type == 'image': tooltip.append(_('Downloaded image')) status_icon = self.ICON_IMAGE_FILE # Optional thumbnailing for image downloads if generate_thumbnails: if filename is not None: # set the status icon to the path itself (that # should be a good identifier anyway) status_icon = filename status_icon_to_build_from_file = True else: tooltip.append(_('Downloaded file')) status_icon = self.ICON_GENERIC_FILE # Try to find a themed icon for this file if filename is not None and have_gio: file = gio.File(filename) if file.query_exists(): file_info = file.query_info('*') icon = file_info.get_icon() for icon_name in icon.get_names(): if icon_theme.has_icon(icon_name): status_icon = icon_name break if show_missing: tooltip.append(_('missing file')) else: if show_bullet: if file_type == 'image': tooltip.append(_('never displayed')) elif file_type in ('audio', 'video'): tooltip.append(_('never played')) else: tooltip.append(_('never opened')) else: if file_type == 'image': tooltip.append(_('displayed')) elif file_type in ('audio', 'video'): tooltip.append(_('played')) else: tooltip.append(_('opened')) if show_padlock: tooltip.append(_('deletion prevented')) if episode.total_time > 0 and episode.current_position: tooltip.append('%d%%' % (100. * float(episode.current_position) / float(episode.total_time), )) if episode.total_time: total_time = util.format_time(episode.total_time) if total_time: tooltip.append(total_time) tooltip = ', '.join(tooltip) description = self._format_description(episode, include_description, downloading) self.set(iter, \ self.C_STATUS_ICON, status_icon, \ self.C_VIEW_SHOW_UNDELETED, view_show_undeleted, \ self.C_VIEW_SHOW_DOWNLOADED, view_show_downloaded, \ self.C_VIEW_SHOW_UNPLAYED, view_show_unplayed, \ self.C_DESCRIPTION, description, \ self.C_TOOLTIP, tooltip, \ self.C_TIME, episode.get_play_info_string(), \ self.C_TIME_VISIBLE, episode.total_time, \ self.C_LOCKED, episode.is_locked)