Skip to content

Commit

Permalink
Merge pull request #2953 from frestr/unify_wiki
Browse files Browse the repository at this point in the history
Unify Wikipedia plugins
  • Loading branch information
frestr committed Aug 31, 2018
2 parents 46748ea + 4814f38 commit f58e102
Showing 1 changed file with 70 additions and 35 deletions.
105 changes: 70 additions & 35 deletions quodlibet/quodlibet/ext/songsmenu/wikipedia.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2005 Inigo Serna
# 2018 Phoenix Dailey
# 2018 Phoenix Dailey, Fredrik Strupe
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
Expand All @@ -11,26 +11,34 @@

from quodlibet import _
from quodlibet import config
from quodlibet.util import website
from quodlibet import app
from quodlibet import util
from quodlibet.qltk.entry import Entry
from quodlibet.qltk import Icons
from quodlibet.qltk.data_editors import TagListEditor
from quodlibet.qltk import Icons, get_top_parent, ErrorMessage
from quodlibet.plugins.songsmenu import SongsMenuPlugin
from quodlibet.compat import quote

WIKI_URL = "https://%s.wikipedia.org/wiki/Special:Search/"


def get_lang():
return config.get("plugins", __name__, "en")
return config.get("plugins", "wiki_lang", "en")


def set_lang(value):
config.set("plugins", __name__, value)
config.set("plugins", "wiki_lang", value)


class WikiSearch(object):
class WikiSearch(SongsMenuPlugin):
PLUGIN_ID = 'Search Tag in Wikipedia'
PLUGIN_NAME = _('Search Tag in Wikipedia')
PLUGIN_DESC = _("Opens a browser window with the Wikipedia article "
"on the selected song's corresponding tag.")
PLUGIN_ICON = Icons.APPLICATION_INTERNET

DEFAULT_TAGS = ['album', 'artist', 'composer']

@classmethod
def changed(self, e):
set_lang(e.get_text())
Expand All @@ -50,35 +58,62 @@ def PluginPreferences(self, parent):
False, True, 0)
hb.pack_start(e, False, True, 0)
hb.pack_start(Gtk.Label(label=".wikipedia.org"), False, True, 0)
hb.show_all()
return hb
vb = Gtk.VBox(spacing=6)
vb.pack_start(hb, False, False, 0)

def _open_editor(widget):
def _editor_closed(widget):
tags = widget.get_strings()
config.setlist("plugins", "wiki_tags", tags)

tags = config.getlist("plugins", "wiki_tags", self.DEFAULT_TAGS)
editor = TagListEditor(_("Edit Tags"),
[] if tags == [''] else tags)
editor.set_transient_for(get_top_parent(parent))
editor.connect('destroy', _editor_closed)
editor.show()

button = Gtk.Button(_("Edit Tags"))
button.connect('clicked', _open_editor)
vb.pack_start(button, False, True, 0)
vb.show_all()

return vb

def __init__(self, *args, **kwargs):
super(WikiSearch, self).__init__(**kwargs)
self.selected_tag = None
self.update_submenu()

def update_submenu(self):
submenu = Gtk.Menu()
tags = config.getlist("plugins", "wiki_tags", self.DEFAULT_TAGS)
for tag in tags:
if tag:
item = Gtk.MenuItem(label=util.tag(tag))
item.connect('activate', self._set_selected_tag, tag)
submenu.append(item)

if submenu.get_children():
self.set_submenu(submenu)
else:
self.set_sensitive(False)

def _set_selected_tag(self, widget, tag):
self.selected_tag = tag

def plugin_songs(self, songs):
l = dict.fromkeys([song(self.k) for song in songs]).keys()
if not self.selected_tag:
return
l = dict.fromkeys([song(self.selected_tag) for song in songs]).keys()
# If no tags values were found, show an error dialog
if list(l) == ['']:
ErrorMessage(app.window, _('Search failed'),
_('Tag "%s" not found.') %
self.selected_tag).run()
return
for a in l:
a = quote(str(a).title().replace(' ', '_'))
website(WIKI_URL % get_lang() + a)


class WikiArtist(WikiSearch, SongsMenuPlugin):
PLUGIN_ID = 'Search artist in Wikipedia'
PLUGIN_NAME = _('Search Artist in Wikipedia')
PLUGIN_DESC = _("Opens a browser window with the Wikipedia article "
"on the playing song's artist.")
k = 'artist'


class WikiAlbum(WikiSearch, SongsMenuPlugin):
PLUGIN_ID = 'Search album in Wikipedia'
PLUGIN_NAME = _('Search Album in Wikipedia')
PLUGIN_DESC = _("Opens a browser window with the Wikipedia article "
"on the playing song's album.")
k = 'album'


class WikiComposer(WikiSearch, SongsMenuPlugin):
PLUGIN_ID = 'Search composer in Wikipedia'
PLUGIN_NAME = _('Search Composer in Wikipedia')
PLUGIN_DESC = _("Opens a browser window with the Wikipedia article "
"on the playing song's composer.")
k = 'composer'
# Only search for non-empty tags
if a:
a = quote(str(a).title().replace(' ', '_'))
util.website(WIKI_URL % get_lang() + a)

0 comments on commit f58e102

Please sign in to comment.