Add option to flattr an extensions and to show documentation
If an extension author adds an flattr url to the extensions metadata gPodder shows the "Flattr this" menu entry in the popup menu for an extension in the preference dialog. Alternative the extension author can add an url to the extensions metadata to link to the authors donation page (Support the author). Also the extension author can add an url to the extensions metadata to link to the extensions user documentation.
This commit is contained in:
parent
509cca2661
commit
bbfcd58ba6
|
@ -20,6 +20,8 @@ _ = gpodder.gettext
|
|||
__title__ = _('Convert audio files')
|
||||
__description__ = _('Transcode audio files to mp3/ogg')
|
||||
__authors__ = 'Bernd Schlapsi <brot@gmx.info>, Thomas Perl <thp@gpodder.org>'
|
||||
__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/AudioConverter'
|
||||
__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/AudioConverter'
|
||||
__category__ = 'post-download'
|
||||
|
||||
|
||||
|
|
|
@ -15,7 +15,9 @@ _ = gpodder.gettext
|
|||
|
||||
__title__ = _('Enqueue in media players')
|
||||
__description__ = _('Add a context menu item for enqueueing episodes in installed media players')
|
||||
__author__ = 'Thomas Perl <thp@gpodder.org>, Bernd Schlapsi <brot@gmx.info>'
|
||||
__authors__ = 'Thomas Perl <thp@gpodder.org>, Bernd Schlapsi <brot@gmx.info>'
|
||||
__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/EnqueueInMediaplayer'
|
||||
__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/EnqueueInMediaplayer'
|
||||
__category__ = 'interface'
|
||||
__only_for__ = 'gtk'
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@ _ = gpodder.gettext
|
|||
__title__ = _('Normalize audio with re-encoding')
|
||||
__description__ = _('Normalize the volume of audio files with normalize-audio')
|
||||
__authors__ = 'Bernd Schlapsi <brot@gmx.info>'
|
||||
__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/NormalizeAudio'
|
||||
__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/NormalizeAudio'
|
||||
__category__ = 'post-download'
|
||||
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@ _ = gpodder.gettext
|
|||
__title__ = _('Rename episodes after download')
|
||||
__description__ = _('Rename episodes to "<Episode Title>.<ext>" on download')
|
||||
__authors__ = 'Bernd Schlapsi <brot@gmx.info>, Thomas Perl <thp@gpodder.org>'
|
||||
__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/RenameAfterDownload'
|
||||
__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/RenameAfterDownload'
|
||||
__category__ = 'post-download'
|
||||
|
||||
|
||||
|
|
|
@ -37,6 +37,8 @@ _ = gpodder.gettext
|
|||
__title__ = _('Remove cover art from OGG files')
|
||||
__description__ = _('removes coverart from all downloaded ogg files')
|
||||
__authors__ = 'Bernd Schlapsi <brot@gmx.info>'
|
||||
__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/RemoveOGGCover'
|
||||
__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/RemoveOGGCover'
|
||||
__category__ = 'post-download'
|
||||
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ import requests
|
|||
|
||||
__title__ = _('Stream to Sonos')
|
||||
__description__ = _('Stream podcasts to Sonos speakers')
|
||||
__author__ = 'Stefan Kögl <stefan@skoegl.net>'
|
||||
__authors__ = 'Stefan Kögl <stefan@skoegl.net>'
|
||||
__category__ = 'interface'
|
||||
__only_for__ = 'gtk'
|
||||
|
||||
|
|
|
@ -38,6 +38,8 @@ _ = gpodder.gettext
|
|||
__title__ = _('Tag downloaded files using Mutagen')
|
||||
__description__ = _('Add episode and podcast titles to MP3/OGG tags')
|
||||
__authors__ = 'Bernd Schlapsi <brot@gmx.info>'
|
||||
__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/Tagging'
|
||||
__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/Tagging'
|
||||
__category__ = 'post-download'
|
||||
|
||||
|
||||
|
|
|
@ -14,6 +14,8 @@ _ = gpodder.gettext
|
|||
__title__ = _('Search for new episodes on startup')
|
||||
__description__ = _('Starts the search for new episodes on startup')
|
||||
__authors__ = 'Bernd Schlapsi <brot@gmx.info>'
|
||||
__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/SearchEpisodeOnStartup'
|
||||
__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/SearchEpisodeOnStartup'
|
||||
__category__ = 'interface'
|
||||
__only_for__ = 'gtk'
|
||||
|
||||
|
|
|
@ -22,6 +22,8 @@ _ = gpodder.gettext
|
|||
__title__ = _('Convert video files')
|
||||
__description__ = _('Transcode video files to avi/mp4/m4v')
|
||||
__authors__ = 'Thomas Perl <thp@gpodder.org>, Bernd Schlapsi <brot@gmx.info>'
|
||||
__doc__ = 'http://wiki.gpodder.org/wiki/Extensions/VideoConverter'
|
||||
__payment__ = 'https://flattr.com/submit/auto?user_id=BerndSch&url=http://wiki.gpodder.org/wiki/Extensions/VideoConverter'
|
||||
__category__ = 'post-download'
|
||||
|
||||
DefaultConfig = {
|
||||
|
|
|
@ -191,7 +191,8 @@
|
|||
<property name="reorderable">False</property>
|
||||
<property name="enable_search">True</property>
|
||||
<property name="search_column">1</property>
|
||||
<signal name="row-activated" handler="on_treeview_extensions_row_activated" swapped="no"/>
|
||||
<signal name="popup-menu" handler="on_treeview_extension_show_context_menu" swapped="no"/>
|
||||
<signal name="button-release-event" handler="on_treeview_extension_button_released" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
@ -98,12 +98,14 @@ class ExtensionMetadata(object):
|
|||
# Default fallback metadata in case metadata fields are missing
|
||||
DEFAULTS = {
|
||||
'description': _('No description for this extension.'),
|
||||
'doc': None,
|
||||
'payment': None,
|
||||
}
|
||||
SORTKEYS = {
|
||||
'title': 1,
|
||||
'description': 2,
|
||||
'category': 3,
|
||||
'author': 4,
|
||||
'authors': 4,
|
||||
'only_for': 5,
|
||||
'mandatory_in': 6,
|
||||
'disable_in': 7,
|
||||
|
|
|
@ -226,3 +226,13 @@ class Flattr(object):
|
|||
self._worker_thread = util.run_in_background(lambda: self._worker_proc(), True)
|
||||
|
||||
return (True, content.get('description', _('No description')))
|
||||
|
||||
def is_flattr_url(self, url):
|
||||
if 'flattr.com' in url:
|
||||
return True
|
||||
return False
|
||||
|
||||
def is_flattrable(self, url):
|
||||
if self._config.token and self.is_flattr_url(url):
|
||||
return True
|
||||
return False
|
||||
|
|
|
@ -34,6 +34,7 @@ from gpodder import util
|
|||
from gpodder import youtube
|
||||
|
||||
from gpodder.gtkui.interface.common import BuilderWidget
|
||||
from gpodder.gtkui.interface.common import TreeViewHelper
|
||||
from gpodder.gtkui.interface.configeditor import gPodderConfigEditor
|
||||
|
||||
from gpodder.gtkui.desktopfile import PlayerListModel
|
||||
|
@ -328,6 +329,55 @@ class gPodderPreferences(BuilderWidget):
|
|||
self.treeviewExtensions.set_model(self.extensions_model)
|
||||
self.treeviewExtensions.columns_autosize()
|
||||
|
||||
def on_treeview_extension_button_released(self, treeview, event):
|
||||
if event.window != treeview.get_bin_window():
|
||||
return False
|
||||
|
||||
if event.type == gtk.gdk.BUTTON_RELEASE and event.button == 3:
|
||||
return self.on_treeview_extension_show_context_menu(treeview, event)
|
||||
|
||||
return False
|
||||
|
||||
def on_treeview_extension_show_context_menu(self, treeview, event=None):
|
||||
selection = treeview.get_selection()
|
||||
model, paths = selection.get_selected_rows()
|
||||
container = model.get_value(model.get_iter(paths[0]), self.C_EXTENSION)
|
||||
|
||||
if not container:
|
||||
return
|
||||
|
||||
menu = gtk.Menu()
|
||||
|
||||
if container.metadata.doc:
|
||||
menu_item = gtk.MenuItem(_('Documentation'))
|
||||
menu_item.connect('activate', self.open_weblink,
|
||||
container.metadata.doc)
|
||||
menu.append(menu_item)
|
||||
|
||||
menu_item = gtk.MenuItem(_('Extension info'))
|
||||
menu_item.connect('activate', self.show_extension_info, model, container)
|
||||
menu.append(menu_item)
|
||||
|
||||
if container.metadata.payment:
|
||||
if self.flattr.is_flattrable(container.metadata.payment):
|
||||
menu_item = gtk.MenuItem(_('Flattr this'))
|
||||
menu_item.connect('activate', self.flattr_extension,
|
||||
container.metadata.payment)
|
||||
else:
|
||||
menu_item = gtk.MenuItem(_('Support the author'))
|
||||
menu_item.connect('activate', self.open_weblink,
|
||||
container.metadata.payment)
|
||||
menu.append(menu_item)
|
||||
|
||||
menu.show_all()
|
||||
if event is None:
|
||||
func = TreeViewHelper.make_popup_position_func(treeview)
|
||||
menu.popup(None, None, func, 3, 0)
|
||||
else:
|
||||
menu.popup(None, None, None, 3, 0)
|
||||
|
||||
return True
|
||||
|
||||
def set_flattr_preferences(self, widget=None):
|
||||
if not self._config.flattr.token:
|
||||
self.label_flattr.set_text(_('Please sign in with Flattr and Support Publishers'))
|
||||
|
@ -383,12 +433,7 @@ class gPodderPreferences(BuilderWidget):
|
|||
_('Extension cannot be activated'), important=True)
|
||||
model.set_value(it, self.C_TOGGLE, False)
|
||||
|
||||
def on_treeview_extensions_row_activated(self, treeview, path, column):
|
||||
model = treeview.get_model()
|
||||
container = model.get_value(model.get_iter(path), self.C_EXTENSION)
|
||||
self.show_extension_info(model, container)
|
||||
|
||||
def show_extension_info(self, model, container):
|
||||
def show_extension_info(self, w, model, container):
|
||||
if not container or not model:
|
||||
return
|
||||
|
||||
|
@ -400,6 +445,14 @@ class gPodderPreferences(BuilderWidget):
|
|||
|
||||
self.show_message(info, _('Extension module info'), important=True)
|
||||
|
||||
def open_weblink(self, w, url):
|
||||
util.open_website(url)
|
||||
|
||||
def flattr_extension(self, w, flattr_url):
|
||||
success, message = self.flattr.flattr_url(flattr_url)
|
||||
self.show_message(message, title=_('Flattr status'),
|
||||
important=not success)
|
||||
|
||||
def on_dialog_destroy(self, widget):
|
||||
# Re-enable mygpo sync if the user has selected it
|
||||
self._config.mygpo.enabled = self._enable_mygpo
|
||||
|
|
Loading…
Reference in New Issue