Compare commits
42 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
7969ec54ff | ||
![]() |
a352cef341 | ||
![]() |
2d6b83a94e | ||
![]() |
7610178497 | ||
![]() |
dedcca7bc4 | ||
![]() |
95386b05bc | ||
![]() |
7c5f0b4fbf | ||
![]() |
8217a87f13 | ||
![]() |
432a4d4425 | ||
![]() |
15ed338062 | ||
![]() |
6fc61f37e0 | ||
![]() |
f07d7a3448 | ||
![]() |
576bc088e9 | ||
![]() |
a5b2ad16dc | ||
![]() |
27b4efb49f | ||
![]() |
b2cab7b188 | ||
![]() |
c4734d80b7 | ||
![]() |
3ecb93b7b9 | ||
![]() |
4a0b6a0350 | ||
![]() |
7916112432 | ||
![]() |
4e8ae30201 | ||
![]() |
a5a53032f2 | ||
![]() |
24d5bd1ca3 | ||
![]() |
959dc9b5ad | ||
![]() |
e8191eab7c | ||
![]() |
5db00fcd27 | ||
![]() |
7ab40d5049 | ||
![]() |
a695d829d8 | ||
![]() |
ac749a10dd | ||
![]() |
f7ada87104 | ||
![]() |
4925b0288c | ||
![]() |
d920da9e52 | ||
![]() |
fb60e4701f | ||
![]() |
35ef3deaab | ||
![]() |
62c30b1b01 | ||
![]() |
2f28b91865 | ||
![]() |
72588b5b66 | ||
![]() |
838e421466 | ||
![]() |
2d6e2aa3f5 | ||
![]() |
6fe8fa9d37 | ||
![]() |
2493255643 | ||
![]() |
d86a52d1d3 |
@@ -2,7 +2,7 @@ README for mpdevil
|
|||||||
==================
|
==================
|
||||||
Mpdevil is a simple music browser for the Music Player Daemon (MPD) which is focused on playing local music without the need of managing playlists. Instead of maintaining a client side database of your music library mpdevil loads all tags and covers on demand. So you'll never see any outdated information in the browser. Mpdevil strongly relies on tags.
|
Mpdevil is a simple music browser for the Music Player Daemon (MPD) which is focused on playing local music without the need of managing playlists. Instead of maintaining a client side database of your music library mpdevil loads all tags and covers on demand. So you'll never see any outdated information in the browser. Mpdevil strongly relies on tags.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Features
|
Features
|
||||||
--------
|
--------
|
||||||
@@ -46,6 +46,10 @@ Gentoo (see: https://wiki.gentoo.org/wiki/Custom_repository):
|
|||||||
- Generate manifest file
|
- Generate manifest file
|
||||||
- Run: `emerge mpdevil`
|
- Run: `emerge mpdevil`
|
||||||
|
|
||||||
|
Flatpak:
|
||||||
|
|
||||||
|
<a href='https://flathub.org/apps/details/org.mpdevil.mpdevil'><img width='240' alt='Download on Flathub' src='https://flathub.org/assets/badges/flathub-badge-en.png'/></a>
|
||||||
|
|
||||||
Building
|
Building
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
482
bin/mpdevil
@@ -2,21 +2,20 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# mpdevil - MPD Client.
|
# mpdevil - MPD Client.
|
||||||
# Copyright 2020 Martin Wagner <martin.wagner.dev@gmail.com>
|
# Copyright (C) 2020-2021 Martin Wagner <martin.wagner.dev@gmail.com>
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation; version 3 of the License.
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful,
|
||||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
||||||
# USA
|
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
gi.require_version("Gtk", "3.0")
|
gi.require_version("Gtk", "3.0")
|
||||||
@@ -30,13 +29,12 @@ import datetime
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
import gettext
|
from gettext import gettext as _, ngettext, textdomain, bindtextdomain
|
||||||
gettext.textdomain("mpdevil")
|
textdomain("mpdevil")
|
||||||
if os.path.isfile("/.flatpak-info"): # test for flatpak environment
|
if os.path.isfile("/.flatpak-info"): # test for flatpak environment
|
||||||
gettext.bindtextdomain("mpdevil", "/app/share/locale")
|
bindtextdomain("mpdevil", "/app/share/locale")
|
||||||
_=gettext.gettext
|
|
||||||
|
|
||||||
VERSION="0.9.8" # sync with setup.py
|
VERSION="1.1.1" # sync with setup.py
|
||||||
COVER_REGEX=r"^\.?(album|cover|folder|front).*\.(gif|jpeg|jpg|png)$"
|
COVER_REGEX=r"^\.?(album|cover|folder|front).*\.(gif|jpeg|jpg|png)$"
|
||||||
|
|
||||||
|
|
||||||
@@ -435,9 +433,13 @@ class MPRISInterface: # TODO emit Seeked if needed
|
|||||||
|
|
||||||
class ClientHelper():
|
class ClientHelper():
|
||||||
def seconds_to_display_time(seconds):
|
def seconds_to_display_time(seconds):
|
||||||
raw_time_string=str(datetime.timedelta(seconds=seconds))
|
delta=datetime.timedelta(seconds=seconds)
|
||||||
stript_time_string=raw_time_string.lstrip("0").lstrip(":")
|
if delta.days > 0:
|
||||||
return stript_time_string.replace(":", "∶") # use 'ratio' as delimiter
|
days=ngettext("{days} day", "{days} days", delta.days).format(days=delta.days)
|
||||||
|
time_string=days+", "+str(datetime.timedelta(seconds=delta.seconds))
|
||||||
|
else:
|
||||||
|
time_string=str(delta).lstrip("0").lstrip(":")
|
||||||
|
return time_string.replace(":", "∶") # use 'ratio' as delimiter
|
||||||
|
|
||||||
def song_to_str_dict(song): # converts tags with multiple values to comma separated strings
|
def song_to_str_dict(song): # converts tags with multiple values to comma separated strings
|
||||||
return_song={}
|
return_song={}
|
||||||
@@ -635,6 +637,17 @@ class Client(MPDClient):
|
|||||||
pass
|
pass
|
||||||
return meta_base
|
return meta_base
|
||||||
|
|
||||||
|
def get_absolute_path(self, uri):
|
||||||
|
lib_path=self._settings.get_lib_path()
|
||||||
|
if lib_path is not None:
|
||||||
|
path=os.path.join(lib_path, uri)
|
||||||
|
if os.path.isfile(path):
|
||||||
|
return path
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
def toggle_play(self):
|
def toggle_play(self):
|
||||||
status=self.status()
|
status=self.status()
|
||||||
if status["state"] == "play":
|
if status["state"] == "play":
|
||||||
@@ -763,6 +776,14 @@ class Settings(Gio.Settings):
|
|||||||
else:
|
else:
|
||||||
return ("artist")
|
return ("artist")
|
||||||
|
|
||||||
|
def get_lib_path(self, profile=None):
|
||||||
|
if profile is None: # use current profile if none is given
|
||||||
|
profile=self.get_int("active-profile")
|
||||||
|
lib_path=self.get_value("paths")[profile]
|
||||||
|
if lib_path == "":
|
||||||
|
lib_path=GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_MUSIC)
|
||||||
|
return lib_path
|
||||||
|
|
||||||
###################
|
###################
|
||||||
# settings dialog #
|
# settings dialog #
|
||||||
###################
|
###################
|
||||||
@@ -791,25 +812,6 @@ class GeneralSettings(Gtk.Box):
|
|||||||
self._settings.connect("changed::{}".format(key), self._on_int_settings_changed, int_settings[key][1])
|
self._settings.connect("changed::{}".format(key), self._on_int_settings_changed, int_settings[key][1])
|
||||||
)
|
)
|
||||||
|
|
||||||
# combo_settings
|
|
||||||
combo_settings={}
|
|
||||||
combo_settings_data=[
|
|
||||||
(_("Sort albums by:"), _("name"), _("year"), "sort-albums-by-year"),
|
|
||||||
(_("Position of playlist:"), _("bottom"), _("right"), "playlist-right")
|
|
||||||
]
|
|
||||||
for label, vfalse, vtrue, key in combo_settings_data:
|
|
||||||
combo_settings[key]=(Gtk.Label(label=label, xalign=0), Gtk.ComboBoxText(entry_text_column=0))
|
|
||||||
combo_settings[key][1].append_text(vfalse)
|
|
||||||
combo_settings[key][1].append_text(vtrue)
|
|
||||||
if self._settings.get_boolean(key):
|
|
||||||
combo_settings[key][1].set_active(1)
|
|
||||||
else:
|
|
||||||
combo_settings[key][1].set_active(0)
|
|
||||||
combo_settings[key][1].connect("changed", self._on_combo_changed, key)
|
|
||||||
self._settings_handlers.append(
|
|
||||||
self._settings.connect("changed::{}".format(key), self._on_combo_settings_changed, combo_settings[key][1])
|
|
||||||
)
|
|
||||||
|
|
||||||
# check buttons
|
# check buttons
|
||||||
check_buttons={}
|
check_buttons={}
|
||||||
check_buttons_data=[
|
check_buttons_data=[
|
||||||
@@ -817,13 +819,13 @@ class GeneralSettings(Gtk.Box):
|
|||||||
(_("Show stop button"), "show-stop"),
|
(_("Show stop button"), "show-stop"),
|
||||||
(_("Show lyrics button"), "show-lyrics-button"),
|
(_("Show lyrics button"), "show-lyrics-button"),
|
||||||
(_("Show initials in artist view"), "show-initials"),
|
(_("Show initials in artist view"), "show-initials"),
|
||||||
(_("Show tooltips in album view"), "show-album-view-tooltips"),
|
(_("Place playlist at the side"), "playlist-right"),
|
||||||
(_("Use “Album Artist” tag"), "use-album-artist"),
|
(_("Use “Album Artist” tag"), "use-album-artist"),
|
||||||
(_("Send notification on title change"), "send-notify"),
|
(_("Send notification on title change"), "send-notify"),
|
||||||
(_("Stop playback on quit"), "stop-on-quit"),
|
(_("Stop playback on quit"), "stop-on-quit"),
|
||||||
(_("Play selected albums and titles immediately"), "force-mode")
|
(_("Play selected albums and titles immediately"), "force-mode"),
|
||||||
|
(_("Sort albums by year"), "sort-albums-by-year"),
|
||||||
]
|
]
|
||||||
|
|
||||||
for label, key in check_buttons_data:
|
for label, key in check_buttons_data:
|
||||||
check_buttons[key]=Gtk.CheckButton(label=label)
|
check_buttons[key]=Gtk.CheckButton(label=label)
|
||||||
check_buttons[key].set_active(self._settings.get_boolean(key))
|
check_buttons[key].set_active(self._settings.get_boolean(key))
|
||||||
@@ -844,22 +846,10 @@ class GeneralSettings(Gtk.Box):
|
|||||||
view_grid.attach_next_to(int_settings["album-cover"][0], int_settings["track-cover"][0], Gtk.PositionType.BOTTOM, 1, 1)
|
view_grid.attach_next_to(int_settings["album-cover"][0], int_settings["track-cover"][0], Gtk.PositionType.BOTTOM, 1, 1)
|
||||||
view_grid.attach_next_to(int_settings["icon-size"][0], int_settings["album-cover"][0], Gtk.PositionType.BOTTOM, 1, 1)
|
view_grid.attach_next_to(int_settings["icon-size"][0], int_settings["album-cover"][0], Gtk.PositionType.BOTTOM, 1, 1)
|
||||||
view_grid.attach_next_to(int_settings["icon-size-sec"][0], int_settings["icon-size"][0], Gtk.PositionType.BOTTOM, 1, 1)
|
view_grid.attach_next_to(int_settings["icon-size-sec"][0], int_settings["icon-size"][0], Gtk.PositionType.BOTTOM, 1, 1)
|
||||||
view_grid.attach_next_to(combo_settings["playlist-right"][0], int_settings["icon-size-sec"][0], Gtk.PositionType.BOTTOM, 1, 1)
|
|
||||||
view_grid.attach_next_to(int_settings["track-cover"][1], int_settings["track-cover"][0], Gtk.PositionType.RIGHT, 1, 1)
|
view_grid.attach_next_to(int_settings["track-cover"][1], int_settings["track-cover"][0], Gtk.PositionType.RIGHT, 1, 1)
|
||||||
view_grid.attach_next_to(int_settings["album-cover"][1], int_settings["album-cover"][0], Gtk.PositionType.RIGHT, 1, 1)
|
view_grid.attach_next_to(int_settings["album-cover"][1], int_settings["album-cover"][0], Gtk.PositionType.RIGHT, 1, 1)
|
||||||
view_grid.attach_next_to(int_settings["icon-size"][1], int_settings["icon-size"][0], Gtk.PositionType.RIGHT, 1, 1)
|
view_grid.attach_next_to(int_settings["icon-size"][1], int_settings["icon-size"][0], Gtk.PositionType.RIGHT, 1, 1)
|
||||||
view_grid.attach_next_to(int_settings["icon-size-sec"][1], int_settings["icon-size-sec"][0], Gtk.PositionType.RIGHT, 1, 1)
|
view_grid.attach_next_to(int_settings["icon-size-sec"][1], int_settings["icon-size-sec"][0], Gtk.PositionType.RIGHT, 1, 1)
|
||||||
view_grid.attach_next_to(combo_settings["playlist-right"][1], combo_settings["playlist-right"][0], Gtk.PositionType.RIGHT, 1, 1)
|
|
||||||
|
|
||||||
# behavior grid
|
|
||||||
behavior_grid=Gtk.Grid(row_spacing=6, column_spacing=12)
|
|
||||||
behavior_grid.set_margin_start(12)
|
|
||||||
behavior_grid.add(combo_settings["sort-albums-by-year"][0])
|
|
||||||
behavior_grid.attach_next_to(
|
|
||||||
combo_settings["sort-albums-by-year"][1],
|
|
||||||
combo_settings["sort-albums-by-year"][0],
|
|
||||||
Gtk.PositionType.RIGHT, 1, 1
|
|
||||||
)
|
|
||||||
|
|
||||||
# connect
|
# connect
|
||||||
self.connect("destroy", self._remove_handlers)
|
self.connect("destroy", self._remove_handlers)
|
||||||
@@ -873,14 +863,14 @@ class GeneralSettings(Gtk.Box):
|
|||||||
self.pack_start(check_buttons["show-stop"], False, False, 0)
|
self.pack_start(check_buttons["show-stop"], False, False, 0)
|
||||||
self.pack_start(check_buttons["show-lyrics-button"], False, False, 0)
|
self.pack_start(check_buttons["show-lyrics-button"], False, False, 0)
|
||||||
self.pack_start(check_buttons["show-initials"], False, False, 0)
|
self.pack_start(check_buttons["show-initials"], False, False, 0)
|
||||||
self.pack_start(check_buttons["show-album-view-tooltips"], False, False, 0)
|
self.pack_start(check_buttons["playlist-right"], False, False, 0)
|
||||||
self.pack_start(view_grid, False, False, 0)
|
self.pack_start(view_grid, False, False, 0)
|
||||||
self.pack_start(behavior_heading, False, False, 0)
|
self.pack_start(behavior_heading, False, False, 0)
|
||||||
self.pack_start(check_buttons["use-album-artist"], False, False, 0)
|
self.pack_start(check_buttons["use-album-artist"], False, False, 0)
|
||||||
|
self.pack_start(check_buttons["sort-albums-by-year"], False, False, 0)
|
||||||
self.pack_start(check_buttons["send-notify"], False, False, 0)
|
self.pack_start(check_buttons["send-notify"], False, False, 0)
|
||||||
self.pack_start(check_buttons["stop-on-quit"], False, False, 0)
|
|
||||||
self.pack_start(check_buttons["force-mode"], False, False, 0)
|
self.pack_start(check_buttons["force-mode"], False, False, 0)
|
||||||
self.pack_start(behavior_grid, False, False, 0)
|
self.pack_start(check_buttons["stop-on-quit"], False, False, 0)
|
||||||
|
|
||||||
def _remove_handlers(self, *args):
|
def _remove_handlers(self, *args):
|
||||||
for handler in self._settings_handlers:
|
for handler in self._settings_handlers:
|
||||||
@@ -889,25 +879,12 @@ class GeneralSettings(Gtk.Box):
|
|||||||
def _on_int_settings_changed(self, settings, key, entry):
|
def _on_int_settings_changed(self, settings, key, entry):
|
||||||
entry.set_value(settings.get_int(key))
|
entry.set_value(settings.get_int(key))
|
||||||
|
|
||||||
def _on_combo_settings_changed(self, settings, key, combo):
|
|
||||||
if settings.get_boolean(key):
|
|
||||||
combo.set_active(1)
|
|
||||||
else:
|
|
||||||
combo.set_active(0)
|
|
||||||
|
|
||||||
def _on_check_settings_changed(self, settings, key, button):
|
def _on_check_settings_changed(self, settings, key, button):
|
||||||
button.set_active(settings.get_boolean(key))
|
button.set_active(settings.get_boolean(key))
|
||||||
|
|
||||||
def _on_int_changed(self, widget, key):
|
def _on_int_changed(self, widget, key):
|
||||||
self._settings.set_int(key, int(widget.get_value()))
|
self._settings.set_int(key, int(widget.get_value()))
|
||||||
|
|
||||||
def _on_combo_changed(self, box, key):
|
|
||||||
active=box.get_active()
|
|
||||||
if active == 0:
|
|
||||||
self._settings.set_boolean(key, False)
|
|
||||||
else:
|
|
||||||
self._settings.set_boolean(key, True)
|
|
||||||
|
|
||||||
def _on_toggled(self, widget, key):
|
def _on_toggled(self, widget, key):
|
||||||
self._settings.set_boolean(key, widget.get_active())
|
self._settings.set_boolean(key, widget.get_active())
|
||||||
|
|
||||||
@@ -923,13 +900,13 @@ class ProfileSettings(Gtk.Grid):
|
|||||||
# widgets
|
# widgets
|
||||||
self._profiles_combo=Gtk.ComboBoxText(entry_text_column=0, hexpand=True)
|
self._profiles_combo=Gtk.ComboBoxText(entry_text_column=0, hexpand=True)
|
||||||
|
|
||||||
add_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("list-add", Gtk.IconSize.BUTTON))
|
add_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("list-add-symbolic", Gtk.IconSize.BUTTON))
|
||||||
delete_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("list-remove", Gtk.IconSize.BUTTON))
|
delete_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("list-remove-symbolic", Gtk.IconSize.BUTTON))
|
||||||
add_delete_buttons=Gtk.ButtonBox(layout_style=Gtk.ButtonBoxStyle.EXPAND)
|
add_delete_buttons=Gtk.ButtonBox(layout_style=Gtk.ButtonBoxStyle.EXPAND)
|
||||||
add_delete_buttons.pack_start(add_button, True, True, 0)
|
add_delete_buttons.pack_start(add_button, True, True, 0)
|
||||||
add_delete_buttons.pack_start(delete_button, True, True, 0)
|
add_delete_buttons.pack_start(delete_button, True, True, 0)
|
||||||
|
|
||||||
connect_button=Gtk.Button(label=_("Connect"), image=Gtk.Image.new_from_icon_name("system-run", Gtk.IconSize.BUTTON))
|
connect_button=Gtk.Button.new_with_mnemonic(_("_Connect"))
|
||||||
|
|
||||||
self._profile_entry=Gtk.Entry(hexpand=True)
|
self._profile_entry=Gtk.Entry(hexpand=True)
|
||||||
self._host_entry=Gtk.Entry(hexpand=True)
|
self._host_entry=Gtk.Entry(hexpand=True)
|
||||||
@@ -937,9 +914,9 @@ class ProfileSettings(Gtk.Grid):
|
|||||||
address_entry=Gtk.Box(spacing=6)
|
address_entry=Gtk.Box(spacing=6)
|
||||||
address_entry.pack_start(self._host_entry, True, True, 0)
|
address_entry.pack_start(self._host_entry, True, True, 0)
|
||||||
address_entry.pack_start(self._port_entry, False, False, 0)
|
address_entry.pack_start(self._port_entry, False, False, 0)
|
||||||
self._password_entry=Gtk.Entry(hexpand=True, visibility=False)
|
self._password_entry=PasswordEntry(hexpand=True)
|
||||||
self._path_entry=Gtk.Entry(hexpand=True, placeholder_text=GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_MUSIC))
|
self._path_entry=Gtk.Entry(hexpand=True, placeholder_text=GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_MUSIC))
|
||||||
self._path_select_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("folder-open", Gtk.IconSize.BUTTON))
|
self._path_select_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("folder-open-symbolic", Gtk.IconSize.BUTTON))
|
||||||
path_box=Gtk.Box(spacing=6)
|
path_box=Gtk.Box(spacing=6)
|
||||||
path_box.pack_start(self._path_entry, True, True, 0)
|
path_box.pack_start(self._path_entry, True, True, 0)
|
||||||
path_box.pack_start(self._path_select_button, False, False, 0)
|
path_box.pack_start(self._path_select_button, False, False, 0)
|
||||||
@@ -961,6 +938,8 @@ class ProfileSettings(Gtk.Grid):
|
|||||||
add_button.connect("clicked", self._on_add_button_clicked)
|
add_button.connect("clicked", self._on_add_button_clicked)
|
||||||
delete_button.connect("clicked", self._on_delete_button_clicked)
|
delete_button.connect("clicked", self._on_delete_button_clicked)
|
||||||
connect_button.connect("clicked", self._on_connect_button_clicked)
|
connect_button.connect("clicked", self._on_connect_button_clicked)
|
||||||
|
style_context=connect_button.get_style_context()
|
||||||
|
style_context.add_class("suggested-action")
|
||||||
self._path_select_button.connect("clicked", self._on_path_select_button_clicked, parent)
|
self._path_select_button.connect("clicked", self._on_path_select_button_clicked, parent)
|
||||||
self._profiles_changed=self._profiles_combo.connect("changed", self._on_profiles_changed)
|
self._profiles_changed=self._profiles_combo.connect("changed", self._on_profiles_changed)
|
||||||
self.entry_changed_handlers=[]
|
self.entry_changed_handlers=[]
|
||||||
@@ -1088,17 +1067,12 @@ class ProfileSettings(Gtk.Grid):
|
|||||||
self._settings.array_modify("as", "regex", self._profiles_combo.get_active(), self._regex_entry.get_text())
|
self._settings.array_modify("as", "regex", self._profiles_combo.get_active(), self._regex_entry.get_text())
|
||||||
|
|
||||||
def _on_path_select_button_clicked(self, widget, parent):
|
def _on_path_select_button_clicked(self, widget, parent):
|
||||||
dialog=Gtk.FileChooserDialog(title=_("Choose directory"), transient_for=parent, action=Gtk.FileChooserAction.SELECT_FOLDER)
|
dialog=Gtk.FileChooserNative(title=_("Choose directory"), transient_for=parent, action=Gtk.FileChooserAction.SELECT_FOLDER)
|
||||||
dialog.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
|
folder=self._settings.get_lib_path(self._profiles_combo.get_active())
|
||||||
dialog.add_buttons(Gtk.STOCK_OK, Gtk.ResponseType.OK)
|
if folder is not None:
|
||||||
dialog.set_default_size(800, 400)
|
|
||||||
folder=self._settings.get_value("paths")[self._profiles_combo.get_active()]
|
|
||||||
if folder == "":
|
|
||||||
dialog.set_current_folder(GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_MUSIC))
|
|
||||||
else:
|
|
||||||
dialog.set_current_folder(folder)
|
dialog.set_current_folder(folder)
|
||||||
response=dialog.run()
|
response=dialog.run()
|
||||||
if response == Gtk.ResponseType.OK:
|
if response == Gtk.ResponseType.ACCEPT:
|
||||||
self._gui_modification=True
|
self._gui_modification=True
|
||||||
self._settings.array_modify("as", "paths", self._profiles_combo.get_active(), dialog.get_filename())
|
self._settings.array_modify("as", "paths", self._profiles_combo.get_active(), dialog.get_filename())
|
||||||
self._path_entry.set_text(dialog.get_filename())
|
self._path_entry.set_text(dialog.get_filename())
|
||||||
@@ -1287,7 +1261,6 @@ class SettingsDialog(Gtk.Dialog):
|
|||||||
vbox.set_property("spacing", 6)
|
vbox.set_property("spacing", 6)
|
||||||
vbox.set_property("border-width", 6)
|
vbox.set_property("border-width", 6)
|
||||||
vbox.pack_start(tabs, True, True, 0)
|
vbox.pack_start(tabs, True, True, 0)
|
||||||
|
|
||||||
self.show_all()
|
self.show_all()
|
||||||
|
|
||||||
#################
|
#################
|
||||||
@@ -1330,7 +1303,6 @@ class ServerStats(Gtk.Dialog):
|
|||||||
vbox=self.get_content_area()
|
vbox=self.get_content_area()
|
||||||
vbox.set_property("border-width", 6)
|
vbox.set_property("border-width", 6)
|
||||||
vbox.pack_start(grid, True, True, 0)
|
vbox.pack_start(grid, True, True, 0)
|
||||||
|
|
||||||
self.show_all()
|
self.show_all()
|
||||||
self.run()
|
self.run()
|
||||||
|
|
||||||
@@ -1343,7 +1315,8 @@ class AboutDialog(Gtk.AboutDialog):
|
|||||||
self.set_authors(["Martin Wagner"])
|
self.set_authors(["Martin Wagner"])
|
||||||
self.set_translator_credits("Martin de Reuver\nMartin Wagner")
|
self.set_translator_credits("Martin de Reuver\nMartin Wagner")
|
||||||
self.set_website("https://github.com/SoongNoonien/mpdevil")
|
self.set_website("https://github.com/SoongNoonien/mpdevil")
|
||||||
self.set_copyright("\xa9 2020 Martin Wagner")
|
self.set_copyright("Copyright \xa9 2020-2021 Martin Wagner")
|
||||||
|
self.set_license_type(Gtk.License.GPL_3_0)
|
||||||
self.set_logo_icon_name("org.mpdevil.mpdevil")
|
self.set_logo_icon_name("org.mpdevil.mpdevil")
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
@@ -1368,6 +1341,22 @@ class AutoSizedIcon(Gtk.Image):
|
|||||||
def _on_icon_size_changed(self, *args):
|
def _on_icon_size_changed(self, *args):
|
||||||
self.set_pixel_size(self._settings.get_int(self._settings_key))
|
self.set_pixel_size(self._settings.get_int(self._settings_key))
|
||||||
|
|
||||||
|
class PasswordEntry(Gtk.Entry):
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
super().__init__(visibility=False, caps_lock_warning=False, input_purpose=Gtk.InputPurpose.PASSWORD, **kwargs)
|
||||||
|
self.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, "view-conceal-symbolic")
|
||||||
|
|
||||||
|
# connect
|
||||||
|
self.connect("icon-release", self._on_icon_release)
|
||||||
|
|
||||||
|
def _on_icon_release(self, *args):
|
||||||
|
if self.get_icon_name(Gtk.EntryIconPosition.SECONDARY) == "view-conceal-symbolic":
|
||||||
|
self.set_visibility(True)
|
||||||
|
self.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, "view-reveal-symbolic")
|
||||||
|
else:
|
||||||
|
self.set_visibility(False)
|
||||||
|
self.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, "view-conceal-symbolic")
|
||||||
|
|
||||||
class FocusFrame(Gtk.Overlay):
|
class FocusFrame(Gtk.Overlay):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@@ -1396,7 +1385,7 @@ class FocusFrame(Gtk.Overlay):
|
|||||||
self._widget.connect("focus-out-event", lambda *args: self._frame.hide())
|
self._widget.connect("focus-out-event", lambda *args: self._frame.hide())
|
||||||
|
|
||||||
class SongPopover(Gtk.Popover):
|
class SongPopover(Gtk.Popover):
|
||||||
def __init__(self, song, relative, x, y, offset=26):
|
def __init__(self, uri, client, relative, x, y, offset=26):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
rect=Gdk.Rectangle()
|
rect=Gdk.Rectangle()
|
||||||
rect.x=x
|
rect.x=x
|
||||||
@@ -1408,13 +1397,26 @@ class SongPopover(Gtk.Popover):
|
|||||||
self.set_pointing_to(rect)
|
self.set_pointing_to(rect)
|
||||||
self.set_relative_to(relative)
|
self.set_relative_to(relative)
|
||||||
|
|
||||||
# css
|
# client calls
|
||||||
|
song=client.wrapped_call("get_metadata", uri)
|
||||||
|
abs_path=client.wrapped_call("get_absolute_path", uri)
|
||||||
|
|
||||||
|
# popover css
|
||||||
style_context=self.get_style_context()
|
style_context=self.get_style_context()
|
||||||
provider=Gtk.CssProvider()
|
provider=Gtk.CssProvider()
|
||||||
css=b"""* {background-color: @theme_base_color}"""
|
css=b"""* {background-color: @theme_base_color}"""
|
||||||
provider.load_from_data(css)
|
provider.load_from_data(css)
|
||||||
style_context.add_provider(provider, 600)
|
style_context.add_provider(provider, 600)
|
||||||
|
|
||||||
|
# open with button
|
||||||
|
open_button=Gtk.Button(image=Gtk.Image.new_from_icon_name("document-open-symbolic",Gtk.IconSize.BUTTON),tooltip_text=_("Open with…"))
|
||||||
|
style_context=open_button.get_style_context()
|
||||||
|
style_context.add_class("circular")
|
||||||
|
open_button_revealer=Gtk.Revealer() # needed for open_button tooltip
|
||||||
|
open_button_revealer.set_halign(Gtk.Align.END)
|
||||||
|
open_button_revealer.set_valign(Gtk.Align.END)
|
||||||
|
open_button_revealer.add(open_button)
|
||||||
|
|
||||||
# treeview
|
# treeview
|
||||||
# (tag, display-value, tooltip)
|
# (tag, display-value, tooltip)
|
||||||
store=Gtk.ListStore(str, str, str)
|
store=Gtk.ListStore(str, str, str)
|
||||||
@@ -1445,15 +1447,31 @@ class SongPopover(Gtk.Popover):
|
|||||||
store.append([tag+":", value, tooltip])
|
store.append([tag+":", value, tooltip])
|
||||||
|
|
||||||
# packing
|
# packing
|
||||||
|
overlay=Gtk.Overlay()
|
||||||
scroll=Gtk.ScrolledWindow(border_width=3)
|
scroll=Gtk.ScrolledWindow(border_width=3)
|
||||||
scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
||||||
window=self.get_toplevel()
|
window=self.get_toplevel()
|
||||||
scroll.set_max_content_height(window.get_size()[1]//2)
|
scroll.set_max_content_height(window.get_size()[1]//2)
|
||||||
scroll.set_propagate_natural_height(True)
|
scroll.set_propagate_natural_height(True)
|
||||||
scroll.add(treeview)
|
scroll.add(treeview)
|
||||||
self.add(scroll)
|
overlay.add(scroll)
|
||||||
|
overlay.add_overlay(open_button_revealer)
|
||||||
|
if abs_path is not None: # show open with button when song is on the same computer
|
||||||
|
self._gfile=Gio.File.new_for_path(abs_path)
|
||||||
|
open_button.connect("clicked", self._on_open_button_clicked)
|
||||||
|
open_button_revealer.set_reveal_child(True)
|
||||||
|
self.add(overlay)
|
||||||
|
overlay.show_all()
|
||||||
|
|
||||||
scroll.show_all()
|
def _on_open_button_clicked(self, *args):
|
||||||
|
self.popdown()
|
||||||
|
dialog=Gtk.AppChooserDialog(gfile=self._gfile, transient_for=self.get_toplevel())
|
||||||
|
app_chooser=dialog.get_widget()
|
||||||
|
response=dialog.run()
|
||||||
|
if response == Gtk.ResponseType.OK:
|
||||||
|
app=app_chooser.get_app_info()
|
||||||
|
app.launch([self._gfile], None)
|
||||||
|
dialog.destroy()
|
||||||
|
|
||||||
class SongsView(Gtk.TreeView):
|
class SongsView(Gtk.TreeView):
|
||||||
def __init__(self, client, store, file_column_id):
|
def __init__(self, client, store, file_column_id):
|
||||||
@@ -1506,11 +1524,11 @@ class SongsView(Gtk.TreeView):
|
|||||||
elif event.button == 2 and event.type == Gdk.EventType.BUTTON_RELEASE:
|
elif event.button == 2 and event.type == Gdk.EventType.BUTTON_RELEASE:
|
||||||
self._client.wrapped_call("files_to_playlist", [self._store[path][self._file_column_id]], "append")
|
self._client.wrapped_call("files_to_playlist", [self._store[path][self._file_column_id]], "append")
|
||||||
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE:
|
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE:
|
||||||
song=self._client.wrapped_call("get_metadata", self._store[path][self._file_column_id])
|
uri=self._store[path][self._file_column_id]
|
||||||
if self.get_property("headers-visible"):
|
if self.get_property("headers-visible"):
|
||||||
pop=SongPopover(song, widget, int(event.x), int(event.y))
|
pop=SongPopover(uri, self._client, widget, int(event.x), int(event.y))
|
||||||
else:
|
else:
|
||||||
pop=SongPopover(song, widget, int(event.x), int(event.y), offset=0)
|
pop=SongPopover(uri, self._client, widget, int(event.x), int(event.y), offset=0)
|
||||||
pop.popup()
|
pop.popup()
|
||||||
self._button_event=(None, None)
|
self._button_event=(None, None)
|
||||||
|
|
||||||
@@ -1524,8 +1542,7 @@ class SongsView(Gtk.TreeView):
|
|||||||
elif event.keyval == Gdk.keyval_from_name("Menu"):
|
elif event.keyval == Gdk.keyval_from_name("Menu"):
|
||||||
path=self._store.get_path(treeiter)
|
path=self._store.get_path(treeiter)
|
||||||
cell=self.get_cell_area(path, None)
|
cell=self.get_cell_area(path, None)
|
||||||
file_name=self._store[path][self._file_column_id]
|
pop=SongPopover(self._store[path][self._file_column_id], self._client, widget, cell.x, cell.y)
|
||||||
pop=SongPopover(self._client.wrapped_call("get_metadata", file_name), widget, cell.x, cell.y)
|
|
||||||
pop.popup()
|
pop.popup()
|
||||||
|
|
||||||
class SongsWindow(Gtk.Box):
|
class SongsWindow(Gtk.Box):
|
||||||
@@ -1545,13 +1562,13 @@ class SongsWindow(Gtk.Box):
|
|||||||
|
|
||||||
# buttons
|
# buttons
|
||||||
append_button=Gtk.Button.new_with_mnemonic(_("_Append"))
|
append_button=Gtk.Button.new_with_mnemonic(_("_Append"))
|
||||||
append_button.set_image(Gtk.Image.new_from_icon_name("list-add", Gtk.IconSize.BUTTON))
|
append_button.set_image(Gtk.Image.new_from_icon_name("list-add-symbolic", Gtk.IconSize.BUTTON))
|
||||||
append_button.set_tooltip_text(_("Add all titles to playlist"))
|
append_button.set_tooltip_text(_("Add all titles to playlist"))
|
||||||
play_button=Gtk.Button.new_with_mnemonic(_("_Play"))
|
play_button=Gtk.Button.new_with_mnemonic(_("_Play"))
|
||||||
play_button.set_image(Gtk.Image.new_from_icon_name("media-playback-start", Gtk.IconSize.BUTTON))
|
play_button.set_image(Gtk.Image.new_from_icon_name("media-playback-start-symbolic", Gtk.IconSize.BUTTON))
|
||||||
play_button.set_tooltip_text(_("Directly play all titles"))
|
play_button.set_tooltip_text(_("Directly play all titles"))
|
||||||
enqueue_button=Gtk.Button.new_with_mnemonic(_("_Enqueue"))
|
enqueue_button=Gtk.Button.new_with_mnemonic(_("_Enqueue"))
|
||||||
enqueue_button.set_image(Gtk.Image.new_from_icon_name("insert-object", Gtk.IconSize.BUTTON))
|
enqueue_button.set_image(Gtk.Image.new_from_icon_name("insert-object-symbolic", Gtk.IconSize.BUTTON))
|
||||||
enqueue_button.set_tooltip_text(_("Append all titles after the currently playing track and clear the playlist from all other songs"))
|
enqueue_button.set_tooltip_text(_("Append all titles after the currently playing track and clear the playlist from all other songs"))
|
||||||
|
|
||||||
# button box
|
# button box
|
||||||
@@ -1664,7 +1681,6 @@ class AlbumPopover(Gtk.Popover):
|
|||||||
|
|
||||||
# packing
|
# packing
|
||||||
self.add(songs_window)
|
self.add(songs_window)
|
||||||
|
|
||||||
songs_window.show_all()
|
songs_window.show_all()
|
||||||
|
|
||||||
class Cover(object):
|
class Cover(object):
|
||||||
@@ -1674,9 +1690,7 @@ class Cover(object):
|
|||||||
if song != {}:
|
if song != {}:
|
||||||
song_file=song["file"]
|
song_file=song["file"]
|
||||||
active_profile=settings.get_int("active-profile")
|
active_profile=settings.get_int("active-profile")
|
||||||
lib_path=settings.get_value("paths")[active_profile]
|
lib_path=settings.get_lib_path()
|
||||||
if lib_path == "":
|
|
||||||
lib_path=GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_MUSIC)
|
|
||||||
if lib_path is not None:
|
if lib_path is not None:
|
||||||
regex_str=settings.get_value("regex")[active_profile]
|
regex_str=settings.get_value("regex")[active_profile]
|
||||||
if regex_str == "":
|
if regex_str == "":
|
||||||
@@ -1838,7 +1852,8 @@ class SearchWindow(Gtk.Box):
|
|||||||
song["human_duration"], song["file"],
|
song["human_duration"], song["file"],
|
||||||
int_track
|
int_track
|
||||||
])
|
])
|
||||||
self._hits_label.set_text(_("{num} hits").format(num=self._songs_view.count()))
|
hits=self._songs_view.count()
|
||||||
|
self._hits_label.set_text(ngettext("{hits} hit", "{hits} hits", hits).format(hits=hits))
|
||||||
if self._songs_view.count() == 0:
|
if self._songs_view.count() == 0:
|
||||||
self._action_bar.set_sensitive(False)
|
self._action_bar.set_sensitive(False)
|
||||||
else:
|
else:
|
||||||
@@ -2031,8 +2046,7 @@ class AlbumWindow(FocusFrame):
|
|||||||
self._sort_settings()
|
self._sort_settings()
|
||||||
|
|
||||||
# iconview
|
# iconview
|
||||||
self._iconview=Gtk.IconView(model=self._store, item_width=0, pixbuf_column=0, markup_column=1)
|
self._iconview=Gtk.IconView(model=self._store, item_width=0, pixbuf_column=0, markup_column=1, tooltip_column=3)
|
||||||
self._tooltip_settings()
|
|
||||||
|
|
||||||
# scroll
|
# scroll
|
||||||
scroll=Gtk.ScrolledWindow()
|
scroll=Gtk.ScrolledWindow()
|
||||||
@@ -2041,6 +2055,9 @@ class AlbumWindow(FocusFrame):
|
|||||||
self._scroll_vadj=scroll.get_vadjustment()
|
self._scroll_vadj=scroll.get_vadjustment()
|
||||||
self._scroll_hadj=scroll.get_hadjustment()
|
self._scroll_hadj=scroll.get_hadjustment()
|
||||||
|
|
||||||
|
# progress bar
|
||||||
|
self._progress_bar=Gtk.ProgressBar(no_show_all=True)
|
||||||
|
|
||||||
# connect
|
# connect
|
||||||
self._iconview.connect("item-activated", self._on_item_activated)
|
self._iconview.connect("item-activated", self._on_item_activated)
|
||||||
self._iconview.connect("button-press-event", self._on_button_press_event)
|
self._iconview.connect("button-press-event", self._on_button_press_event)
|
||||||
@@ -2049,14 +2066,17 @@ class AlbumWindow(FocusFrame):
|
|||||||
self._client.emitter.connect("update", self._clear)
|
self._client.emitter.connect("update", self._clear)
|
||||||
self._client.emitter.connect("disconnected", self._on_disconnected)
|
self._client.emitter.connect("disconnected", self._on_disconnected)
|
||||||
self._client.emitter.connect("reconnected", self._on_reconnected)
|
self._client.emitter.connect("reconnected", self._on_reconnected)
|
||||||
self._settings.connect("changed::show-album-view-tooltips", self._tooltip_settings)
|
|
||||||
self._settings.connect("changed::sort-albums-by-year", self._sort_settings)
|
self._settings.connect("changed::sort-albums-by-year", self._sort_settings)
|
||||||
self._settings.connect("changed::album-cover", self._on_cover_size_changed)
|
self._settings.connect("changed::album-cover", self._on_cover_size_changed)
|
||||||
self._settings.connect("changed::use-album-artist", self._clear)
|
self._settings.connect("changed::use-album-artist", self._clear)
|
||||||
self._artist_window.connect("artists_changed", self._refresh)
|
self._artist_window.connect("artists_changed", self._refresh)
|
||||||
|
|
||||||
|
# packing
|
||||||
self.set_widget(self._iconview)
|
self.set_widget(self._iconview)
|
||||||
self.add(scroll)
|
box=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||||
|
box.pack_start(scroll, True, True, 0)
|
||||||
|
box.pack_start(self._progress_bar, False, False, 0)
|
||||||
|
self.add(box)
|
||||||
|
|
||||||
def _workaround_clear(self):
|
def _workaround_clear(self):
|
||||||
self._store.clear()
|
self._store.clear()
|
||||||
@@ -2090,12 +2110,6 @@ class AlbumWindow(FocusFrame):
|
|||||||
elif not self.scroll_to_current_album in self._pending:
|
elif not self.scroll_to_current_album in self._pending:
|
||||||
self._pending.append(self.scroll_to_current_album)
|
self._pending.append(self.scroll_to_current_album)
|
||||||
|
|
||||||
def _tooltip_settings(self, *args):
|
|
||||||
if self._settings.get_boolean("show-album-view-tooltips"):
|
|
||||||
self._iconview.set_tooltip_column(3)
|
|
||||||
else:
|
|
||||||
self._iconview.set_tooltip_column(-1)
|
|
||||||
|
|
||||||
def _sort_settings(self, *args):
|
def _sort_settings(self, *args):
|
||||||
if self._settings.get_boolean("sort-albums-by-year"):
|
if self._settings.get_boolean("sort-albums-by-year"):
|
||||||
self._store.set_sort_column_id(5, Gtk.SortType.ASCENDING)
|
self._store.set_sort_column_id(5, Gtk.SortType.ASCENDING)
|
||||||
@@ -2110,6 +2124,7 @@ class AlbumWindow(FocusFrame):
|
|||||||
if self._done:
|
if self._done:
|
||||||
self._done=False
|
self._done=False
|
||||||
self._settings.set_property("cursor-watch", True)
|
self._settings.set_property("cursor-watch", True)
|
||||||
|
self._progress_bar.show()
|
||||||
GLib.idle_add(self._store.clear)
|
GLib.idle_add(self._store.clear)
|
||||||
self._iconview.set_model(None)
|
self._iconview.set_model(None)
|
||||||
try: # self._artist_window can still be empty (e.g. when client is not connected and cover size gets changed)
|
try: # self._artist_window can still be empty (e.g. when client is not connected and cover size gets changed)
|
||||||
@@ -2125,12 +2140,14 @@ class AlbumWindow(FocusFrame):
|
|||||||
# prepare albmus list (run all mpd related commands)
|
# prepare albmus list (run all mpd related commands)
|
||||||
albums=[]
|
albums=[]
|
||||||
artist_type=self._settings.get_artist_type()
|
artist_type=self._settings.get_artist_type()
|
||||||
for artist in artists:
|
for i, artist in enumerate(artists):
|
||||||
try: # client cloud meanwhile disconnect
|
try: # client cloud meanwhile disconnect
|
||||||
if self.stop_flag:
|
if self.stop_flag:
|
||||||
GLib.idle_add(self._done_callback)
|
GLib.idle_add(self._done_callback)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
if i > 0: # more than one artist to show (all artists)
|
||||||
|
GLib.idle_add(self._progress_bar.pulse)
|
||||||
if genre is None:
|
if genre is None:
|
||||||
album_candidates=self._client.wrapped_call("comp_list", "album", artist_type, artist)
|
album_candidates=self._client.wrapped_call("comp_list", "album", artist_type, artist)
|
||||||
else:
|
else:
|
||||||
@@ -2154,17 +2171,16 @@ class AlbumWindow(FocusFrame):
|
|||||||
for i, album in enumerate(albums):
|
for i, album in enumerate(albums):
|
||||||
# tooltip
|
# tooltip
|
||||||
length_human_readable=ClientHelper.calc_display_length(album["songs"])
|
length_human_readable=ClientHelper.calc_display_length(album["songs"])
|
||||||
|
titles=len(album["songs"])
|
||||||
discs=album["songs"][-1].get("disc", 1)
|
discs=album["songs"][-1].get("disc", 1)
|
||||||
if type(discs) == list:
|
if type(discs) == list:
|
||||||
discs=int(discs[0])
|
discs=int(discs[0])
|
||||||
else:
|
else:
|
||||||
discs=int(discs)
|
discs=int(discs)
|
||||||
|
tooltip=ngettext("{titles} title", "{titles} titles", titles).format(titles=titles)
|
||||||
if discs > 1:
|
if discs > 1:
|
||||||
tooltip=_("{titles} titles on {discs} discs ({length})").format(
|
tooltip=" ".join((tooltip, _("on {discs} discs").format(discs=discs)))
|
||||||
titles=len(album["songs"]), discs=discs, length=length_human_readable)
|
tooltip=" ".join((tooltip, "({length})".format(length=length_human_readable)))
|
||||||
else:
|
|
||||||
tooltip=_("{titles} titles ({length})").format(
|
|
||||||
titles=len(album["songs"]), length=length_human_readable)
|
|
||||||
# album label
|
# album label
|
||||||
if album["year"] == "":
|
if album["year"] == "":
|
||||||
display_label="<b>{}</b>".format(album["album"])
|
display_label="<b>{}</b>".format(album["album"])
|
||||||
@@ -2184,10 +2200,12 @@ class AlbumWindow(FocusFrame):
|
|||||||
|
|
||||||
def load_covers():
|
def load_covers():
|
||||||
size=self._settings.get_int("album-cover")
|
size=self._settings.get_int("album-cover")
|
||||||
for album in albums:
|
total_albums=len(albums)
|
||||||
|
for i, album in enumerate(albums):
|
||||||
if self.stop_flag:
|
if self.stop_flag:
|
||||||
break
|
break
|
||||||
album["cover"]=Cover(self._settings, album["songs"][0]).get_pixbuf(size)
|
album["cover"]=Cover(self._settings, album["songs"][0]).get_pixbuf(size)
|
||||||
|
GLib.idle_add(self._progress_bar.set_fraction, (i+1)/total_albums)
|
||||||
if self.stop_flag:
|
if self.stop_flag:
|
||||||
GLib.idle_add(self._done_callback)
|
GLib.idle_add(self._done_callback)
|
||||||
else:
|
else:
|
||||||
@@ -2207,6 +2225,8 @@ class AlbumWindow(FocusFrame):
|
|||||||
|
|
||||||
def _done_callback(self, *args):
|
def _done_callback(self, *args):
|
||||||
self._settings.set_property("cursor-watch", False)
|
self._settings.set_property("cursor-watch", False)
|
||||||
|
self._progress_bar.hide()
|
||||||
|
self._progress_bar.set_fraction(0)
|
||||||
self.stop_flag=False
|
self.stop_flag=False
|
||||||
self._done=True
|
self._done=True
|
||||||
pending=self._pending
|
pending=self._pending
|
||||||
@@ -2237,7 +2257,7 @@ class AlbumWindow(FocusFrame):
|
|||||||
artist=self._store[path][6]
|
artist=self._store[path][6]
|
||||||
v=self._scroll_vadj.get_value()
|
v=self._scroll_vadj.get_value()
|
||||||
h=self._scroll_hadj.get_value()
|
h=self._scroll_hadj.get_value()
|
||||||
pop=AlbumPopover(self._client, self._settings, album, artist, year, widget, int(event.x-h), int(event.y-v))
|
pop=AlbumPopover(self._client, self._settings, album, artist, year, widget, event.x-h, event.y-v)
|
||||||
pop.popup()
|
pop.popup()
|
||||||
self._button_event=(None, None)
|
self._button_event=(None, None)
|
||||||
|
|
||||||
@@ -2282,7 +2302,7 @@ class Browser(Gtk.Paned):
|
|||||||
__gsignals__={"search_focus_changed": (GObject.SignalFlags.RUN_FIRST, None, (bool,))}
|
__gsignals__={"search_focus_changed": (GObject.SignalFlags.RUN_FIRST, None, (bool,))}
|
||||||
|
|
||||||
def __init__(self, client, settings):
|
def __init__(self, client, settings):
|
||||||
super().__init__(orientation=Gtk.Orientation.HORIZONTAL) # paned1
|
super().__init__(orientation=Gtk.Orientation.HORIZONTAL)
|
||||||
|
|
||||||
# adding vars
|
# adding vars
|
||||||
self._client=client
|
self._client=client
|
||||||
@@ -2322,7 +2342,6 @@ class Browser(Gtk.Paned):
|
|||||||
self._stack=Gtk.Stack(transition_type=Gtk.StackTransitionType.CROSSFADE)
|
self._stack=Gtk.Stack(transition_type=Gtk.StackTransitionType.CROSSFADE)
|
||||||
self._stack.add_named(self._album_window, "albums")
|
self._stack.add_named(self._album_window, "albums")
|
||||||
self._stack.add_named(self._search_window, "search")
|
self._stack.add_named(self._search_window, "search")
|
||||||
|
|
||||||
hbox=Gtk.Box(spacing=6, border_width=6)
|
hbox=Gtk.Box(spacing=6, border_width=6)
|
||||||
if self._use_csd:
|
if self._use_csd:
|
||||||
hbox.pack_start(self._genre_select, True, True, 0)
|
hbox.pack_start(self._genre_select, True, True, 0)
|
||||||
@@ -2337,11 +2356,6 @@ class Browser(Gtk.Paned):
|
|||||||
self.pack1(box1, False, False)
|
self.pack1(box1, False, False)
|
||||||
self.pack2(self._stack, True, False)
|
self.pack2(self._stack, True, False)
|
||||||
|
|
||||||
self.set_position(self._settings.get_int("paned1"))
|
|
||||||
|
|
||||||
def save_settings(self):
|
|
||||||
self._settings.set_int("paned1", self.get_position())
|
|
||||||
|
|
||||||
def _back_to_current_album(self, *args):
|
def _back_to_current_album(self, *args):
|
||||||
def callback():
|
def callback():
|
||||||
try:
|
try:
|
||||||
@@ -2393,10 +2407,15 @@ class Browser(Gtk.Paned):
|
|||||||
self.search_button.set_active(False)
|
self.search_button.set_active(False)
|
||||||
|
|
||||||
def _on_mini_player(self, obj, typestring):
|
def _on_mini_player(self, obj, typestring):
|
||||||
visibility=not(obj.get_property("mini-player"))
|
state=obj.get_property("mini-player")
|
||||||
self.set_property("visible", visibility)
|
self.set_property("no-show-all", state)
|
||||||
self.back_to_current_album_button.set_property("visible", visibility)
|
self.back_to_current_album_button.set_property("no-show-all", state)
|
||||||
self.search_button.set_property("visible", visibility)
|
self.search_button.set_property("no-show-all", state)
|
||||||
|
self.set_property("visible", not(state))
|
||||||
|
self.back_to_current_album_button.set_property("visible", not(state))
|
||||||
|
self.search_button.set_property("visible", not(state))
|
||||||
|
if not state:
|
||||||
|
self.show_all()
|
||||||
|
|
||||||
######################
|
######################
|
||||||
# playlist and cover #
|
# playlist and cover #
|
||||||
@@ -2512,7 +2531,7 @@ class AudioType(Gtk.Label):
|
|||||||
|
|
||||||
# adding vars
|
# adding vars
|
||||||
self._client=client
|
self._client=client
|
||||||
self._init_vars()
|
self.freq, self.res, self.chan, self.brate, self.file_type=(0, 0, 0, 0, "")
|
||||||
|
|
||||||
# connect
|
# connect
|
||||||
self._client.emitter.connect("audio", self._on_audio)
|
self._client.emitter.connect("audio", self._on_audio)
|
||||||
@@ -2523,18 +2542,15 @@ class AudioType(Gtk.Label):
|
|||||||
|
|
||||||
def clear(self, *args):
|
def clear(self, *args):
|
||||||
self.set_text("")
|
self.set_text("")
|
||||||
self._init_vars()
|
self.freq, self.res, self.chan, self.brate, self.file_type=(0, 0, 0, 0, "")
|
||||||
|
|
||||||
def _init_vars(self):
|
|
||||||
self.freq=0
|
|
||||||
self.res=0
|
|
||||||
self.chan=0
|
|
||||||
self.brate=0
|
|
||||||
self.file_type=""
|
|
||||||
|
|
||||||
def _refresh(self, *args):
|
def _refresh(self, *args):
|
||||||
string=_("{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} channels, {file_type}").format(
|
try:
|
||||||
bitrate=self.brate, frequency=self.freq, resolution=self.res, channels=self.chan, file_type=self.file_type)
|
int_chan=int(self.chan)
|
||||||
|
except:
|
||||||
|
int_chan=0
|
||||||
|
channels=ngettext("{channels} channel", "{channels} channels", int_chan).format(channels=self.chan)
|
||||||
|
string="{} kb/s, {} kHz, {} bit, {}, {}".format(self.brate, self.freq, self.res, channels, self.file_type)
|
||||||
self.set_text(string)
|
self.set_text(string)
|
||||||
|
|
||||||
def _on_audio(self, emitter, freq, res, chan):
|
def _on_audio(self, emitter, freq, res, chan):
|
||||||
@@ -2571,31 +2587,29 @@ class CoverEventBox(Gtk.EventBox):
|
|||||||
|
|
||||||
# connect
|
# connect
|
||||||
self._button_press_event=self.connect("button-press-event", self._on_button_press_event)
|
self._button_press_event=self.connect("button-press-event", self._on_button_press_event)
|
||||||
self._settings.connect("notify::mini-player", self._on_mini_player)
|
|
||||||
|
|
||||||
def _on_button_press_event(self, widget, event):
|
def _on_button_press_event(self, widget, event):
|
||||||
if self._client.connected():
|
if self._settings.get_property("mini-player"):
|
||||||
song=ClientHelper.song_to_first_str_dict(self._client.wrapped_call("currentsong"))
|
if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS:
|
||||||
if song != {}:
|
window=self.get_toplevel()
|
||||||
try:
|
window.begin_move_drag(1, event.x_root, event.y_root, Gdk.CURRENT_TIME)
|
||||||
artist=song[self._settings.get_artist_type()]
|
|
||||||
except:
|
|
||||||
artist=song.get("artist", "")
|
|
||||||
album=song.get("album", "")
|
|
||||||
album_year=song.get("date", "")
|
|
||||||
if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS:
|
|
||||||
self._client.wrapped_call("album_to_playlist", album, artist, album_year)
|
|
||||||
elif event.button == 2 and event.type == Gdk.EventType.BUTTON_PRESS:
|
|
||||||
self._client.wrapped_call("album_to_playlist", album, artist, album_year, "append")
|
|
||||||
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_PRESS:
|
|
||||||
pop=AlbumPopover(self._client, self._settings, album, artist, album_year, widget, int(event.x), int(event.y))
|
|
||||||
pop.popup()
|
|
||||||
|
|
||||||
def _on_mini_player(self, obj, typestring):
|
|
||||||
if obj.get_property("mini-player"):
|
|
||||||
self.handler_block(self._button_press_event)
|
|
||||||
else:
|
else:
|
||||||
self.handler_unblock(self._button_press_event)
|
if self._client.connected():
|
||||||
|
song=ClientHelper.song_to_first_str_dict(self._client.wrapped_call("currentsong"))
|
||||||
|
if song != {}:
|
||||||
|
try:
|
||||||
|
artist=song[self._settings.get_artist_type()]
|
||||||
|
except:
|
||||||
|
artist=song.get("artist", "")
|
||||||
|
album=song.get("album", "")
|
||||||
|
album_year=song.get("date", "")
|
||||||
|
if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS:
|
||||||
|
self._client.wrapped_call("album_to_playlist", album, artist, album_year)
|
||||||
|
elif event.button == 2 and event.type == Gdk.EventType.BUTTON_PRESS:
|
||||||
|
self._client.wrapped_call("album_to_playlist", album, artist, album_year, "append")
|
||||||
|
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_PRESS:
|
||||||
|
pop=AlbumPopover(self._client, self._settings, album, artist, album_year, widget, event.x, event.y)
|
||||||
|
pop.popup()
|
||||||
|
|
||||||
class MainCover(Gtk.Frame):
|
class MainCover(Gtk.Frame):
|
||||||
def __init__(self, client, settings):
|
def __init__(self, client, settings):
|
||||||
@@ -2698,11 +2712,11 @@ class PlaylistWindow(Gtk.Box):
|
|||||||
Gtk.TreeViewColumn(_("Year"), renderer_text, text=6, weight=9),
|
Gtk.TreeViewColumn(_("Year"), renderer_text, text=6, weight=9),
|
||||||
Gtk.TreeViewColumn(_("Genre"), renderer_text, text=7, weight=9)
|
Gtk.TreeViewColumn(_("Genre"), renderer_text, text=7, weight=9)
|
||||||
)
|
)
|
||||||
|
for i, column in enumerate(self._columns):
|
||||||
for column in self._columns:
|
|
||||||
column.set_property("resizable", True)
|
column.set_property("resizable", True)
|
||||||
|
column.set_property("sizing", Gtk.TreeViewColumnSizing.FIXED)
|
||||||
column.set_min_width(30)
|
column.set_min_width(30)
|
||||||
|
column.connect("notify::fixed-width", self._on_column_width, i)
|
||||||
self._load_settings()
|
self._load_settings()
|
||||||
|
|
||||||
# scroll
|
# scroll
|
||||||
@@ -2758,13 +2772,8 @@ class PlaylistWindow(Gtk.Box):
|
|||||||
self.pack_start(self._frame, True, True, 0)
|
self.pack_start(self._frame, True, True, 0)
|
||||||
self.pack_end(action_bar, False, False, 0)
|
self.pack_end(action_bar, False, False, 0)
|
||||||
|
|
||||||
def save_settings(self): # only saves the column sizes
|
def _on_column_width(self, obj, typestring, pos):
|
||||||
columns=self._treeview.get_columns()
|
self._settings.array_modify("ai", "column-sizes", pos, obj.get_property("fixed-width"))
|
||||||
permutation=self._settings.get_value("column-permutation").unpack()
|
|
||||||
sizes=[0] * len(permutation)
|
|
||||||
for i in range(len(permutation)):
|
|
||||||
sizes[permutation[i]]=columns[i].get_width()
|
|
||||||
self._settings.set_value("column-sizes", GLib.Variant("ai", sizes))
|
|
||||||
|
|
||||||
def _load_settings(self, *args):
|
def _load_settings(self, *args):
|
||||||
columns=self._treeview.get_columns()
|
columns=self._treeview.get_columns()
|
||||||
@@ -2793,7 +2802,8 @@ class PlaylistWindow(Gtk.Box):
|
|||||||
self._playlist_info.set_text("")
|
self._playlist_info.set_text("")
|
||||||
else:
|
else:
|
||||||
length_human_readable=ClientHelper.calc_display_length(songs)
|
length_human_readable=ClientHelper.calc_display_length(songs)
|
||||||
self._playlist_info.set_text(_("{titles} titles ({length})").format(titles=len(songs), length=length_human_readable))
|
titles=ngettext("{titles} title", "{titles} titles", len(songs)).format(titles=len(songs))
|
||||||
|
self._playlist_info.set_text(" ".join((titles, "({length})".format(length=length_human_readable))))
|
||||||
|
|
||||||
def _scroll_to_selected_title(self, *args):
|
def _scroll_to_selected_title(self, *args):
|
||||||
treeview, treeiter=self._selection.get_selected()
|
treeview, treeiter=self._selection.get_selected()
|
||||||
@@ -2827,8 +2837,7 @@ class PlaylistWindow(Gtk.Box):
|
|||||||
if event.button == 2 and event.type == Gdk.EventType.BUTTON_RELEASE:
|
if event.button == 2 and event.type == Gdk.EventType.BUTTON_RELEASE:
|
||||||
self._store.remove(self._store.get_iter(path))
|
self._store.remove(self._store.get_iter(path))
|
||||||
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE:
|
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_RELEASE:
|
||||||
song=self._client.wrapped_call("get_metadata", self._store[path][8])
|
pop=SongPopover(self._store[path][8], self._client, widget, int(event.x), int(event.y))
|
||||||
pop=SongPopover(song, widget, int(event.x), int(event.y))
|
|
||||||
pop.popup()
|
pop.popup()
|
||||||
self._button_event=(None, None)
|
self._button_event=(None, None)
|
||||||
|
|
||||||
@@ -2845,8 +2854,7 @@ class PlaylistWindow(Gtk.Box):
|
|||||||
if treeiter is not None:
|
if treeiter is not None:
|
||||||
path=self._store.get_path(treeiter)
|
path=self._store.get_path(treeiter)
|
||||||
cell=self._treeview.get_cell_area(path, None)
|
cell=self._treeview.get_cell_area(path, None)
|
||||||
file_name=self._store[path][8]
|
pop=SongPopover(self._store[path][8], self._client, widget, int(cell.x), int(cell.y))
|
||||||
pop=SongPopover(self._client.wrapped_call("get_metadata", file_name), widget, int(cell.x), int(cell.y))
|
|
||||||
pop.popup()
|
pop.popup()
|
||||||
|
|
||||||
def _on_row_deleted(self, model, path): # sync treeview to mpd
|
def _on_row_deleted(self, model, path): # sync treeview to mpd
|
||||||
@@ -2946,8 +2954,12 @@ class PlaylistWindow(Gtk.Box):
|
|||||||
self._treeview.set_sensitive(True)
|
self._treeview.set_sensitive(True)
|
||||||
|
|
||||||
def _on_mini_player(self, obj, typestring):
|
def _on_mini_player(self, obj, typestring):
|
||||||
visibility=not(obj.get_property("mini-player"))
|
if obj.get_property("mini-player"):
|
||||||
self.set_property("visible", visibility)
|
self.set_property("no-show-all", True)
|
||||||
|
self.set_property("visible", False)
|
||||||
|
else:
|
||||||
|
self.set_property("no-show-all", False)
|
||||||
|
self.show_all()
|
||||||
|
|
||||||
class CoverPlaylistWindow(Gtk.Paned):
|
class CoverPlaylistWindow(Gtk.Paned):
|
||||||
def __init__(self, client, settings):
|
def __init__(self, client, settings):
|
||||||
@@ -3003,14 +3015,8 @@ class CoverPlaylistWindow(Gtk.Paned):
|
|||||||
overlay.add_overlay(self._lyrics_button_revealer)
|
overlay.add_overlay(self._lyrics_button_revealer)
|
||||||
self.pack1(overlay, False, False)
|
self.pack1(overlay, False, False)
|
||||||
self.pack2(self._playlist_window, True, False)
|
self.pack2(self._playlist_window, True, False)
|
||||||
|
|
||||||
self.set_position(self._settings.get_int("paned0"))
|
|
||||||
self._on_settings_changed() # hide lyrics button
|
self._on_settings_changed() # hide lyrics button
|
||||||
|
|
||||||
def save_settings(self):
|
|
||||||
self._settings.set_int("paned0", self.get_position())
|
|
||||||
self._playlist_window.save_settings()
|
|
||||||
|
|
||||||
def _on_reconnected(self, *args):
|
def _on_reconnected(self, *args):
|
||||||
self.lyrics_button.set_sensitive(True)
|
self.lyrics_button.set_sensitive(True)
|
||||||
|
|
||||||
@@ -3082,8 +3088,10 @@ class PlaybackControl(Gtk.ButtonBox):
|
|||||||
song=int(self._client.wrapped_call("status")["song"])
|
song=int(self._client.wrapped_call("status")["song"])
|
||||||
elapsed=ClientHelper.calc_display_length(songs[:song])
|
elapsed=ClientHelper.calc_display_length(songs[:song])
|
||||||
rest=ClientHelper.calc_display_length(songs[song+1:])
|
rest=ClientHelper.calc_display_length(songs[song+1:])
|
||||||
self._prev_button.set_tooltip_text(_("{titles} titles ({length})").format(titles=song, length=elapsed))
|
elapsed_titles=ngettext("{titles} title", "{titles} titles", song).format(titles=song)
|
||||||
self._next_button.set_tooltip_text(_("{titles} titles ({length})").format(titles=(len(songs)-(song+1)), length=rest))
|
rest_titles=ngettext("{titles} title", "{titles} titles", (len(songs)-(song+1))).format(titles=(len(songs)-(song+1)))
|
||||||
|
self._prev_button.set_tooltip_text(" ".join((elapsed_titles, "({length})".format(length=elapsed))))
|
||||||
|
self._next_button.set_tooltip_text(" ".join((rest_titles, "({length})".format(length=rest))))
|
||||||
except:
|
except:
|
||||||
self._prev_button.set_tooltip_text("")
|
self._prev_button.set_tooltip_text("")
|
||||||
self._next_button.set_tooltip_text("")
|
self._next_button.set_tooltip_text("")
|
||||||
@@ -3268,7 +3276,6 @@ class OutputPopover(Gtk.Popover):
|
|||||||
|
|
||||||
# packing
|
# packing
|
||||||
self.add(box)
|
self.add(box)
|
||||||
|
|
||||||
box.show_all()
|
box.show_all()
|
||||||
|
|
||||||
def _on_button_toggled(self, button, out_id):
|
def _on_button_toggled(self, button, out_id):
|
||||||
@@ -3287,15 +3294,16 @@ class PlaybackOptions(Gtk.Box):
|
|||||||
|
|
||||||
# widgets
|
# widgets
|
||||||
icons={}
|
icons={}
|
||||||
for icon_name in ("media-playlist-shuffle-symbolic","media-playlist-repeat-symbolic","zoom-original-symbolic","edit-cut-symbolic"):
|
for icon_name in ("media-playlist-shuffle-symbolic","media-playlist-repeat-symbolic",
|
||||||
|
"org.mpdevil.mpdevil-single-symbolic","org.mpdevil.mpdevil-consume-symbolic"):
|
||||||
icons[icon_name]=AutoSizedIcon(icon_name, "icon-size", self._settings)
|
icons[icon_name]=AutoSizedIcon(icon_name, "icon-size", self._settings)
|
||||||
self._random_button=Gtk.ToggleButton(image=icons["media-playlist-shuffle-symbolic"], tooltip_text=_("Random mode"))
|
self._random_button=Gtk.ToggleButton(image=icons["media-playlist-shuffle-symbolic"], tooltip_text=_("Random mode"))
|
||||||
self._random_button.set_can_focus(False)
|
self._random_button.set_can_focus(False)
|
||||||
self._repeat_button=Gtk.ToggleButton(image=icons["media-playlist-repeat-symbolic"], tooltip_text=_("Repeat mode"))
|
self._repeat_button=Gtk.ToggleButton(image=icons["media-playlist-repeat-symbolic"], tooltip_text=_("Repeat mode"))
|
||||||
self._repeat_button.set_can_focus(False)
|
self._repeat_button.set_can_focus(False)
|
||||||
self._single_button=Gtk.ToggleButton(image=icons["zoom-original-symbolic"], tooltip_text=_("Single mode"))
|
self._single_button=Gtk.ToggleButton(image=icons["org.mpdevil.mpdevil-single-symbolic"], tooltip_text=_("Single mode"))
|
||||||
self._single_button.set_can_focus(False)
|
self._single_button.set_can_focus(False)
|
||||||
self._consume_button=Gtk.ToggleButton(image=icons["edit-cut-symbolic"], tooltip_text=_("Consume mode"))
|
self._consume_button=Gtk.ToggleButton(image=icons["org.mpdevil.mpdevil-consume-symbolic"], tooltip_text=_("Consume mode"))
|
||||||
self._consume_button.set_can_focus(False)
|
self._consume_button.set_can_focus(False)
|
||||||
self._volume_button=Gtk.VolumeButton(use_symbolic=True, size=self._settings.get_gtk_icon_size("icon-size"))
|
self._volume_button=Gtk.VolumeButton(use_symbolic=True, size=self._settings.get_gtk_icon_size("icon-size"))
|
||||||
self._volume_button.set_can_focus(False)
|
self._volume_button.set_can_focus(False)
|
||||||
@@ -3411,8 +3419,12 @@ class PlaybackOptions(Gtk.Box):
|
|||||||
self._volume_refresh(None, -1)
|
self._volume_refresh(None, -1)
|
||||||
|
|
||||||
def _on_mini_player(self, obj, typestring):
|
def _on_mini_player(self, obj, typestring):
|
||||||
visibility=not(obj.get_property("mini-player"))
|
if obj.get_property("mini-player"):
|
||||||
self._button_box.set_property("visible", visibility)
|
self._button_box.set_property("no-show-all", True)
|
||||||
|
self._button_box.set_property("visible", False)
|
||||||
|
else:
|
||||||
|
self._button_box.set_property("no-show-all", False)
|
||||||
|
self._button_box.show_all()
|
||||||
|
|
||||||
def _on_icon_size_changed(self, *args):
|
def _on_icon_size_changed(self, *args):
|
||||||
self._volume_button.set_property("size", self._settings.get_gtk_icon_size("icon-size"))
|
self._volume_button.set_property("size", self._settings.get_gtk_icon_size("icon-size"))
|
||||||
@@ -3613,15 +3625,14 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
self._client=client
|
self._client=client
|
||||||
self._settings=settings
|
self._settings=settings
|
||||||
self._use_csd=self._settings.get_boolean("use-csd")
|
self._use_csd=self._settings.get_boolean("use-csd")
|
||||||
self._tmp_saved_size=None # needed to restore size after leaving mini player mode
|
self._size=None # needed for window size saving
|
||||||
self._tmp_saved_maximized=None # needed to restore maximize state after leaving mini player mode
|
|
||||||
|
|
||||||
# MPRIS
|
# MPRIS
|
||||||
dbus_service=MPRISInterface(self, self._client, self._settings)
|
dbus_service=MPRISInterface(self, self._client, self._settings)
|
||||||
|
|
||||||
# actions
|
# actions
|
||||||
simple_actions_data=(
|
simple_actions_data=(
|
||||||
"save","settings","stats","help","menu",
|
"settings","stats","help","menu",
|
||||||
"toggle-lyrics","back-to-current-album","toggle-search",
|
"toggle-lyrics","back-to-current-album","toggle-search",
|
||||||
"profile-next","profile-prev"
|
"profile-next","profile-prev"
|
||||||
)
|
)
|
||||||
@@ -3643,6 +3654,7 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
else:
|
else:
|
||||||
icons={"open-menu-symbolic": AutoSizedIcon("open-menu-symbolic", "icon-size", self._settings)}
|
icons={"open-menu-symbolic": AutoSizedIcon("open-menu-symbolic", "icon-size", self._settings)}
|
||||||
|
|
||||||
|
self._paned=Gtk.Paned()
|
||||||
self._browser=Browser(self._client, self._settings)
|
self._browser=Browser(self._client, self._settings)
|
||||||
self._cover_playlist_window=CoverPlaylistWindow(self._client, self._settings)
|
self._cover_playlist_window=CoverPlaylistWindow(self._client, self._settings)
|
||||||
playback_control=PlaybackControl(self._client, self._settings)
|
playback_control=PlaybackControl(self._client, self._settings)
|
||||||
@@ -3665,7 +3677,6 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
menu=Gio.Menu()
|
menu=Gio.Menu()
|
||||||
menu.append_submenu(_("Profiles"), self._profiles_submenu)
|
menu.append_submenu(_("Profiles"), self._profiles_submenu)
|
||||||
menu.append(_("Mini player"), "win.mini-player")
|
menu.append(_("Mini player"), "win.mini-player")
|
||||||
menu.append(_("Save window layout"), "win.save")
|
|
||||||
menu.append_section(None, mpd_subsection)
|
menu.append_section(None, mpd_subsection)
|
||||||
menu.append_section(None, subsection)
|
menu.append_section(None, subsection)
|
||||||
|
|
||||||
@@ -3691,20 +3702,22 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
self._client.emitter.connect("disconnected", self._on_disconnected)
|
self._client.emitter.connect("disconnected", self._on_disconnected)
|
||||||
self._client.emitter.connect("reconnected", self._on_reconnected)
|
self._client.emitter.connect("reconnected", self._on_reconnected)
|
||||||
self._browser.connect("search_focus_changed", self._on_search_focus_changed)
|
self._browser.connect("search_focus_changed", self._on_search_focus_changed)
|
||||||
|
# auto save window state and size
|
||||||
|
self.connect("size-allocate", self._on_size_allocate)
|
||||||
|
self._settings.bind("maximize", self, "is-maximized", Gio.SettingsBindFlags.SET)
|
||||||
|
# save and restore mini player
|
||||||
|
self._settings.bind("mini-player", self._settings, "mini-player", Gio.SettingsBindFlags.DEFAULT)
|
||||||
|
|
||||||
# packing
|
# packing
|
||||||
self._paned2=Gtk.Paned()
|
|
||||||
self._paned2.set_position(self._settings.get_int("paned2"))
|
|
||||||
self._on_playlist_pos_changed() # set orientation
|
self._on_playlist_pos_changed() # set orientation
|
||||||
self._paned2.pack1(self._browser, True, False)
|
self._paned.pack1(self._browser, True, False)
|
||||||
self._paned2.pack2(self._cover_playlist_window, False, False)
|
self._paned.pack2(self._cover_playlist_window, False, False)
|
||||||
vbox=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
vbox=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||||
vbox.pack_start(self._paned2, True, True, 0)
|
vbox.pack_start(self._paned, True, True, 0)
|
||||||
vbox.pack_start(action_bar, False, False, 0)
|
vbox.pack_start(action_bar, False, False, 0)
|
||||||
overlay=Gtk.Overlay()
|
overlay=Gtk.Overlay()
|
||||||
overlay.add(vbox)
|
overlay.add(vbox)
|
||||||
overlay.add_overlay(connection_notify)
|
overlay.add_overlay(connection_notify)
|
||||||
|
|
||||||
if self._use_csd:
|
if self._use_csd:
|
||||||
self._header_bar=Gtk.HeaderBar()
|
self._header_bar=Gtk.HeaderBar()
|
||||||
self._header_bar.set_show_close_button(True)
|
self._header_bar.set_show_close_button(True)
|
||||||
@@ -3713,11 +3726,8 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
self._header_bar.pack_end(self._menu_button)
|
self._header_bar.pack_end(self._menu_button)
|
||||||
self._header_bar.pack_end(self._browser.search_button)
|
self._header_bar.pack_end(self._browser.search_button)
|
||||||
else:
|
else:
|
||||||
action_bar.pack_start(Gtk.Separator.new(orientation=Gtk.Orientation.VERTICAL))
|
|
||||||
action_bar.pack_start(self._menu_button)
|
action_bar.pack_start(self._menu_button)
|
||||||
|
|
||||||
self.add(overlay)
|
self.add(overlay)
|
||||||
|
|
||||||
self._client.emitter.emit("disconnected") # bring player in defined state
|
self._client.emitter.emit("disconnected") # bring player in defined state
|
||||||
# indicate connection process in window title
|
# indicate connection process in window title
|
||||||
if self._use_csd:
|
if self._use_csd:
|
||||||
@@ -3725,6 +3735,19 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
else:
|
else:
|
||||||
self.set_title("mpdevil "+_("connecting…"))
|
self.set_title("mpdevil "+_("connecting…"))
|
||||||
self.show_all()
|
self.show_all()
|
||||||
|
while Gtk.events_pending(): # ensure window is visible
|
||||||
|
Gtk.main_iteration_do(True)
|
||||||
|
# restore paned settings when window is visible (fixes a bug when window is maximized)
|
||||||
|
self._cover_playlist_window.set_position(self._settings.get_int("paned0"))
|
||||||
|
self._browser.set_position(self._settings.get_int("paned1"))
|
||||||
|
self._paned.set_position(self._settings.get_int("paned2"))
|
||||||
|
|
||||||
|
# auto save paned positions
|
||||||
|
self._cover_playlist_window.connect("notify::position", self._on_paned_position, "paned0")
|
||||||
|
self._browser.connect("notify::position", self._on_paned_position, "paned1")
|
||||||
|
self._paned.connect("notify::position", self._on_paned_position, "paned2")
|
||||||
|
|
||||||
|
# start client
|
||||||
def callback(*args):
|
def callback(*args):
|
||||||
self._client.start() # connect client
|
self._client.start() # connect client
|
||||||
return False
|
return False
|
||||||
@@ -3739,15 +3762,6 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
def _on_toggle_search(self, action, param):
|
def _on_toggle_search(self, action, param):
|
||||||
self._browser.search_button.set_active(not(self._browser.search_button.get_active()))
|
self._browser.search_button.set_active(not(self._browser.search_button.get_active()))
|
||||||
|
|
||||||
def _on_save(self, action, param):
|
|
||||||
size=self.get_size()
|
|
||||||
self._settings.set_int("width", size[0])
|
|
||||||
self._settings.set_int("height", size[1])
|
|
||||||
self._settings.set_boolean("maximize", self.is_maximized())
|
|
||||||
self._browser.save_settings()
|
|
||||||
self._cover_playlist_window.save_settings()
|
|
||||||
self._settings.set_int("paned2", self._paned2.get_position())
|
|
||||||
|
|
||||||
def _on_settings(self, action, param):
|
def _on_settings(self, action, param):
|
||||||
settings=SettingsDialog(self, self._client, self._settings)
|
settings=SettingsDialog(self, self._client, self._settings)
|
||||||
settings.run()
|
settings.run()
|
||||||
@@ -3804,34 +3818,37 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
notify.show()
|
notify.show()
|
||||||
|
|
||||||
def _on_reconnected(self, *args):
|
def _on_reconnected(self, *args):
|
||||||
for action in ("save","stats","toggle-lyrics","back-to-current-album","toggle-search"):
|
for action in ("stats","toggle-lyrics","back-to-current-album","toggle-search"):
|
||||||
self.lookup_action(action).set_enabled(True)
|
self.lookup_action(action).set_enabled(True)
|
||||||
|
|
||||||
def _on_disconnected(self, *args):
|
def _on_disconnected(self, *args):
|
||||||
self.set_title("mpdevil")
|
self.set_title("mpdevil")
|
||||||
if self._use_csd:
|
if self._use_csd:
|
||||||
self._header_bar.set_subtitle("")
|
self._header_bar.set_subtitle("")
|
||||||
for action in ("save","stats","toggle-lyrics","back-to-current-album","toggle-search"):
|
for action in ("stats","toggle-lyrics","back-to-current-album","toggle-search"):
|
||||||
self.lookup_action(action).set_enabled(False)
|
self.lookup_action(action).set_enabled(False)
|
||||||
|
|
||||||
def _on_search_focus_changed(self, obj, focus):
|
def _on_search_focus_changed(self, obj, focus):
|
||||||
self._mpd_action_group.lookup_action("toggle-play").set_enabled(not(focus))
|
self._mpd_action_group.lookup_action("toggle-play").set_enabled(not(focus))
|
||||||
|
|
||||||
|
def _on_size_allocate(self, widget, rect):
|
||||||
|
if not self.is_maximized() and not self._settings.get_property("mini-player"):
|
||||||
|
size=self.get_size()
|
||||||
|
if size != self._size: # prevent unneeded write operations
|
||||||
|
self._settings.set_int("width", size[0])
|
||||||
|
self._settings.set_int("height", size[1])
|
||||||
|
self._size=size
|
||||||
|
|
||||||
|
def _on_paned_position(self, obj, typestring, key):
|
||||||
|
self._settings.set_int(key, obj.get_position())
|
||||||
|
|
||||||
def _on_mini_player(self, obj, typestring):
|
def _on_mini_player(self, obj, typestring):
|
||||||
if obj.get_property("mini-player"):
|
if obj.get_property("mini-player"):
|
||||||
self.lookup_action("save").set_enabled(False)
|
if self.is_maximized():
|
||||||
self._tmp_saved_size=self.get_size()
|
|
||||||
self._tmp_saved_miximized=self.is_maximized()
|
|
||||||
if self._tmp_saved_miximized:
|
|
||||||
self.unmaximize()
|
self.unmaximize()
|
||||||
self.resize(1,1)
|
self.resize(1,1)
|
||||||
else:
|
else:
|
||||||
self.lookup_action("save").set_enabled(True)
|
self.resize(self._settings.get_int("width"), self._settings.get_int("height"))
|
||||||
self.resize(self._tmp_saved_size[0], self._tmp_saved_size[1])
|
|
||||||
if self._tmp_saved_miximized:
|
|
||||||
self.maximize()
|
|
||||||
self._tmp_saved_size=None
|
|
||||||
self._tmp_saved_maximized=None
|
|
||||||
|
|
||||||
def _on_cursor_watch(self, obj, typestring):
|
def _on_cursor_watch(self, obj, typestring):
|
||||||
if obj.get_property("cursor-watch"):
|
if obj.get_property("cursor-watch"):
|
||||||
@@ -3843,10 +3860,10 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
def _on_playlist_pos_changed(self, *args):
|
def _on_playlist_pos_changed(self, *args):
|
||||||
if self._settings.get_boolean("playlist-right"):
|
if self._settings.get_boolean("playlist-right"):
|
||||||
self._cover_playlist_window.set_orientation(Gtk.Orientation.VERTICAL)
|
self._cover_playlist_window.set_orientation(Gtk.Orientation.VERTICAL)
|
||||||
self._paned2.set_orientation(Gtk.Orientation.HORIZONTAL)
|
self._paned.set_orientation(Gtk.Orientation.HORIZONTAL)
|
||||||
else:
|
else:
|
||||||
self._cover_playlist_window.set_orientation(Gtk.Orientation.HORIZONTAL)
|
self._cover_playlist_window.set_orientation(Gtk.Orientation.HORIZONTAL)
|
||||||
self._paned2.set_orientation(Gtk.Orientation.VERTICAL)
|
self._paned.set_orientation(Gtk.Orientation.VERTICAL)
|
||||||
|
|
||||||
def _refresh_profiles_menu(self, *args):
|
def _refresh_profiles_menu(self, *args):
|
||||||
self._profiles_submenu.remove_all()
|
self._profiles_submenu.remove_all()
|
||||||
@@ -3887,6 +3904,8 @@ class mpdevil(Gtk.Application):
|
|||||||
)
|
)
|
||||||
for action, accels in action_accels:
|
for action, accels in action_accels:
|
||||||
self.set_accels_for_action(action, accels)
|
self.set_accels_for_action(action, accels)
|
||||||
|
# disable item activation on space key pressed in treeviews
|
||||||
|
Gtk.binding_entry_remove(Gtk.binding_set_find('GtkTreeView'), Gdk.keyval_from_name("space"), Gdk.ModifierType.MOD2_MASK)
|
||||||
self._window.present()
|
self._window.present()
|
||||||
|
|
||||||
def do_startup(self):
|
def do_startup(self):
|
||||||
@@ -3918,4 +3937,3 @@ class mpdevil(Gtk.Application):
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app=mpdevil()
|
app=mpdevil()
|
||||||
app.run(sys.argv)
|
app.run(sys.argv)
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.1 KiB |
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333 4.2333" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<path d="m2.0102 0.52917a1.5875 1.5875 0 0 1 1.5875 1.5875 1.5875 1.5875 0 0 1-1.5875 1.5875 1.5875 1.5875 0 0 1-1.3746-0.79375l1.3746-0.79375-1.3746-0.79375a1.5875 1.5875 0 0 1 1.3746-0.79375zm-0.14779 0.52917a0.26458 0.26458 0 0 0-0.14263 0.035657 0.26458 0.26458 0 0 0-0.096635 0.36122 0.26458 0.26458 0 0 0 0.36122 0.096635 0.26458 0.26458 0 0 0 0.096635-0.36122 0.26458 0.26458 0 0 0-0.21859-0.13229z" fill="#2e3436" stroke-linecap="round" stroke-width=".25194"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 980 B |
13
data/icons/scalable/org.mpdevil.mpdevil-consume-symbolic.svg
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333 4.2333" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<path transform="scale(.26458)" d="m8.4023 2a6 6 0 0 0-6 6 6 6 0 0 0 6 6 6 6 0 0 0 5.1953-3l-5.1953-3 5.1953-3a6 6 0 0 0-5.1953-3zm0.55859 2a1 1 0 0 1 0.53906 0.13477 1 1 0 0 1 0.36523 1.3652 1 1 0 0 1-1.3652 0.36523 1 1 0 0 1-0.36523-1.3652 1 1 0 0 1 0.82617-0.5z" fill="#2e3436" stroke-linecap="round" stroke-width=".9522"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 838 B |
13
data/icons/scalable/org.mpdevil.mpdevil-single-symbolic.svg
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="15.982" height="16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<path d="m7.9902 2a6 6 0 0 0-5.9902 5.6914v0.62891a6 6 0 0 0 5.9902 5.6797 6 6 0 0 0 6-6 6 6 0 0 0-6-6zm-0.99023 3h2v6h-2v-4h-1v-1c0.694 0 1-0.348 1-1z" fill="#2e3436"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 657 B |
15
data/icons/scalable/org.mpdevil.mpdevil-symbolic.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333 4.2333" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title/>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g transform="translate(-156.79 -48.192)">
|
||||||
|
<path transform="matrix(.26458 0 0 .26458 156.79 48.192)" d="m4.1621 0s-1.8317 4.1425-0.50781 9.791a22.525 23.103 0 0 0-3.6543 5.5703v0.63867h2.5234a19.982 20.495 0 0 1 2.0664-3.3125h0.0039062c0.44122 1.0742 1.008 2.1855 1.7266 3.3125h9.6797v-6.1543a17.886 17.886 0 0 0-4.5488 1.8223c-1.1979-0.89234-2.2001-1.8385-3.0391-2.791a19.982 20.495 0 0 1 7.5879-3.5469v-2.6621a22.525 23.103 0 0 0-9.1621 4.1504c-2.3946-3.6216-2.6738-6.8184-2.6738-6.8184h-0.0019531z" fill="#2e3436" stroke-linecap="round" stroke-width=".053119"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
@@ -1,5 +1,28 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg width="128" height="128" version="1.1" viewBox="0 0 33.867 33.867" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
<svg width="128" height="128" version="1.1" viewBox="0 0 33.867 33.867" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="linearGradient871">
|
||||||
|
<stop stop-opacity=".5" offset="0"/>
|
||||||
|
<stop stop-opacity=".1" offset=".5"/>
|
||||||
|
<stop stop-opacity=".5" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="linearGradient904" x1="142" x2="238" y1="74.998" y2="74.998" gradientTransform="matrix(.26458 0 0 .26458 123.45 54.013)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient871"/>
|
||||||
|
<linearGradient id="linearGradient912" x1="157.72" x2="189.71" y1="58.908" y2="58.908" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient871"/>
|
||||||
|
<linearGradient id="linearGradient1026" x1="195.81" x2="197.92" y1="69.668" y2="69.668" gradientTransform="translate(-11.506 4.4716)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient871"/>
|
||||||
|
<linearGradient id="linearGradient1030" x1="195.81" x2="197.92" y1="69.668" y2="69.668" gradientTransform="matrix(-1 0 0 1 358.94 4.4716)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient871"/>
|
||||||
|
<linearGradient id="linearGradient1043" x1="146.99" x2="161.99" y1="83.478" y2="83.478" gradientTransform="matrix(.26458 0 0 .26458 147.53 49.338)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient871"/>
|
||||||
|
<linearGradient id="linearGradient1047" x1="146.99" x2="161.99" y1="83.478" y2="83.478" gradientTransform="matrix(-.26458 0 0 .26458 199.91 49.338)" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient871"/>
|
||||||
|
<linearGradient id="linearGradient885" x1="144.82" x2="154.08" y1="51.721" y2="51.721" gradientTransform="translate(16.728 4.9575)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-opacity=".4" offset="0"/>
|
||||||
|
<stop stop-opacity=".1" offset=".5"/>
|
||||||
|
<stop stop-opacity=".5" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="linearGradient889" x1="144.82" x2="154.08" y1="51.721" y2="51.721" gradientTransform="matrix(-1 0 0 1 330.71 4.9575)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-opacity=".4" offset="0"/>
|
||||||
|
<stop stop-opacity=".1" offset=".5"/>
|
||||||
|
<stop stop-opacity=".5" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
<metadata>
|
<metadata>
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
<cc:Work rdf:about="">
|
<cc:Work rdf:about="">
|
||||||
@@ -10,47 +33,34 @@
|
|||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
<g transform="translate(-156.79 -48.192)">
|
<g transform="translate(-156.79 -48.192)">
|
||||||
<path d="m173.69 50.573a15.994 16.404 0 0 0-15.965 16.404h1.8056a14.188 14.552 0 0 1 14.08-14.552 14.188 14.552 0 0 1 0.10852 0 14.188 14.552 0 0 1 14.188 14.552h1.8061a15.994 16.404 0 0 0-15.994-16.404 15.994 16.404 0 0 0-0.0289 0z" opacity=".3" stroke-linecap="round" stroke-width=".037717"/>
|
|
||||||
<path d="m173.69 50.044a15.994 16.404 0 0 0-15.965 16.404h1.8056a14.188 14.552 0 0 1 14.08-14.552 14.188 14.552 0 0 1 0.10852 0 14.188 14.552 0 0 1 14.188 14.552h1.8061a15.994 16.404 0 0 0-15.994-16.404 15.994 16.404 0 0 0-0.0289 0z" fill="#3d3846" stroke-linecap="round" stroke-width=".037717"/>
|
<path d="m173.69 50.044a15.994 16.404 0 0 0-15.965 16.404h1.8056a14.188 14.552 0 0 1 14.08-14.552 14.188 14.552 0 0 1 0.10852 0 14.188 14.552 0 0 1 14.188 14.552h1.8061a15.994 16.404 0 0 0-15.994-16.404 15.994 16.404 0 0 0-0.0289 0z" fill="#3d3846" stroke-linecap="round" stroke-width=".037717"/>
|
||||||
|
<path d="m173.61 51.367a14.188 14.552 0 0 0-14.079 14.552h-1.7973a15.994 16.404 0 0 0-8e-3 0.52917h1.8056a14.188 14.552 0 0 1 14.08-14.552 14.188 14.552 0 0 1 0.10852 0 14.188 14.552 0 0 1 14.188 14.552h1.8061a15.994 16.404 0 0 0-8e-3 -0.52917h-1.7978a14.188 14.552 0 0 0-14.188-14.552 14.188 14.552 0 0 0-0.10852 0 14.188 14.552 0 0 1-5.2e-4 0z" fill="url(#linearGradient912)" stroke-linecap="round" stroke-width=".037717"/>
|
||||||
<g>
|
<g>
|
||||||
<path d="m173.69 50.044a15.994 16.404 0 0 0-15.965 16.404h8e-3a15.994 16.404 0 0 1 15.957-15.875 15.994 16.404 0 0 1 0.0289 0 15.994 16.404 0 0 1 15.986 15.875h8e-3a15.994 16.404 0 0 0-15.994-16.404 15.994 16.404 0 0 0-0.0289 0z" fill="#fff" opacity=".1" stroke-linecap="round" stroke-width=".037717"/>
|
|
||||||
<path d="m162.25 48.986s-2.7703 6.254 2.6891 12.965l5.8685-2.7602c-7.9486-3.3925-8.5576-10.204-8.5576-10.204z" opacity=".2"/>
|
|
||||||
<path d="m162.25 48.457s-2.7703 6.254 2.6891 12.965l5.8685-2.7602c-7.9486-3.3925-8.5576-10.204-8.5576-10.204z" fill="#c01c28"/>
|
<path d="m162.25 48.457s-2.7703 6.254 2.6891 12.965l5.8685-2.7602c-7.9486-3.3925-8.5576-10.204-8.5576-10.204z" fill="#c01c28"/>
|
||||||
<path d="m185.19 48.986s2.7703 6.254-2.6891 12.965l-5.8685-2.7602c7.9486-3.3925 8.5576-10.204 8.5576-10.204z" opacity=".2"/>
|
<path d="m161.56 51.936c-0.10501 2.4408 0.46065 5.8972 3.3796 9.4852l5.8684-2.76c-0.39365-0.16801-0.76447-0.34666-1.1229-0.5302l-4.7454 2.2319c-2.5193-3.0967-3.2844-6.0943-3.3796-8.4269z" fill="url(#linearGradient885)"/>
|
||||||
<path d="m185.19 48.457s2.7703 6.254-2.6891 12.965l-5.8685-2.7602c7.9486-3.3925 8.5576-10.204 8.5576-10.204z" fill="#c01c28"/>
|
<path d="m185.19 48.457s2.7703 6.254-2.6891 12.965l-5.8685-2.7602c7.9486-3.3925 8.5576-10.204 8.5576-10.204z" fill="#c01c28"/>
|
||||||
<path transform="matrix(.26458 0 0 .26458 156.79 48.192)" d="m107.34 1s-2.3018 25.746-32.344 38.568l2.166 1.0176c27.975-13.105 30.178-37.586 30.178-37.586s2.4572 5.5725 2.6387 14.197c0.20388-9.7558-2.6387-16.197-2.6387-16.197z" fill="#fffefe" opacity=".1"/>
|
<path d="m185.88 51.936c0.10501 2.4408-0.46065 5.8972-3.3796 9.4852l-5.8684-2.76c0.39365-0.16801 0.76447-0.34666 1.1229-0.5302l4.7454 2.2319c2.5193-3.0967 3.2844-6.0943 3.3796-8.4269z" fill="url(#linearGradient889)"/>
|
||||||
<circle transform="rotate(12.584)" cx="184.43" cy="28.813" r="12.7" opacity=".2"/>
|
|
||||||
<path d="m162.25 48.457s0.609 6.812 8.5576 10.205l-0.57309 0.26924c-7.4018-3.4675-7.9845-9.9446-7.9845-9.9446s-0.65013 1.4744-0.69815 3.7564c-0.0539-2.5812 0.69815-4.2855 0.69815-4.2855z" fill="#fffefe" opacity=".1"/>
|
|
||||||
<circle transform="rotate(12.584)" cx="184.31" cy="28.296" r="12.7" fill="#e01b24"/>
|
<circle transform="rotate(12.584)" cx="184.31" cy="28.296" r="12.7" fill="#e01b24"/>
|
||||||
<path d="m173.67 55.071a12.7 12.7 0 0 0-12.345 9.9332 12.7 12.7 0 0 0-0.30179 3.0272 12.7 12.7 0 0 1 0.30179-2.498 12.7 12.7 0 0 1 15.162-9.6284 12.7 12.7 0 0 1 9.9301 12.135 12.7 12.7 0 0 0-9.9301-12.664 12.7 12.7 0 0 0-2.8169-0.30489z" fill="#fff" opacity=".1"/>
|
<path d="m161.03 67.241a12.7 12.7 0 0 0 9.9224 12.925 12.7 12.7 0 0 0 15.162-9.6284 12.7 12.7 0 0 0 0.29403-3.2949 12.7 12.7 0 0 1-0.29403 2.2366 12.7 12.7 0 0 1-15.162 9.6284 12.7 12.7 0 0 1-9.9224-11.867z" fill="url(#linearGradient904)"/>
|
||||||
|
<circle cx="172.13" cy="69.888" r=".79375" opacity=".4"/>
|
||||||
|
<circle cx="175.31" cy="69.888" r=".79375" opacity=".4"/>
|
||||||
|
</g>
|
||||||
|
<path d="m181.92 64.332c0 1.8995-1.5395 3.4396-3.4396 3.4396-1.8995 0-3.4396-1.5401-3.4396-3.4396 0-1.8995 1.5401-3.4396 3.4396-3.4396 1.9001 0 3.4396 1.5401 3.4396 3.4396z" fill="#f6f5f4"/>
|
||||||
|
<g>
|
||||||
<g>
|
<g>
|
||||||
<circle cx="172.13" cy="70.417" r=".79375" opacity=".3"/>
|
<circle cx="178.22" cy="63.273" r="1.5875" fill="#241f31"/>
|
||||||
<circle cx="175.31" cy="70.417" r=".79375" opacity=".3"/>
|
<path d="m172.4 64.332c0 1.8995-1.5395 3.4396-3.4396 3.4396-1.8995 0-3.4396-1.5401-3.4396-3.4396 0-1.8995 1.5401-3.4396 3.4396-3.4396 1.9001 0 3.4396 1.5401 3.4396 3.4396z" fill="#f6f5f4"/>
|
||||||
<circle cx="178.48" cy="65.39" r="3.4396" opacity=".2"/>
|
<circle cx="168.69" cy="63.273" r="1.5875" fill="#241f31"/>
|
||||||
<circle cx="178.48" cy="64.861" r="3.4396" fill="#f6f5f4"/>
|
|
||||||
<circle cx="168.96" cy="65.39" r="3.4396" opacity=".2"/>
|
|
||||||
<circle cx="168.96" cy="64.861" r="3.4396" fill="#f6f5f4"/>
|
|
||||||
<circle cx="178.22" cy="63.802" r="1.5875" fill="#241f31"/>
|
|
||||||
<circle cx="168.69" cy="63.802" r="1.5875" fill="#241f31"/>
|
|
||||||
<path transform="matrix(.26458 0 0 .26458 156.79 48.192)" d="m69.949 81a3 3 0 0 0-2.9492 3 3 3 0 0 0 0.042969 0.50195 3 3 0 0 1 2.957-2.502 3 3 0 0 1 2.957 2.498 3 3 0 0 0 0.042969-0.49805 3 3 0 0 0-3-3 3 3 0 0 0-0.050781 0z" opacity=".3"/>
|
|
||||||
<path d="m172.12 69.623a0.79375 0.79375 0 0 0-0.78031 0.79375 0.79375 0.79375 0 0 0 0.0114 0.13281 0.79375 0.79375 0 0 1 0.78238-0.66198 0.79375 0.79375 0 0 1 0.78238 0.66094 0.79375 0.79375 0 0 0 0.0114-0.13178 0.79375 0.79375 0 0 0-0.79375-0.79375 0.79375 0.79375 0 0 0-0.0134 0z" opacity=".3"/>
|
|
||||||
</g>
|
</g>
|
||||||
|
<path d="m169.95 71.211c-3.1753 0.04728-2.4014 1.419-2.9983 2.5048-0.29211 0.53135 0.422-0.06077 1.2252-0.80047 1.263 1.9524 3.5805 3.7996 7.6435 2.3347-3.622-0.25777-5.8309-1.5312-7.1556-2.7967 0.66518-0.6314 1.2852-1.2423 1.2852-1.2423z" opacity=".4"/>
|
||||||
|
<path d="m161.02 60.204v15.135s-0.25743-0.09764-0.39066-0.13303c-0.65036-0.17255-1.39-0.07614-1.9848-0.38276-0.32991-0.17009-0.60935-0.45083-0.79371-0.76449-0.26875-0.45726-0.3681-0.83192-0.44542-1.3501-0.20943-1.4036-0.34842-2.7238-0.35396-4.6762v-0.5219c6e-3 -1.9524 0.14453-3.273 0.35396-4.6767 0.0773-0.51818 0.17667-0.89233 0.44542-1.3496 0.18436-0.31367 0.4638-0.5944 0.79371-0.7645 0.59475-0.30662 1.3344-0.21021 1.9848-0.38276 0.13323-0.03538 0.39066-0.13302 0.39066-0.13302z" fill="#3d3846"/>
|
||||||
|
<path d="m162.07 59.834c-0.34403 5.04e-4 -1.0521 0.37002-1.0521 0.37002v15.135s0.7081 0.36951 1.0521 0.37002c0.34403 5.11e-4 0.54179-0.12749 0.71262-0.43627 0.17083-0.30878 0.35792-0.67862 0.35192-1.8119l-5.2e-4 -0.36135h5.2e-4v-10.656h-5.2e-4l5.2e-4 -0.36135c6e-3 -1.1332-0.18109-1.5031-0.35192-1.8119-0.17083-0.30878-0.36859-0.43678-0.71262-0.43627z" fill="#9a9996"/>
|
||||||
|
<path d="m186.42 60.204v15.135s0.25743-0.09764 0.39066-0.13303c0.65036-0.17255 1.39-0.07614 1.9848-0.38276 0.32991-0.17009 0.60935-0.45083 0.79371-0.76449 0.26875-0.45726 0.3681-0.83192 0.44542-1.3501 0.20943-1.4036 0.34842-2.7238 0.35396-4.6762v-0.5219c-6e-3 -1.9524-0.14453-3.273-0.35396-4.6767-0.0773-0.51818-0.17667-0.89233-0.44542-1.3496-0.18436-0.31367-0.4638-0.5944-0.79371-0.7645-0.59475-0.30662-1.3344-0.21021-1.9848-0.38276-0.13323-0.03538-0.39066-0.13302-0.39066-0.13302z" fill="#3d3846"/>
|
||||||
|
<path d="m185.37 59.834c0.34403 5.04e-4 1.0521 0.37002 1.0521 0.37002v15.135s-0.7081 0.36951-1.0521 0.37002c-0.34403 5.11e-4 -0.54179-0.12749-0.71262-0.43627-0.17083-0.30878-0.35792-0.67862-0.35192-1.8119l5.2e-4 -0.36135h-5.2e-4v-10.656h5.2e-4l-5.2e-4 -0.36135c-6e-3 -1.1332 0.18109-1.5031 0.35192-1.8119 0.17083-0.30878 0.36859-0.43678 0.71262-0.43627z" fill="#9a9996"/>
|
||||||
|
<path d="m184.3 72.57v0.36122l5.1e-4 -0.36122zm0 0.36122v0.16795h5.1e-4l-5.1e-4 0.36122c-6e-3 1.1332 0.18108 1.5035 0.35191 1.8123 0.17083 0.30878 0.36859 0.43666 0.71262 0.43615 0.34403-5.04e-4 1.0521-0.37 1.0521-0.37v-0.52917s-0.7081 0.3695-1.0521 0.37c-0.34403 5.11e-4 -0.54179-0.12737-0.71262-0.43615-0.17083-0.30878-0.35791-0.67905-0.35191-1.8123z" fill="url(#linearGradient1026)"/>
|
||||||
|
<path d="m163.13 72.57v0.36122l-5.1e-4 -0.36122zm0 0.36122v0.16795h-5.1e-4l5.1e-4 0.36122c6e-3 1.1332-0.18108 1.5035-0.35191 1.8123-0.17083 0.30878-0.36859 0.43666-0.71262 0.43615-0.34403-5.04e-4 -1.0521-0.37-1.0521-0.37v-0.52917s0.7081 0.3695 1.0521 0.37c0.34403 5.11e-4 0.54179-0.12737 0.71262-0.43615 0.17083-0.30878 0.35791-0.67905 0.35191-1.8123z" fill="url(#linearGradient1030)"/>
|
||||||
|
<path d="m190.39 67.51c-6e-3 1.9481-0.14483 3.2672-0.35398 4.669-0.0773 0.51818-0.1767 0.89253-0.44545 1.3498-0.18436 0.31366-0.46384 0.59472-0.79375 0.76481-0.59475 0.30662-1.334 0.21038-1.9844 0.38292-0.13323 0.03539-0.39067 0.13281-0.39067 0.13281v0.52917s0.25744-0.09742 0.39067-0.13281c0.65036-0.17255 1.3896-0.07631 1.9844-0.38292 0.32991-0.17009 0.60939-0.45115 0.79375-0.76481 0.26875-0.45726 0.36813-0.83161 0.44545-1.3498 0.20943-1.4036 0.34844-2.7238 0.35398-4.6762z" fill="url(#linearGradient1043)"/>
|
||||||
|
<path d="m157.05 67.51c6e-3 1.9481 0.14483 3.2672 0.35398 4.669 0.0773 0.51818 0.1767 0.89253 0.44545 1.3498 0.18436 0.31366 0.46384 0.59472 0.79375 0.76481 0.59475 0.30662 1.334 0.21038 1.9844 0.38292 0.13323 0.03539 0.39067 0.13281 0.39067 0.13281v0.52917s-0.25744-0.09742-0.39067-0.13281c-0.65036-0.17255-1.3896-0.07631-1.9844-0.38292-0.32991-0.17009-0.60939-0.45115-0.79375-0.76481-0.26875-0.45726-0.36813-0.83161-0.44545-1.3498-0.20943-1.4036-0.34844-2.7238-0.35398-4.6762z" fill="url(#linearGradient1047)"/>
|
||||||
</g>
|
</g>
|
||||||
<g transform="translate(-3.3391 -25.538)">
|
|
||||||
<path d="m188.71 85.901c-0.34403-5.19e-4 -0.54174 0.12927-0.71257 0.44235-0.17083 0.31308-0.3579 0.68807-0.3519 1.8371l5.2e-4 0.36639h-5.2e-4v10.583h5.2e-4l-5.2e-4 0.3669c-6e-3 1.149 0.18107 1.524 0.3519 1.8371s0.36854 0.44236 0.71257 0.44184c0.34403-5.1e-4 1.0521-0.37466 1.0521-0.37466v0.11059s0.25742-0.099 0.39065-0.13488c0.65036-0.17495 1.39-0.0772 1.9848-0.38809 0.32991-0.17245 0.60935-0.45711 0.79371-0.77514 0.26875-0.46363 0.3681-0.84351 0.44542-1.3689 0.20943-1.4232 0.34843-2.7617 0.35397-4.7413v-0.52917c-6e-3 -1.9796-0.14454-3.3186-0.35397-4.7418-0.0773-0.5254-0.17667-0.90476-0.44542-1.3684-0.18436-0.31804-0.4638-0.60268-0.79371-0.77515-0.59475-0.31089-1.3344-0.21314-1.9848-0.38809-0.13323-0.03587-0.39065-0.13488-0.39065-0.13488v0.11007s-0.70804-0.37466-1.0521-0.37517z" opacity=".2"/>
|
|
||||||
<path d="m189.76 85.637v15.346s0.25743-0.099 0.39066-0.13488c0.65036-0.17495 1.39-0.0772 1.9848-0.38809 0.32991-0.17246 0.60935-0.45711 0.79371-0.77514 0.26875-0.46363 0.3681-0.84351 0.44542-1.3689 0.20943-1.4232 0.34842-2.7617 0.35396-4.7413v-0.52917c-6e-3 -1.9796-0.14453-3.3186-0.35396-4.7418-0.0773-0.5254-0.17667-0.90476-0.44542-1.3684-0.18436-0.31804-0.4638-0.60269-0.79371-0.77515-0.59475-0.31089-1.3344-0.21314-1.9848-0.38809-0.13323-0.03587-0.39066-0.13488-0.39066-0.13488z" fill="#3d3846"/>
|
|
||||||
<path d="m188.71 85.372c-0.34403-5.19e-4 -0.54174 0.12927-0.71257 0.44235-0.17083 0.31308-0.35789 0.68807-0.35189 1.8371l5.1e-4 0.36638h-5.1e-4v10.583h5.1e-4l-5.1e-4 0.3669c-6e-3 1.149 0.18106 1.524 0.35189 1.8371s0.36854 0.44235 0.71257 0.44183c0.34403-5.1e-4 1.0521-0.37465 1.0521-0.37465v-15.125s-0.70804-0.37466-1.0521-0.37517z" fill="#9a9996"/>
|
|
||||||
<path d="m188.71 85.372c-0.34404-5.19e-4 -0.54175 0.12927-0.71257 0.44235-0.17083 0.31308-0.3579 0.68807-0.3519 1.8371l5.2e-4 0.36639h-5.2e-4v0.16278c-6e-3 -1.149 0.18107-1.524 0.3519-1.8371 0.17082-0.31308 0.36853-0.44287 0.71257-0.44235 0.34403 5.11e-4 1.0521 0.37517 1.0521 0.37517v-0.52917s-0.70804-0.37466-1.0521-0.37517zm-1.0645 2.8086v0.36639h5.2e-4z" fill="#fff" opacity=".2"/>
|
|
||||||
<path d="m189.76 85.637v0.52917s0.25743 0.09901 0.39065 0.13488c0.65036 0.17495 1.39 0.0772 1.9848 0.38809 0.32991 0.17246 0.60934 0.45711 0.7937 0.77515 0.26875 0.46363 0.36813 0.84299 0.44542 1.3684 0.20944 1.4232 0.34796 2.7622 0.35396 4.7418v-0.52917c-6e-3 -1.9796-0.14452-3.3186-0.35396-4.7418-0.0773-0.5254-0.17667-0.90476-0.44542-1.3684-0.18436-0.31804-0.46379-0.60269-0.7937-0.77515-0.59476-0.31089-1.3344-0.21314-1.9848-0.38809-0.13322-0.03587-0.39065-0.13488-0.39065-0.13488z" fill="#fff" opacity=".1"/>
|
|
||||||
</g>
|
|
||||||
<g transform="matrix(-1 0 0 1 350.78 -25.538)">
|
|
||||||
<path d="m188.71 85.901c-0.34403-5.19e-4 -0.54174 0.12927-0.71257 0.44235-0.17083 0.31308-0.3579 0.68807-0.3519 1.8371l5.2e-4 0.36639h-5.2e-4v10.583h5.2e-4l-5.2e-4 0.3669c-6e-3 1.149 0.18107 1.524 0.3519 1.8371s0.36854 0.44236 0.71257 0.44184c0.34403-5.1e-4 1.0521-0.37466 1.0521-0.37466v0.11059s0.25742-0.099 0.39065-0.13488c0.65036-0.17495 1.39-0.0772 1.9848-0.38809 0.32991-0.17245 0.60935-0.45711 0.79371-0.77514 0.26875-0.46363 0.3681-0.84351 0.44542-1.3689 0.20943-1.4232 0.34843-2.7617 0.35397-4.7413v-0.52917c-6e-3 -1.9796-0.14454-3.3186-0.35397-4.7418-0.0773-0.5254-0.17667-0.90476-0.44542-1.3684-0.18436-0.31804-0.4638-0.60268-0.79371-0.77515-0.59475-0.31089-1.3344-0.21314-1.9848-0.38809-0.13323-0.03587-0.39065-0.13488-0.39065-0.13488v0.11007s-0.70804-0.37466-1.0521-0.37517z" opacity=".2"/>
|
|
||||||
<path d="m189.76 85.637v15.346s0.25743-0.099 0.39066-0.13488c0.65036-0.17495 1.39-0.0772 1.9848-0.38809 0.32991-0.17246 0.60935-0.45711 0.79371-0.77514 0.26875-0.46363 0.3681-0.84351 0.44542-1.3689 0.20943-1.4232 0.34842-2.7617 0.35396-4.7413v-0.52917c-6e-3 -1.9796-0.14453-3.3186-0.35396-4.7418-0.0773-0.5254-0.17667-0.90476-0.44542-1.3684-0.18436-0.31804-0.4638-0.60269-0.79371-0.77515-0.59475-0.31089-1.3344-0.21314-1.9848-0.38809-0.13323-0.03587-0.39066-0.13488-0.39066-0.13488z" fill="#3d3846"/>
|
|
||||||
<path d="m188.71 85.372c-0.34403-5.19e-4 -0.54174 0.12927-0.71257 0.44235-0.17083 0.31308-0.35789 0.68807-0.35189 1.8371l5.1e-4 0.36638h-5.1e-4v10.583h5.1e-4l-5.1e-4 0.3669c-6e-3 1.149 0.18106 1.524 0.35189 1.8371s0.36854 0.44235 0.71257 0.44183c0.34403-5.1e-4 1.0521-0.37465 1.0521-0.37465v-15.125s-0.70804-0.37466-1.0521-0.37517z" fill="#9a9996"/>
|
|
||||||
<path d="m188.71 85.372c-0.34404-5.19e-4 -0.54175 0.12927-0.71257 0.44235-0.17083 0.31308-0.3579 0.68807-0.3519 1.8371l5.2e-4 0.36639h-5.2e-4v0.16278c-6e-3 -1.149 0.18107-1.524 0.3519-1.8371 0.17082-0.31308 0.36853-0.44287 0.71257-0.44235 0.34403 5.11e-4 1.0521 0.37517 1.0521 0.37517v-0.52917s-0.70804-0.37466-1.0521-0.37517zm-1.0645 2.8086v0.36639h5.2e-4z" fill="#fff" opacity=".2"/>
|
|
||||||
<path d="m189.76 85.637v0.52917s0.25743 0.09901 0.39065 0.13488c0.65036 0.17495 1.39 0.0772 1.9848 0.38809 0.32991 0.17246 0.60934 0.45711 0.7937 0.77515 0.26875 0.46363 0.36813 0.84299 0.44542 1.3684 0.20944 1.4232 0.34796 2.7622 0.35396 4.7418v-0.52917c-6e-3 -1.9796-0.14452-3.3186-0.35396-4.7418-0.0773-0.5254-0.17667-0.90476-0.44542-1.3684-0.18436-0.31804-0.46379-0.60269-0.7937-0.77515-0.59476-0.31089-1.3344-0.21314-1.9848-0.38809-0.13322-0.03587-0.39065-0.13488-0.39065-0.13488z" fill="#fff" opacity=".1"/>
|
|
||||||
</g>
|
|
||||||
<path d="m169.95 71.565c-3.1753 0.04728-2.4014 1.419-2.9983 2.5048-0.29211 0.53135 0.422-0.06077 1.2252-0.80047 1.263 1.9524 3.5805 3.7996 7.6435 2.3347-3.622-0.25777-5.8309-1.5312-7.1556-2.7967 0.66518-0.6314 1.2852-1.2423 1.2852-1.2423z" opacity=".29966"/>
|
|
||||||
<path d="m169.95 71.565c-3.1753 0.04728-2.4014 1.419-2.9983 2.5048-0.10728 0.19514-0.0779 0.23786 0.0408 0.17828 0.49788-1.0351-0.0815-2.2821 2.6712-2.4061 0.0552-0.05415 0.28628-0.27699 0.28628-0.27699zm-1.1446 1.371c-0.0709 0.0678-0.0678 0.06684-0.14056 0.13591 1.2446 1.1891 3.2705 2.3848 6.5148 2.7389 0.20894-0.06021 0.42181-0.12776 0.64079-0.20671-3.4991-0.24902-5.6768-1.446-7.0151-2.6681z" opacity=".29966"/>
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 8.7 KiB |
@@ -23,15 +23,12 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</description>
|
</description>
|
||||||
<releases>
|
<releases>
|
||||||
<release version="0.9.8" date="2020-12-27">
|
<release version="1.1.1" date="2021-02-14"/>
|
||||||
<description>
|
|
||||||
</description>
|
|
||||||
</release>
|
|
||||||
</releases>
|
</releases>
|
||||||
<launchable type="desktop-id">org.mpdevil.mpdevil.desktop</launchable>
|
<launchable type="desktop-id">org.mpdevil.mpdevil.desktop</launchable>
|
||||||
<screenshots>
|
<screenshots>
|
||||||
<screenshot type="default">
|
<screenshot type="default">
|
||||||
<image type="source" width="1016" height="1024">https://raw.githubusercontent.com/SoongNoonien/mpdevil/v0.9.7/screenshots/mainwindow_0.9.5.png</image>
|
<image type="source" width="1008" height="1039">https://raw.githubusercontent.com/SoongNoonien/mpdevil/v1.1.0/screenshots/mainwindow_1.1.0.png</image>
|
||||||
</screenshot>
|
</screenshot>
|
||||||
</screenshots>
|
</screenshots>
|
||||||
<url type="homepage">https://github.com/SoongNoonien/mpdevil</url>
|
<url type="homepage">https://github.com/SoongNoonien/mpdevil</url>
|
||||||
|
@@ -31,6 +31,11 @@
|
|||||||
<summary>Default position of paned1/paned0 separator</summary>
|
<summary>Default position of paned1/paned0 separator</summary>
|
||||||
<description></description>
|
<description></description>
|
||||||
</key>
|
</key>
|
||||||
|
<key type="b" name="mini-player">
|
||||||
|
<default>false</default>
|
||||||
|
<summary>Start player in mini player mode</summary>
|
||||||
|
<description></description>
|
||||||
|
</key>
|
||||||
<key type="i" name="album-cover">
|
<key type="i" name="album-cover">
|
||||||
<default>170</default>
|
<default>170</default>
|
||||||
<summary>Size of covers in album view</summary>
|
<summary>Size of covers in album view</summary>
|
||||||
@@ -52,7 +57,7 @@
|
|||||||
<description></description>
|
<description></description>
|
||||||
</key>
|
</key>
|
||||||
<key type="b" name="use-csd">
|
<key type="b" name="use-csd">
|
||||||
<default>false</default>
|
<default>true</default>
|
||||||
<summary>Use Client-side decoration</summary>
|
<summary>Use Client-side decoration</summary>
|
||||||
<description></description>
|
<description></description>
|
||||||
</key>
|
</key>
|
||||||
@@ -71,11 +76,6 @@
|
|||||||
<summary>Show initial letters in artist-view</summary>
|
<summary>Show initial letters in artist-view</summary>
|
||||||
<description></description>
|
<description></description>
|
||||||
</key>
|
</key>
|
||||||
<key type="b" name="show-album-view-tooltips">
|
|
||||||
<default>true</default>
|
|
||||||
<summary>Show tooltips in album-view</summary>
|
|
||||||
<description></description>
|
|
||||||
</key>
|
|
||||||
<key type="b" name="sort-albums-by-year">
|
<key type="b" name="sort-albums-by-year">
|
||||||
<default>true</default>
|
<default>true</default>
|
||||||
<summary>Sort albums by year</summary>
|
<summary>Sort albums by year</summary>
|
||||||
|
388
po/de.po
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-10-20 18:10+0200\n"
|
"POT-Creation-Date: 2021-02-12 16:57+0100\n"
|
||||||
"PO-Revision-Date: 2020-10-20 18:14+0200\n"
|
"PO-Revision-Date: 2021-02-12 16:58+0100\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
@@ -18,103 +18,90 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 2.3.1\n"
|
"X-Generator: Poedit 2.3.1\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: mpdevil:419
|
#: mpdevil:438
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "{days} day"
|
||||||
|
msgid_plural "{days} days"
|
||||||
|
msgstr[0] "{days} Tag"
|
||||||
|
msgstr[1] "{days} Tage"
|
||||||
|
|
||||||
|
#: mpdevil:473
|
||||||
msgid "Unknown Title"
|
msgid "Unknown Title"
|
||||||
msgstr "Unbekannter Titel"
|
msgstr "Unbekannter Titel"
|
||||||
|
|
||||||
#: mpdevil:719
|
#: mpdevil:802
|
||||||
msgid "Main cover size:"
|
msgid "Main cover size:"
|
||||||
msgstr "Größe des Haupt-Covers:"
|
msgstr "Größe des Haupt-Covers:"
|
||||||
|
|
||||||
#: mpdevil:720
|
#: mpdevil:803
|
||||||
msgid "Album view cover size:"
|
msgid "Album view cover size:"
|
||||||
msgstr "Covergröße in Albumliste:"
|
msgstr "Covergröße in Albumliste:"
|
||||||
|
|
||||||
#: mpdevil:721
|
#: mpdevil:804
|
||||||
msgid "Action bar icon size:"
|
msgid "Action bar icon size:"
|
||||||
msgstr "Symbolgröße Aktionsleiste:"
|
msgstr "Symbolgröße Aktionsleiste:"
|
||||||
|
|
||||||
#: mpdevil:722
|
#: mpdevil:805
|
||||||
msgid "Secondary icon size:"
|
msgid "Secondary icon size:"
|
||||||
msgstr "Sekundäre Symbolgröße:"
|
msgstr "Sekundäre Symbolgröße:"
|
||||||
|
|
||||||
#: mpdevil:735
|
#: mpdevil:818
|
||||||
msgid "Sort albums by:"
|
|
||||||
msgstr "Sortiere Alben nach:"
|
|
||||||
|
|
||||||
#: mpdevil:735
|
|
||||||
msgid "name"
|
|
||||||
msgstr "Name"
|
|
||||||
|
|
||||||
#: mpdevil:735
|
|
||||||
msgid "year"
|
|
||||||
msgstr "Jahr"
|
|
||||||
|
|
||||||
#: mpdevil:736
|
|
||||||
msgid "Position of playlist:"
|
|
||||||
msgstr "Wiedergabelistenposition:"
|
|
||||||
|
|
||||||
#: mpdevil:736
|
|
||||||
msgid "bottom"
|
|
||||||
msgstr "unten"
|
|
||||||
|
|
||||||
#: mpdevil:736
|
|
||||||
msgid "right"
|
|
||||||
msgstr "rechts"
|
|
||||||
|
|
||||||
#: mpdevil:754
|
|
||||||
msgid "Use Client-side decoration"
|
msgid "Use Client-side decoration"
|
||||||
msgstr "Benutze „Client-side decoration“"
|
msgstr "„Client-side decoration“ benutzen"
|
||||||
|
|
||||||
#: mpdevil:755
|
#: mpdevil:819
|
||||||
msgid "Show stop button"
|
msgid "Show stop button"
|
||||||
msgstr "Zeige Stopp-Knopf"
|
msgstr "Stopp-Knopf anzeigen"
|
||||||
|
|
||||||
#: mpdevil:756
|
#: mpdevil:820
|
||||||
msgid "Show lyrics button"
|
msgid "Show lyrics button"
|
||||||
msgstr "Zeige Liedtext-Knopf"
|
msgstr "Liedtext-Knopf anzeigen"
|
||||||
|
|
||||||
#: mpdevil:757
|
#: mpdevil:821
|
||||||
msgid "Show initials in artist view"
|
msgid "Show initials in artist view"
|
||||||
msgstr "Zeige Anfangsbuchstaben in Interpretenliste"
|
msgstr "Anfangsbuchstaben in Interpretenliste anzeigen"
|
||||||
|
|
||||||
#: mpdevil:758
|
#: mpdevil:822
|
||||||
msgid "Show tooltips in album view"
|
msgid "Place playlist at the side"
|
||||||
msgstr "Zeige Tooltips in Albumliste"
|
msgstr "Wiedergabeliste seitlich anzeigen"
|
||||||
|
|
||||||
#: mpdevil:759
|
#: mpdevil:823
|
||||||
msgid "Use “Album Artist” tag"
|
msgid "Use “Album Artist” tag"
|
||||||
msgstr "Benutze „Album Artist“ Tag"
|
msgstr "„Album Artist“ Tag benutzen"
|
||||||
|
|
||||||
#: mpdevil:760
|
#: mpdevil:824
|
||||||
msgid "Send notification on title change"
|
msgid "Send notification on title change"
|
||||||
msgstr "Sende Benachrichtigung bei Titelwechsel"
|
msgstr "Über Titelwechsel benachrichtigen"
|
||||||
|
|
||||||
#: mpdevil:761
|
#: mpdevil:825
|
||||||
msgid "Stop playback on quit"
|
msgid "Stop playback on quit"
|
||||||
msgstr "Wiedergabe beim Beenden stoppen"
|
msgstr "Wiedergabe beim Beenden stoppen"
|
||||||
|
|
||||||
#: mpdevil:762
|
#: mpdevil:826
|
||||||
msgid "Play selected albums and titles immediately"
|
msgid "Play selected albums and titles immediately"
|
||||||
msgstr "Ausgewählte Alben und Titel sofort abspielen"
|
msgstr "Ausgewählte Alben und Titel sofort abspielen"
|
||||||
|
|
||||||
#: mpdevil:775
|
#: mpdevil:827
|
||||||
|
msgid "Sort albums by year"
|
||||||
|
msgstr "Alben nach Jahr sortieren"
|
||||||
|
|
||||||
|
#: mpdevil:839
|
||||||
msgid "<b>View</b>"
|
msgid "<b>View</b>"
|
||||||
msgstr "<b>Ansicht</b>"
|
msgstr "<b>Ansicht</b>"
|
||||||
|
|
||||||
#: mpdevil:776
|
#: mpdevil:840
|
||||||
msgid "<b>Behavior</b>"
|
msgid "<b>Behavior</b>"
|
||||||
msgstr "<b>Verhalten</b>"
|
msgstr "<b>Verhalten</b>"
|
||||||
|
|
||||||
#: mpdevil:808
|
#: mpdevil:860
|
||||||
msgid "(restart required)"
|
msgid "(restart required)"
|
||||||
msgstr "(Neustart erforderlich)"
|
msgstr "(Neustart erforderlich)"
|
||||||
|
|
||||||
#: mpdevil:870 mpdevil:3409
|
#: mpdevil:909
|
||||||
msgid "Connect"
|
msgid "_Connect"
|
||||||
msgstr "Verbinden"
|
msgstr "_Verbinden"
|
||||||
|
|
||||||
#: mpdevil:886
|
#: mpdevil:925
|
||||||
msgid ""
|
msgid ""
|
||||||
"The first image in the same directory as the song file matching this regex "
|
"The first image in the same directory as the song file matching this regex "
|
||||||
"will be displayed. %AlbumArtist% and %Album% will be replaced by the "
|
"will be displayed. %AlbumArtist% and %Album% will be replaced by the "
|
||||||
@@ -124,157 +111,161 @@ msgstr ""
|
|||||||
"regulären Ausdruck entspricht, wird angezeigt. %AlbumArtist% und %Album% "
|
"regulären Ausdruck entspricht, wird angezeigt. %AlbumArtist% und %Album% "
|
||||||
"werden durch die entsprechenden Tags des Liedes ersetzt."
|
"werden durch die entsprechenden Tags des Liedes ersetzt."
|
||||||
|
|
||||||
#: mpdevil:891
|
#: mpdevil:930
|
||||||
msgid "Profile:"
|
msgid "Profile:"
|
||||||
msgstr "Profil:"
|
msgstr "Profil:"
|
||||||
|
|
||||||
#: mpdevil:892
|
#: mpdevil:931
|
||||||
msgid "Name:"
|
msgid "Name:"
|
||||||
msgstr "Name:"
|
msgstr "Name:"
|
||||||
|
|
||||||
#: mpdevil:893
|
#: mpdevil:932
|
||||||
msgid "Host:"
|
msgid "Host:"
|
||||||
msgstr "Host:"
|
msgstr "Host:"
|
||||||
|
|
||||||
#: mpdevil:894
|
#: mpdevil:933
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "Passwort:"
|
msgstr "Passwort:"
|
||||||
|
|
||||||
#: mpdevil:895
|
#: mpdevil:934
|
||||||
msgid "Music lib:"
|
msgid "Music lib:"
|
||||||
msgstr "Musikverzeichnis:"
|
msgstr "Musikverzeichnis:"
|
||||||
|
|
||||||
#: mpdevil:896
|
#: mpdevil:935
|
||||||
msgid "Cover regex:"
|
msgid "Cover regex:"
|
||||||
msgstr "Cover-Regex:"
|
msgstr "Cover-Regex:"
|
||||||
|
|
||||||
#: mpdevil:1029
|
#: mpdevil:1070
|
||||||
msgid "Choose directory"
|
msgid "Choose directory"
|
||||||
msgstr "Verzeichnis Wählen"
|
msgstr "Verzeichnis wählen"
|
||||||
|
|
||||||
#: mpdevil:1065
|
#: mpdevil:1101
|
||||||
msgid "Choose the order of information to appear in the playlist:"
|
msgid "Choose the order of information to appear in the playlist:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Lege die Reihenfolge fest, in der Informationen in der Wiedergabeliste "
|
"Lege die Reihenfolge fest, in der Informationen in der Wiedergabeliste "
|
||||||
"angezeigt werden sollen:"
|
"angezeigt werden sollen:"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1604 mpdevil:1930 mpdevil:2633
|
#: mpdevil:1118 mpdevil:1671 mpdevil:1766 mpdevil:2706
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr "Nr."
|
msgstr "Nr."
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:2634
|
#: mpdevil:1118 mpdevil:2707
|
||||||
msgid "Disc"
|
msgid "Disc"
|
||||||
msgstr "CD"
|
msgstr "CD"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1609 mpdevil:1933 mpdevil:2635
|
#: mpdevil:1118 mpdevil:1674 mpdevil:1771 mpdevil:2708
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1615 mpdevil:2636
|
#: mpdevil:1118 mpdevil:1777 mpdevil:2709
|
||||||
msgid "Artist"
|
msgid "Artist"
|
||||||
msgstr "Interpret"
|
msgstr "Interpret"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1621 mpdevil:2637
|
#: mpdevil:1118 mpdevil:1783 mpdevil:2710
|
||||||
msgid "Album"
|
msgid "Album"
|
||||||
msgstr "Album"
|
msgstr "Album"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1627 mpdevil:1937 mpdevil:2638
|
#: mpdevil:1118 mpdevil:1678 mpdevil:1789 mpdevil:2711
|
||||||
msgid "Length"
|
msgid "Length"
|
||||||
msgstr "Länge"
|
msgstr "Länge"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:2639
|
#: mpdevil:1118 mpdevil:2712
|
||||||
msgid "Year"
|
msgid "Year"
|
||||||
msgstr "Jahr"
|
msgstr "Jahr"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:2640
|
#: mpdevil:1118 mpdevil:2713
|
||||||
msgid "Genre"
|
msgid "Genre"
|
||||||
msgstr "Genre"
|
msgstr "Genre"
|
||||||
|
|
||||||
#: mpdevil:1198 mpdevil:1200 mpdevil:3498
|
#: mpdevil:1234 mpdevil:1236 mpdevil:3666
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Einstellungen"
|
msgstr "Einstellungen"
|
||||||
|
|
||||||
#: mpdevil:1213 mpdevil:1222 mpdevil:3345
|
#: mpdevil:1249 mpdevil:1258 mpdevil:3513
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Allgemein"
|
msgstr "Allgemein"
|
||||||
|
|
||||||
#: mpdevil:1214 mpdevil:1223 mpdevil:3509
|
#: mpdevil:1250 mpdevil:1259 mpdevil:3677
|
||||||
msgid "Profiles"
|
msgid "Profiles"
|
||||||
msgstr "Profile"
|
msgstr "Profile"
|
||||||
|
|
||||||
#: mpdevil:1215 mpdevil:1224 mpdevil:3349
|
#: mpdevil:1251 mpdevil:1260 mpdevil:3517
|
||||||
msgid "Playlist"
|
msgid "Playlist"
|
||||||
msgstr "Wiedergabeliste"
|
msgstr "Wiedergabeliste"
|
||||||
|
|
||||||
#: mpdevil:1238
|
#: mpdevil:1273
|
||||||
msgid "Stats"
|
msgid "Stats"
|
||||||
msgstr "Statistik"
|
msgstr "Statistik"
|
||||||
|
|
||||||
#: mpdevil:1248
|
#: mpdevil:1283
|
||||||
msgid "<b>Protocol:</b>"
|
msgid "<b>Protocol:</b>"
|
||||||
msgstr "<b>Protokoll:</b>"
|
msgstr "<b>Protokoll:</b>"
|
||||||
|
|
||||||
#: mpdevil:1249
|
#: mpdevil:1284
|
||||||
msgid "<b>Uptime:</b>"
|
msgid "<b>Uptime:</b>"
|
||||||
msgstr "<b>Uptime:</b>"
|
msgstr "<b>Uptime:</b>"
|
||||||
|
|
||||||
#: mpdevil:1250
|
#: mpdevil:1285
|
||||||
msgid "<b>Playtime:</b>"
|
msgid "<b>Playtime:</b>"
|
||||||
msgstr "<b>Wiedergabezeit:</b>"
|
msgstr "<b>Wiedergabezeit:</b>"
|
||||||
|
|
||||||
#: mpdevil:1251
|
#: mpdevil:1286
|
||||||
msgid "<b>Artists:</b>"
|
msgid "<b>Artists:</b>"
|
||||||
msgstr "<b>Künstler:</b>"
|
msgstr "<b>Künstler:</b>"
|
||||||
|
|
||||||
#: mpdevil:1252
|
#: mpdevil:1287
|
||||||
msgid "<b>Albums:</b>"
|
msgid "<b>Albums:</b>"
|
||||||
msgstr "<b>Alben:</b>"
|
msgstr "<b>Alben:</b>"
|
||||||
|
|
||||||
#: mpdevil:1253
|
#: mpdevil:1288
|
||||||
msgid "<b>Songs:</b>"
|
msgid "<b>Songs:</b>"
|
||||||
msgstr "<b>Titel:</b>"
|
msgstr "<b>Titel:</b>"
|
||||||
|
|
||||||
#: mpdevil:1254
|
#: mpdevil:1289
|
||||||
msgid "<b>Total Playtime:</b>"
|
msgid "<b>Total Playtime:</b>"
|
||||||
msgstr "<b>Gesamt Wiedergabezeit:</b>"
|
msgstr "<b>Gesamtwiedergabezeit:</b>"
|
||||||
|
|
||||||
#: mpdevil:1255
|
#: mpdevil:1290
|
||||||
msgid "<b>Database Update:</b>"
|
msgid "<b>Database Update:</b>"
|
||||||
msgstr "<b>Datenbankaktualisierung:</b>"
|
msgstr "<b>Datenbankaktualisierung:</b>"
|
||||||
|
|
||||||
#: mpdevil:1280
|
#: mpdevil:1314
|
||||||
msgid "A simple music browser for MPD"
|
msgid "A simple music browser for MPD"
|
||||||
msgstr "Ein einfacher Musikbrowser für MPD"
|
msgstr "Ein einfacher Musikbrowser für MPD"
|
||||||
|
|
||||||
#: mpdevil:1360
|
#: mpdevil:1412
|
||||||
|
msgid "Open with…"
|
||||||
|
msgstr "Öffnen mit…"
|
||||||
|
|
||||||
|
#: mpdevil:1430
|
||||||
msgid "MPD-Tag"
|
msgid "MPD-Tag"
|
||||||
msgstr "MPD-Tag"
|
msgstr "MPD-Tag"
|
||||||
|
|
||||||
#: mpdevil:1363
|
#: mpdevil:1433
|
||||||
msgid "Value"
|
msgid "Value"
|
||||||
msgstr "Wert"
|
msgstr "Wert"
|
||||||
|
|
||||||
#: mpdevil:1522
|
#: mpdevil:1564
|
||||||
msgid "_Append"
|
msgid "_Append"
|
||||||
msgstr "_Anhängen"
|
msgstr "_Anhängen"
|
||||||
|
|
||||||
#: mpdevil:1524
|
#: mpdevil:1566
|
||||||
msgid "Add all titles to playlist"
|
msgid "Add all titles to playlist"
|
||||||
msgstr "Alle Titel der Wiedergabeliste anhängen"
|
msgstr "Alle Titel der Wiedergabeliste anhängen"
|
||||||
|
|
||||||
#: mpdevil:1525
|
#: mpdevil:1567
|
||||||
msgid "_Play"
|
msgid "_Play"
|
||||||
msgstr "Ab_spielen"
|
msgstr "Ab_spielen"
|
||||||
|
|
||||||
#: mpdevil:1527
|
#: mpdevil:1569
|
||||||
msgid "Directly play all titles"
|
msgid "Directly play all titles"
|
||||||
msgstr "Alle Titel sofort abspielen"
|
msgstr "Alle Titel sofort abspielen"
|
||||||
|
|
||||||
#: mpdevil:1528
|
#: mpdevil:1570
|
||||||
msgid "_Enqueue"
|
msgid "_Enqueue"
|
||||||
msgstr "_Einreihen"
|
msgstr "_Einreihen"
|
||||||
|
|
||||||
#: mpdevil:1530
|
#: mpdevil:1572
|
||||||
msgid ""
|
msgid ""
|
||||||
"Append all titles after the currently playing track and clear the playlist "
|
"Append all titles after the currently playing track and clear the playlist "
|
||||||
"from all other songs"
|
"from all other songs"
|
||||||
@@ -282,259 +273,304 @@ msgstr ""
|
|||||||
"Alle Titel hinter dem aktuellen Stück einreihen und die weitere "
|
"Alle Titel hinter dem aktuellen Stück einreihen und die weitere "
|
||||||
"Wiedergabeliste leeren"
|
"Wiedergabeliste leeren"
|
||||||
|
|
||||||
#: mpdevil:1665
|
#: mpdevil:1827
|
||||||
msgid "all tags"
|
msgid "all tags"
|
||||||
msgstr "Alle Tags"
|
msgstr "Alle Tags"
|
||||||
|
|
||||||
#: mpdevil:1689
|
#: mpdevil:1856
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{num} hits"
|
msgid "{hits} hit"
|
||||||
msgstr "{num} Treffer"
|
msgid_plural "{hits} hits"
|
||||||
|
msgstr[0] "{hits} Treffer"
|
||||||
|
msgstr[1] "{hits} Treffer"
|
||||||
|
|
||||||
#: mpdevil:1727
|
#: mpdevil:1894
|
||||||
msgid "all genres"
|
msgid "all genres"
|
||||||
msgstr "Alle Genres"
|
msgstr "Alle Genres"
|
||||||
|
|
||||||
#: mpdevil:1830
|
#: mpdevil:1996
|
||||||
msgid "all artists"
|
msgid "all artists"
|
||||||
msgstr "Alle Interpreten"
|
msgstr "Alle Interpreten"
|
||||||
|
|
||||||
#: mpdevil:1942
|
#: mpdevil:2180 mpdevil:2805 mpdevil:3091 mpdevil:3092
|
||||||
msgid "Close"
|
|
||||||
msgstr "Schließen"
|
|
||||||
|
|
||||||
#: mpdevil:2113
|
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{titles} titles on {discs} discs ({length})"
|
msgid "{titles} title"
|
||||||
msgstr "{titles} Titel auf {discs} CDs ({length})"
|
msgid_plural "{titles} titles"
|
||||||
|
msgstr[0] "{titles} Titel"
|
||||||
|
msgstr[1] "{titles} Titel"
|
||||||
|
|
||||||
#: mpdevil:2116 mpdevil:2728
|
#: mpdevil:2182
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{titles} titles ({length})"
|
msgid "on {discs} discs"
|
||||||
msgstr "{titles} Titel ({length})"
|
msgstr "auf {discs} CDs"
|
||||||
|
|
||||||
#: mpdevil:2242 mpdevil:3368
|
#: mpdevil:2322 mpdevil:3536
|
||||||
msgid "Back to current album"
|
msgid "Back to current album"
|
||||||
msgstr "Zurück zu aktuellem Album"
|
msgstr "Zurück zu aktuellem Album"
|
||||||
|
|
||||||
#: mpdevil:2244
|
#: mpdevil:2324
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Suche"
|
msgstr "Suche"
|
||||||
|
|
||||||
#: mpdevil:2421
|
#: mpdevil:2500
|
||||||
msgid "searching..."
|
msgid "searching..."
|
||||||
msgstr "suche..."
|
msgstr "suche..."
|
||||||
|
|
||||||
#: mpdevil:2426
|
#: mpdevil:2505
|
||||||
msgid "connection error"
|
msgid "connection error"
|
||||||
msgstr "Verbindungsfehler"
|
msgstr "Verbindungsfehler"
|
||||||
|
|
||||||
#: mpdevil:2428
|
#: mpdevil:2507
|
||||||
msgid "lyrics not found"
|
msgid "lyrics not found"
|
||||||
msgstr "Liedtext nicht gefunden"
|
msgstr "Liedtext nicht gefunden"
|
||||||
|
|
||||||
#: mpdevil:2476
|
#: mpdevil:2552
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid "{channels} channel"
|
||||||
"{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} channels, "
|
msgid_plural "{channels} channels"
|
||||||
"{file_type}"
|
msgstr[0] "{channels} Kanal"
|
||||||
msgstr ""
|
msgstr[1] "{channels} Kanäle"
|
||||||
"{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} Kanäle, "
|
|
||||||
"{file_type}"
|
|
||||||
|
|
||||||
#: mpdevil:2606
|
#: mpdevil:2680
|
||||||
msgid "Scroll to current song"
|
msgid "Scroll to current song"
|
||||||
msgstr "Gehe zu aktuellem Lied"
|
msgstr "Gehe zu aktuellem Lied"
|
||||||
|
|
||||||
#: mpdevil:2614 mpdevil:3384
|
#: mpdevil:2688 mpdevil:3552
|
||||||
msgid "Clear playlist"
|
msgid "Clear playlist"
|
||||||
msgstr "Wiedergabeliste leeren"
|
msgstr "Wiedergabeliste leeren"
|
||||||
|
|
||||||
#: mpdevil:2883
|
#: mpdevil:2982
|
||||||
msgid "Show lyrics"
|
msgid "Show lyrics"
|
||||||
msgstr "Zeige Liedtext"
|
msgstr "Zeige Liedtext"
|
||||||
|
|
||||||
#: mpdevil:3161
|
#: mpdevil:3300
|
||||||
msgid "Random mode"
|
msgid "Random mode"
|
||||||
msgstr "Zufallsmodus"
|
msgstr "Zufallsmodus"
|
||||||
|
|
||||||
#: mpdevil:3163
|
#: mpdevil:3302
|
||||||
msgid "Repeat mode"
|
msgid "Repeat mode"
|
||||||
msgstr "Dauerschleife"
|
msgstr "Dauerschleife"
|
||||||
|
|
||||||
#: mpdevil:3165
|
#: mpdevil:3304
|
||||||
msgid "Single mode"
|
msgid "Single mode"
|
||||||
msgstr "Einzelstückmodus"
|
msgstr "Einzelstückmodus"
|
||||||
|
|
||||||
#: mpdevil:3167
|
#: mpdevil:3306
|
||||||
msgid "Consume mode"
|
msgid "Consume mode"
|
||||||
msgstr "Wiedergabeliste verbrauchen"
|
msgstr "Wiedergabeliste verbrauchen"
|
||||||
|
|
||||||
#: mpdevil:3346
|
#: mpdevil:3514
|
||||||
msgid "Window"
|
msgid "Window"
|
||||||
msgstr "Fenster"
|
msgstr "Fenster"
|
||||||
|
|
||||||
#: mpdevil:3347
|
#: mpdevil:3515
|
||||||
msgid "Playback"
|
msgid "Playback"
|
||||||
msgstr "Wiedergabe"
|
msgstr "Wiedergabe"
|
||||||
|
|
||||||
#: mpdevil:3348
|
#: mpdevil:3516
|
||||||
msgid "Search, Album Dialog and Album List"
|
msgid "Search, Album Dialog and Album List"
|
||||||
msgstr "Suche, Albumdialog und Albumliste"
|
msgstr "Suche, Albumdialog und Albumliste"
|
||||||
|
|
||||||
#: mpdevil:3358
|
#: mpdevil:3526
|
||||||
msgid "Open online help"
|
msgid "Open online help"
|
||||||
msgstr "Onlinehilfe öffnen"
|
msgstr "Onlinehilfe öffnen"
|
||||||
|
|
||||||
#: mpdevil:3359
|
#: mpdevil:3527
|
||||||
msgid "Open shortcuts window"
|
msgid "Open shortcuts window"
|
||||||
msgstr "Tastenkürzelfenster öffnen"
|
msgstr "Tastenkürzelfenster öffnen"
|
||||||
|
|
||||||
#: mpdevil:3360
|
#: mpdevil:3528
|
||||||
msgid "Open menu"
|
msgid "Open menu"
|
||||||
msgstr "Menü öffnen"
|
msgstr "Menü öffnen"
|
||||||
|
|
||||||
#: mpdevil:3361 mpdevil:3504
|
#: mpdevil:3529 mpdevil:3672
|
||||||
msgid "Update database"
|
msgid "Update database"
|
||||||
msgstr "Datenbank aktualisieren"
|
msgstr "Datenbank aktualisieren"
|
||||||
|
|
||||||
#: mpdevil:3362 mpdevil:3502
|
#: mpdevil:3530 mpdevil:3670
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Beenden"
|
msgstr "Beenden"
|
||||||
|
|
||||||
#: mpdevil:3363
|
#: mpdevil:3531
|
||||||
msgid "Cycle through profiles"
|
msgid "Cycle through profiles"
|
||||||
msgstr "Profile durchschalten"
|
msgstr "Profile durchschalten"
|
||||||
|
|
||||||
#: mpdevil:3364
|
#: mpdevil:3532
|
||||||
msgid "Cycle through profiles in reversed order"
|
msgid "Cycle through profiles in reversed order"
|
||||||
msgstr "Profile rückwärts durchschalten"
|
msgstr "Profile rückwärts durchschalten"
|
||||||
|
|
||||||
#: mpdevil:3365
|
#: mpdevil:3533
|
||||||
msgid "Toggle mini player"
|
msgid "Toggle mini player"
|
||||||
msgstr "Miniplayer ein-/ausschalten"
|
msgstr "Miniplayer ein-/ausschalten"
|
||||||
|
|
||||||
#: mpdevil:3366
|
#: mpdevil:3534
|
||||||
msgid "Toggle lyrics"
|
msgid "Toggle lyrics"
|
||||||
msgstr "Liedtext ein-/ausblenden"
|
msgstr "Liedtext ein-/ausblenden"
|
||||||
|
|
||||||
#: mpdevil:3367
|
#: mpdevil:3535
|
||||||
msgid "Toggle search"
|
msgid "Toggle search"
|
||||||
msgstr "Suche ein-/ausblenden"
|
msgstr "Suche ein-/ausblenden"
|
||||||
|
|
||||||
#: mpdevil:3369
|
#: mpdevil:3537
|
||||||
msgid "Play/Pause"
|
msgid "Play/Pause"
|
||||||
msgstr "Wiedergabe/Pause"
|
msgstr "Wiedergabe/Pause"
|
||||||
|
|
||||||
#: mpdevil:3370
|
#: mpdevil:3538
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Stopp"
|
msgstr "Stopp"
|
||||||
|
|
||||||
#: mpdevil:3371
|
#: mpdevil:3539
|
||||||
msgid "Next title"
|
msgid "Next title"
|
||||||
msgstr "Nächster Titel"
|
msgstr "Nächster Titel"
|
||||||
|
|
||||||
#: mpdevil:3372
|
#: mpdevil:3540
|
||||||
msgid "Previous title"
|
msgid "Previous title"
|
||||||
msgstr "Vorheriger Titel"
|
msgstr "Vorheriger Titel"
|
||||||
|
|
||||||
#: mpdevil:3373
|
#: mpdevil:3541
|
||||||
msgid "Seek forward"
|
msgid "Seek forward"
|
||||||
msgstr "Vorspulen"
|
msgstr "Vorspulen"
|
||||||
|
|
||||||
#: mpdevil:3374
|
#: mpdevil:3542
|
||||||
msgid "Seek backward"
|
msgid "Seek backward"
|
||||||
msgstr "Zurückspulen"
|
msgstr "Zurückspulen"
|
||||||
|
|
||||||
#: mpdevil:3375
|
#: mpdevil:3543
|
||||||
msgid "Toggle repeat mode"
|
msgid "Toggle repeat mode"
|
||||||
msgstr "Dauerschleife ein-/ausschalten"
|
msgstr "Dauerschleife ein-/ausschalten"
|
||||||
|
|
||||||
#: mpdevil:3376
|
#: mpdevil:3544
|
||||||
msgid "Toggle random mode"
|
msgid "Toggle random mode"
|
||||||
msgstr "Zufallsmodus ein-/ausschalten"
|
msgstr "Zufallsmodus ein-/ausschalten"
|
||||||
|
|
||||||
#: mpdevil:3377
|
#: mpdevil:3545
|
||||||
msgid "Toggle single mode"
|
msgid "Toggle single mode"
|
||||||
msgstr "Einzelstückmodus ein-/ausschalten"
|
msgstr "Einzelstückmodus ein-/ausschalten"
|
||||||
|
|
||||||
#: mpdevil:3378
|
#: mpdevil:3546
|
||||||
msgid "Toggle consume mode"
|
msgid "Toggle consume mode"
|
||||||
msgstr "Wiedergabeliste verbrauchen ein-/ausschalten"
|
msgstr "Wiedergabeliste verbrauchen ein-/ausschalten"
|
||||||
|
|
||||||
#: mpdevil:3379
|
#: mpdevil:3547
|
||||||
msgid "Play selected item (next)"
|
msgid "Play selected item (next)"
|
||||||
msgstr "Ausgewähltes Element (als Nächstes) abspielen"
|
msgstr "Ausgewähltes Element (als Nächstes) abspielen"
|
||||||
|
|
||||||
#: mpdevil:3379
|
#: mpdevil:3547
|
||||||
msgid "Left-click"
|
msgid "Left-click"
|
||||||
msgstr "Linksklick"
|
msgstr "Linksklick"
|
||||||
|
|
||||||
#: mpdevil:3380
|
#: mpdevil:3548
|
||||||
msgid "Append selected item"
|
msgid "Append selected item"
|
||||||
msgstr "Ausgewähltes Element anhängen"
|
msgstr "Ausgewähltes Element anhängen"
|
||||||
|
|
||||||
#: mpdevil:3380 mpdevil:3383
|
#: mpdevil:3548 mpdevil:3551
|
||||||
msgid "Middle-click"
|
msgid "Middle-click"
|
||||||
msgstr "Mittelklick"
|
msgstr "Mittelklick"
|
||||||
|
|
||||||
#: mpdevil:3381
|
#: mpdevil:3549
|
||||||
msgid "Play selected item immediately"
|
msgid "Play selected item immediately"
|
||||||
msgstr "Ausgewähltes Element sofort abspielen"
|
msgstr "Ausgewähltes Element sofort abspielen"
|
||||||
|
|
||||||
#: mpdevil:3381
|
#: mpdevil:3549
|
||||||
msgid "Double-click"
|
msgid "Double-click"
|
||||||
msgstr "Doppelklick"
|
msgstr "Doppelklick"
|
||||||
|
|
||||||
#: mpdevil:3382 mpdevil:3385
|
#: mpdevil:3550 mpdevil:3553
|
||||||
msgid "Show additional information"
|
msgid "Show additional information"
|
||||||
msgstr "Zeige weitere Informationen"
|
msgstr "Zeige weitere Informationen"
|
||||||
|
|
||||||
#: mpdevil:3382 mpdevil:3385
|
#: mpdevil:3550 mpdevil:3553
|
||||||
msgid "Right-click"
|
msgid "Right-click"
|
||||||
msgstr "Rechtsklick"
|
msgstr "Rechtsklick"
|
||||||
|
|
||||||
#: mpdevil:3383
|
#: mpdevil:3551
|
||||||
msgid "Remove selected song"
|
msgid "Remove selected song"
|
||||||
msgstr "Ausgewählten Titel entfernen"
|
msgstr "Ausgewählten Titel entfernen"
|
||||||
|
|
||||||
#: mpdevil:3427
|
#: mpdevil:3577
|
||||||
|
msgid "Connect"
|
||||||
|
msgstr "Verbinden"
|
||||||
|
|
||||||
|
#: mpdevil:3595
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Connection to “{profile}” ({host}:{port}) failed"
|
msgid "Connection to “{profile}” ({host}:{port}) failed"
|
||||||
msgstr "Verbindung zu „{profile}“ ({host}:{port}) fehlgeschlagen"
|
msgstr "Verbindung zu „{profile}“ ({host}:{port}) fehlgeschlagen"
|
||||||
|
|
||||||
#: mpdevil:3499
|
#: mpdevil:3667
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr "Tastenkürzel"
|
msgstr "Tastenkürzel"
|
||||||
|
|
||||||
#: mpdevil:3500
|
#: mpdevil:3668
|
||||||
msgid "Help"
|
msgid "Help"
|
||||||
msgstr "Hilfe"
|
msgstr "Hilfe"
|
||||||
|
|
||||||
#: mpdevil:3501
|
#: mpdevil:3669
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr "Über"
|
msgstr "Über"
|
||||||
|
|
||||||
#: mpdevil:3505
|
#: mpdevil:3673
|
||||||
msgid "Server stats"
|
msgid "Server stats"
|
||||||
msgstr "Serverstatistik"
|
msgstr "Serverstatistik"
|
||||||
|
|
||||||
#: mpdevil:3510
|
#: mpdevil:3678
|
||||||
msgid "Mini player"
|
msgid "Mini player"
|
||||||
msgstr "Miniplayer"
|
msgstr "Miniplayer"
|
||||||
|
|
||||||
#: mpdevil:3511
|
#: mpdevil:3683
|
||||||
msgid "Save window layout"
|
|
||||||
msgstr "Fensterlayout speichern"
|
|
||||||
|
|
||||||
#: mpdevil:3516
|
|
||||||
msgid "Menu"
|
msgid "Menu"
|
||||||
msgstr "Menü"
|
msgstr "Menü"
|
||||||
|
|
||||||
#: mpdevil:3566 mpdevil:3568
|
#: mpdevil:3734 mpdevil:3736
|
||||||
msgid "connecting…"
|
msgid "connecting…"
|
||||||
msgstr "verbinden…"
|
msgstr "verbinden…"
|
||||||
|
|
||||||
|
#~ msgid "Sort albums in chronological order"
|
||||||
|
#~ msgstr "Alben chronologisch sortieren"
|
||||||
|
|
||||||
|
#~ msgid "name"
|
||||||
|
#~ msgstr "Name"
|
||||||
|
|
||||||
|
#~ msgid "year"
|
||||||
|
#~ msgstr "Jahr"
|
||||||
|
|
||||||
|
#~ msgid "Position of playlist:"
|
||||||
|
#~ msgstr "Wiedergabelistenposition:"
|
||||||
|
|
||||||
|
#~ msgid "bottom"
|
||||||
|
#~ msgstr "unten"
|
||||||
|
|
||||||
|
#~ msgid "right"
|
||||||
|
#~ msgstr "rechts"
|
||||||
|
|
||||||
|
#~ msgid "Show tooltips in album view"
|
||||||
|
#~ msgstr "Zeige Tooltips in Albumliste"
|
||||||
|
|
||||||
|
#~ msgid "Save window layout"
|
||||||
|
#~ msgstr "Fensterlayout speichern"
|
||||||
|
|
||||||
|
#, python-brace-format
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} channels, "
|
||||||
|
#~ "{file_type}"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} Kanäle, "
|
||||||
|
#~ "{file_type}"
|
||||||
|
|
||||||
|
#, python-brace-format
|
||||||
|
#~ msgid "{titles} titles on {discs} discs ({length})"
|
||||||
|
#~ msgstr "{titles} Titel auf {discs} CDs ({length})"
|
||||||
|
|
||||||
|
#, python-brace-format
|
||||||
|
#~ msgid "{titles} titles ({length})"
|
||||||
|
#~ msgstr "{titles} Titel ({length})"
|
||||||
|
|
||||||
|
#, python-brace-format
|
||||||
|
#~ msgid "{num} hits"
|
||||||
|
#~ msgstr "{num} Treffer"
|
||||||
|
|
||||||
|
#~ msgid "Close"
|
||||||
|
#~ msgstr "Schließen"
|
||||||
|
|
||||||
#~ msgid "Album Artist"
|
#~ msgid "Album Artist"
|
||||||
#~ msgstr "Albuminterpret"
|
#~ msgstr "Albuminterpret"
|
||||||
|
|
||||||
@@ -555,10 +591,6 @@ msgstr "verbinden…"
|
|||||||
#~ msgid "not connected"
|
#~ msgid "not connected"
|
||||||
#~ msgstr "nicht verbunden"
|
#~ msgstr "nicht verbunden"
|
||||||
|
|
||||||
#, python-format
|
|
||||||
#~ msgid "hits: %i"
|
|
||||||
#~ msgstr "Treffer: %i"
|
|
||||||
|
|
||||||
#~ msgid "Add"
|
#~ msgid "Add"
|
||||||
#~ msgstr "Hinzufügen"
|
#~ msgstr "Hinzufügen"
|
||||||
|
|
||||||
|
312
po/mpdevil.pot
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-10-20 18:10+0200\n"
|
"POT-Creation-Date: 2021-02-12 16:57+0100\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -16,511 +16,503 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
||||||
|
|
||||||
#: mpdevil:419
|
#: mpdevil:438
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "{days} day"
|
||||||
|
msgid_plural "{days} days"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
|
#: mpdevil:473
|
||||||
msgid "Unknown Title"
|
msgid "Unknown Title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:719
|
#: mpdevil:802
|
||||||
msgid "Main cover size:"
|
msgid "Main cover size:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:720
|
#: mpdevil:803
|
||||||
msgid "Album view cover size:"
|
msgid "Album view cover size:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:721
|
#: mpdevil:804
|
||||||
msgid "Action bar icon size:"
|
msgid "Action bar icon size:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:722
|
#: mpdevil:805
|
||||||
msgid "Secondary icon size:"
|
msgid "Secondary icon size:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:735
|
#: mpdevil:818
|
||||||
msgid "Sort albums by:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil:735
|
|
||||||
msgid "name"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil:735
|
|
||||||
msgid "year"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil:736
|
|
||||||
msgid "Position of playlist:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil:736
|
|
||||||
msgid "bottom"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil:736
|
|
||||||
msgid "right"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil:754
|
|
||||||
msgid "Use Client-side decoration"
|
msgid "Use Client-side decoration"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:755
|
#: mpdevil:819
|
||||||
msgid "Show stop button"
|
msgid "Show stop button"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:756
|
#: mpdevil:820
|
||||||
msgid "Show lyrics button"
|
msgid "Show lyrics button"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:757
|
#: mpdevil:821
|
||||||
msgid "Show initials in artist view"
|
msgid "Show initials in artist view"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:758
|
#: mpdevil:822
|
||||||
msgid "Show tooltips in album view"
|
msgid "Place playlist at the side"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:759
|
#: mpdevil:823
|
||||||
msgid "Use “Album Artist” tag"
|
msgid "Use “Album Artist” tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:760
|
#: mpdevil:824
|
||||||
msgid "Send notification on title change"
|
msgid "Send notification on title change"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:761
|
#: mpdevil:825
|
||||||
msgid "Stop playback on quit"
|
msgid "Stop playback on quit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:762
|
#: mpdevil:826
|
||||||
msgid "Play selected albums and titles immediately"
|
msgid "Play selected albums and titles immediately"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:775
|
#: mpdevil:827
|
||||||
|
msgid "Sort albums by year"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil:839
|
||||||
msgid "<b>View</b>"
|
msgid "<b>View</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:776
|
#: mpdevil:840
|
||||||
msgid "<b>Behavior</b>"
|
msgid "<b>Behavior</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:808
|
#: mpdevil:860
|
||||||
msgid "(restart required)"
|
msgid "(restart required)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:870 mpdevil:3409
|
#: mpdevil:909
|
||||||
msgid "Connect"
|
msgid "_Connect"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:886
|
#: mpdevil:925
|
||||||
msgid ""
|
msgid ""
|
||||||
"The first image in the same directory as the song file matching this regex "
|
"The first image in the same directory as the song file matching this regex "
|
||||||
"will be displayed. %AlbumArtist% and %Album% will be replaced by the "
|
"will be displayed. %AlbumArtist% and %Album% will be replaced by the "
|
||||||
"corresponding tags of the song."
|
"corresponding tags of the song."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:891
|
#: mpdevil:930
|
||||||
msgid "Profile:"
|
msgid "Profile:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:892
|
#: mpdevil:931
|
||||||
msgid "Name:"
|
msgid "Name:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:893
|
#: mpdevil:932
|
||||||
msgid "Host:"
|
msgid "Host:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:894
|
#: mpdevil:933
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:895
|
#: mpdevil:934
|
||||||
msgid "Music lib:"
|
msgid "Music lib:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:896
|
#: mpdevil:935
|
||||||
msgid "Cover regex:"
|
msgid "Cover regex:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1029
|
#: mpdevil:1070
|
||||||
msgid "Choose directory"
|
msgid "Choose directory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1065
|
#: mpdevil:1101
|
||||||
msgid "Choose the order of information to appear in the playlist:"
|
msgid "Choose the order of information to appear in the playlist:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1604 mpdevil:1930 mpdevil:2633
|
#: mpdevil:1118 mpdevil:1671 mpdevil:1766 mpdevil:2706
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:2634
|
#: mpdevil:1118 mpdevil:2707
|
||||||
msgid "Disc"
|
msgid "Disc"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1609 mpdevil:1933 mpdevil:2635
|
#: mpdevil:1118 mpdevil:1674 mpdevil:1771 mpdevil:2708
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1615 mpdevil:2636
|
#: mpdevil:1118 mpdevil:1777 mpdevil:2709
|
||||||
msgid "Artist"
|
msgid "Artist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1621 mpdevil:2637
|
#: mpdevil:1118 mpdevil:1783 mpdevil:2710
|
||||||
msgid "Album"
|
msgid "Album"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1627 mpdevil:1937 mpdevil:2638
|
#: mpdevil:1118 mpdevil:1678 mpdevil:1789 mpdevil:2711
|
||||||
msgid "Length"
|
msgid "Length"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:2639
|
#: mpdevil:1118 mpdevil:2712
|
||||||
msgid "Year"
|
msgid "Year"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:2640
|
#: mpdevil:1118 mpdevil:2713
|
||||||
msgid "Genre"
|
msgid "Genre"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1198 mpdevil:1200 mpdevil:3498
|
#: mpdevil:1234 mpdevil:1236 mpdevil:3666
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1213 mpdevil:1222 mpdevil:3345
|
#: mpdevil:1249 mpdevil:1258 mpdevil:3513
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1214 mpdevil:1223 mpdevil:3509
|
#: mpdevil:1250 mpdevil:1259 mpdevil:3677
|
||||||
msgid "Profiles"
|
msgid "Profiles"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1215 mpdevil:1224 mpdevil:3349
|
#: mpdevil:1251 mpdevil:1260 mpdevil:3517
|
||||||
msgid "Playlist"
|
msgid "Playlist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1238
|
#: mpdevil:1273
|
||||||
msgid "Stats"
|
msgid "Stats"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1248
|
#: mpdevil:1283
|
||||||
msgid "<b>Protocol:</b>"
|
msgid "<b>Protocol:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1249
|
#: mpdevil:1284
|
||||||
msgid "<b>Uptime:</b>"
|
msgid "<b>Uptime:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1250
|
#: mpdevil:1285
|
||||||
msgid "<b>Playtime:</b>"
|
msgid "<b>Playtime:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1251
|
#: mpdevil:1286
|
||||||
msgid "<b>Artists:</b>"
|
msgid "<b>Artists:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1252
|
#: mpdevil:1287
|
||||||
msgid "<b>Albums:</b>"
|
msgid "<b>Albums:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1253
|
#: mpdevil:1288
|
||||||
msgid "<b>Songs:</b>"
|
msgid "<b>Songs:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1254
|
#: mpdevil:1289
|
||||||
msgid "<b>Total Playtime:</b>"
|
msgid "<b>Total Playtime:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1255
|
#: mpdevil:1290
|
||||||
msgid "<b>Database Update:</b>"
|
msgid "<b>Database Update:</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1280
|
#: mpdevil:1314
|
||||||
msgid "A simple music browser for MPD"
|
msgid "A simple music browser for MPD"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1360
|
#: mpdevil:1412
|
||||||
|
msgid "Open with…"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil:1430
|
||||||
msgid "MPD-Tag"
|
msgid "MPD-Tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1363
|
#: mpdevil:1433
|
||||||
msgid "Value"
|
msgid "Value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1522
|
#: mpdevil:1564
|
||||||
msgid "_Append"
|
msgid "_Append"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1524
|
#: mpdevil:1566
|
||||||
msgid "Add all titles to playlist"
|
msgid "Add all titles to playlist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1525
|
#: mpdevil:1567
|
||||||
msgid "_Play"
|
msgid "_Play"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1527
|
#: mpdevil:1569
|
||||||
msgid "Directly play all titles"
|
msgid "Directly play all titles"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1528
|
#: mpdevil:1570
|
||||||
msgid "_Enqueue"
|
msgid "_Enqueue"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1530
|
#: mpdevil:1572
|
||||||
msgid ""
|
msgid ""
|
||||||
"Append all titles after the currently playing track and clear the playlist "
|
"Append all titles after the currently playing track and clear the playlist "
|
||||||
"from all other songs"
|
"from all other songs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1665
|
#: mpdevil:1827
|
||||||
msgid "all tags"
|
msgid "all tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1689
|
#: mpdevil:1856
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{num} hits"
|
msgid "{hits} hit"
|
||||||
msgstr ""
|
msgid_plural "{hits} hits"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
#: mpdevil:1727
|
#: mpdevil:1894
|
||||||
msgid "all genres"
|
msgid "all genres"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1830
|
#: mpdevil:1996
|
||||||
msgid "all artists"
|
msgid "all artists"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:1942
|
#: mpdevil:2180 mpdevil:2805 mpdevil:3091 mpdevil:3092
|
||||||
msgid "Close"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil:2113
|
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{titles} titles on {discs} discs ({length})"
|
msgid "{titles} title"
|
||||||
msgstr ""
|
msgid_plural "{titles} titles"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
#: mpdevil:2116 mpdevil:2728
|
#: mpdevil:2182
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{titles} titles ({length})"
|
msgid "on {discs} discs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:2242 mpdevil:3368
|
#: mpdevil:2322 mpdevil:3536
|
||||||
msgid "Back to current album"
|
msgid "Back to current album"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:2244
|
#: mpdevil:2324
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:2421
|
#: mpdevil:2500
|
||||||
msgid "searching..."
|
msgid "searching..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:2426
|
#: mpdevil:2505
|
||||||
msgid "connection error"
|
msgid "connection error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:2428
|
#: mpdevil:2507
|
||||||
msgid "lyrics not found"
|
msgid "lyrics not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:2476
|
#: mpdevil:2552
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid "{channels} channel"
|
||||||
"{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} channels, "
|
msgid_plural "{channels} channels"
|
||||||
"{file_type}"
|
msgstr[0] ""
|
||||||
msgstr ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: mpdevil:2606
|
#: mpdevil:2680
|
||||||
msgid "Scroll to current song"
|
msgid "Scroll to current song"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:2614 mpdevil:3384
|
#: mpdevil:2688 mpdevil:3552
|
||||||
msgid "Clear playlist"
|
msgid "Clear playlist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:2883
|
#: mpdevil:2982
|
||||||
msgid "Show lyrics"
|
msgid "Show lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3161
|
#: mpdevil:3300
|
||||||
msgid "Random mode"
|
msgid "Random mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3163
|
#: mpdevil:3302
|
||||||
msgid "Repeat mode"
|
msgid "Repeat mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3165
|
#: mpdevil:3304
|
||||||
msgid "Single mode"
|
msgid "Single mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3167
|
#: mpdevil:3306
|
||||||
msgid "Consume mode"
|
msgid "Consume mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3346
|
#: mpdevil:3514
|
||||||
msgid "Window"
|
msgid "Window"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3347
|
#: mpdevil:3515
|
||||||
msgid "Playback"
|
msgid "Playback"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3348
|
#: mpdevil:3516
|
||||||
msgid "Search, Album Dialog and Album List"
|
msgid "Search, Album Dialog and Album List"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3358
|
#: mpdevil:3526
|
||||||
msgid "Open online help"
|
msgid "Open online help"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3359
|
#: mpdevil:3527
|
||||||
msgid "Open shortcuts window"
|
msgid "Open shortcuts window"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3360
|
#: mpdevil:3528
|
||||||
msgid "Open menu"
|
msgid "Open menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3361 mpdevil:3504
|
#: mpdevil:3529 mpdevil:3672
|
||||||
msgid "Update database"
|
msgid "Update database"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3362 mpdevil:3502
|
#: mpdevil:3530 mpdevil:3670
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3363
|
#: mpdevil:3531
|
||||||
msgid "Cycle through profiles"
|
msgid "Cycle through profiles"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3364
|
#: mpdevil:3532
|
||||||
msgid "Cycle through profiles in reversed order"
|
msgid "Cycle through profiles in reversed order"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3365
|
#: mpdevil:3533
|
||||||
msgid "Toggle mini player"
|
msgid "Toggle mini player"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3366
|
#: mpdevil:3534
|
||||||
msgid "Toggle lyrics"
|
msgid "Toggle lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3367
|
#: mpdevil:3535
|
||||||
msgid "Toggle search"
|
msgid "Toggle search"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3369
|
#: mpdevil:3537
|
||||||
msgid "Play/Pause"
|
msgid "Play/Pause"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3370
|
#: mpdevil:3538
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3371
|
#: mpdevil:3539
|
||||||
msgid "Next title"
|
msgid "Next title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3372
|
#: mpdevil:3540
|
||||||
msgid "Previous title"
|
msgid "Previous title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3373
|
#: mpdevil:3541
|
||||||
msgid "Seek forward"
|
msgid "Seek forward"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3374
|
#: mpdevil:3542
|
||||||
msgid "Seek backward"
|
msgid "Seek backward"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3375
|
#: mpdevil:3543
|
||||||
msgid "Toggle repeat mode"
|
msgid "Toggle repeat mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3376
|
#: mpdevil:3544
|
||||||
msgid "Toggle random mode"
|
msgid "Toggle random mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3377
|
#: mpdevil:3545
|
||||||
msgid "Toggle single mode"
|
msgid "Toggle single mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3378
|
#: mpdevil:3546
|
||||||
msgid "Toggle consume mode"
|
msgid "Toggle consume mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3379
|
#: mpdevil:3547
|
||||||
msgid "Play selected item (next)"
|
msgid "Play selected item (next)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3379
|
#: mpdevil:3547
|
||||||
msgid "Left-click"
|
msgid "Left-click"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3380
|
#: mpdevil:3548
|
||||||
msgid "Append selected item"
|
msgid "Append selected item"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3380 mpdevil:3383
|
#: mpdevil:3548 mpdevil:3551
|
||||||
msgid "Middle-click"
|
msgid "Middle-click"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3381
|
#: mpdevil:3549
|
||||||
msgid "Play selected item immediately"
|
msgid "Play selected item immediately"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3381
|
#: mpdevil:3549
|
||||||
msgid "Double-click"
|
msgid "Double-click"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3382 mpdevil:3385
|
#: mpdevil:3550 mpdevil:3553
|
||||||
msgid "Show additional information"
|
msgid "Show additional information"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3382 mpdevil:3385
|
#: mpdevil:3550 mpdevil:3553
|
||||||
msgid "Right-click"
|
msgid "Right-click"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3383
|
#: mpdevil:3551
|
||||||
msgid "Remove selected song"
|
msgid "Remove selected song"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3427
|
#: mpdevil:3577
|
||||||
|
msgid "Connect"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil:3595
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Connection to “{profile}” ({host}:{port}) failed"
|
msgid "Connection to “{profile}” ({host}:{port}) failed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3499
|
#: mpdevil:3667
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3500
|
#: mpdevil:3668
|
||||||
msgid "Help"
|
msgid "Help"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3501
|
#: mpdevil:3669
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3505
|
#: mpdevil:3673
|
||||||
msgid "Server stats"
|
msgid "Server stats"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3510
|
#: mpdevil:3678
|
||||||
msgid "Mini player"
|
msgid "Mini player"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3511
|
#: mpdevil:3683
|
||||||
msgid "Save window layout"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil:3516
|
|
||||||
msgid "Menu"
|
msgid "Menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil:3566 mpdevil:3568
|
#: mpdevil:3734 mpdevil:3736
|
||||||
msgid "connecting…"
|
msgid "connecting…"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
360
po/nl.po
@@ -7,8 +7,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: \n"
|
"Project-Id-Version: \n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2020-10-20 18:10+0200\n"
|
"POT-Creation-Date: 2021-02-12 16:57+0100\n"
|
||||||
"PO-Revision-Date: 2020-11-03 16:53+0100\n"
|
"PO-Revision-Date: 2021-02-12 16:59+0100\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: nl\n"
|
"Language: nl\n"
|
||||||
@@ -18,103 +18,90 @@ msgstr ""
|
|||||||
"X-Generator: Poedit 2.3.1\n"
|
"X-Generator: Poedit 2.3.1\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: mpdevil:419
|
#: mpdevil:438
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "{days} day"
|
||||||
|
msgid_plural "{days} days"
|
||||||
|
msgstr[0] "{days} dag"
|
||||||
|
msgstr[1] "{days} dagen"
|
||||||
|
|
||||||
|
#: mpdevil:473
|
||||||
msgid "Unknown Title"
|
msgid "Unknown Title"
|
||||||
msgstr "Onbekende titel"
|
msgstr "Onbekende titel"
|
||||||
|
|
||||||
#: mpdevil:719
|
#: mpdevil:802
|
||||||
msgid "Main cover size:"
|
msgid "Main cover size:"
|
||||||
msgstr "Grootte albumhoes:"
|
msgstr "Grootte albumhoes:"
|
||||||
|
|
||||||
#: mpdevil:720
|
#: mpdevil:803
|
||||||
msgid "Album view cover size:"
|
msgid "Album view cover size:"
|
||||||
msgstr "Hoesgrootte in albumlijst:"
|
msgstr "Hoesgrootte in albumlijst:"
|
||||||
|
|
||||||
#: mpdevil:721
|
#: mpdevil:804
|
||||||
msgid "Action bar icon size:"
|
msgid "Action bar icon size:"
|
||||||
msgstr "Grootte iconen werkbalk:"
|
msgstr "Grootte iconen werkbalk:"
|
||||||
|
|
||||||
#: mpdevil:722
|
#: mpdevil:805
|
||||||
msgid "Secondary icon size:"
|
msgid "Secondary icon size:"
|
||||||
msgstr "Grootte overige iconen:"
|
msgstr "Grootte overige iconen:"
|
||||||
|
|
||||||
#: mpdevil:735
|
#: mpdevil:818
|
||||||
msgid "Sort albums by:"
|
|
||||||
msgstr "Albums sorteren op:"
|
|
||||||
|
|
||||||
#: mpdevil:735
|
|
||||||
msgid "name"
|
|
||||||
msgstr "naam"
|
|
||||||
|
|
||||||
#: mpdevil:735
|
|
||||||
msgid "year"
|
|
||||||
msgstr "jaar"
|
|
||||||
|
|
||||||
#: mpdevil:736
|
|
||||||
msgid "Position of playlist:"
|
|
||||||
msgstr "Positie afspeellijst:"
|
|
||||||
|
|
||||||
#: mpdevil:736
|
|
||||||
msgid "bottom"
|
|
||||||
msgstr "onder"
|
|
||||||
|
|
||||||
#: mpdevil:736
|
|
||||||
msgid "right"
|
|
||||||
msgstr "rechts"
|
|
||||||
|
|
||||||
#: mpdevil:754
|
|
||||||
msgid "Use Client-side decoration"
|
msgid "Use Client-side decoration"
|
||||||
msgstr "Gebruik vensterdecoratie van mpdevil"
|
msgstr "Gebruik vensterdecoratie van mpdevil"
|
||||||
|
|
||||||
#: mpdevil:755
|
#: mpdevil:819
|
||||||
msgid "Show stop button"
|
msgid "Show stop button"
|
||||||
msgstr "Toon stopknop"
|
msgstr "Toon stopknop"
|
||||||
|
|
||||||
#: mpdevil:756
|
#: mpdevil:820
|
||||||
msgid "Show lyrics button"
|
msgid "Show lyrics button"
|
||||||
msgstr "Toon songtekstknop"
|
msgstr "Toon songtekstknop"
|
||||||
|
|
||||||
#: mpdevil:757
|
#: mpdevil:821
|
||||||
msgid "Show initials in artist view"
|
msgid "Show initials in artist view"
|
||||||
msgstr "Toon beginletters in artiestenlijst"
|
msgstr "Toon beginletters in artiestenlijst"
|
||||||
|
|
||||||
#: mpdevil:758
|
#: mpdevil:822
|
||||||
msgid "Show tooltips in album view"
|
msgid "Place playlist at the side"
|
||||||
msgstr "Toon tooltip in albumlijst"
|
msgstr "Plaats afspeellijst aan de zijkant"
|
||||||
|
|
||||||
#: mpdevil:759
|
#: mpdevil:823
|
||||||
msgid "Use “Album Artist” tag"
|
msgid "Use “Album Artist” tag"
|
||||||
msgstr "Gebruik tag \"Album Artist\""
|
msgstr "Gebruik tag \"Album Artist\""
|
||||||
|
|
||||||
#: mpdevil:760
|
#: mpdevil:824
|
||||||
msgid "Send notification on title change"
|
msgid "Send notification on title change"
|
||||||
msgstr "Verstuur een melding bij titelwisseling"
|
msgstr "Verstuur een melding bij titelwisseling"
|
||||||
|
|
||||||
#: mpdevil:761
|
#: mpdevil:825
|
||||||
msgid "Stop playback on quit"
|
msgid "Stop playback on quit"
|
||||||
msgstr "Stop afspelen bij afsluiten"
|
msgstr "Stop afspelen bij afsluiten"
|
||||||
|
|
||||||
#: mpdevil:762
|
#: mpdevil:826
|
||||||
msgid "Play selected albums and titles immediately"
|
msgid "Play selected albums and titles immediately"
|
||||||
msgstr "Geselecteerde albums en titels direct afspelen"
|
msgstr "Geselecteerde albums en titels direct afspelen"
|
||||||
|
|
||||||
#: mpdevil:775
|
#: mpdevil:827
|
||||||
|
msgid "Sort albums by year"
|
||||||
|
msgstr "Sorteer albums op jaar"
|
||||||
|
|
||||||
|
#: mpdevil:839
|
||||||
msgid "<b>View</b>"
|
msgid "<b>View</b>"
|
||||||
msgstr "<b>Beeld</b>"
|
msgstr "<b>Beeld</b>"
|
||||||
|
|
||||||
#: mpdevil:776
|
#: mpdevil:840
|
||||||
msgid "<b>Behavior</b>"
|
msgid "<b>Behavior</b>"
|
||||||
msgstr "<b>Gedrag</b>"
|
msgstr "<b>Gedrag</b>"
|
||||||
|
|
||||||
#: mpdevil:808
|
#: mpdevil:860
|
||||||
msgid "(restart required)"
|
msgid "(restart required)"
|
||||||
msgstr "(herstart vereist)"
|
msgstr "(herstart vereist)"
|
||||||
|
|
||||||
#: mpdevil:870 mpdevil:3409
|
#: mpdevil:909
|
||||||
msgid "Connect"
|
msgid "_Connect"
|
||||||
msgstr "Verbinden"
|
msgstr "_Verbinden"
|
||||||
|
|
||||||
#: mpdevil:886
|
#: mpdevil:925
|
||||||
msgid ""
|
msgid ""
|
||||||
"The first image in the same directory as the song file matching this regex "
|
"The first image in the same directory as the song file matching this regex "
|
||||||
"will be displayed. %AlbumArtist% and %Album% will be replaced by the "
|
"will be displayed. %AlbumArtist% and %Album% will be replaced by the "
|
||||||
@@ -124,155 +111,159 @@ msgstr ""
|
|||||||
"met deze regex wordt getoond. %AlbumArtist% en %Album% worden vervangen door "
|
"met deze regex wordt getoond. %AlbumArtist% en %Album% worden vervangen door "
|
||||||
"de bijbehorende tags van het muziekbestand."
|
"de bijbehorende tags van het muziekbestand."
|
||||||
|
|
||||||
#: mpdevil:891
|
#: mpdevil:930
|
||||||
msgid "Profile:"
|
msgid "Profile:"
|
||||||
msgstr "Profiel:"
|
msgstr "Profiel:"
|
||||||
|
|
||||||
#: mpdevil:892
|
#: mpdevil:931
|
||||||
msgid "Name:"
|
msgid "Name:"
|
||||||
msgstr "Naam:"
|
msgstr "Naam:"
|
||||||
|
|
||||||
#: mpdevil:893
|
#: mpdevil:932
|
||||||
msgid "Host:"
|
msgid "Host:"
|
||||||
msgstr "Host:"
|
msgstr "Host:"
|
||||||
|
|
||||||
#: mpdevil:894
|
#: mpdevil:933
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "Wachtwoord:"
|
msgstr "Wachtwoord:"
|
||||||
|
|
||||||
#: mpdevil:895
|
#: mpdevil:934
|
||||||
msgid "Music lib:"
|
msgid "Music lib:"
|
||||||
msgstr "Muziekmap:"
|
msgstr "Muziekmap:"
|
||||||
|
|
||||||
#: mpdevil:896
|
#: mpdevil:935
|
||||||
msgid "Cover regex:"
|
msgid "Cover regex:"
|
||||||
msgstr "Regex albumhoes:"
|
msgstr "Regex albumhoes:"
|
||||||
|
|
||||||
#: mpdevil:1029
|
#: mpdevil:1070
|
||||||
msgid "Choose directory"
|
msgid "Choose directory"
|
||||||
msgstr "Kies een map"
|
msgstr "Kies een map"
|
||||||
|
|
||||||
#: mpdevil:1065
|
#: mpdevil:1101
|
||||||
msgid "Choose the order of information to appear in the playlist:"
|
msgid "Choose the order of information to appear in the playlist:"
|
||||||
msgstr "Kies de volgorde van de informatie getoond in de afspeellijst:"
|
msgstr "Kies de volgorde van de informatie getoond in de afspeellijst:"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1604 mpdevil:1930 mpdevil:2633
|
#: mpdevil:1118 mpdevil:1671 mpdevil:1766 mpdevil:2706
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr "Nr"
|
msgstr "Nr"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:2634
|
#: mpdevil:1118 mpdevil:2707
|
||||||
msgid "Disc"
|
msgid "Disc"
|
||||||
msgstr "Disc"
|
msgstr "Disc"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1609 mpdevil:1933 mpdevil:2635
|
#: mpdevil:1118 mpdevil:1674 mpdevil:1771 mpdevil:2708
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1615 mpdevil:2636
|
#: mpdevil:1118 mpdevil:1777 mpdevil:2709
|
||||||
msgid "Artist"
|
msgid "Artist"
|
||||||
msgstr "Artiest"
|
msgstr "Artiest"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1621 mpdevil:2637
|
#: mpdevil:1118 mpdevil:1783 mpdevil:2710
|
||||||
msgid "Album"
|
msgid "Album"
|
||||||
msgstr "Album"
|
msgstr "Album"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:1627 mpdevil:1937 mpdevil:2638
|
#: mpdevil:1118 mpdevil:1678 mpdevil:1789 mpdevil:2711
|
||||||
msgid "Length"
|
msgid "Length"
|
||||||
msgstr "Lengte"
|
msgstr "Lengte"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:2639
|
#: mpdevil:1118 mpdevil:2712
|
||||||
msgid "Year"
|
msgid "Year"
|
||||||
msgstr "Jaar"
|
msgstr "Jaar"
|
||||||
|
|
||||||
#: mpdevil:1082 mpdevil:2640
|
#: mpdevil:1118 mpdevil:2713
|
||||||
msgid "Genre"
|
msgid "Genre"
|
||||||
msgstr "Genre"
|
msgstr "Genre"
|
||||||
|
|
||||||
#: mpdevil:1198 mpdevil:1200 mpdevil:3498
|
#: mpdevil:1234 mpdevil:1236 mpdevil:3666
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Instellingen"
|
msgstr "Instellingen"
|
||||||
|
|
||||||
#: mpdevil:1213 mpdevil:1222 mpdevil:3345
|
#: mpdevil:1249 mpdevil:1258 mpdevil:3513
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Algemeen"
|
msgstr "Algemeen"
|
||||||
|
|
||||||
#: mpdevil:1214 mpdevil:1223 mpdevil:3509
|
#: mpdevil:1250 mpdevil:1259 mpdevil:3677
|
||||||
msgid "Profiles"
|
msgid "Profiles"
|
||||||
msgstr "Profielen"
|
msgstr "Profielen"
|
||||||
|
|
||||||
#: mpdevil:1215 mpdevil:1224 mpdevil:3349
|
#: mpdevil:1251 mpdevil:1260 mpdevil:3517
|
||||||
msgid "Playlist"
|
msgid "Playlist"
|
||||||
msgstr "Afspeellijst"
|
msgstr "Afspeellijst"
|
||||||
|
|
||||||
#: mpdevil:1238
|
#: mpdevil:1273
|
||||||
msgid "Stats"
|
msgid "Stats"
|
||||||
msgstr "Statistieken"
|
msgstr "Statistieken"
|
||||||
|
|
||||||
#: mpdevil:1248
|
#: mpdevil:1283
|
||||||
msgid "<b>Protocol:</b>"
|
msgid "<b>Protocol:</b>"
|
||||||
msgstr "<b>Protocol:</b>"
|
msgstr "<b>Protocol:</b>"
|
||||||
|
|
||||||
#: mpdevil:1249
|
#: mpdevil:1284
|
||||||
msgid "<b>Uptime:</b>"
|
msgid "<b>Uptime:</b>"
|
||||||
msgstr "<b>Uptime:</b>"
|
msgstr "<b>Uptime:</b>"
|
||||||
|
|
||||||
#: mpdevil:1250
|
#: mpdevil:1285
|
||||||
msgid "<b>Playtime:</b>"
|
msgid "<b>Playtime:</b>"
|
||||||
msgstr "<b>Afspeeltijd:</b>"
|
msgstr "<b>Afspeeltijd:</b>"
|
||||||
|
|
||||||
#: mpdevil:1251
|
#: mpdevil:1286
|
||||||
msgid "<b>Artists:</b>"
|
msgid "<b>Artists:</b>"
|
||||||
msgstr "<b>Artiesten:</b>"
|
msgstr "<b>Artiesten:</b>"
|
||||||
|
|
||||||
#: mpdevil:1252
|
#: mpdevil:1287
|
||||||
msgid "<b>Albums:</b>"
|
msgid "<b>Albums:</b>"
|
||||||
msgstr "<b>Albums:</b>"
|
msgstr "<b>Albums:</b>"
|
||||||
|
|
||||||
#: mpdevil:1253
|
#: mpdevil:1288
|
||||||
msgid "<b>Songs:</b>"
|
msgid "<b>Songs:</b>"
|
||||||
msgstr "<b>Titels:</b>"
|
msgstr "<b>Titels:</b>"
|
||||||
|
|
||||||
#: mpdevil:1254
|
#: mpdevil:1289
|
||||||
msgid "<b>Total Playtime:</b>"
|
msgid "<b>Total Playtime:</b>"
|
||||||
msgstr "<b>Totale speelduur:</b>"
|
msgstr "<b>Totale speelduur:</b>"
|
||||||
|
|
||||||
#: mpdevil:1255
|
#: mpdevil:1290
|
||||||
msgid "<b>Database Update:</b>"
|
msgid "<b>Database Update:</b>"
|
||||||
msgstr "<b>Database bijgewerkt:</b>"
|
msgstr "<b>Database bijgewerkt:</b>"
|
||||||
|
|
||||||
#: mpdevil:1280
|
#: mpdevil:1314
|
||||||
msgid "A simple music browser for MPD"
|
msgid "A simple music browser for MPD"
|
||||||
msgstr "Een simpele muziekspeler voor MPD"
|
msgstr "Een simpele muziekspeler voor MPD"
|
||||||
|
|
||||||
#: mpdevil:1360
|
#: mpdevil:1412
|
||||||
|
msgid "Open with…"
|
||||||
|
msgstr "Openen met…"
|
||||||
|
|
||||||
|
#: mpdevil:1430
|
||||||
msgid "MPD-Tag"
|
msgid "MPD-Tag"
|
||||||
msgstr "MPD-Tag"
|
msgstr "MPD-Tag"
|
||||||
|
|
||||||
#: mpdevil:1363
|
#: mpdevil:1433
|
||||||
msgid "Value"
|
msgid "Value"
|
||||||
msgstr "Waarde"
|
msgstr "Waarde"
|
||||||
|
|
||||||
#: mpdevil:1522
|
#: mpdevil:1564
|
||||||
msgid "_Append"
|
msgid "_Append"
|
||||||
msgstr "_Toevoegen"
|
msgstr "_Toevoegen"
|
||||||
|
|
||||||
#: mpdevil:1524
|
#: mpdevil:1566
|
||||||
msgid "Add all titles to playlist"
|
msgid "Add all titles to playlist"
|
||||||
msgstr "Voeg alle titels toe aan de afspeellijst"
|
msgstr "Voeg alle titels toe aan de afspeellijst"
|
||||||
|
|
||||||
#: mpdevil:1525
|
#: mpdevil:1567
|
||||||
msgid "_Play"
|
msgid "_Play"
|
||||||
msgstr "_Afspelen"
|
msgstr "_Afspelen"
|
||||||
|
|
||||||
#: mpdevil:1527
|
#: mpdevil:1569
|
||||||
msgid "Directly play all titles"
|
msgid "Directly play all titles"
|
||||||
msgstr "Alle titels direct afspelen"
|
msgstr "Alle titels direct afspelen"
|
||||||
|
|
||||||
#: mpdevil:1528
|
#: mpdevil:1570
|
||||||
msgid "_Enqueue"
|
msgid "_Enqueue"
|
||||||
msgstr "_In wachtrij plaatsen"
|
msgstr "_In wachtrij plaatsen"
|
||||||
|
|
||||||
#: mpdevil:1530
|
#: mpdevil:1572
|
||||||
msgid ""
|
msgid ""
|
||||||
"Append all titles after the currently playing track and clear the playlist "
|
"Append all titles after the currently playing track and clear the playlist "
|
||||||
"from all other songs"
|
"from all other songs"
|
||||||
@@ -280,255 +271,292 @@ msgstr ""
|
|||||||
"Alle titels toevoegen na de nu spelende titel en alle overige titels uit de "
|
"Alle titels toevoegen na de nu spelende titel en alle overige titels uit de "
|
||||||
"afspeellijst verwijderen"
|
"afspeellijst verwijderen"
|
||||||
|
|
||||||
#: mpdevil:1665
|
#: mpdevil:1827
|
||||||
msgid "all tags"
|
msgid "all tags"
|
||||||
msgstr "alle tags"
|
msgstr "alle tags"
|
||||||
|
|
||||||
#: mpdevil:1689
|
#: mpdevil:1856
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{num} hits"
|
msgid "{hits} hit"
|
||||||
msgstr "{num} hits"
|
msgid_plural "{hits} hits"
|
||||||
|
msgstr[0] "{hits} hit"
|
||||||
|
msgstr[1] "{hits} treffers"
|
||||||
|
|
||||||
#: mpdevil:1727
|
#: mpdevil:1894
|
||||||
msgid "all genres"
|
msgid "all genres"
|
||||||
msgstr "alle genres"
|
msgstr "alle genres"
|
||||||
|
|
||||||
#: mpdevil:1830
|
#: mpdevil:1996
|
||||||
msgid "all artists"
|
msgid "all artists"
|
||||||
msgstr "alle artiesten"
|
msgstr "alle artiesten"
|
||||||
|
|
||||||
#: mpdevil:1942
|
#: mpdevil:2180 mpdevil:2805 mpdevil:3091 mpdevil:3092
|
||||||
msgid "Close"
|
|
||||||
msgstr "Afsluiten"
|
|
||||||
|
|
||||||
#: mpdevil:2113
|
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{titles} titles on {discs} discs ({length})"
|
msgid "{titles} title"
|
||||||
msgstr "{titles} titels op {discs} discs ({length})"
|
msgid_plural "{titles} titles"
|
||||||
|
msgstr[0] "{titles} titel"
|
||||||
|
msgstr[1] "{titles} titels"
|
||||||
|
|
||||||
#: mpdevil:2116 mpdevil:2728
|
#: mpdevil:2182
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{titles} titles ({length})"
|
msgid "on {discs} discs"
|
||||||
msgstr "{titles} titels ({length})"
|
msgstr "op {discs} discs"
|
||||||
|
|
||||||
#: mpdevil:2242 mpdevil:3368
|
#: mpdevil:2322 mpdevil:3536
|
||||||
msgid "Back to current album"
|
msgid "Back to current album"
|
||||||
msgstr "Terug naar huidige album"
|
msgstr "Terug naar huidige album"
|
||||||
|
|
||||||
#: mpdevil:2244
|
#: mpdevil:2324
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Zoeken"
|
msgstr "Zoeken"
|
||||||
|
|
||||||
#: mpdevil:2421
|
#: mpdevil:2500
|
||||||
msgid "searching..."
|
msgid "searching..."
|
||||||
msgstr "bezig met zoeken..."
|
msgstr "bezig met zoeken..."
|
||||||
|
|
||||||
#: mpdevil:2426
|
#: mpdevil:2505
|
||||||
msgid "connection error"
|
msgid "connection error"
|
||||||
msgstr "verbindingsfout"
|
msgstr "verbindingsfout"
|
||||||
|
|
||||||
#: mpdevil:2428
|
#: mpdevil:2507
|
||||||
msgid "lyrics not found"
|
msgid "lyrics not found"
|
||||||
msgstr "geen songtekst gevonden"
|
msgstr "geen songtekst gevonden"
|
||||||
|
|
||||||
#: mpdevil:2476
|
#: mpdevil:2552
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid ""
|
msgid "{channels} channel"
|
||||||
"{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} channels, "
|
msgid_plural "{channels} channels"
|
||||||
"{file_type}"
|
msgstr[0] "{channels} kanaal"
|
||||||
msgstr ""
|
msgstr[1] "{channels} kanalen"
|
||||||
"{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} kanalen, "
|
|
||||||
"{file_type}"
|
|
||||||
|
|
||||||
#: mpdevil:2606
|
#: mpdevil:2680
|
||||||
msgid "Scroll to current song"
|
msgid "Scroll to current song"
|
||||||
msgstr "Naar de huidige titel scrollen"
|
msgstr "Naar de huidige titel scrollen"
|
||||||
|
|
||||||
#: mpdevil:2614 mpdevil:3384
|
#: mpdevil:2688 mpdevil:3552
|
||||||
msgid "Clear playlist"
|
msgid "Clear playlist"
|
||||||
msgstr "Afspeellijst legen"
|
msgstr "Afspeellijst legen"
|
||||||
|
|
||||||
#: mpdevil:2883
|
#: mpdevil:2982
|
||||||
msgid "Show lyrics"
|
msgid "Show lyrics"
|
||||||
msgstr "Toon songtekst"
|
msgstr "Toon songtekst"
|
||||||
|
|
||||||
#: mpdevil:3161
|
#: mpdevil:3300
|
||||||
msgid "Random mode"
|
msgid "Random mode"
|
||||||
msgstr "Willekeurige modus"
|
msgstr "Willekeurige modus"
|
||||||
|
|
||||||
#: mpdevil:3163
|
#: mpdevil:3302
|
||||||
msgid "Repeat mode"
|
msgid "Repeat mode"
|
||||||
msgstr "Herhaalmodus"
|
msgstr "Herhaalmodus"
|
||||||
|
|
||||||
#: mpdevil:3165
|
#: mpdevil:3304
|
||||||
msgid "Single mode"
|
msgid "Single mode"
|
||||||
msgstr "Enkele modus"
|
msgstr "Enkele modus"
|
||||||
|
|
||||||
#: mpdevil:3167
|
#: mpdevil:3306
|
||||||
msgid "Consume mode"
|
msgid "Consume mode"
|
||||||
msgstr "Verbruiksmodus"
|
msgstr "Verbruiksmodus"
|
||||||
|
|
||||||
#: mpdevil:3346
|
#: mpdevil:3514
|
||||||
msgid "Window"
|
msgid "Window"
|
||||||
msgstr "Venster"
|
msgstr "Venster"
|
||||||
|
|
||||||
#: mpdevil:3347
|
#: mpdevil:3515
|
||||||
msgid "Playback"
|
msgid "Playback"
|
||||||
msgstr "Afspelen"
|
msgstr "Afspelen"
|
||||||
|
|
||||||
#: mpdevil:3348
|
#: mpdevil:3516
|
||||||
msgid "Search, Album Dialog and Album List"
|
msgid "Search, Album Dialog and Album List"
|
||||||
msgstr "Zoeken, Albumdialoog en Albumlijst"
|
msgstr "Zoeken, Albumdialoog en Albumlijst"
|
||||||
|
|
||||||
#: mpdevil:3358
|
#: mpdevil:3526
|
||||||
msgid "Open online help"
|
msgid "Open online help"
|
||||||
msgstr "Online hulp openen"
|
msgstr "Online hulp openen"
|
||||||
|
|
||||||
#: mpdevil:3359
|
#: mpdevil:3527
|
||||||
msgid "Open shortcuts window"
|
msgid "Open shortcuts window"
|
||||||
msgstr "Venster met sneltoetsen openen"
|
msgstr "Venster met sneltoetsen openen"
|
||||||
|
|
||||||
#: mpdevil:3360
|
#: mpdevil:3528
|
||||||
msgid "Open menu"
|
msgid "Open menu"
|
||||||
msgstr "Menu openen"
|
msgstr "Menu openen"
|
||||||
|
|
||||||
#: mpdevil:3361 mpdevil:3504
|
#: mpdevil:3529 mpdevil:3672
|
||||||
msgid "Update database"
|
msgid "Update database"
|
||||||
msgstr "Database bijwerken"
|
msgstr "Database bijwerken"
|
||||||
|
|
||||||
#: mpdevil:3362 mpdevil:3502
|
#: mpdevil:3530 mpdevil:3670
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Stoppen"
|
msgstr "Stoppen"
|
||||||
|
|
||||||
#: mpdevil:3363
|
#: mpdevil:3531
|
||||||
msgid "Cycle through profiles"
|
msgid "Cycle through profiles"
|
||||||
msgstr "Profielen doorlopen"
|
msgstr "Profielen doorlopen"
|
||||||
|
|
||||||
#: mpdevil:3364
|
#: mpdevil:3532
|
||||||
msgid "Cycle through profiles in reversed order"
|
msgid "Cycle through profiles in reversed order"
|
||||||
msgstr "Profielen doorlopen in omgekeerde volgorde"
|
msgstr "Profielen doorlopen in omgekeerde volgorde"
|
||||||
|
|
||||||
#: mpdevil:3365
|
#: mpdevil:3533
|
||||||
msgid "Toggle mini player"
|
msgid "Toggle mini player"
|
||||||
msgstr "Omschakelen naar minispeler"
|
msgstr "Omschakelen naar minispeler"
|
||||||
|
|
||||||
#: mpdevil:3366
|
#: mpdevil:3534
|
||||||
msgid "Toggle lyrics"
|
msgid "Toggle lyrics"
|
||||||
msgstr "Omschakelen naar songtekst"
|
msgstr "Omschakelen naar songtekst"
|
||||||
|
|
||||||
#: mpdevil:3367
|
#: mpdevil:3535
|
||||||
msgid "Toggle search"
|
msgid "Toggle search"
|
||||||
msgstr "Omschakelen naar zoeken"
|
msgstr "Omschakelen naar zoeken"
|
||||||
|
|
||||||
#: mpdevil:3369
|
#: mpdevil:3537
|
||||||
msgid "Play/Pause"
|
msgid "Play/Pause"
|
||||||
msgstr "Afspelen/Pauzeren"
|
msgstr "Afspelen/Pauzeren"
|
||||||
|
|
||||||
#: mpdevil:3370
|
#: mpdevil:3538
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr "Stoppen"
|
msgstr "Stoppen"
|
||||||
|
|
||||||
#: mpdevil:3371
|
#: mpdevil:3539
|
||||||
msgid "Next title"
|
msgid "Next title"
|
||||||
msgstr "Volgende titel"
|
msgstr "Volgende titel"
|
||||||
|
|
||||||
#: mpdevil:3372
|
#: mpdevil:3540
|
||||||
msgid "Previous title"
|
msgid "Previous title"
|
||||||
msgstr "Vorige titel"
|
msgstr "Vorige titel"
|
||||||
|
|
||||||
#: mpdevil:3373
|
#: mpdevil:3541
|
||||||
msgid "Seek forward"
|
msgid "Seek forward"
|
||||||
msgstr "Vooruit spoelen"
|
msgstr "Vooruit spoelen"
|
||||||
|
|
||||||
#: mpdevil:3374
|
#: mpdevil:3542
|
||||||
msgid "Seek backward"
|
msgid "Seek backward"
|
||||||
msgstr "Achteruit spoelen"
|
msgstr "Achteruit spoelen"
|
||||||
|
|
||||||
#: mpdevil:3375
|
#: mpdevil:3543
|
||||||
msgid "Toggle repeat mode"
|
msgid "Toggle repeat mode"
|
||||||
msgstr "Omschakelen naar herhaalmodus"
|
msgstr "Omschakelen naar herhaalmodus"
|
||||||
|
|
||||||
#: mpdevil:3376
|
#: mpdevil:3544
|
||||||
msgid "Toggle random mode"
|
msgid "Toggle random mode"
|
||||||
msgstr "Omschakelen naar willekeurige modus"
|
msgstr "Omschakelen naar willekeurige modus"
|
||||||
|
|
||||||
#: mpdevil:3377
|
#: mpdevil:3545
|
||||||
msgid "Toggle single mode"
|
msgid "Toggle single mode"
|
||||||
msgstr "Omschakelen naar enkele modus"
|
msgstr "Omschakelen naar enkele modus"
|
||||||
|
|
||||||
#: mpdevil:3378
|
#: mpdevil:3546
|
||||||
msgid "Toggle consume mode"
|
msgid "Toggle consume mode"
|
||||||
msgstr "Omschakelen naar verbruiksmodus"
|
msgstr "Omschakelen naar verbruiksmodus"
|
||||||
|
|
||||||
#: mpdevil:3379
|
#: mpdevil:3547
|
||||||
msgid "Play selected item (next)"
|
msgid "Play selected item (next)"
|
||||||
msgstr "Geselecteerde item afspelen (volgende)"
|
msgstr "Geselecteerde item afspelen (volgende)"
|
||||||
|
|
||||||
#: mpdevil:3379
|
#: mpdevil:3547
|
||||||
msgid "Left-click"
|
msgid "Left-click"
|
||||||
msgstr "Linksklik"
|
msgstr "Linksklik"
|
||||||
|
|
||||||
#: mpdevil:3380
|
#: mpdevil:3548
|
||||||
msgid "Append selected item"
|
msgid "Append selected item"
|
||||||
msgstr "Geselecteerde item toevoegen"
|
msgstr "Geselecteerde item toevoegen"
|
||||||
|
|
||||||
#: mpdevil:3380 mpdevil:3383
|
#: mpdevil:3548 mpdevil:3551
|
||||||
msgid "Middle-click"
|
msgid "Middle-click"
|
||||||
msgstr "Middelklik"
|
msgstr "Middelklik"
|
||||||
|
|
||||||
#: mpdevil:3381
|
#: mpdevil:3549
|
||||||
msgid "Play selected item immediately"
|
msgid "Play selected item immediately"
|
||||||
msgstr "Geselecteerde item direct afspelen"
|
msgstr "Geselecteerde item direct afspelen"
|
||||||
|
|
||||||
#: mpdevil:3381
|
#: mpdevil:3549
|
||||||
msgid "Double-click"
|
msgid "Double-click"
|
||||||
msgstr "Dubbelklik"
|
msgstr "Dubbelklik"
|
||||||
|
|
||||||
#: mpdevil:3382 mpdevil:3385
|
#: mpdevil:3550 mpdevil:3553
|
||||||
msgid "Show additional information"
|
msgid "Show additional information"
|
||||||
msgstr "Toon extra informatie"
|
msgstr "Toon extra informatie"
|
||||||
|
|
||||||
#: mpdevil:3382 mpdevil:3385
|
#: mpdevil:3550 mpdevil:3553
|
||||||
msgid "Right-click"
|
msgid "Right-click"
|
||||||
msgstr "Rechtsklik"
|
msgstr "Rechtsklik"
|
||||||
|
|
||||||
#: mpdevil:3383
|
#: mpdevil:3551
|
||||||
msgid "Remove selected song"
|
msgid "Remove selected song"
|
||||||
msgstr "Geselecteerde titel verwijderen"
|
msgstr "Geselecteerde titel verwijderen"
|
||||||
|
|
||||||
#: mpdevil:3427
|
#: mpdevil:3577
|
||||||
|
msgid "Connect"
|
||||||
|
msgstr "Verbinden"
|
||||||
|
|
||||||
|
#: mpdevil:3595
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Connection to “{profile}” ({host}:{port}) failed"
|
msgid "Connection to “{profile}” ({host}:{port}) failed"
|
||||||
msgstr "Verbinding met “{profile}” ({host}:{port}) mislukt"
|
msgstr "Verbinding met “{profile}” ({host}:{port}) mislukt"
|
||||||
|
|
||||||
#: mpdevil:3499
|
#: mpdevil:3667
|
||||||
msgid "Keyboard shortcuts"
|
msgid "Keyboard shortcuts"
|
||||||
msgstr "Sneltoetsen"
|
msgstr "Sneltoetsen"
|
||||||
|
|
||||||
#: mpdevil:3500
|
#: mpdevil:3668
|
||||||
msgid "Help"
|
msgid "Help"
|
||||||
msgstr "Hulp"
|
msgstr "Hulp"
|
||||||
|
|
||||||
#: mpdevil:3501
|
#: mpdevil:3669
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr "Over"
|
msgstr "Over"
|
||||||
|
|
||||||
#: mpdevil:3505
|
#: mpdevil:3673
|
||||||
msgid "Server stats"
|
msgid "Server stats"
|
||||||
msgstr "Serverstatistieken"
|
msgstr "Serverstatistieken"
|
||||||
|
|
||||||
#: mpdevil:3510
|
#: mpdevil:3678
|
||||||
msgid "Mini player"
|
msgid "Mini player"
|
||||||
msgstr "Minispeler"
|
msgstr "Minispeler"
|
||||||
|
|
||||||
#: mpdevil:3511
|
#: mpdevil:3683
|
||||||
msgid "Save window layout"
|
|
||||||
msgstr "Vensterindeling opslaan"
|
|
||||||
|
|
||||||
#: mpdevil:3516
|
|
||||||
msgid "Menu"
|
msgid "Menu"
|
||||||
msgstr "Menu"
|
msgstr "Menu"
|
||||||
|
|
||||||
#: mpdevil:3566 mpdevil:3568
|
#: mpdevil:3734 mpdevil:3736
|
||||||
msgid "connecting…"
|
msgid "connecting…"
|
||||||
msgstr "verbinding maken…"
|
msgstr "verbinding maken…"
|
||||||
|
|
||||||
|
#~ msgid "Sort albums in chronological order"
|
||||||
|
#~ msgstr "Sorteer albums in chronologische volgorde"
|
||||||
|
|
||||||
|
#~ msgid "name"
|
||||||
|
#~ msgstr "naam"
|
||||||
|
|
||||||
|
#~ msgid "year"
|
||||||
|
#~ msgstr "jaar"
|
||||||
|
|
||||||
|
#~ msgid "Position of playlist:"
|
||||||
|
#~ msgstr "Positie afspeellijst:"
|
||||||
|
|
||||||
|
#~ msgid "bottom"
|
||||||
|
#~ msgstr "onder"
|
||||||
|
|
||||||
|
#~ msgid "right"
|
||||||
|
#~ msgstr "rechts"
|
||||||
|
|
||||||
|
#~ msgid "Show tooltips in album view"
|
||||||
|
#~ msgstr "Toon tooltip in albumlijst"
|
||||||
|
|
||||||
|
#~ msgid "Save window layout"
|
||||||
|
#~ msgstr "Vensterindeling opslaan"
|
||||||
|
|
||||||
|
#, python-brace-format
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} channels, "
|
||||||
|
#~ "{file_type}"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} kanalen, "
|
||||||
|
#~ "{file_type}"
|
||||||
|
|
||||||
|
#, python-brace-format
|
||||||
|
#~ msgid "{titles} titles on {discs} discs ({length})"
|
||||||
|
#~ msgstr "{titles} titels op {discs} discs ({length})"
|
||||||
|
|
||||||
|
#~ msgid "Close"
|
||||||
|
#~ msgstr "Afsluiten"
|
||||||
|
Before Width: | Height: | Size: 1013 KiB |
BIN
screenshots/mainwindow_1.1.0.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
9
setup.py
@@ -4,7 +4,7 @@ import DistUtilsExtra.auto
|
|||||||
|
|
||||||
DistUtilsExtra.auto.setup(
|
DistUtilsExtra.auto.setup(
|
||||||
name='mpdevil',
|
name='mpdevil',
|
||||||
version='0.9.8', # sync with bin/mpdevil
|
version='1.1.1', # sync with bin/mpdevil
|
||||||
author="Martin Wagner",
|
author="Martin Wagner",
|
||||||
author_email="martin.wagner.dev@gmail.com",
|
author_email="martin.wagner.dev@gmail.com",
|
||||||
description=('A simple music browser for MPD'),
|
description=('A simple music browser for MPD'),
|
||||||
@@ -13,14 +13,17 @@ DistUtilsExtra.auto.setup(
|
|||||||
data_files=[
|
data_files=[
|
||||||
('share/metainfo/', ['data/org.mpdevil.mpdevil.appdata.xml']),
|
('share/metainfo/', ['data/org.mpdevil.mpdevil.appdata.xml']),
|
||||||
('share/icons/hicolor/16x16/apps/', ['data/icons/16x16/org.mpdevil.mpdevil.png']),
|
('share/icons/hicolor/16x16/apps/', ['data/icons/16x16/org.mpdevil.mpdevil.png']),
|
||||||
('share/icons/hicolor/22x22/apps/', ['data/icons/22x22/org.mpdevil.mpdevil.png']),
|
|
||||||
('share/icons/hicolor/24x24/apps/', ['data/icons/24x24/org.mpdevil.mpdevil.png']),
|
('share/icons/hicolor/24x24/apps/', ['data/icons/24x24/org.mpdevil.mpdevil.png']),
|
||||||
('share/icons/hicolor/32x32/apps/', ['data/icons/32x32/org.mpdevil.mpdevil.png']),
|
('share/icons/hicolor/32x32/apps/', ['data/icons/32x32/org.mpdevil.mpdevil.png']),
|
||||||
('share/icons/hicolor/48x48/apps/', ['data/icons/48x48/org.mpdevil.mpdevil.png']),
|
('share/icons/hicolor/48x48/apps/', ['data/icons/48x48/org.mpdevil.mpdevil.png']),
|
||||||
('share/icons/hicolor/64x64/apps/', ['data/icons/64x64/org.mpdevil.mpdevil.png']),
|
('share/icons/hicolor/64x64/apps/', ['data/icons/64x64/org.mpdevil.mpdevil.png']),
|
||||||
('share/icons/hicolor/128x128/apps/', ['data/icons/128x128/org.mpdevil.mpdevil.png']),
|
('share/icons/hicolor/128x128/apps/', ['data/icons/128x128/org.mpdevil.mpdevil.png']),
|
||||||
('share/icons/hicolor/256x256/apps/', ['data/icons/256x256/org.mpdevil.mpdevil.png']),
|
('share/icons/hicolor/256x256/apps/', ['data/icons/256x256/org.mpdevil.mpdevil.png']),
|
||||||
('share/icons/hicolor/scalable/apps/', ['data/icons/scalable/org.mpdevil.mpdevil.svg'])
|
('share/icons/hicolor/scalable/apps/', ['data/icons/scalable/org.mpdevil.mpdevil.svg']),
|
||||||
|
('share/icons/hicolor/scalable/apps/', ['data/icons/scalable/org.mpdevil.mpdevil-symbolic.svg']),
|
||||||
|
('share/icons/hicolor/scalable/status/', ['data/icons/scalable/org.mpdevil.mpdevil-single-symbolic.svg']),
|
||||||
|
('share/icons/hicolor/scalable/status/', ['data/icons/scalable/org.mpdevil.mpdevil-consume-symbolic.svg']),
|
||||||
|
('share/icons/hicolor/scalable/status/', ['data/icons/scalable/org.mpdevil.mpdevil-consume-symbolic-rtl.svg']),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|