def __init__(self): super(save_and_rewrite_header, self).__init__() register_file_action(self) register_track_action(self) register_album_action(self) register_cluster_action(self) register_clusterlist_action(self)
def __init__(self): super(NiCeFileAction, self).__init__() register_file_action(self) register_track_action(self) register_album_action(self) register_cluster_action(self) register_clusterlist_action(self)
if len(artists) > 1: url += "?hasmultipletrackartists=1&artistid=1" else: url += "?hasmultipletrackartists=0&artistid=2" url += "&artistedit=1&artistname=%s" % QtCore.QUrl.toPercentEncoding( cluster.metadata["artist"]) url += "&releasename=%s" % QtCore.QUrl.toPercentEncoding( cluster.metadata["album"]) tracks = 0 for i, file in enumerate(cluster.files): try: i = int(file.metadata["tracknumber"]) - 1 except: pass tracks = max(tracks, i + 1) url += "&track%d=%s" % ( i, QtCore.QUrl.toPercentEncoding(file.metadata["title"])) url += "&tracklength%d=%s" % (i, QtCore.QUrl.toPercentEncoding( format_time( file.metadata.length))) if len(artists) > 1: url += "&tr%d_artistedit=1" % i url += "&tr%d_artistname=%s" % ( i, QtCore.QUrl.toPercentEncoding(file.metadata["artist"])) url += "&tracks=%d" % tracks webbrowser2.open(url) register_cluster_action(AddClusterAsRelease())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search Game Music Revolution" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search Game Music Revolution" PLUGIN_VERSION = "0.2" PLUGIN_API_VERSIONS = ["0.9.0", "0.10","0.11","0.12","0.13","0.14","0.15","0.16"] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchGameMusicRevolution(BaseAction): NAME = "Search with Game Music Revolution" def callback(self, objs): cluster = objs[0] url = "http://www.gmronline.com/results.asp?display=0&go=Go+Find+It&searchType=Title&browseType=Title&results=25&search=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchGameMusicRevolution()) register_album_action(SearchGameMusicRevolution())
class FixTrackNumsUsingSeq(BaseAction): NAME = 'Fix track numbers using sequence' def callback(self, objs): log.debug('[FixTrackNumsUsingSeq]') for cluster in objs: if not isinstance(cluster, Cluster) or not cluster.files: continue for i, f in enumerate(cluster.files): if not f or not f.metadata: log.debug('No file/metadata for [%i]' % (i)) continue new_track = str(i + 1) if 'title' in f.metadata and f.metadata['title']: log.debug('Change [%s]=>[%s]' % (f.metadata['title'], new_track)) f.metadata['tracknumber'] = new_track f.metadata.changed = True f.update(signal=True) cluster.update() register_cluster_action(FixTrackNumsUsingTitles()) register_cluster_action(FixTrackNumsUsingSeq())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search Discogs for Release (codebase 4.1)" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search Discogs" PLUGIN_VERSION = "0.1" PLUGIN_API_VERSIONS = ["0.9.0", "0.10"] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchDiscogs(BaseAction): NAME = "Search Discogs" def callback(self, objs): cluster = objs[0] url = "http://www.discogs.com/search?type=all&q=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["artist"]) url += "+" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) url += "&btn=Search" webbrowser2.open(url) register_cluster_action(SearchDiscogs()) register_album_action(SearchDiscogs())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search SoundtrackINFO" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search SoundtrackINFO" PLUGIN_VERSION = "0.2" PLUGIN_API_VERSIONS = [ "0.9.0", "0.10", "0.11", "0.12", "0.13", "0.14", "0.15", "0.16" ] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchSoundtrackINFO(BaseAction): NAME = "Search with SoundtrackINFO" def callback(self, objs): cluster = objs[0] url = "http://www.soundtrackinfo.com/search.asp?q=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchSoundtrackINFO()) register_album_action(SearchSoundtrackINFO())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search SoundtrackCollector" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search SoundtrackCollector" PLUGIN_VERSION = "0.2" PLUGIN_API_VERSIONS = ["0.9.0", "0.10","0.11","0.12","0.13","0.14","0.15","0.16"] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchSoundtrackCollector(BaseAction): NAME = "Search with SoundtrackCollector" def callback(self, objs): cluster = objs[0] url = "http://www.soundtrackcollector.com/catalog/search.php?searchon=all&searchtext=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchSoundtrackCollector()) register_album_action(SearchSoundtrackCollector())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search Game Music Revolution (codebase 4.1)" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search Game Music Revolution" PLUGIN_VERSION = "0.1" PLUGIN_API_VERSIONS = ["0.9.0", "0.10"] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchGameMusicRevolution(BaseAction): NAME = "Search with Game Music Revolution" def callback(self, objs): cluster = objs[0] url = "http://www.gmronline.com/results.asp?display=0&go=Go+Find+It&searchType=Title&browseType=Title&results=25&search=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchGameMusicRevolution()) register_album_action(SearchGameMusicRevolution())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search SoundtrackINFO" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search SoundtrackINFO" PLUGIN_VERSION = "0.2" PLUGIN_API_VERSIONS = ["0.9.0", "0.10","0.11","0.12","0.13","0.14","0.15","0.16"] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchSoundtrackINFO(BaseAction): NAME = "Search with SoundtrackINFO" def callback(self, objs): cluster = objs[0] url = "http://www.soundtrackinfo.com/search.asp?q=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchSoundtrackINFO()) register_album_action(SearchSoundtrackINFO())
from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action from picard.ui.itemviews import BaseAction, register_file_action from picard.metadata import register_track_metadata_processor class SearchAMGR(BaseAction): NAME = "Search AMG for Release" def callback(self, objs): cluster = objs[0] url = "http://wc10.allmusic.com/cg/amg.dll?P=amg&opt1=2&sql=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchAMGR()) register_album_action(SearchAMGR()) class SearchAMGA(BaseAction): NAME = "Search AMG for Artist" def callback(self, objs): cluster = objs[0] url = "http://wc09.allmusic.com/cg/amg.dll?P=amg&opt1=1&sql=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["artist"]) webbrowser2.open(url) register_cluster_action(SearchAMGA()) register_album_action(SearchAMGA()) class SearchAMGT(BaseAction): NAME = "Search AMG for Track" def callback(self, objs):
# Delete all the files from the cluster. Use the temp list as the # file reference to avoid iterator related problems. for file in files: cluster.remove_file(file) # Sort the list. files.sort(key=lambda file: (file.metadata["artist"], file.metadata["title"])) # Copy all the data back to the cluster for file in files: cluster.add_file(file) # Remove the placeholder cluster.remove_file(tmpFile) register_cluster_action(SortFilesByArtist()) class SortFilesByTitle(BaseAction): NAME = "Sort Files by Title" def callback(self, objs): if len(objs) != 1 or not isinstance(objs[0], Cluster): return cluster = objs[0] # Temporary list for sorting. Working on the original cluster file # list doesn't seem to work. files = []
PLUGIN_API_VERSIONS = ["0.9.0", "0.10","0.11","0.12","0.13","0.14","0.15","0.16"] from PyQt4 import QtCore, QtGui from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action, register_album_action, register_file_action, BaseTreeView from picard.metadata import register_track_metadata_processor class SearchAMGR(BaseAction): NAME = "Search AMG for Release" def callback(self, objs): cluster = objs[0] url = "http://www.allmusic.com/search/album/" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchAMGR()) register_album_action(SearchAMGR()) class SearchAMGA(BaseAction): NAME = "Search AMG for Artist" def callback(self, objs): cluster = objs[0] url = "http://www.allmusic.com/search/artist/" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["albumartist"]) webbrowser2.open(url) register_cluster_action(SearchAMGA()) register_album_action(SearchAMGA()) class SearchAMGTc(BaseAction): NAME = "Search AMG (non-classical music) for Track" def callback(self, objs):
urlencode(textencoding.asciipunct(artist))) url_query.addQueryItem('title', urlencode(textencoding.asciipunct(album))) i = 1 for track in tracks: url_query.addQueryItem('track' + str(i), urlencode(textencoding.asciipunct(track))) i += 1 url.setQuery(url_query) return url.toString(QUrl.FullyEncoded) class PaperCdCase(BaseAction): NAME = 'Create paper CD case' def callback(self, objs): for obj in objs: if isinstance(obj, Album) or isinstance(obj, Cluster): artist = obj.metadata['albumartist'] album = obj.metadata['album'] if isinstance(obj, Album): tracks = [track.metadata['title'] for track in obj.tracks] else: tracks = [file.metadata['title'] for file in obj.files] url = build_papercdcase_url(artist, album, tracks) webbrowser2.open(url) paperCdCase = PaperCdCase() register_album_action(paperCdCase) register_cluster_action(paperCdCase)
cluster.metadata[tag]) log.debug( "cluster name is %s by %s" % (cluster.metadata['album'], cluster.metadata['albumartist'])) for i, file in enumerate(cluster.files): log.debug( "%s: Trying to unmangle file - original metadata %s" % (PLUGIN_NAME, file.orig_metadata)) for tag in _decode_tags: if not (tag in file.metadata): continue unmangled_tag = self.unmangle(tag, file.metadata[tag]) file.orig_metadata[tag] = unmangled_tag file.metadata[tag] = unmangled_tag file.orig_metadata.changed = True file.metadata.changed = True file.update(signal=True) cluster.update() register_cluster_action(DecodeCyrillic())
def callback(self, objs): for cluster in objs: if not isinstance(cluster, Cluster): continue for tag in _decode_tags: if not (tag in cluster.metadata): continue cluster.metadata[tag] = self.unmangle(tag, cluster.metadata[tag]) log.debug( "cluster name is %s by %s" % (cluster.metadata['album'], cluster.metadata['albumartist'])) for file in cluster.files: log.debug( "%s: Trying to unmangle file - original metadata %s" % (PLUGIN_NAME, file.orig_metadata)) for tag in _decode_tags: if not (tag in file.metadata): continue unmangled_tag = self.unmangle(tag, file.metadata[tag]) file.orig_metadata[tag] = unmangled_tag file.metadata[tag] = unmangled_tag file.orig_metadata.changed = True file.metadata.changed = True file.update(signal=True) cluster.update() register_cluster_action(DecodeGreek())
from picard.ui.itemviews import BaseAction, register_cluster_action class SearchAmazonCA(BaseAction): NAME = "Search Amazon.ca" def callback(self, objs): cluster = objs[0] url = "http://www.amazon.ca/s/?url=search-alias%3Dpopular&field-keywords=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["artist"]) url += " " url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchAmazonCA()) register_album_action(SearchAmazonCA()) class SearchAmazonCOM(BaseAction): NAME = "Search Amazon.com" def callback(self, objs): cluster = objs[0] url = "http://www.amazon.com/s/?url=search-alias%3Dpopular&field-keywords=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["artist"]) url += " " url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url)
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search the Lortel Archives" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search the Lortel Archives" PLUGIN_VERSION = "0.2" PLUGIN_API_VERSIONS = [ "0.9.0", "0.10", "0.11", "0.12", "0.13", "0.14", "0.15", "0.16" ] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchLortelArchives(BaseAction): NAME = "Search the Lortel Archives" def callback(self, objs): cluster = objs[0] url = "http://www.lortel.org/LLA_archive/index.cfm?keyword=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) url += "&COMMITT=YES&search_by=ALL&Go.x=0&Go.y=0" webbrowser2.open(url) register_cluster_action(SearchLortelArchives()) register_album_action(SearchLortelArchives())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search SoundtrackCollector for Release (codebase 4.1)" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search SoundtrackCollector" PLUGIN_VERSION = "0.1" PLUGIN_API_VERSIONS = ["0.9.0", "0.10"] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchSoundtrackCollector(BaseAction): NAME = "Search with SoundtrackCollector" def callback(self, objs): cluster = objs[0] url = "http://www.soundtrackcollector.com/catalog/search.php?searchon=all&searchtext=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchSoundtrackCollector()) register_album_action(SearchSoundtrackCollector())
def update_list(self, current_item=None): current_row = -1 self.ui.list_providers.clear() for counter, provider_id in enumerate(self.providers): item = QtWidgets.QListWidgetItem() item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable) item.setText(self.providers[provider_id]['name']) item.setCheckState(QtCore.Qt.Checked if provider_id == self.provider else QtCore.Qt.Unchecked) item.setData(QtCore.Qt.UserRole, provider_id) self.ui.list_providers.addItem(item) if current_item and provider_id == current_item: current_row = counter current_row = max(current_row, 0) self.ui.list_providers.setCurrentRow(current_row) self.ui.list_providers.sortItems() def save(self): self._set_settings(config.setting) def _set_settings(self, settings): settings[KEY_PROVIDER] = self.provider.strip() settings[KEY_EXTRA] = self.additional_words.strip() settings[KEY_PROVIDERS] = self.providers or DEFAULT_PROVIDERS.copy() register_cluster_action(SearchEngineLookupTest()) register_options_page(SearchEngineLookupOptionsPage) register_album_action(AlbumCoverArtLookup()) register_track_action(TrackCoverArtLookup())
for field in ['artist', 'album']: f = cluster.metadata[field] f = f.encode(source, 'backslashreplace') f = f.decode(target, 'replace') cluster.metadata[field] = f cluster.update() def callback(self, objs): dialog = EncodingDialog(self.tagger.window) if dialog.exec_(): for o in objs: if isinstance(o, Cluster): self.convert(dialog.source, dialog.target, o) register_cluster_action(ConvertClusterEncoding()) class ResetFileEncoding(BaseAction): NAME = "Reset Encoding..." def reset(self, file): for field in ['title', 'artist', 'album']: file.metadata[field] = file.orig_metadata[field] file.update() def callback(self, objs): for o in objs: if isinstance(o, File): self.reset(o) register_file_action(ResetFileEncoding())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"CopyToClip" PLUGIN_AUTHOR = u"Noobie" PLUGIN_DESCRIPTION = "Copies artist,title and length of all unmatched files to the clipboard" PLUGIN_VERSION = "0.1" PLUGIN_API_VERSIONS = ["1.0", "1.1"] import re from PyQt4 import QtCore, QtGui from picard.ui.itemviews import BaseAction, register_cluster_action class CopyToClip(BaseAction): NAME = "Copy metadata to &Clipboard..." def callback(self,obj): clipboard = QtGui.QApplication.clipboard() clip = "" files = self.tagger.unmatched_files.files for index in range(len(files)): clip += "%s %s - %s (%s)" % (files[index].metadata["tracknumber"] if files[index].metadata["tracknumber"], files[index].metadata["artist"], files[index].metadata["title"], files[index].metadata["~length"]) clip +='\n' clipboard.setText(clip) action = CopyToClip() register_cluster_action(action)
PLUGIN_NAME = u"Search Discogs for Release" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search Discogs" PLUGIN_VERSION = "0.2" PLUGIN_API_VERSIONS = [ "0.9.0", "0.10", "0.11", "0.12", "0.13", "0.14", "0.15", "0.16" ] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchDiscogs(BaseAction): NAME = "Search Discogs" def callback(self, objs): cluster = objs[0] url = "http://www.discogs.com/search?type=all&q=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["artist"]) url += "+" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) url += "&btn=Search" webbrowser2.open(url) register_cluster_action(SearchDiscogs()) register_album_action(SearchDiscogs())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search FilmMuziek.be" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search FilmMuziek.be" PLUGIN_VERSION = "0.2" PLUGIN_API_VERSIONS = ["0.9.0", "0.10","0.11","0.12","0.13","0.14","0.15","0.16"] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchFilmMusic(BaseAction): NAME = "Search with FilmMuziek.be" def callback(self, objs): cluster = objs[0] url = "http://www.filmmuziek.be/search.cgi?Match=0&Realm=All&Terms=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchFilmMusic()) register_album_action(SearchFilmMusic())
'url' : u"http://www.ebay.co.uk/sch/i.html?_nkw="}, 'us' : { 'name' : u"United States", 'url' : u"http://www.ebay.com/sch/i.html?_nkw="}, 'uy' : { 'name' : u"Uruguay (Mercado Libre)", 'url' : u"http://listado.mercadolibre.com.uy/"}, 've' : { 'name' : u"Venezuela (Mercado Libre)", 'url' : u"http://listado.mercadolibre.com.ve/"}, 'vn' : { 'name' : u"Vietnam", 'url' : u"http://chodientu.vn/ebay-browse-keyword-"} } for tld in ['ar','au','at','be1','be2','br','ca1','ca2','cl','co','cr','cz','dk','do','ec','fi','fr','de','gr','hk','hu','in','ie','it','my','mx','nl','no','pa','pe','ph','pl','pt1','pt2','ru','sg','kr','es','se','ch','tw','th','tr','uk','us','uy','ve','vn']: class SearcheBay(BaseAction): NAME = "Search eBay " + urls[tld]['name'] def callback(self, objs, tld=tld): cluster = objs[0] url = urls[tld]['url'] url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) if tld == 'es': url += '.htm' if tld == 'vn': url += '.html' webbrowser2.open(url) register_cluster_action(SearcheBay()) register_album_action(SearcheBay())
f.write(HTML_HEAD) nv("artist_credit.names.0.artist.name", cluster.metadata["artist"]) nv("name", cluster.metadata["album"]) for i, file in enumerate(cluster.files): try: i = int(file.metadata["tracknumber"]) - 1 except: pass try: m = int(file.metadata["discnumber"]) - 1 except: m = 0 # add a track-level name-value def tnv(n, v): nv("mediums.%d.track.%d.%s" % (m, i, n), v) tnv("name", file.metadata["title"]) if file.metadata["artist"] != cluster.metadata["artist"]: tnv("artist_credit.names.0.name", file.metadata["artist"]) tnv("length", str(file.metadata.length)) f.write(HTML_TAIL) f.close() webbrowser2.open("file://"+fp) register_cluster_action(AddClusterAsRelease())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search CastAlbums.org for Release" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search CastAlbums.org" PLUGIN_VERSION = "0.2" PLUGIN_API_VERSIONS = ["0.9.0", "0.10","0.11","0.12","0.13","0.14","0.15","0.16"] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_album_action from picard.ui.itemviews import BaseAction, register_cluster_action class SearchCastAlbums(BaseAction): NAME = "Search with CastAlbums.org" def callback(self, objs): cluster = objs[0] url = "http://www.castalbums.org/shows/search/" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchCastAlbums()) register_album_action(SearchCastAlbums())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search CastAlbums.org for Release (codebase 4.1)" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search CastAlbums.org" PLUGIN_VERSION = "0.1" PLUGIN_API_VERSIONS = ["0.9.0", "0.10"] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_album_action from picard.ui.itemviews import BaseAction, register_cluster_action class SearchCastAlbums(BaseAction): NAME = "Search with CastAlbums.org" def callback(self, objs): cluster = objs[0] url = "http://www.castalbums.org/shows/search/" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchCastAlbums()) register_album_action(SearchCastAlbums())
}, 'vn': { 'name': u"Vietnam", 'url': u"http://chodientu.vn/ebay-browse-keyword-" } } for tld in [ 'ar', 'au', 'at', 'be1', 'be2', 'br', 'ca1', 'ca2', 'cl', 'co', 'cr', 'cz', 'dk', 'do', 'ec', 'fi', 'fr', 'de', 'gr', 'hk', 'hu', 'in', 'ie', 'it', 'my', 'mx', 'nl', 'no', 'pa', 'pe', 'ph', 'pl', 'pt1', 'pt2', 'ru', 'sg', 'kr', 'es', 'se', 'ch', 'tw', 'th', 'tr', 'uk', 'us', 'uy', 've', 'vn' ]: class SearcheBay(BaseAction): NAME = "Search eBay " + urls[tld]['name'] def callback(self, objs, tld=tld): cluster = objs[0] url = urls[tld]['url'] url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) if tld == 'es': url += '.htm' if tld == 'vn': url += '.html' webbrowser2.open(url) register_cluster_action(SearcheBay()) register_album_action(SearcheBay())
artists = set() for i, file in enumerate(cluster.files): artists.add(file.metadata["artist"]) tracks = [] for i, file in enumerate(cluster.files): try: i = int(file.metadata["tracknumber"]) except: i += 1 if len(artists) > 1: tracks.append((i, "%s. %s - %s (%s)" % ( i, file.metadata["title"], file.metadata["artist"], format_time(file.metadata.length)))) else: tracks.append((i, "%s. %s (%s)" % ( i, file.metadata["title"], format_time(file.metadata.length)))) clipboard = QtGui.QApplication.clipboard() clipboard.setText("\n".join(map(lambda x: x[1], sorted(tracks)))) register_cluster_action(CopyClusterToClipboard())
from picard.metadata import register_track_metadata_processor class SearchGoogle(BaseAction): NAME = "Search with Google" def callback(self, objs): cluster = objs[0] url = "http://www.google.com/search?hl=en&q=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["artist"]) url += " " url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchGoogle()) register_album_action(SearchGoogle()) class SearchGoogleTrack(BaseAction): NAME = "Search with Google" def callback(self, objs): file = objs[0] url = "http://www.google.com/search?hl=en&q=" url += QtCore.QUrl.toPercentEncoding(file.metadata["artist"]) url += " " url += QtCore.QUrl.toPercentEncoding(file.metadata["album"]) url += " " url += QtCore.QUrl.toPercentEncoding(file.metadata["title"]) webbrowser2.open(url)
from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action from picard.ui.itemviews import BaseAction, register_file_action from picard.metadata import register_track_metadata_processor class SearchGoogle(BaseAction): NAME = "Search with Google" def callback(self, objs): cluster = objs[0] url = "http://www.google.com/search?hl=en&q=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["artist"]) url += " " url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) webbrowser2.open(url) register_cluster_action(SearchGoogle()) register_album_action(SearchGoogle()) class SearchGoogleTrack(BaseAction): NAME = "Search with Google" def callback(self, objs): file = objs[0] url = "http://www.google.com/search?hl=en&q=" url += QtCore.QUrl.toPercentEncoding(file.metadata["artist"]) url += " " url += QtCore.QUrl.toPercentEncoding(file.metadata["album"]) url += " " url += QtCore.QUrl.toPercentEncoding(file.metadata["title"]) webbrowser2.open(url) register_file_action(SearchGoogleTrack())
for file in files: cluster.remove_file(file) # Sort the list. files.sort( key=lambda file: (file.metadata["artist"], file.metadata["title"])) # Copy all the data back to the cluster for file in files: cluster.add_file(file) # Remove the placeholder cluster.remove_file(tmpFile) register_cluster_action(SortFilesByArtist()) class SortFilesByTitle(BaseAction): NAME = "Sort Files by Title" def callback(self, objs): if len(objs) != 1 or not isinstance(objs[0], Cluster): return cluster = objs[0] # Temporary list for sorting. Working on the original cluster file # list doesn't seem to work. files = [] # Create a placeholder file to keep the cluster from being deleted
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search by Times" PLUGIN_AUTHOR = u"Faux" PLUGIN_DESCRIPTION = "" PLUGIN_VERSION = "0.1" PLUGIN_API_VERSIONS = ["0.9.0"] from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action class SearchByTimes(BaseAction): NAME = "Lookup by times..." def callback(self, objs): if len(objs) != 1 or not isinstance(objs[0], Cluster): return cluster = objs[0] url = "http://faux.no-ip.biz/mbreports/cueread2.php?" for i, file in enumerate(cluster.files): url += "%s=%s&" % (file.metadata["tracknumber"], file.metadata.length) webbrowser2.open(url) register_cluster_action(SearchByTimes())
# -*- coding: utf-8 -*- PLUGIN_NAME = u"Search the Lortel Archives" PLUGIN_AUTHOR = u"Brian Schweitzer" PLUGIN_DESCRIPTION = "Search the Lortel Archives" PLUGIN_VERSION = "0.2" PLUGIN_API_VERSIONS = ["0.9.0", "0.10","0.11","0.12","0.13","0.14","0.15","0.16"] from PyQt4 import QtCore from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action from picard.ui.itemviews import BaseAction, register_album_action class SearchLortelArchives(BaseAction): NAME = "Search the Lortel Archives" def callback(self, objs): cluster = objs[0] url = "http://www.lortel.org/LLA_archive/index.cfm?keyword=" url += QtCore.QUrl.toPercentEncoding(cluster.metadata["album"]) url += "&COMMITT=YES&search_by=ALL&Go.x=0&Go.y=0" webbrowser2.open(url) register_cluster_action(SearchLortelArchives()) register_album_action(SearchLortelArchives())
PLUGIN_NAME = u"Search by Times" PLUGIN_AUTHOR = u"Faux" PLUGIN_DESCRIPTION = "" PLUGIN_VERSION = "0.1" PLUGIN_API_VERSIONS = ["0.9.0"] from picard.cluster import Cluster from picard.util import webbrowser2 from picard.ui.itemviews import BaseAction, register_cluster_action class SearchByTimes(BaseAction): NAME = "Lookup by times..." def callback(self, objs): if len(objs) != 1 or not isinstance(objs[0], Cluster): return cluster = objs[0] url = "http://faux.no-ip.biz/mbreports/cueread2.php?" for i, file in enumerate(cluster.files): url += "%s=%s&" % (file.metadata["tracknumber"], file.metadata.length) webbrowser2.open(url) register_cluster_action(SearchByTimes())
for file in files: m = file.metadata parser = ScriptParser() try: parser.eval(script, m) except: log.error(traceback.format_exc()) m.strip_whitespace() class SwapTagsDialog(QtGui.QDialog): def __init__(self, action, objs, parent=None): QtGui.QDialog.__init__(self, parent) self.action = action files = action.tagger.get_files_from_objects(objs) self.ui = Ui_SwapTagsDialog() self.ui.setupUi(self) self.ui.info.setText(u"Script will process %d files." % len(files)) self.highlighter = TaggerScriptSyntaxHighlighter(self.ui.script_edit.document()) self.ui.runButton.clicked.connect(self.call_script_processor) def call_script_processor(self): script = unicode(self.ui.script_edit.document().toPlainText()) self.action.process(script) self.ui.info.setText(u"Done! Close the window and check the results!") self.ui.runButton.setEnabled(False) register_cluster_action(SwapTags())