Merge pull request #1507 from auouymous/show-time-in-released-column
Show time in episode released column
This commit is contained in:
commit
0267b448eb
6 changed files with 67 additions and 8 deletions
|
@ -241,6 +241,14 @@
|
|||
<attribute name="label" translatable="yes">Episode descriptions</attribute>
|
||||
<attribute name="accel"><Primary>d</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="action">win.viewShowEpisodeReleasedTime</attribute>
|
||||
<attribute name="label" translatable="yes">Show episode released time</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="action">win.viewRightAlignEpisodeReleasedColumn</attribute>
|
||||
<attribute name="label" translatable="yes">Right align episode released column</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="action">win.viewCtrlClickToSortEpisodes</attribute>
|
||||
<attribute name="label" translatable="yes">Require control click to sort episodes</attribute>
|
||||
|
|
|
@ -171,6 +171,8 @@ defaults = {
|
|||
'always_show_new': True,
|
||||
'trim_title_prefix': True,
|
||||
'descriptions': True,
|
||||
'show_released_time': False,
|
||||
'right_align_released_column': False,
|
||||
'ctrl_click_to_sort': False,
|
||||
'columns': int('110', 2), # bitfield of visible columns
|
||||
},
|
||||
|
|
|
@ -194,6 +194,8 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
|
||||
self.create_actions()
|
||||
|
||||
self.releasecell = None
|
||||
|
||||
# Init the treeviews that we use
|
||||
self.init_podcast_list_treeview()
|
||||
self.init_episode_list_treeview()
|
||||
|
@ -319,6 +321,17 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
action.connect('activate', self.on_item_view_show_episode_description_toggled)
|
||||
g.add_action(action)
|
||||
|
||||
action = Gio.SimpleAction.new_stateful(
|
||||
'viewShowEpisodeReleasedTime', None, GLib.Variant.new_boolean(self.config.ui.gtk.episode_list.show_released_time))
|
||||
action.connect('activate', self.on_item_view_show_episode_released_time_toggled)
|
||||
g.add_action(action)
|
||||
|
||||
action = Gio.SimpleAction.new_stateful(
|
||||
'viewRightAlignEpisodeReleasedColumn', None,
|
||||
GLib.Variant.new_boolean(self.config.ui.gtk.episode_list.right_align_released_column))
|
||||
action.connect('activate', self.on_item_view_right_align_episode_released_column_toggled)
|
||||
g.add_action(action)
|
||||
|
||||
action = Gio.SimpleAction.new_stateful(
|
||||
'viewCtrlClickToSortEpisodes', None, GLib.Variant.new_boolean(self.config.ui.gtk.episode_list.ctrl_click_to_sort))
|
||||
action.connect('activate', self.on_item_view_ctrl_click_to_sort_episodes_toggled)
|
||||
|
@ -874,6 +887,14 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
|
||||
return False
|
||||
|
||||
def align_releasecell(self):
|
||||
if self.config.ui.gtk.episode_list.right_align_released_column:
|
||||
self.releasecell.set_property('xalign', 1)
|
||||
self.releasecell.set_property('alignment', Pango.Alignment.RIGHT)
|
||||
else:
|
||||
self.releasecell.set_property('xalign', 0)
|
||||
self.releasecell.set_property('alignment', Pango.Alignment.LEFT)
|
||||
|
||||
def init_episode_list_treeview(self):
|
||||
self.episode_list_model.set_view_mode(self.config.ui.gtk.episode_list.view_mode)
|
||||
|
||||
|
@ -925,8 +946,11 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
timecolumn = Gtk.TreeViewColumn(_('Duration'), timecell, text=EpisodeListModel.C_TIME)
|
||||
timecolumn.set_sort_column_id(EpisodeListModel.C_TOTAL_TIME)
|
||||
|
||||
releasecell = Gtk.CellRendererText()
|
||||
releasecolumn = Gtk.TreeViewColumn(_('Released'), releasecell, text=EpisodeListModel.C_PUBLISHED_TEXT)
|
||||
self.releasecell = Gtk.CellRendererText()
|
||||
self.align_releasecell()
|
||||
releasecolumn = Gtk.TreeViewColumn(_('Released'))
|
||||
releasecolumn.pack_start(self.releasecell, True)
|
||||
releasecolumn.add_attribute(self.releasecell, 'markup', EpisodeListModel.C_PUBLISHED_TEXT)
|
||||
releasecolumn.set_sort_column_id(EpisodeListModel.C_PUBLISHED)
|
||||
|
||||
sizetimecell = Gtk.CellRendererText()
|
||||
|
@ -1365,7 +1389,8 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
def _on_config_changed(self, name, old_value, new_value):
|
||||
if name == 'ui.gtk.toolbar':
|
||||
self.toolbar.set_property('visible', new_value)
|
||||
elif name in ('ui.gtk.episode_list.descriptions',
|
||||
elif name in ('ui.gtk.episode_list.show_released_time',
|
||||
'ui.gtk.episode_list.descriptions',
|
||||
'ui.gtk.episode_list.trim_title_prefix',
|
||||
'ui.gtk.episode_list.always_show_new'):
|
||||
self.update_episode_list_model()
|
||||
|
@ -3507,6 +3532,18 @@ class gPodder(BuilderWidget, dbus.service.Object):
|
|||
self.config.ui.gtk.episode_list.descriptions = not state
|
||||
action.set_state(GLib.Variant.new_boolean(not state))
|
||||
|
||||
def on_item_view_show_episode_released_time_toggled(self, action, param):
|
||||
state = action.get_state()
|
||||
self.config.ui.gtk.episode_list.show_released_time = not state
|
||||
action.set_state(GLib.Variant.new_boolean(not state))
|
||||
|
||||
def on_item_view_right_align_episode_released_column_toggled(self, action, param):
|
||||
state = action.get_state()
|
||||
self.config.ui.gtk.episode_list.right_align_released_column = not state
|
||||
action.set_state(GLib.Variant.new_boolean(not state))
|
||||
self.align_releasecell()
|
||||
self.treeAvailable.queue_draw()
|
||||
|
||||
def on_item_view_ctrl_click_to_sort_episodes_toggled(self, action, param):
|
||||
state = action.get_state()
|
||||
self.config.ui.gtk.episode_list.ctrl_click_to_sort = not state
|
||||
|
|
|
@ -128,7 +128,7 @@ class BackgroundUpdate(object):
|
|||
model.C_URL, episode.url,
|
||||
model.C_TITLE, episode.title,
|
||||
model.C_EPISODE, episode,
|
||||
model.C_PUBLISHED_TEXT, episode.cute_pubdate(),
|
||||
model.C_PUBLISHED_TEXT, episode.cute_pubdate(show_time=self.model._config_ui_gtk_episode_list_show_released_time),
|
||||
model.C_PUBLISHED, episode.published,
|
||||
)
|
||||
update_fields = model.get_update_fields(episode)
|
||||
|
@ -215,11 +215,13 @@ class EpisodeListModel(Gtk.ListStore):
|
|||
self._config_ui_gtk_episode_list_always_show_new = False
|
||||
self._config_ui_gtk_episode_list_trim_title_prefix = False
|
||||
self._config_ui_gtk_episode_list_descriptions = False
|
||||
self._config_ui_gtk_episode_list_show_released_time = False
|
||||
|
||||
def cache_config(self, config):
|
||||
self._config_ui_gtk_episode_list_always_show_new = config.ui.gtk.episode_list.always_show_new
|
||||
self._config_ui_gtk_episode_list_trim_title_prefix = config.ui.gtk.episode_list.trim_title_prefix
|
||||
self._config_ui_gtk_episode_list_descriptions = config.ui.gtk.episode_list.descriptions
|
||||
self._config_ui_gtk_episode_list_show_released_time = config.ui.gtk.episode_list.show_released_time
|
||||
|
||||
def _format_filesize(self, episode):
|
||||
if episode.file_size > 0:
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
import datetime
|
||||
import html
|
||||
import logging
|
||||
from urllib.parse import urlparse
|
||||
|
@ -201,7 +202,8 @@ class gPodderShownotesText(gPodderShownotes):
|
|||
heading = episode.title
|
||||
subheading = _('from %s') % (episode.channel.title)
|
||||
details = self.details_fmt % {
|
||||
'date': util.format_date(episode.published),
|
||||
'date': '{} {}'.format(datetime.datetime.fromtimestamp(episode.published).strftime('%H:%M'),
|
||||
util.format_date(episode.published)),
|
||||
'size': util.format_filesize(episode.file_size, digits=1)
|
||||
if episode.file_size > 0 else "-",
|
||||
'duration': episode.get_play_info_string()}
|
||||
|
@ -342,7 +344,8 @@ class gPodderShownotesHTML(gPodderShownotes):
|
|||
heading = '<h3>%s</h3>' % html.escape(episode.title)
|
||||
subheading = _('from %s') % html.escape(episode.channel.title)
|
||||
details = '<small>%s</small>' % html.escape(self.details_fmt % {
|
||||
'date': util.format_date(episode.published),
|
||||
'date': '{} {}'.format(datetime.datetime.fromtimestamp(episode.published).strftime('%H:%M'),
|
||||
util.format_date(episode.published)),
|
||||
'size': util.format_filesize(episode.file_size, digits=1)
|
||||
if episode.file_size > 0 else "-",
|
||||
'duration': episode.get_play_info_string()})
|
||||
|
|
|
@ -842,12 +842,19 @@ class PodcastEpisode(PodcastModelObject):
|
|||
self.title,
|
||||
self.cute_pubdate())
|
||||
|
||||
def cute_pubdate(self):
|
||||
def cute_pubdate(self, show_time=False):
|
||||
result = util.format_date(self.published)
|
||||
if result is None:
|
||||
return '(%s)' % _('unknown')
|
||||
|
||||
try:
|
||||
if show_time:
|
||||
timestamp = datetime.datetime.fromtimestamp(self.published)
|
||||
return '<small>{}</small>\n{}'.format(timestamp.strftime('%H:%M'), result)
|
||||
else:
|
||||
return result
|
||||
except:
|
||||
return result
|
||||
|
||||
pubdate_prop = property(fget=cute_pubdate)
|
||||
|
||||
|
|
Loading…
Reference in a new issue