本文整理汇总了Python中quodlibet.get_user_dir函数的典型用法代码示例。如果您正苦于以下问题:Python get_user_dir函数的具体用法?Python get_user_dir怎么用?Python get_user_dir使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了get_user_dir函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: init
def init():
global browsers
# ignore double init (for the test suite)
if browsers:
return
this_dir = os.path.dirname(__file__)
load_pyc = os.name == 'nt'
modules = load_dir_modules(this_dir,
package=__package__,
load_compiled=load_pyc)
user_dir = os.path.join(quodlibet.get_user_dir(), "browsers")
if os.path.isdir(user_dir):
modules += load_dir_modules(user_dir,
package="quodlibet.fake.browsers",
load_compiled=load_pyc)
for browser in modules:
try:
browsers.extend(browser.browsers)
except AttributeError:
print_w("%r doesn't contain any browsers." % browser.__name__)
def is_browser(Kind):
return isinstance(Kind, type) and issubclass(Kind, Browser)
browsers = filter(is_browser, browsers)
if not browsers:
raise SystemExit("No browsers found!")
browsers.sort(key=lambda Kind: Kind.priority)
示例2: errorhook
def errorhook(exc_info=None):
"""This is the main entry point
Call in an exception context. Thread safe.
def my_thread():
try:
do_work()
except Exception:
errorhook()
"""
global _error_lock, _errorhook_enabled
if not _errorhook_enabled:
return
if exc_info is None:
exc_info = sys.exc_info()
if exc_info[0] is None:
# called outside of an exception context, just ignore
print_e("no active exception!")
return
# In case something goes wrong during error handling print it first
print_exc(exc_info)
if not _error_lock.acquire(False):
# Make sure only one of these is active at a time
return
# write error and logs to disk
dump_dir = os.path.join(quodlibet.get_user_dir(), "dumps")
dump_to_disk(dump_dir, exc_info)
sentry = get_sentry()
# For crashes the stack trace is not enough to differentiating different
# crash sources. We need to give our own grouping key (fingerprint) based
# on the stack trace provided by faulthandler.
fingerprint = None
if isinstance(exc_info[1], FaultHandlerCrash):
fingerprint = ["{{ default }}", exc_info[1].get_grouping_key()]
try:
sentry_error = sentry.capture(exc_info, fingerprint=fingerprint)
except SentryError:
sentry_error = None
def called_in_main_thread():
try:
run_error_dialogs(exc_info, sentry_error)
finally:
_error_lock.release()
if is_main_thread():
called_in_main_thread()
else:
GLib.idle_add(called_in_main_thread)
示例3: parse_body
def parse_body(self, body, query_path_=None):
if body is None:
raise QueryPluginError
body = body.strip().lower()
# Use provided query file for testing
if query_path_:
query_path = query_path_
else:
query_path = os.path.join(get_user_dir(), 'lists', 'queries.saved')
try:
with open(query_path, 'rU') as query_file:
for query_string in query_file:
name = next(query_file).strip().lower()
if name == body:
try:
return Query(query_string.strip())
except QueryError:
raise QueryPluginError
# We've searched the whole file and haven't found a match
raise QueryPluginError
except IOError:
raise QueryPluginError
except StopIteration:
# The file has an odd number of lines. This shouldn't happen unless
# it has been externally modified
raise QueryPluginError
示例4: __init__
def __init__(self, parent, player, library):
super(TopBar, self).__init__()
# play controls
control_item = Gtk.ToolItem()
self.insert(control_item, 0)
t = PlayControls(player, library.librarian)
self.volume = t.volume
# only restore the volume in case it is managed locally, otherwise
# this could affect the system volume
if not player.has_external_volume:
player.volume = config.getfloat("memory", "volume")
connect_destroy(player, "notify::volume", self._on_volume_changed)
control_item.add(t)
self.insert(Gtk.SeparatorToolItem(), 1)
info_item = Gtk.ToolItem()
self.insert(info_item, 2)
info_item.set_expand(True)
box = Gtk.Box(spacing=6)
info_item.add(box)
qltk.add_css(self, "GtkToolbar {padding: 3px;}")
self._pattern_box = Gtk.VBox()
# song text
info_pattern_path = os.path.join(quodlibet.get_user_dir(), "songinfo")
text = SongInfo(library.librarian, player, info_pattern_path)
self._pattern_box.pack_start(Align(text, border=3), True, True, 0)
box.pack_start(self._pattern_box, True, True, 0)
# cover image
self.image = CoverImage(resize=True)
connect_destroy(player, 'song-started', self.__new_song)
# FIXME: makes testing easier
if app.cover_manager:
connect_destroy(
app.cover_manager, 'cover-changed',
self.__song_art_changed, library)
box.pack_start(Align(self.image, border=2), False, True, 0)
# On older Gtk+ (3.4, at least)
# setting a margin on CoverImage leads to errors and result in the
# QL window not being visible for some reason.
assert self.image.props.margin == 0
for child in self.get_children():
child.show_all()
context = self.get_style_context()
context.add_class("primary-toolbar")
示例5: main
def main(argv):
import quodlibet
from quodlibet.qltk import add_signal_watch, icons
add_signal_watch(app.quit)
opts = util.OptionParser("Ex Falso", const.VERSION, _("an audio tag editor"), "[%s]" % _("directory"))
# FIXME: support unicode on Windows, sys.argv isn't good enough
argv.append(os.path.abspath(fsnative(u".")))
opts, args = opts.parse(argv[1:])
args[0] = os.path.realpath(args[0])
config.init(os.path.join(quodlibet.get_user_dir(), "config"))
app.name = "Ex Falso"
app.id = "exfalso"
quodlibet.init(icon=icons.EXFALSO, name=app.name, proc_title=app.id)
import quodlibet.library
import quodlibet.player
app.library = quodlibet.library.init()
app.player = quodlibet.player.init_player("nullbe", app.librarian)
from quodlibet.qltk.songlist import PlaylistModel
app.player.setup(PlaylistModel(), None, 0)
pm = quodlibet.init_plugins()
pm.rescan()
from quodlibet.qltk.exfalsowindow import ExFalsoWindow
dir_ = args[0]
if os.name == "nt":
dir_ = fsdecode(dir_)
app.window = ExFalsoWindow(app.library, dir_)
app.window.init_plugins()
from quodlibet.util.cover import CoverManager
app.cover_manager = CoverManager()
app.cover_manager.init_plugins()
from quodlibet.qltk import session
session.init("exfalso")
quodlibet.enable_periodic_save(save_library=False)
quodlibet.main(app.window)
quodlibet.finish_first_session(app.id)
config.save()
print_d("Finished shutdown.")
示例6: main
def main(argv=None):
if argv is None:
argv = sys_argv
import quodlibet
config_file = os.path.join(quodlibet.get_user_dir(), "config")
quodlibet.init(config_file=config_file)
from quodlibet.qltk import add_signal_watch
add_signal_watch(app.quit)
opts = util.OptionParser(
"Ex Falso", const.VERSION,
_("an audio tag editor"), "[%s]" % _("directory"))
argv.append(os.path.abspath(fsnative(u".")))
opts, args = opts.parse(argv[1:])
args[0] = os.path.realpath(args[0])
app.name = "Ex Falso"
app.description = _("Audio metadata editor")
app.id = "exfalso"
app.process_name = "exfalso"
quodlibet.set_application_info(app)
import quodlibet.library
import quodlibet.player
app.library = quodlibet.library.init()
app.player = quodlibet.player.init_player("nullbe", app.librarian)
from quodlibet.qltk.songlist import PlaylistModel
app.player.setup(PlaylistModel(), None, 0)
pm = quodlibet.init_plugins()
pm.rescan()
from quodlibet.qltk.exfalsowindow import ExFalsoWindow
dir_ = args[0]
app.window = ExFalsoWindow(app.library, dir_)
app.window.init_plugins()
from quodlibet.util.cover import CoverManager
app.cover_manager = CoverManager()
app.cover_manager.init_plugins()
from quodlibet import session
session_client = session.init(app)
quodlibet.enable_periodic_save(save_library=False)
quodlibet.run(app.window)
quodlibet.finish_first_session("exfalso")
config.save()
session_client.close()
util.print_d("Finished shutdown.")
示例7: update_feeds
def update_feeds(subscriptions):
feeds = []
with open(os.path.join(quodlibet.get_user_dir(), "feeds"), "rb") as f:
try:
feeds = pickle.load(f)
except:
print_d("Couldn't read feeds.")
subbed = frozenset([f.uri for f in feeds])
newfeeds = list()
for subscription in subscriptions:
try:
r = requests.get(subscription)
except requests.exceptions.ConnectionError as e:
print_d("ConnectionError %s - %s" % (subscription, e));
continue
if not r.status_code == 200:
print_d("Cannot access %s - %i" % (subscription, r.status_code))
continue
feed = Feed(subscription)
if feed.uri in subbed:
print_d("Feed already subscribed: %s" % subscription)
continue
feed.changed = feed.parse()
if feed:
print_d("Appending %s" % subscription)
feeds.append(feed)
newfeeds.append(feed)
else:
print_d("Feed could not be added: %s" % subscription)
print_d("Adding %i feeds." % len(newfeeds))
with open(os.path.join(quodlibet.get_user_dir(), "feeds"), "wb") as f:
pickle.dump(feeds, f)
app.browser.reload(app.library) # adds feeds
示例8: __init__
def __init__(self, filename=None, completion=None, accel_group=None,
timeout=DEFAULT_TIMEOUT, validator=Query.validator,
star=None):
super(SearchBarBox, self).__init__(spacing=6)
if filename is None:
filename = os.path.join(
quodlibet.get_user_dir(), "lists", "queries")
combo = ComboBoxEntrySave(filename, count=8,
validator=validator,
title=_("Saved Searches"),
edit_title=_(u"Edit saved searches…"))
self.__deferred_changed = DeferredSignal(
self.__filter_changed, timeout=timeout, owner=self)
self.__combo = combo
entry = combo.get_child()
self.__entry = entry
if completion:
entry.set_completion(completion)
self._star = star
self._query = None
self.__sig = combo.connect('text-changed', self.__text_changed)
entry.connect('clear', self.__filter_changed)
entry.connect('backspace', self.__text_changed)
entry.connect('populate-popup', self.__menu)
entry.connect('activate', self.__filter_changed)
entry.connect('activate', self.__save_search)
entry.connect('focus-out-event', self.__save_search)
entry.connect('key-press-event', self.__key_pressed)
entry.set_placeholder_text(_("Search"))
entry.set_tooltip_text(_("Search your library, "
"using free text or QL queries"))
combo.enable_clear_button()
self.pack_start(combo, True, True, 0)
if accel_group:
key, mod = Gtk.accelerator_parse("<Primary>L")
accel_group.connect(key, mod, 0,
lambda *x: entry.mnemonic_activate(True))
for child in self.get_children():
child.show_all()
示例9: get_thumbnail_folder
def get_thumbnail_folder():
"""Returns a path to the thumbnail folder.
The returned path might not exist.
"""
if os.name == "nt":
thumb_folder = os.path.join(quodlibet.get_user_dir(), "thumbnails")
else:
cache_folder = os.path.join(xdg_get_cache_home(), "thumbnails")
thumb_folder = os.path.expanduser('~/.thumbnails')
if os.path.exists(cache_folder) or not os.path.exists(thumb_folder):
thumb_folder = cache_folder
return thumb_folder
示例10: init
def init():
"""Import all browsers from this package and from the user directory.
After this is called the global `browers` list will contain all
classes sorted by priority.
Can be called multiple times.
"""
global browsers, default
# ignore double init (for the test suite)
if browsers:
return
this_dir = os.path.dirname(__file__)
load_pyc = util.is_windows() or util.is_osx()
modules = load_dir_modules(this_dir,
package=__package__,
load_compiled=load_pyc)
user_dir = os.path.join(quodlibet.get_user_dir(), "browsers")
if os.path.isdir(user_dir):
modules += load_dir_modules(user_dir,
package="quodlibet.fake.browsers",
load_compiled=load_pyc)
for browser in modules:
try:
browsers.extend(browser.browsers)
except AttributeError:
print_w("%r doesn't contain any browsers." % browser.__name__)
def is_browser(Kind):
return isinstance(Kind, type) and issubclass(Kind, Browser)
browsers = filter(is_browser, browsers)
if not browsers:
raise SystemExit("No browsers found!")
browsers.sort(key=lambda Kind: Kind.priority)
try:
default = get("SearchBar")
except ValueError:
raise SystemExit("Default browser not found!")
示例11: IRFile
from quodlibet.qltk.getstring import GetStringDialog
from quodlibet.qltk.songsmenu import SongsMenu
from quodlibet.qltk.notif import Task
from quodlibet.qltk import Icons
from quodlibet.util import copool, connect_destroy, sanitize_tags, connect_obj
from quodlibet.util.string import decode, encode
from quodlibet.util.uri import URI
from quodlibet.qltk.views import AllTreeView
from quodlibet.qltk.searchbar import SearchBarBox
from quodlibet.qltk.completion import LibraryTagCompletion
from quodlibet.qltk.x import MenuItem, Align, ScrolledWindow
from quodlibet.qltk.x import SymbolicIconImage
from quodlibet.qltk.menubutton import MenuButton
STATION_LIST_URL = "http://bitbucket.org/lazka/quodlibet/downloads/radiolist.bz2"
STATIONS_FAV = os.path.join(quodlibet.get_user_dir(), "stations")
STATIONS_ALL = os.path.join(quodlibet.get_user_dir(), "stations_all")
# TODO: - Do the update in a thread
# - Ranking: reduce duplicate stations (max 3 URLs per station)
# prefer stations that match a genre?
# Migration path for pickle
sys.modules["browsers.iradio"] = sys.modules[__name__]
class IRFile(RemoteFile):
multisong = True
can_add = False
format = "Radio Station"
示例12: SpacesToUnderscores
from quodlibet.plugins import PluginManager
from quodlibet.pattern import FileFromPattern
from quodlibet.qltk._editutils import FilterPluginBox, FilterCheckButton
from quodlibet.qltk._editutils import EditingPluginHandler
from quodlibet.qltk.views import TreeViewColumn
from quodlibet.qltk.cbes import ComboBoxEntrySave
from quodlibet.qltk.models import ObjectStore
from quodlibet.qltk import Icons, Button
from quodlibet.qltk.wlw import WritingWindow
from quodlibet.util import connect_obj, gdecode
from quodlibet.util.path import fsdecode, fsnative
from quodlibet.util.path import strip_win32_incompat_from_path
NBP = os.path.join(quodlibet.get_user_dir(), "lists", "renamepatterns")
NBP_EXAMPLES = """\
<tracknumber>. <title>
<tracknumber|<tracknumber>. ><title>
<tracknumber> - <title>
<tracknumber> - <artist> - <title>
/path/<artist> - <album>/<tracknumber>. <title>
/path/<artist>/<album>/<tracknumber> - <title>"""
class SpacesToUnderscores(FilterCheckButton):
_label = _("Replace spaces with _underscores")
_section = "rename"
_key = "spaces"
_order = 1.0
示例13: InvalidFeed
from quodlibet import util
from quodlibet import app
from quodlibet.browsers import Browser
from quodlibet.formats import AudioFile
from quodlibet.formats.remote import RemoteFile
from quodlibet.qltk.getstring import GetStringDialog
from quodlibet.qltk.msg import ErrorMessage
from quodlibet.qltk.views import AllTreeView
from quodlibet.qltk import Icons
from quodlibet.util import connect_obj, print_w
from quodlibet.qltk.x import ScrolledWindow, Align, Button, MenuItem
from quodlibet.util.picklehelper import pickle_load, pickle_dump, PickleError
FEEDS = os.path.join(quodlibet.get_user_dir(), "feeds")
DND_URI_LIST, DND_MOZ_URL = range(2)
# Migration path for pickle
sys.modules["browsers.audiofeeds"] = sys.modules[__name__]
class InvalidFeed(ValueError):
pass
class Feed(list):
def __init__(self, uri):
self.name = _("Unknown")
self.uri = uri
self.changed = False
示例14: JEP118
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
import os
import io
import quodlibet
from quodlibet import _
from quodlibet import util
from quodlibet.qltk import Icons
from quodlibet.plugins.events import EventPlugin
outfile = os.path.join(quodlibet.get_user_dir(), "jabber")
format = """\
<tune xmlns='http://jabber.org/protocol/tune'>
<artist>%s</artist>
<title>%s</title>
<source>%s</source>
<track>%d</track>
<length>%d</length>
</tune>"""
class JEP118(EventPlugin):
PLUGIN_ID = "JEP-118"
PLUGIN_NAME = _("JEP-118")
PLUGIN_DESC = _("Outputs a Jabber User Tunes file to ~/.quodlibet/jabber.")
PLUGIN_ICON = Icons.DOCUMENT_SAVE
示例15: main
def main(argv):
import quodlibet
quodlibet.init_cli()
try:
# we want basic commands not to import gtk (doubles process time)
assert "gi.repository.Gtk" not in sys.modules
sys.modules["gi.repository.Gtk"] = None
startup_actions, cmds_todo = process_arguments(argv)
finally:
sys.modules.pop("gi.repository.Gtk", None)
quodlibet.init()
from quodlibet import app
from quodlibet.qltk import add_signal_watch, Icons
add_signal_watch(app.quit)
import quodlibet.player
import quodlibet.library
from quodlibet import config
from quodlibet import browsers
from quodlibet import util
from quodlibet.util.string import decode
app.name = "Quod Libet"
app.id = "quodlibet"
quodlibet.set_application_info(Icons.QUODLIBET, app.id, app.name)
config.init(os.path.join(quodlibet.get_user_dir(), "config"))
library_path = os.path.join(quodlibet.get_user_dir(), "songs")
print_d("Initializing main library (%s)" % (
quodlibet.util.path.unexpand(library_path)))
library = quodlibet.library.init(library_path)
app.library = library
# this assumes that nullbe will always succeed
from quodlibet.player import PlayerError
wanted_backend = os.environ.get(
"QUODLIBET_BACKEND", config.get("player", "backend"))
backend_traceback = None
for backend in [wanted_backend, "nullbe"]:
try:
player = quodlibet.player.init_player(backend, app.librarian)
except PlayerError:
backend_traceback = decode(traceback.format_exc())
else:
break
app.player = player
os.environ["PULSE_PROP_media.role"] = "music"
os.environ["PULSE_PROP_application.icon_name"] = "quodlibet"
browsers.init()
from quodlibet.qltk.songlist import SongList, get_columns
from quodlibet.util.collection import Album
try:
cover_size = config.getint("browsers", "cover_size")
except config.Error:
pass
else:
if cover_size > 0:
Album.COVER_SIZE = cover_size
headers = get_columns()
SongList.set_all_column_headers(headers)
for opt in config.options("header_maps"):
val = config.get("header_maps", opt)
util.tags.add(opt, val)
in_all = ("~filename ~uri ~#lastplayed ~#rating ~#playcount ~#skipcount "
"~#added ~#bitrate ~current ~#laststarted ~basename "
"~dirname").split()
for Kind in browsers.browsers:
if Kind.headers is not None:
Kind.headers.extend(in_all)
Kind.init(library)
pm = quodlibet.init_plugins("no-plugins" in startup_actions)
if hasattr(player, "init_plugins"):
player.init_plugins()
from quodlibet.qltk import unity
unity.init("quodlibet.desktop", player)
from quodlibet.qltk.songsmenu import SongsMenu
SongsMenu.init_plugins()
from quodlibet.util.cover import CoverManager
app.cover_manager = CoverManager()
app.cover_manager.init_plugins()
#.........这里部分代码省略.........