FreeBSD Bugzilla – Attachment 103995 Details for
Bug 144094
[patch] multimedia/quodlibet: update to 2.2
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 46.38 KB, created by
J.D. Morris
on 2010-02-19 07:50:01 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
J.D. Morris
Created:
2010-02-19 07:50:01 UTC
Size:
46.38 KB
patch
obsolete
>diff -ruN --exclude=CVS quodlibet.orig/Makefile quodlibet/Makefile >--- quodlibet.orig/Makefile 2010-02-18 18:34:34.000000000 -0500 >+++ quodlibet/Makefile 2010-02-18 03:52:48.000000000 -0500 >@@ -6,11 +6,11 @@ > # > > PORTNAME= quodlibet >-PORTVERSION= 1.0 >-PORTREVISION= 5 >+PORTVERSION= 2.2 > CATEGORIES= multimedia audio python gnome >-MASTER_SITES= http://www.sacredchao.net/~piman/software/ \ >- http://www.tortall.net/mirrors/piman-software/ >+MASTER_SITES= ${MASTER_SITE_GOOGLE_CODE} \ >+ http://www.sacredchao.net/~piman/software/ \ >+ http://www.tortall.net/mirrors/piman-software/ > > MAINTAINER= johnson.peter@gmail.com > COMMENT= A GTK+-based audio player written in Python >@@ -21,7 +21,7 @@ > USE_PYTHON= 2.4+ > USE_GNOME= pygtk2 > USE_GETTEXT= yes >-USE_GMAKE= yes >+USE_PYDISTUTILS= yes > USE_DISPLAY= yes > USE_GSTREAMER= gconf good python > >@@ -105,22 +105,9 @@ > PLIST_SUB+= EXTENSIONS="@comment " > .endif > >-do-configure: >- @${PYTHON_CMD} ${WRKSRC}/check.py >- >-do-build: >- @cd ${WRKSRC}/po && ${GMAKE} po >-.if defined(WITH_EXTENSIONS) >- @cd ${WRKSRC} && ${GMAKE} extensions >-.endif >- >-pre-install: >- @${MKDIR} ${PREFIX}/lib/${PORTNAME} >- @${MKDIR} ${PREFIX}/share/applications >- > post-install: >- @${MKDIR} ${DATADIR}/plugins >- @${MKDIR} ${DATADIR}/plugins/events >- @${INSTALL_DATA} ${FILESDIR}/qlscrobbler.py ${DATADIR}/plugins/events >+ @${ECHO_CMD} >+ @${CAT} ${PKGMESSAGE} >+ @${ECHO_CMD} > > .include <bsd.port.post.mk> >diff -ruN --exclude=CVS quodlibet.orig/distinfo quodlibet/distinfo >--- quodlibet.orig/distinfo 2010-02-18 18:34:34.000000000 -0500 >+++ quodlibet/distinfo 2010-02-18 04:30:16.000000000 -0500 >@@ -1,3 +1,3 @@ >-MD5 (quodlibet-1.0.tar.gz) = 5c925b754bd8505a7a66f2ffcc5b5fe4 >-SHA256 (quodlibet-1.0.tar.gz) = bba92a91ac462b0277ad788a655b56af8bf02496a5878692dc88ffc4fdaddba4 >-SIZE (quodlibet-1.0.tar.gz) = 617369 >+MD5 (quodlibet-2.2.tar.gz) = ff8bb5f9e680797dfb60d437368298f9 >+SHA256 (quodlibet-2.2.tar.gz) = 1aac91369b26fa897c0d9eaa6a43aadcd5ffe8751a298a6c7beabe7591c0e713 >+SIZE (quodlibet-2.2.tar.gz) = 910381 >diff -ruN --exclude=CVS quodlibet.orig/files/patch-Makefile quodlibet/files/patch-Makefile >--- quodlibet.orig/files/patch-Makefile 2010-02-18 18:34:34.000000000 -0500 >+++ quodlibet/files/patch-Makefile 1969-12-31 19:00:00.000000000 -0500 >@@ -1,36 +0,0 @@ >---- Makefile.orig Sun Apr 15 19:45:47 2007 >-+++ Makefile Mon Jun 4 21:41:02 2007 >-@@ -13,7 +13,6 @@ >- @./check.py $(DESTDIR)$(PREFIX)/$(TO) >- >- make-install-dirs: >-- mkdir -p $(DESTDIR)$(PREFIX)/share/man/man1 >- mkdir -p $(DESTDIR)$(PREFIX)/bin >- mkdir -p $(DESTDIR)$(PREFIX)/$(TO) >- >-@@ -21,9 +20,9 @@ >- install -m 644 $(MODULES) missing-cover.svg audio-*.png media-*.png device-*.png $(DESTDIR)$(PREFIX)/$(TO) >- cd po && make install-po DESTDIR=$(DESTDIR) >- >-- for E in $(EXTENSIONS); do \ >-+ -for E in $(EXTENSIONS); do \ >- if test -e $$E; then \ >-- install -m 755 -D $$E $(DESTDIR)$(PREFIX)/$(TODEP)/$$E; \ >-+ install -m 755 $$E $(DESTDIR)$(PREFIX)/$(TODEP)/$$E; \ >- fi; \ >- done >- >-@@ -37,10 +36,10 @@ >- >- app-install-%: make-install-dirs %.desktop >- install -m 755 $*.py $(DESTDIR)$(PREFIX)/$(TO) >-- install -m 644 $*.1 $(DESTDIR)$(PREFIX)/share/man/man1/$*.1 >-- install -D -m 644 $*.png $(DESTDIR)$(PREFIX)/share/pixmaps/$*.png >-+ install -m 644 $*.1 $(DESTDIR)$(PREFIX)/man/man1/$*.1 >-+ install -m 644 $*.png $(DESTDIR)$(PREFIX)/share/pixmaps/$*.png >- install -m 644 $*.svg $*.png $(DESTDIR)$(PREFIX)/$(TO) >-- -install -D -m 644 $*.desktop $(DESTDIR)$(PREFIX)/share/applications/$*.desktop >-+ -install -m 644 $*.desktop $(DESTDIR)$(PREFIX)/share/applications/$*.desktop >- ln -sf ../$(TO)/$*.py $(DESTDIR)$(PREFIX)/bin/$* >- >- clean: >diff -ruN --exclude=CVS quodlibet.orig/files/patch-gdist__man.py quodlibet/files/patch-gdist__man.py >--- quodlibet.orig/files/patch-gdist__man.py 1969-12-31 19:00:00.000000000 -0500 >+++ quodlibet/files/patch-gdist__man.py 2010-02-18 02:58:29.000000000 -0500 >@@ -0,0 +1,11 @@ >+--- gdist/man.py.orig 2010-02-18 02:56:24.000000000 -0500 >++++ gdist/man.py 2010-02-18 02:56:58.000000000 -0500 >+@@ -36,7 +36,7 @@ >+ raise SystemExit("%r has no section" % man_page) >+ >+ def run(self): >+- basepath = os.path.join(self.prefix, 'share', 'man') >++ basepath = os.path.join(self.prefix, 'man') >+ if self.root != None: >+ basepath = change_root(self.root, basepath) >+ self.mkpath(basepath) >diff -ruN --exclude=CVS quodlibet.orig/files/patch-po-Makefile quodlibet/files/patch-po-Makefile >--- quodlibet.orig/files/patch-po-Makefile 2010-02-18 18:34:34.000000000 -0500 >+++ quodlibet/files/patch-po-Makefile 1969-12-31 19:00:00.000000000 -0500 >@@ -1,12 +0,0 @@ >---- po/Makefile.orig Sun Nov 12 04:24:42 2006 >-+++ po/Makefile Mon Jun 4 23:11:13 2007 >-@@ -12,9 +12,6 @@ >- quodlibet.pot: POTFILES.in ../*.py ../formats/*.py ../browsers/*.py ../qltk/*.py ../plugins/*.py tag-names.py ../util/*.py ../library/*.py ../devices/*.py >- intltool-update --pot --gettext-package=$(NAME) >- >--%.po: quodlibet.pot >-- intltool-update --dist --gettext-package=$(NAME) $* >-- >- %.mo: %.po >- msgfmt -o $@ $< >- >diff -ruN --exclude=CVS quodlibet.orig/files/patch-quodlibet__qltk__config.py quodlibet/files/patch-quodlibet__qltk__config.py >--- quodlibet.orig/files/patch-quodlibet__qltk__config.py 1969-12-31 19:00:00.000000000 -0500 >+++ quodlibet/files/patch-quodlibet__qltk__config.py 2010-02-18 03:03:52.000000000 -0500 >@@ -0,0 +1,10 @@ >+--- quodlibet/qltk/config.py.orig 2010-02-18 03:01:37.000000000 -0500 >++++ quodlibet/qltk/config.py 2010-02-18 03:01:59.000000000 -0500 >+@@ -54,7 +54,3 @@ >+ >+ def __toggled(self, section, option): >+ config.set(section, option, str(bool(self.get_active())).lower()) >+- >+- >+- >+-class ConfigCheckButton(gtk.CheckButton) >diff -ruN --exclude=CVS quodlibet.orig/files/qlscrobbler.py quodlibet/files/qlscrobbler.py >--- quodlibet.orig/files/qlscrobbler.py 2010-02-18 18:34:34.000000000 -0500 >+++ quodlibet/files/qlscrobbler.py 1969-12-31 19:00:00.000000000 -0500 >@@ -1,533 +0,0 @@ >-# QLScrobbler: an Audioscrobbler client plugin for Quod Libet. >-# version 0.8 >-# (C) 2005 by Joshua Kwan <joshk@triplehelix.org>, >-# Joe Wreschnig <piman@sacredchao.net> >-# Licensed under GPLv2. See Quod Libet's COPYING for more information. >- >-import random >-import md5, urllib, urllib2, time, threading, os >-import player, config, const, widgets, parse >-import gobject, gtk >-from qltk.msg import Message, WarningMessage >-from qltk.entry import ValidatingEntry >-from util import to >- >-from plugins.events import EventPlugin >- >-class QLScrobbler(EventPlugin): >- # session invariants >- PLUGIN_NAME = "QLScrobbler" >- PLUGIN_DESC = "Audioscrobbler client for Quod Libet" >- PLUGIN_ICON = gtk.STOCK_CONNECT >- PLUGIN_VERSION = "0.8.1" >- CLIENT = "qlb" >- PROTOCOL_VERSION = "1.1" >- try: DUMP = os.path.join(const.USERDIR, "scrobbler_cache") >- except AttributeError: >- DUMP = os.path.join(const.DIR, "scrobbler_cache") >- >- # things that could change >- >- username = "" >- password = "" >- pwhash = "" >- exclude = "" >- >- timeout_id = -1 >- submission_tid = -1 >- >- challenge = "" >- submit_url = "" >- >- # state management >- waiting = False >- challenge_sent = False >- broken = False >- need_config = False >- need_update = False >- already_submitted = False >- locked = False >- flushing = False >- __enabled = False >- offline = False >- >- # we need to store this because not all events get the song >- song = None >- >- queue = [] >- >- def __init__(self): >- # Read dumped queue and delete it >- try: >- dump = open(self.DUMP, 'r') >- self.read_dump(dump) >- except: pass >- >- # Read configuration >- self.read_config() >- >- # Set up exit hook to dump queue >- gtk.quit_add(0, self.dump_queue) >- >- def read_dump(self, dump): >- print "Loading dumped queue." >- >- current = {} >- >- for line in dump.readlines(): >- key = "" >- value = "" >- >- line = line.rstrip("\n") >- try: (key, value) = line.split(" = ", 1) >- except: >- if line == "-": >- for key in ["album", "mbid"]: >- if key not in current: >- current[key] = "" >- >- for reqkey in ["artist", "title", "length", "stamp"]: >- # discard if somehow invalid >- if reqkey not in current: >- current = {} >- >- if current != {}: >- self.queue.append(current) >- current = {} >- continue >- >- if key == "length": current[key] = int(value) >- else: current[key] = value >- >- dump.close() >- >- os.remove(self.DUMP) >- >-# print "Queue contents:" >-# for item in self.queue: >-# print "\t%s - %s" % (item['artist'], item['title']) >- >- # Try to flush it immediately >- if len(self.queue) > 0: >- self.flushing = True >- self.submit_song() >- else: print "Queue was empty!" >- >- def dump_queue(self): >- if len(self.queue) == 0: return 0 >- >- print "Dumping offline queue, will submit next time." >- >- dump = open(self.DUMP, 'w') >- >- for item in self.queue: >- for key in item: >- dump.write("%s = %s\n" % (key, item[key])) >- dump.write("-\n") >- >- dump.close() >- >- return 0 >- >- def plugin_on_removed(self, songs): >- try: >- if self.song in songs: >- self.already_submitted = True >- except: >- # Older version compatibility. >- if self.song is songs: >- self.already_submitted = True >- >- def plugin_on_song_ended(self, song, stopped): >- if song is None: return >- >- if self.timeout_id > 0: >- gobject.source_remove(self.timeout_id) >- self.timeout_id = -1 >- >- def plugin_on_song_started(self, song): >- if song is None: return >- >- self.already_submitted = False >- if self.timeout_id > 0: >- gobject.source_remove(self.timeout_id) >- >- self.timeout_id = -1 >- >- # Protocol stipulation: >- # * don't submit when length < 00:30 >- # NOTE: >30:00 stipulation has been REMOVED as of Protocol1.1 >- # * don't submit if artist and title are not available >- if song["~#length"] < 30: return >- elif 'title' not in song: return >- elif "artist" not in song: >- if ("composer" not in song) and ("performer" not in song): return >- >- # Check to see if this song is not something we'd like to submit >- # e.g. "Hit Me Baby One More Time" >- if self.exclude != "" and parse.Query(self.exclude).search(song): >- print to("Not submitting: %s - %s" % (song["artist"], song["title"])) >- return >- >- self.song = song >- if player.playlist.paused == False: >- self.prepare() >- >- def plugin_on_paused(self): >- if self.timeout_id > 0: >- gobject.source_remove(self.timeout_id) >- # special value that will tell on_unpaused to check song length >- self.timeout_id = -2 >- >- def plugin_on_unpaused(self): >- if self.already_submitted == False and self.timeout_id == -1: self.prepare() >- >- def plugin_on_seek(self, song, msec): >- if self.timeout_id > 0: >- gobject.source_remove(self.timeout_id) >- self.timeout_id = -1 >- >- if msec == 0: #I think this is okay! >- self.prepare() >- else: >- self.already_submitted = True # cancel >- >- def prepare(self): >- if self.song is None: return >- >- # Protocol stipulations: >- # * submit 240 seconds in or at 50%, whichever comes first >- delay = int(min(self.song["~#length"] / 2, 240)) >- >- if self.timeout_id == -2: # change delta based on current progress >- # assumption is that self.already_submitted == 0, therefore >- # delay - progress > 0 >- progress = int(player.playlist.get_position() / 1000) >- delay -= progress >- >- self.timeout_id = gobject.timeout_add(delay * 1000, self.submit_song) >- >- def read_config(self): >- username = "" >- password = "" >- try: >- username = config.get("plugins", "scrobbler_username") >- password = config.get("plugins", "scrobbler_password") >- except: >- if (self.need_config == False and >- getattr(self, 'PMEnFlag', False)): >- self.quick_dialog("Please visit the Preferences window to set QLScrobbler up. Until then, songs will not be submitted.", gtk.MESSAGE_INFO) >- self.need_config = True >- return >- >- try: self.offline = (config.get("plugins", "scrobbler_offline") == "true") >- except: pass >- try: self.exclude = config.get("plugins", "scrobbler_exclude") >- except: pass >- >- self.username = username >- >- hasher = md5.new() >- hasher.update(password); >- self.password = hasher.hexdigest() >- self.need_config = False >- >- def __destroy_cb(self, dialog, response_id): >- dialog.destroy() >- >- def quick_dialog_helper(self, type, str): >- dialog = Message(gtk.MESSAGE_INFO, widgets.main, "QLScrobbler", str) >- dialog.connect('response', self.__destroy_cb) >- dialog.show() >- >- def quick_dialog(self, str, type): >- gobject.idle_add(self.quick_dialog_helper, type, str) >- >- def clear_waiting(self): >- self.waiting = False >- >- def send_handshake(self): >- # construct url >- url = "http://post.audioscrobbler.com/?hs=true&p=%s&c=%s&v=%s&u=%s" % ( self.PROTOCOL_VERSION, self.CLIENT, self.PLUGIN_VERSION, self.username ) >- >- print "Sending handshake to Audioscrobbler." >- >- resp = None >- >- try: >- resp = urllib2.urlopen(url); >- except: >- print "Server not responding, handshake failed." >- return # challenge_sent is NOT set to 1 >- >- # check response >- lines = resp.read().rstrip().split("\n") >- status = lines.pop(0) >- >- print "Handshake status: %s" % status >- >- if status == "UPTODATE" or status.startswith("UPDATE"): >- if status.startswith("UPDATE"): >- self.quick_dialog("A new plugin is available at %s! Please download it, or your Audioscrobbler stats may not be updated, and this message will be displayed every session." % status.split()[1], gtk.MESSAGE_INFO) >- self.need_update = True >- >- # Scan for submit URL and challenge. >- self.challenge = lines.pop(0) >- >- print "Challenge: %s" % self.challenge >- >- # determine password >- hasher = md5.new() >- hasher.update(self.password) >- hasher.update(self.challenge) >- self.pwhash = hasher.hexdigest() >- >- self.submit_url = lines.pop(0) >- >- self.challenge_sent = True >- elif status == "BADUSER": >- self.quick_dialog("Authentication failed: invalid username %s or bad password." % self.username, gtk.MESSAGE_ERROR) >- >- self.broken = True >- >- # Honor INTERVAL if available >- try: interval = int(lines.pop(0).split()[1]) >- except: interval = 0 >- >- if interval > 1: >- self.waiting = True >- gobject.timeout_add(interval * 1000, self.clear_waiting) >- print "Server says to wait for %d seconds." % interval >- >- def submit_song(self): >- bg = threading.Thread(None, self.submit_song_helper) >- bg.setDaemon(True) >- bg.start() >- >- def enabled(self): >- self.__enabled = True >- >- def disabled(self): >- self.__enabled = False >- >- def submit_song_helper(self): >- if self.__enabled: >- print "Plugin re-enabled - accepting new songs." >- if self.submission_tid != -1: >- gobject.source_remove(self.submission_tid); >- self.submission_tid = -1 >- else: >- print "Plugin disabled - not accepting any new songs." >- if len(self.queue) > 0: >- self.submission_tid = gobject.timeout_add(120 * 1000, self.submit_song_helper) >- print "Attempts will continue to submit the last %d songs." % len(self.queue) >- >- if self.already_submitted == True or self.broken == True: return >- >- # Scope. >- store = {} >- >- if self.flushing == False: >- stamp = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) >- >- store = { >- "title": self.song.comma("title"), >- "length": str(self.song["~#length"]), >- "album": self.song.comma("album"), >- "mbid": "", # will be correctly set if available >- "stamp": stamp >- } >- >- if "artist" in self.song: >- store["artist"] = self.song.comma("artist") >- elif "composer" in self.song: >- store["artist"] = self.song.comma("composer") >- elif "performer" in self.song: >- performer = self.song.comma('performer') >- if performer[-1] == ")" and "(" in performer: >- store["artist"] = performer[:performer.rindex("(")].strip() >- else: >- store["artist"] = performer >- if "musicbrainz_trackid" in self.song: >- store["mbid"] = self.song["musicbrainz_trackid"] >- >- self.queue.append(store) >- else: self.flushing = False >- >- # Just note to stdout if either of these are true.. >- # locked means another instance if s_s_h is dealing with sending. >- if self.offline or self.locked: >- print to("Queuing: %s - %s" % (store["artist"], store["title"])) >- return >- >- self.locked = True >- >- while self.waiting == True: time.sleep(1) >- >- # Read config, handshake, and send challenge if not already done >- if self.challenge_sent == False: >- self.read_config() >- if self.broken == False and self.need_config == False: >- self.send_handshake() >- >- # INTERVAL may have been set during handshake. >- while self.waiting == True: time.sleep(1) >- >- if self.challenge_sent == False: >- self.locked = False >- return >- >- data = { >- 'u': self.username, >- 's': self.pwhash >- } >- >- # Flush the cache >- for i in range(min(len(self.queue), 10)): >- print to("Sending song: %s - %s" % (self.queue[i]['artist'], self.queue[i]['title'])) >- data["a[%d]" % i] = self.queue[i]['artist'].encode('utf-8') >- data["t[%d]" % i] = self.queue[i]['title'].encode('utf-8') >- data["l[%d]" % i] = str(self.queue[i]['length']) >- data["b[%d]" % i] = self.queue[i]['album'].encode('utf-8') >- data["m[%d]" % i] = self.queue[i]['mbid'] >- data["i[%d]" % i] = self.queue[i]['stamp'] >- >- (host, file) = self.submit_url[7:].split("/") >- >- resp = None >- >- try: >- data_str = urllib.urlencode(data) >- resp = urllib2.urlopen("http://" + host + "/" + file, data_str) >- except: >- print "Audioscrobbler server not responding, will try later." >- self.locked = False >- return # preserve the queue, yadda yadda >- >- resp_save = resp.read() >- lines = resp_save.rstrip().split("\n") >- >- try: (status, interval) = lines >- except: >- try: status = lines[0] >- except: >- print "Truncated server response, will try later..." >- self.locked = False >- return >- interval = None >- >- print "Submission status: %s" % status >- >- if status == "BADAUTH": >- print "Attempting to re-authenticate." >- self.challenge_sent = False >- self.send_handshake() >- if self.challenge_sent == False: >- self.quick_dialog("Your Audioscrobbler login data is incorrect, so you must re-enter it before any songs will be submitted.\n\nThis message will not be shown again.", gtk.MESSAGE_ERROR) >- self.broken = True >- elif status == "OK": >- self.queue = self.queue[10:] >- elif status.startswith("FAILED"): >- if status.startswith("FAILED Plugin bug"): >- print "Plugin bug!? Ridiculous! Dumping queue contents." >- for item in self.queue: >- for key in item: >- print to("%s = %s" % (key, item[key])) >- # possibly handle other specific cases here for debugging later >- else: >- print "Unknown response from server: %s" % status >- print "Dumping full response:" >- print resp_save >- >- if interval != None: interval_secs = int(interval.split()[1]) >- else: interval_secs = 0 >- >- if interval_secs > 1: >- self.waiting = True >- gobject.timeout_add(interval_secs * 1000, self.clear_waiting) >- print "Server says to wait for %d seconds." % interval_secs >- >- if not self.__enabled and len(self.queue) == 0 and self.submission_tid != -1: >- print "All songs submitted, disabling retries." >- gobject.source_remove(self.submission_tid) >- self.submission_tid = -1 >- >- self.already_submitted = True >- self.locked = False >- >- def PluginPreferences(self, parent): >- def toggled(widget): >- if widget.get_active(): >- config.set("plugins", "scrobbler_offline", "true") >- self.offline = True >- else: >- config.set("plugins", "scrobbler_offline", "false") >- self.offline = False >- >- def changed(entry, key): >- # having a function for each entry is unnecessary.. >- config.set("plugins", "scrobbler_" + key, entry.get_text()) >- >- def destroyed(*args): >- # if changed, let's say that things just got better and we should >- # try everything again >- newu = None >- newp = None >- try: >- newu = config.get("plugins", "scrobbler_username") >- newp = config.get("plugins", "scrobbler_password") >- except: >- return >- >- try: self.exclude = config.get("plugins", "scrobbler_exclude") >- except: pass >- >- if self.username != newu or self.password != newp: >- self.broken = False >- >- table = gtk.Table(6, 3) >- table.set_col_spacings(3) >- lt = gtk.Label(_("Please enter your Audioscrobbler\nusername and password.")) >- lu = gtk.Label(_("Username:")) >- lp = gtk.Label(_("Password:")) >- lv = gtk.Label(_("Exclude filter:")) >- lvd = gtk.Label(_("Songs matching this filter will\nnot be sent to Audioscrobbler.\n")) >- off = gtk.CheckButton(_("Offline mode (don't submit anything)")) >- ve = ValidatingEntry(parse.Query.is_valid_color) >- for l in [lt, lu, lp, lv, lvd]: >- l.set_line_wrap(True) >- l.set_alignment(0.0, 0.5) >- table.attach(lt, 0, 2, 0, 1, xoptions=gtk.FILL | gtk.SHRINK) >- table.attach(lu, 0, 1, 1, 2, xoptions=gtk.FILL | gtk.SHRINK) >- table.attach(lp, 0, 1, 2, 3, xoptions=gtk.FILL | gtk.SHRINK) >- table.attach(lv, 0, 1, 3, 4, xoptions=gtk.FILL | gtk.SHRINK) >- >- userent = gtk.Entry() >- pwent = gtk.Entry() >- pwent.set_visibility(False) >- pwent.set_invisible_char('*') >- table.set_border_width(6) >- >- table.attach(ve, 1, 2, 3, 4, xoptions=gtk.FILL | gtk.SHRINK) >- table.attach(lvd, 0, 2, 4, 5, xoptions=gtk.FILL | gtk.SHRINK) >- table.attach(off, 0, 2, 5, 7, xoptions=gtk.FILL | gtk.SHRINK) >- >- try: userent.set_text(config.get("plugins", "scrobbler_username")) >- except: pass >- try: pwent.set_text(config.get("plugins", "scrobbler_password")) >- except: pass >- try: >- if config.get("plugins", "scrobbler_offline") == "true": >- off.set_active(True) >- except: pass >- try: ve.set_text(config.get("plugins", "scrobbler_exclude")) >- except: pass >- >- table.attach(userent, 1, 2, 1, 2, xoptions=gtk.FILL | gtk.SHRINK) >- table.attach(pwent, 1, 2, 2, 3, xoptions=gtk.FILL | gtk.SHRINK) >- pwent.connect('changed', changed, 'password') >- userent.connect('changed', changed, 'username') >- ve.connect('changed', changed, 'exclude') >- table.connect('destroy', destroyed) >- off.connect('toggled', toggled) >- return table >diff -ruN --exclude=CVS quodlibet.orig/pkg-descr quodlibet/pkg-descr >--- quodlibet.orig/pkg-descr 2010-02-18 18:34:34.000000000 -0500 >+++ quodlibet/pkg-descr 2010-02-18 13:29:21.000000000 -0500 >@@ -1,3 +1,9 @@ >-Quod Libet is a GTK+-based audio player written in Python. >+Quod Libet is a GTK+-based audio player written in Python, using the >+Mutagen tagging library. It's designed around the idea that you know >+how to organize your music better than we do. It lets you make playlists >+based on regular expressions (don't worry, regular searches work too). >+It lets you display and edit any tags you want in the file. And it >+lets you do this for all the file formats it supports -- Ogg Vorbis, >+FLAC, MP3, Musepack, and MOD. > >-WWW: http://www.sacredchao.net/quodlibet/ >+WWW: http://code.google.com/p/quodlibet/ >diff -ruN --exclude=CVS quodlibet.orig/pkg-message quodlibet/pkg-message >--- quodlibet.orig/pkg-message 1969-12-31 19:00:00.000000000 -0500 >+++ quodlibet/pkg-message 2010-02-18 03:51:44.000000000 -0500 >@@ -0,0 +1,13 @@ >+For additional Quod Libet plugins: >+ >+1. Fetch plugins archive. >+ >+ fetch http://quodlibet.googlecode.com/files/quodlibet-plugins-2.2.tar.gz >+ >+2. Extract archive. >+ >+ tar xvfz quodlibet-plugins-2.2.tar.gz >+ >+3. Copy extracted files to Quod Libet plugins directory. >+ >+ cp -R quodlibet-plugins-2.2/* ~/.quodlibet/plugins/ >diff -ruN --exclude=CVS quodlibet.orig/pkg-plist quodlibet/pkg-plist >--- quodlibet.orig/pkg-plist 2010-02-18 18:34:34.000000000 -0500 >+++ quodlibet/pkg-plist 2010-02-18 13:21:36.000000000 -0500 >@@ -1,153 +1,390 @@ > bin/exfalso > bin/quodlibet >-%%EXTENSIONS%%lib/quodlibet/_mmkeys.so >-%%EXTENSIONS%%lib/quodlibet/_trayicon.so > share/applications/exfalso.desktop > share/applications/quodlibet.desktop >-share/locale/bg/LC_MESSAGES/quodlibet.mo >-share/locale/de/LC_MESSAGES/quodlibet.mo >-share/locale/en_CA/LC_MESSAGES/quodlibet.mo >-share/locale/en_GB/LC_MESSAGES/quodlibet.mo >-share/locale/es/LC_MESSAGES/quodlibet.mo >-share/locale/fi/LC_MESSAGES/quodlibet.mo >-share/locale/fr/LC_MESSAGES/quodlibet.mo >-share/locale/gl/LC_MESSAGES/quodlibet.mo >-share/locale/he/LC_MESSAGES/quodlibet.mo > share/locale/hu/LC_MESSAGES/quodlibet.mo >-share/locale/it/LC_MESSAGES/quodlibet.mo >+share/locale/gl_ES/LC_MESSAGES/quodlibet.mo >+share/locale/ru/LC_MESSAGES/quodlibet.mo > share/locale/ja/LC_MESSAGES/quodlibet.mo >-share/locale/ko/LC_MESSAGES/quodlibet.mo >-share/locale/lt/LC_MESSAGES/quodlibet.mo >-share/locale/nb/LC_MESSAGES/quodlibet.mo >+share/locale/he/LC_MESSAGES/quodlibet.mo >+share/locale/es/LC_MESSAGES/quodlibet.mo >+share/locale/sk/LC_MESSAGES/quodlibet.mo >+share/locale/de/LC_MESSAGES/quodlibet.mo > share/locale/nl/LC_MESSAGES/quodlibet.mo >+share/locale/sv/LC_MESSAGES/quodlibet.mo >+share/locale/ko/LC_MESSAGES/quodlibet.mo >+share/locale/ro/LC_MESSAGES/quodlibet.mo >+share/locale/uk/LC_MESSAGES/quodlibet.mo > share/locale/pl/LC_MESSAGES/quodlibet.mo > share/locale/pt/LC_MESSAGES/quodlibet.mo >-share/locale/ro/LC_MESSAGES/quodlibet.mo >-share/locale/ru/LC_MESSAGES/quodlibet.mo >-share/locale/sk/LC_MESSAGES/quodlibet.mo >-share/locale/sv/LC_MESSAGES/quodlibet.mo >+share/locale/en_CA/LC_MESSAGES/quodlibet.mo >+share/locale/nb/LC_MESSAGES/quodlibet.mo >+share/locale/tr/LC_MESSAGES/quodlibet.mo > share/locale/zh_CN/LC_MESSAGES/quodlibet.mo >+share/locale/fr/LC_MESSAGES/quodlibet.mo >+share/locale/gl/LC_MESSAGES/quodlibet.mo >+share/locale/it/LC_MESSAGES/quodlibet.mo >+share/locale/en_GB/LC_MESSAGES/quodlibet.mo >+share/locale/bg/LC_MESSAGES/quodlibet.mo >+share/locale/lt/LC_MESSAGES/quodlibet.mo > share/locale/zh_TW/LC_MESSAGES/quodlibet.mo >-share/pixmaps/exfalso.png >-share/pixmaps/quodlibet.png >-%%DATADIR%%/audio-volume-high.png >-%%DATADIR%%/audio-volume-low.png >-%%DATADIR%%/audio-volume-medium.png >-%%DATADIR%%/audio-volume-muted.png >-%%DATADIR%%/browsers/__init__.py >-%%DATADIR%%/browsers/_base.py >-%%DATADIR%%/browsers/albums.py >-%%DATADIR%%/browsers/audiofeeds.py >-%%DATADIR%%/browsers/filesystem.py >-%%DATADIR%%/browsers/iradio.py >-%%DATADIR%%/browsers/media.py >-%%DATADIR%%/browsers/paned.py >-%%DATADIR%%/browsers/playlists.py >-%%DATADIR%%/browsers/search.py >-%%DATADIR%%/config.py >-%%DATADIR%%/const.py >-%%DATADIR%%/exfalso.png >-%%DATADIR%%/exfalso.py >-%%DATADIR%%/exfalso.svg >-%%DATADIR%%/device-generic.png >-%%DATADIR%%/device-ipod.png >-%%DATADIR%%/devices/__init__.py >-%%DATADIR%%/devices/_base.py >-%%DATADIR%%/devices/ipod.py >-%%DATADIR%%/devices/storage.py >-%%DATADIR%%/formats/__init__.py >-%%DATADIR%%/formats/_apev2.py >-%%DATADIR%%/formats/_audio.py >-%%DATADIR%%/formats/_id3.py >-%%DATADIR%%/formats/mod.py >-%%DATADIR%%/formats/mp3.py >-%%DATADIR%%/formats/mp4.py >-%%DATADIR%%/formats/mpc.py >-%%DATADIR%%/formats/remote.py >-%%DATADIR%%/formats/spc.py >-%%DATADIR%%/formats/trueaudio.py >-%%DATADIR%%/formats/wav.py >-%%DATADIR%%/formats/wavpack.py >-%%DATADIR%%/formats/wma.py >-%%DATADIR%%/formats/xiph.py >-%%DATADIR%%/library/__init__.py >-%%DATADIR%%/library/_library.py >-%%DATADIR%%/library/songs.py >-%%DATADIR%%/media-eject.png >-%%DATADIR%%/missing-cover.svg >-%%DATADIR%%/parse/__init__.py >-%%DATADIR%%/parse/_match.py >-%%DATADIR%%/parse/_pattern.py >-%%DATADIR%%/parse/_query.py >-%%DATADIR%%/player.py >-%%DATADIR%%/plugins/__init__.py >-%%DATADIR%%/plugins/editing.py >-%%DATADIR%%/plugins/events.py >-%%DATADIR%%/plugins/events/qlscrobbler.py >-%%DATADIR%%/plugins/songsmenu.py >-%%DATADIR%%/qltk/__init__.py >-%%DATADIR%%/qltk/_editpane.py >-%%DATADIR%%/qltk/about.py >-%%DATADIR%%/qltk/bookmarks.py >-%%DATADIR%%/qltk/browser.py >-%%DATADIR%%/qltk/cbes.py >-%%DATADIR%%/qltk/ccb.py >-%%DATADIR%%/qltk/chooser.py >-%%DATADIR%%/qltk/completion.py >-%%DATADIR%%/qltk/controls.py >-%%DATADIR%%/qltk/cover.py >-%%DATADIR%%/qltk/dbus_.py >-%%DATADIR%%/qltk/delete.py >-%%DATADIR%%/qltk/downloader.py >-%%DATADIR%%/qltk/edittags.py >-%%DATADIR%%/qltk/entry.py >-%%DATADIR%%/qltk/exfalso.py >-%%DATADIR%%/qltk/filesel.py >-%%DATADIR%%/qltk/getstring.py >-%%DATADIR%%/qltk/info.py >-%%DATADIR%%/qltk/information.py >-%%DATADIR%%/qltk/lyrics.py >-%%DATADIR%%/qltk/mmkeys.py >-%%DATADIR%%/qltk/msg.py >-%%DATADIR%%/qltk/playorder.py >-%%DATADIR%%/qltk/pluginwin.py >-%%DATADIR%%/qltk/prefs.py >-%%DATADIR%%/qltk/properties.py >-%%DATADIR%%/qltk/queue.py >-%%DATADIR%%/qltk/quodlibet.py >-%%DATADIR%%/qltk/remote.py >-%%DATADIR%%/qltk/renamefiles.py >-%%DATADIR%%/qltk/session.py >-%%DATADIR%%/qltk/sliderbutton.py >-%%DATADIR%%/qltk/songlist.py >-%%DATADIR%%/qltk/songsmenu.py >-%%DATADIR%%/qltk/tagscombobox.py >-%%DATADIR%%/qltk/tagsfrompath.py >-%%DATADIR%%/qltk/textedit.py >-%%DATADIR%%/qltk/tracker.py >-%%DATADIR%%/qltk/tracknumbers.py >-%%DATADIR%%/qltk/views.py >-%%DATADIR%%/qltk/wlw.py >-%%DATADIR%%/qltk/x.py >-%%DATADIR%%/quodlibet.png >-%%DATADIR%%/quodlibet.py >-%%DATADIR%%/quodlibet.svg >-%%DATADIR%%/stock.py >-%%DATADIR%%/util/__init__.py >-%%DATADIR%%/util/copool.py >-%%DATADIR%%/util/i18n.py >-%%DATADIR%%/util/massagers.py >-%%DATADIR%%/util/uri.py >-%%DATADIR%%/widgets.py >-@dirrmtry share/applications >-@dirrm lib/quodlibet >-@dirrm %%DATADIR%%/util >-@dirrm %%DATADIR%%/qltk >-@dirrm %%DATADIR%%/plugins/events >-@dirrm %%DATADIR%%/plugins >-@dirrm %%DATADIR%%/parse >-@dirrm %%DATADIR%%/library >-@dirrm %%DATADIR%%/formats >-@dirrm %%DATADIR%%/devices >-@dirrm %%DATADIR%%/browsers >-@dirrm %%DATADIR%% >+share/locale/fi/LC_MESSAGES/quodlibet.mo >+%%PYTHON_SITELIBDIR%%/quodlibet/widgets.py >+%%PYTHON_SITELIBDIR%%/quodlibet/config.py >+%%PYTHON_SITELIBDIR%%/quodlibet/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/stock.py >+%%PYTHON_SITELIBDIR%%/quodlibet/const.py >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/albums.py >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/playlists.py >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/media.py >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/audiofeeds.py >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/_base.py >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/iradio.py >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/search.py >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/filesystem.py >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/paned.py >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/_base.py >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/ipod.py >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/storage.py >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/wav.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/spc.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/wavpack.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/_audio.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/xiph.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mod.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mp3.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/wma.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/_id3.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mp4.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mpc.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/_apev2.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/trueaudio.py >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/remote.py >+%%PYTHON_SITELIBDIR%%/quodlibet/library/_library.py >+%%PYTHON_SITELIBDIR%%/quodlibet/library/songs.py >+%%PYTHON_SITELIBDIR%%/quodlibet/library/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_match.py >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_query.py >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_pattern.py >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_scanner.py >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/songsmenu.py >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/playorder.py >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/editing.py >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/events.py >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/songlist.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/songsmenu.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/lyrics.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/logging.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/quodlibetwindow.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/filesel.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/playorder.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tagscombobox.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/downloader.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/browser.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/info.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/msg.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/renamefiles.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/getstring.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/about.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/session.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tracker.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/pluginwin.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/information.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/entry.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/ccb.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/completion.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/cbes.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tracknumbers.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/controls.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/queue.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/delete.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/chooser.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/prefs.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/_editpane.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/mmkeys_.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/dbus_.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/config.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/wlw.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/bookmarks.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/views.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/cover.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tagsfrompath.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/textedit.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/exfalsowindow.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/edittags.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/sliderbutton.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/x.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/properties.py >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/remote.py >+%%PYTHON_SITELIBDIR%%/quodlibet/util/logging.py >+%%PYTHON_SITELIBDIR%%/quodlibet/util/copool.py >+%%PYTHON_SITELIBDIR%%/quodlibet/util/titlecase.py >+%%PYTHON_SITELIBDIR%%/quodlibet/util/tags.py >+%%PYTHON_SITELIBDIR%%/quodlibet/util/massagers.py >+%%PYTHON_SITELIBDIR%%/quodlibet/util/thumbnails.py >+%%PYTHON_SITELIBDIR%%/quodlibet/util/i18n.py >+%%PYTHON_SITELIBDIR%%/quodlibet/util/uri.py >+%%PYTHON_SITELIBDIR%%/quodlibet/util/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/player/_xine.py >+%%PYTHON_SITELIBDIR%%/quodlibet/player/nullbe.py >+%%PYTHON_SITELIBDIR%%/quodlibet/player/_base.py >+%%PYTHON_SITELIBDIR%%/quodlibet/player/xinebe.py >+%%PYTHON_SITELIBDIR%%/quodlibet/player/gstbe.py >+%%PYTHON_SITELIBDIR%%/quodlibet/player/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/debug/enc.py >+%%PYTHON_SITELIBDIR%%/quodlibet/debug/debugwindow.py >+%%PYTHON_SITELIBDIR%%/quodlibet/debug/__init__.py >+%%PYTHON_SITELIBDIR%%/quodlibet/images/quodlibet.png >+%%PYTHON_SITELIBDIR%%/quodlibet/images/audio-volume-muted.png >+%%PYTHON_SITELIBDIR%%/quodlibet/images/device-generic.png >+%%PYTHON_SITELIBDIR%%/quodlibet/images/audio-volume-low.png >+%%PYTHON_SITELIBDIR%%/quodlibet/images/audio-volume-high.png >+%%PYTHON_SITELIBDIR%%/quodlibet/images/audio-volume-medium.png >+%%PYTHON_SITELIBDIR%%/quodlibet/images/media-eject.png >+%%PYTHON_SITELIBDIR%%/quodlibet/images/exfalso.png >+%%PYTHON_SITELIBDIR%%/quodlibet/images/device-ipod.png >+%%PYTHON_SITELIBDIR%%/quodlibet/images/missing-cover.svg >+%%PYTHON_SITELIBDIR%%/quodlibet/images/exfalso.svg >+%%PYTHON_SITELIBDIR%%/quodlibet/images/quodlibet.svg >+%%PYTHON_SITELIBDIR%%/quodlibet/_mmkeys.so >+%%PYTHON_SITELIBDIR%%/quodlibet/_trayicon.so >+%%PYTHON_SITELIBDIR%%/quodlibet/widgets.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/config.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/stock.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/const.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/albums.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/playlists.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/media.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/audiofeeds.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/_base.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/iradio.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/search.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/filesystem.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/paned.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/_base.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/ipod.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/storage.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/wav.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/spc.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/wavpack.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/_audio.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/xiph.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mod.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mp3.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/wma.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/_id3.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mp4.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mpc.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/_apev2.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/trueaudio.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/remote.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/library/_library.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/library/songs.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/library/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_match.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_query.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_pattern.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_scanner.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/songsmenu.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/playorder.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/editing.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/events.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/songlist.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/songsmenu.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/lyrics.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/logging.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/quodlibetwindow.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/filesel.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/playorder.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tagscombobox.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/downloader.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/browser.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/info.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/msg.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/renamefiles.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/getstring.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/about.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/session.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tracker.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/pluginwin.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/information.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/entry.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/ccb.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/completion.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/cbes.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tracknumbers.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/controls.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/queue.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/delete.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/chooser.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/prefs.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/_editpane.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/mmkeys_.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/dbus_.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/config.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/wlw.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/bookmarks.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/views.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/cover.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tagsfrompath.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/textedit.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/exfalsowindow.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/edittags.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/sliderbutton.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/x.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/properties.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/remote.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/util/logging.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/util/copool.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/util/titlecase.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/util/tags.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/util/massagers.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/util/thumbnails.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/util/i18n.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/util/uri.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/util/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/player/_xine.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/player/nullbe.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/player/_base.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/player/xinebe.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/player/gstbe.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/player/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/debug/enc.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/debug/debugwindow.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/debug/__init__.pyc >+%%PYTHON_SITELIBDIR%%/quodlibet/widgets.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/config.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/__init__.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/stock.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/const.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/albums.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/playlists.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/media.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/audiofeeds.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/_base.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/iradio.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/search.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/filesystem.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/paned.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/browsers/__init__.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/_base.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/ipod.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/storage.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/devices/__init__.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/wav.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/spc.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/wavpack.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/_audio.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/xiph.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mod.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mp3.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/wma.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/_id3.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mp4.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/mpc.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/__init__.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/_apev2.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/trueaudio.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/formats/remote.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/library/_library.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/library/songs.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/library/__init__.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_match.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_query.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_pattern.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/__init__.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/parse/_scanner.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/songsmenu.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/playorder.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/editing.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/events.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/plugins/__init__.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/songlist.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/songsmenu.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/lyrics.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/logging.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/quodlibetwindow.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/filesel.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/playorder.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tagscombobox.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/downloader.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/browser.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/info.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/msg.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/renamefiles.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/getstring.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/about.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/session.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tracker.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/pluginwin.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/information.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/entry.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/ccb.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/completion.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/cbes.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tracknumbers.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/controls.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/queue.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/delete.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/chooser.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/prefs.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/_editpane.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/mmkeys_.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/dbus_.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/config.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/wlw.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/bookmarks.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/views.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/cover.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/tagsfrompath.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/textedit.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/exfalsowindow.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/edittags.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/sliderbutton.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/__init__.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/x.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/properties.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/qltk/remote.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/util/logging.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/util/copool.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/util/titlecase.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/util/tags.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/util/massagers.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/util/thumbnails.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/util/i18n.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/util/uri.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/util/__init__.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/player/_xine.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/player/nullbe.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/player/_base.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/player/xinebe.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/player/gstbe.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/player/__init__.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/debug/enc.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/debug/debugwindow.pyo >+%%PYTHON_SITELIBDIR%%/quodlibet/debug/__init__.pyo >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/browsers >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/devices >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/formats >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/library >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/parse >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/plugins >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/qltk >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/util >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/player >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/debug >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet/images >+@dirrm %%PYTHON_SITELIBDIR%%/quodlibet
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 144094
: 103995