improved keyboard usability

This commit is contained in:
Martin Wagner 2020-09-29 12:39:21 +02:00
parent 5415ee08e4
commit e96cca154f
3 changed files with 605 additions and 464 deletions

View File

@ -41,7 +41,7 @@ import dbus.service
from dbus.mainloop.glib import DBusGMainLoop from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True) DBusGMainLoop(set_as_default=True)
VERSION="0.9.3" # sync with setup.py VERSION="0.9.3-dev" # 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)$"
@ -551,6 +551,23 @@ class Client(MPDClient):
meta_base.update(meta_extra) meta_base.update(meta_extra)
return meta_base return meta_base
def toggle_play(self):
status=self.status()
if status["state"] == "play":
self.pause(1)
elif status["state"] == "pause":
self.pause(0)
else:
try:
self.play()
except:
pass
def toggle_option(self, option):
new_state=(int(self.status()[option])+1)%2 # toggle 0,1
func=getattr(self, option)
func(new_state)
def _main_loop(self, *args): def _main_loop(self, *args):
try: try:
status=self.status() status=self.status()
@ -2206,8 +2223,16 @@ class Browser(Gtk.Paned):
for data in icons_data: for data in icons_data:
self._icons[data]=PixelSizedIcon(data, self._icon_size) self._icons[data]=PixelSizedIcon(data, self._icon_size)
self.back_to_current_album_button=Gtk.Button(image=self._icons["go-previous-symbolic"], tooltip_text=_("Back to current album")) self.back_to_current_album_button=Gtk.Button(
self.search_button=Gtk.ToggleButton(image=self._icons["system-search-symbolic"], tooltip_text=_("Search")) image=self._icons["go-previous-symbolic"],
tooltip_text=_("Back to current album"),
can_focus=False
)
self.search_button=Gtk.ToggleButton(
image=self._icons["system-search-symbolic"],
tooltip_text=_("Search"),
can_focus=False
)
self.genre_select=GenreSelect(self._client) self.genre_select=GenreSelect(self._client)
self._artist_window=ArtistWindow(self._client, self._settings, self.genre_select) self._artist_window=ArtistWindow(self._client, self._settings, self.genre_select)
self._search_window=SearchWindow(self._client) self._search_window=SearchWindow(self._client)
@ -2582,14 +2607,16 @@ class PlaylistWindow(Gtk.Box):
self._back_to_current_song_button=Gtk.Button( self._back_to_current_song_button=Gtk.Button(
image=self._icons["go-previous-symbolic"], image=self._icons["go-previous-symbolic"],
tooltip_text=_("Scroll to current song"), tooltip_text=_("Scroll to current song"),
relief=Gtk.ReliefStyle.NONE relief=Gtk.ReliefStyle.NONE,
can_focus=False
) )
style_context=self._back_to_current_song_button.get_style_context() style_context=self._back_to_current_song_button.get_style_context()
style_context.add_provider(provider, 800) style_context.add_provider(provider, 800)
self._clear_button=Gtk.Button( self._clear_button=Gtk.Button(
image=self._icons["edit-clear-symbolic"], image=self._icons["edit-clear-symbolic"],
tooltip_text=_("Clear playlist"), tooltip_text=_("Clear playlist"),
relief=Gtk.ReliefStyle.NONE relief=Gtk.ReliefStyle.NONE,
can_focus=False
) )
style_context=self._clear_button.get_style_context() style_context=self._clear_button.get_style_context()
style_context.add_class("destructive-action") style_context.add_class("destructive-action")
@ -2866,7 +2893,8 @@ class CoverPlaylistWindow(Gtk.Paned):
# lyrics button # lyrics button
self.lyrics_button=Gtk.ToggleButton( self.lyrics_button=Gtk.ToggleButton(
image=Gtk.Image.new_from_icon_name("media-view-subtitles-symbolic", Gtk.IconSize.BUTTON), image=Gtk.Image.new_from_icon_name("media-view-subtitles-symbolic", Gtk.IconSize.BUTTON),
tooltip_text=_("Show lyrics") tooltip_text=_("Show lyrics"),
can_focus=False
) )
self.lyrics_button.set_margin_top(6) self.lyrics_button.set_margin_top(6)
self.lyrics_button.set_margin_end(6) self.lyrics_button.set_margin_end(6)
@ -2953,54 +2981,33 @@ class PlaybackControl(Gtk.ButtonBox):
for data in icons_data: for data in icons_data:
self._icons[data]=PixelSizedIcon(data, self._icon_size) self._icons[data]=PixelSizedIcon(data, self._icon_size)
self.play_button=Gtk.Button(image=self._icons["media-playback-start-symbolic"]) self._play_button=Gtk.Button(image=self._icons["media-playback-start-symbolic"], can_focus=False)
self.stop_button=Gtk.Button(image=self._icons["media-playback-stop-symbolic"]) self._stop_button=Gtk.Button(image=self._icons["media-playback-stop-symbolic"], can_focus=False)
self.prev_button=Gtk.Button(image=self._icons["media-skip-backward-symbolic"]) self._prev_button=Gtk.Button(image=self._icons["media-skip-backward-symbolic"], can_focus=False)
self.next_button=Gtk.Button(image=self._icons["media-skip-forward-symbolic"]) self._next_button=Gtk.Button(image=self._icons["media-skip-forward-symbolic"], can_focus=False)
# connect # connect
self.play_button.connect("clicked", self._on_play_clicked) self._play_button.connect("clicked", self._on_play_clicked)
self.stop_button.connect("clicked", self._on_stop_clicked) self._stop_button.connect("clicked", self._on_stop_clicked)
self.stop_button.set_property("no-show-all", not(self._settings.get_boolean("show-stop"))) self._stop_button.set_property("no-show-all", not(self._settings.get_boolean("show-stop")))
self.prev_button.connect("clicked", self._on_prev_clicked) self._prev_button.connect("clicked", self._on_prev_clicked)
self.next_button.connect("clicked", self._on_next_clicked) self._next_button.connect("clicked", self._on_next_clicked)
self._settings.connect("notify::mini-player", self._on_mini_player) self._settings.connect("notify::mini-player", self._on_mini_player)
self._settings.connect("changed::show-stop", self._on_show_stop_changed) self._settings.connect("changed::show-stop", self._on_show_stop_changed)
self._settings.connect("changed::icon-size", self._on_icon_size_changed) self._settings.connect("changed::icon-size", self._on_icon_size_changed)
self._client.emitter.connect("state", self._on_state) self._client.emitter.connect("state", self._on_state)
self._client.emitter.connect("disconnected", self._on_disconnected)
self._client.emitter.connect("reconnected", self._on_reconnected)
# packing # packing
self.pack_start(self.prev_button, True, True, 0) self.pack_start(self._prev_button, True, True, 0)
self.pack_start(self.play_button, True, True, 0) self.pack_start(self._play_button, True, True, 0)
self.pack_start(self.stop_button, True, True, 0) self.pack_start(self._stop_button, True, True, 0)
self.pack_start(self.next_button, True, True, 0) self.pack_start(self._next_button, True, True, 0)
def _on_state(self, emitter, state):
if state == "play":
self.play_button.set_image(self._icons["media-playback-pause-symbolic"])
self.prev_button.set_sensitive(True)
self.next_button.set_sensitive(True)
elif state == "pause":
self.play_button.set_image(self._icons["media-playback-start-symbolic"])
self.prev_button.set_sensitive(True)
self.next_button.set_sensitive(True)
else:
self.play_button.set_image(self._icons["media-playback-start-symbolic"])
self.prev_button.set_sensitive(False)
self.next_button.set_sensitive(False)
def _on_play_clicked(self, widget): def _on_play_clicked(self, widget):
if self._client.connected(): if self._client.connected():
status=self._client.wrapped_call("status") self._client.wrapped_call("toggle_play")
if status["state"] == "play":
self._client.wrapped_call("pause", 1)
elif status["state"] == "pause":
self._client.wrapped_call("pause", 0)
else:
try:
self._client.wrapped_call("play")
except:
pass
def _on_stop_clicked(self, widget): def _on_stop_clicked(self, widget):
if self._client.connected(): if self._client.connected():
@ -3014,13 +3021,33 @@ class PlaybackControl(Gtk.ButtonBox):
if self._client.connected(): if self._client.connected():
self._client.wrapped_call("next") self._client.wrapped_call("next")
def _on_state(self, emitter, state):
if state == "play":
self._play_button.set_image(self._icons["media-playback-pause-symbolic"])
self._prev_button.set_sensitive(True)
self._next_button.set_sensitive(True)
elif state == "pause":
self._play_button.set_image(self._icons["media-playback-start-symbolic"])
self._prev_button.set_sensitive(True)
self._next_button.set_sensitive(True)
else:
self._play_button.set_image(self._icons["media-playback-start-symbolic"])
self._prev_button.set_sensitive(False)
self._next_button.set_sensitive(False)
def _on_disconnected(self, *args):
self.set_sensitive(False)
def _on_reconnected(self, *args):
self.set_sensitive(True)
def _on_mini_player(self, obj, typestring): def _on_mini_player(self, obj, typestring):
self._on_show_stop_changed() self._on_show_stop_changed()
def _on_show_stop_changed(self, *args): def _on_show_stop_changed(self, *args):
visibility=(self._settings.get_boolean("show-stop") and not self._settings.get_property("mini-player")) visibility=(self._settings.get_boolean("show-stop") and not self._settings.get_property("mini-player"))
self.stop_button.set_property("visible", visibility) self._stop_button.set_property("visible", visibility)
self.stop_button.set_property("no-show-all", not(visibility)) self._stop_button.set_property("no-show-all", not(visibility))
def _on_icon_size_changed(self, *args): def _on_icon_size_changed(self, *args):
pixel_size=self._settings.get_int("icon-size") pixel_size=self._settings.get_int("icon-size")
@ -3045,15 +3072,15 @@ class SeekBar(Gtk.Box):
self._rest_event_box=Gtk.EventBox() self._rest_event_box=Gtk.EventBox()
# progress bar # progress bar
self.scale=Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL) self._scale=Gtk.Scale(orientation=Gtk.Orientation.HORIZONTAL, can_focus=False)
self.scale.set_show_fill_level(True) self._scale.set_show_fill_level(True)
self.scale.set_restrict_to_fill_level(False) self._scale.set_restrict_to_fill_level(False)
self.scale.set_draw_value(False) self._scale.set_draw_value(False)
self.scale.set_increments(10, 60) self._scale.set_increments(10, 60)
self._adjustment=self.scale.get_adjustment() self._adjustment=self._scale.get_adjustment()
# css (scale) # css (scale)
style_context=self.scale.get_style_context() style_context=self._scale.get_style_context()
provider=Gtk.CssProvider() provider=Gtk.CssProvider()
css=b"""scale fill { background-color: @theme_selected_bg_color; }""" css=b"""scale fill { background-color: @theme_selected_bg_color; }"""
provider.load_from_data(css) provider.load_from_data(css)
@ -3061,13 +3088,13 @@ class SeekBar(Gtk.Box):
# connect # connect
self._elapsed_event_box.connect("button-release-event", self._on_elapsed_button_release_event) self._elapsed_event_box.connect("button-release-event", self._on_elapsed_button_release_event)
self._elapsed_event_box.connect("button-press-event", lambda *args: self.scale.grab_focus()) self._elapsed_event_box.connect("button-press-event", lambda *args: self._scale.grab_focus())
self._rest_event_box.connect("button-release-event", self._on_rest_button_release_event) self._rest_event_box.connect("button-release-event", self._on_rest_button_release_event)
self._rest_event_box.connect("button-press-event", lambda *args: self.scale.grab_focus()) self._rest_event_box.connect("button-press-event", lambda *args: self._scale.grab_focus())
self.scale.connect("change-value", self._on_change_value) self._scale.connect("change-value", self._on_change_value)
self.scale.connect("scroll-event", lambda *args: True) # disable mouse wheel self._scale.connect("scroll-event", lambda *args: True) # disable mouse wheel
self.scale.connect("button-press-event", self._on_scale_button_press_event) self._scale.connect("button-press-event", self._on_scale_button_press_event)
self.scale.connect("button-release-event", self._on_scale_button_release_event) self._scale.connect("button-release-event", self._on_scale_button_release_event)
self._client.emitter.connect("disconnected", self._disable) self._client.emitter.connect("disconnected", self._disable)
self._client.emitter.connect("state", self._on_state) self._client.emitter.connect("state", self._on_state)
self._client.emitter.connect("elapsed_changed", self._refresh) self._client.emitter.connect("elapsed_changed", self._refresh)
@ -3076,7 +3103,7 @@ class SeekBar(Gtk.Box):
self._elapsed_event_box.add(self._elapsed) self._elapsed_event_box.add(self._elapsed)
self._rest_event_box.add(self._rest) self._rest_event_box.add(self._rest)
self.pack_start(self._elapsed_event_box, False, False, 0) self.pack_start(self._elapsed_event_box, False, False, 0)
self.pack_start(self.scale, True, True, 0) self.pack_start(self._scale, True, True, 0)
self.pack_end(self._rest_event_box, False, False, 0) self.pack_end(self._rest_event_box, False, False, 0)
def _refresh(self, emitter, elapsed, duration): def _refresh(self, emitter, elapsed, duration):
@ -3085,31 +3112,31 @@ class SeekBar(Gtk.Box):
elapsed=duration elapsed=duration
self._adjustment.set_upper(duration) self._adjustment.set_upper(duration)
if self._update: if self._update:
self.scale.set_value(elapsed) self._scale.set_value(elapsed)
self._elapsed.set_text(str(datetime.timedelta(seconds=int(elapsed))).lstrip("0").lstrip(":")) self._elapsed.set_text(str(datetime.timedelta(seconds=int(elapsed))).lstrip("0").lstrip(":"))
self._rest.set_text("-"+str(datetime.timedelta(seconds=int(duration-elapsed))).lstrip("0").lstrip(":")) self._rest.set_text("-"+str(datetime.timedelta(seconds=int(duration-elapsed))).lstrip("0").lstrip(":"))
self.scale.set_fill_level(elapsed) self._scale.set_fill_level(elapsed)
def _disable(self, *args): def _disable(self, *args):
self.set_sensitive(False) self.set_sensitive(False)
self.scale.set_fill_level(0) self._scale.set_fill_level(0)
self.scale.set_range(0, 0) self._scale.set_range(0, 0)
self._elapsed.set_text("--:--") self._elapsed.set_text("--:--")
self._rest.set_text("--:--") self._rest.set_text("--:--")
def _on_scale_button_press_event(self, widget, event): def _on_scale_button_press_event(self, widget, event):
if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS: if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS:
self._update=False self._update=False
self.scale.set_has_origin(False) self._scale.set_has_origin(False)
if event.button == 3 and event.type == Gdk.EventType.BUTTON_PRESS: if event.button == 3 and event.type == Gdk.EventType.BUTTON_PRESS:
self._jumped=False self._jumped=False
def _on_scale_button_release_event(self, widget, event): def _on_scale_button_release_event(self, widget, event):
if event.button == 1: if event.button == 1:
self._update=True self._update=True
self.scale.set_has_origin(True) self._scale.set_has_origin(True)
if self._jumped: # actual seek if self._jumped: # actual seek
self._client.wrapped_call("seekcur", self.scale.get_value()) self._client.wrapped_call("seekcur", self._scale.get_value())
self._jumped=False self._jumped=False
else: # restore state else: # restore state
status=self._client.wrapped_call("status") status=self._client.wrapped_call("status")
@ -3160,11 +3187,31 @@ class PlaybackOptions(Gtk.Box):
for data in icons_data: for data in icons_data:
self._icons[data]=PixelSizedIcon(data, self._icon_size) self._icons[data]=PixelSizedIcon(data, self._icon_size)
self._random_button=Gtk.ToggleButton(image=self._icons["media-playlist-shuffle-symbolic"], tooltip_text=_("Random mode")) self._random_button=Gtk.ToggleButton(
self._repeat_button=Gtk.ToggleButton(image=self._icons["media-playlist-repeat-symbolic"], tooltip_text=_("Repeat mode")) image=self._icons["media-playlist-shuffle-symbolic"],
self._single_button=Gtk.ToggleButton(image=self._icons["zoom-original-symbolic"], tooltip_text=_("Single mode")) tooltip_text=_("Random mode"),
self._consume_button=Gtk.ToggleButton(image=self._icons["edit-cut-symbolic"], tooltip_text=_("Consume mode")) can_focus=False
self._volume_button=Gtk.VolumeButton(use_symbolic=True, size=self._settings.get_gtk_icon_size("icon-size")) )
self._repeat_button=Gtk.ToggleButton(
image=self._icons["media-playlist-repeat-symbolic"],
tooltip_text=_("Repeat mode"),
can_focus=False
)
self._single_button=Gtk.ToggleButton(
image=self._icons["zoom-original-symbolic"],
tooltip_text=_("Single mode"),
can_focus=False
)
self._consume_button=Gtk.ToggleButton(
image=self._icons["edit-cut-symbolic"],
tooltip_text=_("Consume mode"),
can_focus=False
)
self._volume_button=Gtk.VolumeButton(
use_symbolic=True,
size=self._settings.get_gtk_icon_size("icon-size"),
can_focus=False
)
self._volume_button.set_sensitive(False) # do not allow volume change by user when MPD has not yet reported volume self._volume_button.set_sensitive(False) # do not allow volume change by user when MPD has not yet reported volume
adj=self._volume_button.get_adjustment() adj=self._volume_button.get_adjustment()
adj.set_step_increment(0.05) adj.set_step_increment(0.05)
@ -3261,6 +3308,74 @@ class PlaybackOptions(Gtk.Box):
icon.set_pixel_size(pixel_size) icon.set_pixel_size(pixel_size)
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"))
###################
# MPD gio actions #
###################
class MPDActionGroup(Gio.SimpleActionGroup):
def __init__(self, client):
super().__init__()
# adding vars
self._client=client
# actions
self._simple_actions_data=(
"toggle-play","stop","next","prev","seek-forward","seek-backward","clear","update",
"repeat","random","single","consume"
)
for name in self._simple_actions_data:
action=Gio.SimpleAction.new(name, None)
action.connect("activate", getattr(self, ("_on_"+name.replace("-","_"))))
self.add_action(action)
# connect
self._client.emitter.connect("disconnected", self._on_disconnected)
self._client.emitter.connect("reconnected", self._on_reconnected)
def _on_toggle_play(self, action, param):
self._client.wrapped_call("toggle_play")
def _on_stop(self, action, param):
self._client.wrapped_call("stop")
def _on_next(self, action, param):
self._client.wrapped_call("next")
def _on_prev(self, action, param):
self._client.wrapped_call("previous")
def _on_seek_forward(self, action, param):
self._client.wrapped_call("seekcur", "+10")
def _on_seek_backward(self, action, param):
self._client.wrapped_call("seekcur", "-10")
def _on_clear(self, action, param):
self._client.wrapped_call("clear")
def _on_update(self, action, param):
self._client.wrapped_call("update")
def _on_repeat(self, action, param):
self._client.wrapped_call("toggle_option", "repeat")
def _on_random(self, action, param):
self._client.wrapped_call("toggle_option", "random")
def _on_single(self, action, param):
self._client.wrapped_call("toggle_option", "single")
def _on_consume(self, action, param):
self._client.wrapped_call("toggle_option", "consume")
def _on_disconnected(self, *args):
for action in self._simple_actions_data:
self.lookup_action(action).set_enabled(False)
def _on_reconnected(self, *args):
for action in self._simple_actions_data:
self.lookup_action(action).set_enabled(True)
#################### ####################
# shortcuts window # # shortcuts window #
#################### ####################
@ -3280,26 +3395,34 @@ class ShortcutsWindow(Gtk.ShortcutsWindow):
section.add(items_group) section.add(items_group)
section.add(playlist_group) section.add(playlist_group)
shortcut_data=[ shortcut_data=(
("F1", _("Open online help"), None, general_group),
("<Control>question", _("Open shortcuts window"), None, general_group),
("F10", _("Open menu"), None, general_group),
("F5", _("Update database"), None, general_group),
("<Control>q", _("Quit"), None, general_group),
("<Control>m", _("Toggle mini player"), None, window_group), ("<Control>m", _("Toggle mini player"), None, window_group),
("<Control>l", _("Toggle lyrics"), None, window_group), ("<Control>l", _("Toggle lyrics"), None, window_group),
("<Control>f", _("Toggle search"), None, window_group), ("<Control>f", _("Toggle search"), None, window_group),
("Escape", _("Back to current album"), None, window_group), ("Escape", _("Back to current album"), None, window_group),
("F1", _("Open online help"), None, general_group),
("<Control>q", _("Quit"), None, general_group),
("space", _("Play/Pause"), None, playback_group), ("space", _("Play/Pause"), None, playback_group),
("<Control>space", _("Stop"), None, playback_group),
("KP_Add", _("Next title"), None, playback_group), ("KP_Add", _("Next title"), None, playback_group),
("KP_Subtract", _("Previous title"), None, playback_group), ("KP_Subtract", _("Previous title"), None, playback_group),
("KP_Multiply", _("Seek forward"), None, playback_group), ("KP_Multiply", _("Seek forward"), None, playback_group),
("KP_Divide", _("Seek backward"), None, playback_group), ("KP_Divide", _("Seek backward"), None, playback_group),
("F5", _("Update database"), None, playback_group), ("<Control>r", _("Toggle repeat mode"), None, playback_group),
("<Control>s", _("Toggle random mode"), None, playback_group),
("<Control>1", _("Toggle single mode"), None, playback_group),
("<Control>o", _("Toggle consume mode"), None, playback_group),
("p", _("Play selected item (next)"), _("Left-click"), items_group), ("p", _("Play selected item (next)"), _("Left-click"), items_group),
("a", _("Append selected item"), _("Middle-click"), items_group), ("a", _("Append selected item"), _("Middle-click"), items_group),
("Return", _("Play selected item immediately"), _("Double-click"), items_group), ("Return", _("Play selected item immediately"), _("Double-click"), items_group),
("Menu", _("Show additional information"), _("Right-click"), items_group), ("Menu", _("Show additional information"), _("Right-click"), items_group),
("Delete", _("Remove selected song"), _("Middle-click"), playlist_group), ("Delete", _("Remove selected song"), _("Middle-click"), playlist_group),
("<Shift>Delete", _("Clear playlist"), None, playlist_group),
("Menu", _("Show additional information"), _("Right-click"), playlist_group) ("Menu", _("Show additional information"), _("Right-click"), playlist_group)
] )
for accel, title, subtitle, group in shortcut_data: for accel, title, subtitle, group in shortcut_data:
shortcut=Gtk.ShortcutsShortcut(visible=True, accelerator=accel, title=title, subtitle=subtitle) shortcut=Gtk.ShortcutsShortcut(visible=True, accelerator=accel, title=title, subtitle=subtitle)
group.pack_start(shortcut, False, False, 0) group.pack_start(shortcut, False, False, 0)
@ -3424,16 +3547,15 @@ class MainWindow(Gtk.ApplicationWindow):
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","toggle-lyrics","back-to-current-album","toggle-search")
"save","settings","stats","update","help",
"toggle-lyrics","toggle-play","next","prev","back-to-current-album","seek-forward","seek-backward","toggle-search"
]
for name in simple_actions_data: for name in simple_actions_data:
action=Gio.SimpleAction.new(name, None) action=Gio.SimpleAction.new(name, None)
action.connect("activate", getattr(self, ("_on_"+name.replace("-","_")))) action.connect("activate", getattr(self, ("_on_"+name.replace("-","_"))))
self.add_action(action) self.add_action(action)
mini_player_action=Gio.PropertyAction.new("mini-player", self._settings, "mini-player") mini_player_action=Gio.PropertyAction.new("mini-player", self._settings, "mini-player")
self.add_action(mini_player_action) self.add_action(mini_player_action)
self._mpd_action_group=MPDActionGroup(self._client)
self.insert_action_group("mpd", self._mpd_action_group)
# widgets # widgets
self._icons={} self._icons={}
@ -3444,8 +3566,8 @@ class MainWindow(Gtk.ApplicationWindow):
self._browser=Browser(self._client, self._settings, self) self._browser=Browser(self._client, self._settings, self)
self._cover_playlist_window=CoverPlaylistWindow(self._client, self._settings, self) self._cover_playlist_window=CoverPlaylistWindow(self._client, self._settings, self)
self._profile_select=ProfileSelect(self._settings) self._profile_select=ProfileSelect(self._settings)
self._playback_control=PlaybackControl(self._client, self._settings) playback_control=PlaybackControl(self._client, self._settings)
self._seek_bar=SeekBar(self._client) seek_bar=SeekBar(self._client)
playback_options=PlaybackOptions(self._client, self._settings) playback_options=PlaybackOptions(self._client, self._settings)
connection_notify=ConnectionNotify(self._client, self._settings) connection_notify=ConnectionNotify(self._client, self._settings)
@ -3458,7 +3580,7 @@ class MainWindow(Gtk.ApplicationWindow):
subsection.append(_("Quit"), "app.quit") subsection.append(_("Quit"), "app.quit")
mpd_subsection=Gio.Menu() mpd_subsection=Gio.Menu()
mpd_subsection.append(_("Update database"), "win.update") mpd_subsection.append(_("Update database"), "mpd.update")
mpd_subsection.append(_("Server stats"), "win.stats") mpd_subsection.append(_("Server stats"), "win.stats")
menu=Gio.Menu() menu=Gio.Menu()
@ -3467,14 +3589,14 @@ class MainWindow(Gtk.ApplicationWindow):
menu.append_section(None, mpd_subsection) menu.append_section(None, mpd_subsection)
menu.append_section(None, subsection) menu.append_section(None, subsection)
menu_button=Gtk.MenuButton(image=self._icons["open-menu-symbolic"], tooltip_text=_("Menu")) self._menu_button=Gtk.MenuButton(image=self._icons["open-menu-symbolic"], tooltip_text=_("Menu"), can_focus=False)
menu_popover=Gtk.Popover.new_from_model(menu_button, menu) menu_popover=Gtk.Popover.new_from_model(self._menu_button, menu)
menu_button.set_popover(menu_popover) self._menu_button.set_popover(menu_popover)
# action bar # action bar
action_bar=Gtk.ActionBar() action_bar=Gtk.ActionBar()
action_bar.pack_start(self._playback_control) action_bar.pack_start(playback_control)
action_bar.pack_start(self._seek_bar) action_bar.pack_start(seek_bar)
action_bar.pack_start(playback_options) action_bar.pack_start(playback_options)
# connect # connect
@ -3506,13 +3628,13 @@ class MainWindow(Gtk.ApplicationWindow):
self.set_titlebar(self._header_bar) self.set_titlebar(self._header_bar)
self._header_bar.pack_start(self._browser.back_to_current_album_button) self._header_bar.pack_start(self._browser.back_to_current_album_button)
self._header_bar.pack_start(self._browser.genre_select) self._header_bar.pack_start(self._browser.genre_select)
self._header_bar.pack_end(menu_button) self._header_bar.pack_end(self._menu_button)
self._header_bar.pack_end(self._profile_select) self._header_bar.pack_end(self._profile_select)
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(Gtk.Separator.new(orientation=Gtk.Orientation.VERTICAL))
action_bar.pack_start(self._profile_select) action_bar.pack_start(self._profile_select)
action_bar.pack_start(menu_button) action_bar.pack_start(self._menu_button)
self.add(overlay) self.add(overlay)
@ -3521,6 +3643,39 @@ class MainWindow(Gtk.ApplicationWindow):
self.maximize() self.maximize()
self._client.start() # connect client self._client.start() # connect client
def _on_toggle_lyrics(self, action, param):
self._cover_playlist_window.lyrics_button.set_active(not(self._cover_playlist_window.lyrics_button.get_active()))
def _on_back_to_current_album(self, action, param):
self._browser.back_to_current_album_button.emit("clicked")
def _on_toggle_search(self, action, param):
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):
settings=SettingsDialog(self, self._client, self._settings)
settings.run()
settings.destroy()
def _on_stats(self, action, param):
stats=ServerStats(self, self._client, self._settings)
stats.destroy()
def _on_help(self, action, param):
Gtk.show_uri_on_window(self, "https://github.com/SoongNoonien/mpdevil/wiki/Usage", Gdk.CURRENT_TIME)
def _on_menu(self, action, param):
self._menu_button.emit("clicked")
def _on_song_changed(self, *args): def _on_song_changed(self, *args):
song=self._client.wrapped_call("currentsong") song=self._client.wrapped_call("currentsong")
if song == {}: if song == {}:
@ -3548,95 +3703,29 @@ class MainWindow(Gtk.ApplicationWindow):
notify.show() notify.show()
def _on_reconnected(self, *args): def _on_reconnected(self, *args):
self._playback_control.set_sensitive(True) for action in ("save","stats","toggle-lyrics","back-to-current-album","toggle-search"):
self.action_enabled_changed self.lookup_action(action).set_enabled(True)
self.lookup_action("update").set_enabled(True)
self.lookup_action("stats").set_enabled(True)
self.lookup_action("toggle-lyrics").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("")
self._playback_control.set_sensitive(False) for action in ("save","stats","toggle-lyrics","back-to-current-album","toggle-search"):
self.lookup_action("update").set_enabled(False) self.lookup_action(action).set_enabled(False)
self.lookup_action("stats").set_enabled(False)
self.lookup_action("toggle-lyrics").set_enabled(False)
def _on_search_focus_changed(self, obj, focus): def _on_search_focus_changed(self, obj, focus):
if focus: self._mpd_action_group.lookup_action("toggle-play").set_enabled(not(focus))
self.lookup_action("toggle-play").set_enabled(False)
else:
self.lookup_action("toggle-play").set_enabled(True)
def _on_toggle_lyrics(self, action, param):
self._cover_playlist_window.lyrics_button.grab_focus()
self._cover_playlist_window.lyrics_button.set_active(not(self._cover_playlist_window.lyrics_button.get_active()))
def _on_toggle_play(self, action, param):
self._playback_control.play_button.grab_focus()
self._playback_control.play_button.emit("clicked")
def _on_next(self, action, param):
self._playback_control.next_button.grab_focus()
self._playback_control.next_button.emit("clicked")
def _on_prev(self, action, param):
self._playback_control.prev_button.grab_focus()
self._playback_control.prev_button.emit("clicked")
def _on_back_to_current_album(self, action, param):
self._browser.back_to_current_album_button.grab_focus()
self._browser.back_to_current_album_button.emit("clicked")
def _on_seek_forward(self, action, param):
self._seek_bar.scale.grab_focus()
self._client.wrapped_call("seekcur", "+10")
def _on_seek_backward(self, action, param):
self._seek_bar.scale.grab_focus()
self._client.wrapped_call("seekcur", "-10")
def _on_toggle_search(self, action, param):
self._browser.search_button.grab_focus()
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):
settings=SettingsDialog(self, self._client, self._settings)
settings.run()
settings.destroy()
def _on_stats(self, action, param):
stats=ServerStats(self, self._client, self._settings)
stats.destroy()
def _on_update(self, action, param):
self._client.wrapped_call("update")
def _on_help(self, action, param):
Gtk.show_uri_on_window(self, "https://github.com/SoongNoonien/mpdevil/wiki/Usage", Gdk.CURRENT_TIME)
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)
self._tmp_saved_size=self.get_size() self._tmp_saved_size=self.get_size()
self._tmp_saved_miximized=self.is_maximized() self._tmp_saved_miximized=self.is_maximized()
self.lookup_action("save").set_enabled(False)
self.lookup_action("back-to-current-album").set_enabled(False)
if self._tmp_saved_miximized: 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.lookup_action("save").set_enabled(True)
self.lookup_action("back-to-current-album").set_enabled(True)
self.resize(self._tmp_saved_size[0], self._tmp_saved_size[1]) self.resize(self._tmp_saved_size[0], self._tmp_saved_size[1])
if self._tmp_saved_miximized: if self._tmp_saved_miximized:
self.maximize() self.maximize()
@ -3672,18 +3761,17 @@ class mpdevil(Gtk.Application):
self._window=MainWindow(self, self._client, self._settings) self._window=MainWindow(self, self._client, self._settings)
self._window.connect("delete-event", self._on_delete_event) self._window.connect("delete-event", self._on_delete_event)
# accelerators # accelerators
self.set_accels_for_action("app.quit", ["<Control>q"]) action_accels=(
self.set_accels_for_action("win.mini-player", ["<Control>m"]) ("app.quit", ["<Control>q"]),("win.mini-player", ["<Control>m"]),("win.help", ["F1"]),("win.menu", ["F10"]),
self.set_accels_for_action("win.update", ["F5"]) ("win.show-help-overlay", ["<Control>question"]),("win.toggle-lyrics", ["<Control>l"]),
self.set_accels_for_action("win.help", ["F1"]) ("win.back-to-current-album", ["Escape"]),("win.toggle-search", ["<control>f"]),
self.set_accels_for_action("win.toggle-lyrics", ["<Control>l"]) ("mpd.update", ["F5"]),("mpd.clear", ["<Shift>Delete"]),("mpd.toggle-play", ["space"]),
self.set_accels_for_action("win.toggle-play", ["space"]) ("mpd.stop", ["<Control>space"]),("mpd.next", ["KP_Add"]),("mpd.prev", ["KP_Subtract"]),
self.set_accels_for_action("win.next", ["KP_Add"]) ("mpd.repeat", ["<Control>r"]),("mpd.random", ["<Control>s"]),("mpd.single", ["<Control>1"]),
self.set_accels_for_action("win.prev", ["KP_Subtract",]) ("mpd.consume", ["<Control>o"]),("mpd.seek-forward", ["KP_Multiply"]),("mpd.seek-backward", ["KP_Divide"])
self.set_accels_for_action("win.seek-forward", ["KP_Multiply"]) )
self.set_accels_for_action("win.seek-backward", ["KP_Divide"]) for action, accels in action_accels:
self.set_accels_for_action("win.back-to-current-album", ["Escape"]) self.set_accels_for_action(action, accels)
self.set_accels_for_action("win.toggle-search", ["<control>f"])
self._window.present() self._window.present()
def do_startup(self): def do_startup(self):

299
po/de.po
View File

@ -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-09-24 21:14+0200\n" "POT-Creation-Date: 2020-09-29 12:34+0200\n"
"PO-Revision-Date: 2020-09-24 21:16+0200\n" "PO-Revision-Date: 2020-09-29 12:37+0200\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"Language: de\n" "Language: de\n"
@ -18,103 +18,103 @@ 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:473 #: mpdevil:404
msgid "Unknown Title" msgid "Unknown Title"
msgstr "Unbekannter Titel" msgstr "Unbekannter Titel"
#: mpdevil:749 #: mpdevil:693
msgid "Main cover size:" msgid "Main cover size:"
msgstr "Größe des Haupt-Covers:" msgstr "Größe des Haupt-Covers:"
#: mpdevil:750 #: mpdevil:694
msgid "Album view cover size:" msgid "Album view cover size:"
msgstr "Covergröße in Albumliste:" msgstr "Covergröße in Albumliste:"
#: mpdevil:751 #: mpdevil:695
msgid "Action bar icon size:" msgid "Action bar icon size:"
msgstr "Symbolgröße Aktionsleiste:" msgstr "Symbolgröße Aktionsleiste:"
#: mpdevil:752 #: mpdevil:696
msgid "Secondary icon size:" msgid "Secondary icon size:"
msgstr "Sekundäre Symbolgröße:" msgstr "Sekundäre Symbolgröße:"
#: mpdevil:765 #: mpdevil:709
msgid "Sort albums by:" msgid "Sort albums by:"
msgstr "Sortiere Alben nach:" msgstr "Sortiere Alben nach:"
#: mpdevil:765 #: mpdevil:709
msgid "name" msgid "name"
msgstr "Name" msgstr "Name"
#: mpdevil:765 #: mpdevil:709
msgid "year" msgid "year"
msgstr "Jahr" msgstr "Jahr"
#: mpdevil:766 #: mpdevil:710
msgid "Position of playlist:" msgid "Position of playlist:"
msgstr "Wiedergabelistenposition:" msgstr "Wiedergabelistenposition:"
#: mpdevil:766 #: mpdevil:710
msgid "bottom" msgid "bottom"
msgstr "unten" msgstr "unten"
#: mpdevil:766 #: mpdevil:710
msgid "right" msgid "right"
msgstr "rechts" msgstr "rechts"
#: mpdevil:784 #: mpdevil:728
msgid "Use Client-side decoration" msgid "Use Client-side decoration"
msgstr "Benutze \"Client-side decoration\"" msgstr "Benutze \"Client-side decoration\""
#: mpdevil:785 #: mpdevil:729
msgid "Show stop button" msgid "Show stop button"
msgstr "Zeige Stopp-Knopf" msgstr "Zeige Stopp-Knopf"
#: mpdevil:786 #: mpdevil:730
msgid "Show lyrics button" msgid "Show lyrics button"
msgstr "Zeige Liedtext-Knopf" msgstr "Zeige Liedtext-Knopf"
#: mpdevil:787 #: mpdevil:731
msgid "Show initials in artist view" msgid "Show initials in artist view"
msgstr "Zeige Anfangsbuchstaben in Interpretenliste" msgstr "Zeige Anfangsbuchstaben in Interpretenliste"
#: mpdevil:788 #: mpdevil:732
msgid "Show tooltips in album view" msgid "Show tooltips in album view"
msgstr "Zeige Tooltips in Albumliste" msgstr "Zeige Tooltips in Albumliste"
#: mpdevil:789 #: mpdevil:733
msgid "Use 'Album Artist' tag" msgid "Use 'Album Artist' tag"
msgstr "Benutze \"Album Artist\" Tag" msgstr "Benutze \"Album Artist\" Tag"
#: mpdevil:790 #: mpdevil:734
msgid "Send notification on title change" msgid "Send notification on title change"
msgstr "Sende Benachrichtigung bei Titelwechsel" msgstr "Sende Benachrichtigung bei Titelwechsel"
#: mpdevil:791 #: mpdevil:735
msgid "Stop playback on quit" msgid "Stop playback on quit"
msgstr "Wiedergabe beim Beenden stoppen" msgstr "Wiedergabe beim Beenden stoppen"
#: mpdevil:792 #: mpdevil:736
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:805 #: mpdevil:749
msgid "<b>View</b>" msgid "<b>View</b>"
msgstr "<b>Ansicht</b>" msgstr "<b>Ansicht</b>"
#: mpdevil:806 #: mpdevil:750
msgid "<b>Behavior</b>" msgid "<b>Behavior</b>"
msgstr "<b>Verhalten</b>" msgstr "<b>Verhalten</b>"
#: mpdevil:838 #: mpdevil:782
msgid "(restart required)" msgid "(restart required)"
msgstr "(Neustart erforderlich)" msgstr "(Neustart erforderlich)"
#: mpdevil:900 mpdevil:3460 #: mpdevil:844 mpdevil:3493
msgid "Connect" msgid "Connect"
msgstr "Verbinden" msgstr "Verbinden"
#: mpdevil:916 #: mpdevil:860
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,125 +124,125 @@ 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:921 #: mpdevil:865
msgid "Profile:" msgid "Profile:"
msgstr "Profil:" msgstr "Profil:"
#: mpdevil:922 #: mpdevil:866
msgid "Name:" msgid "Name:"
msgstr "Name:" msgstr "Name:"
#: mpdevil:923 #: mpdevil:867
msgid "Host:" msgid "Host:"
msgstr "Host:" msgstr "Host:"
#: mpdevil:924 #: mpdevil:868
msgid "Password:" msgid "Password:"
msgstr "Passwort:" msgstr "Passwort:"
#: mpdevil:925 #: mpdevil:869
msgid "Music lib:" msgid "Music lib:"
msgstr "Musikverzeichnis:" msgstr "Musikverzeichnis:"
#: mpdevil:926 #: mpdevil:870
msgid "Cover regex:" msgid "Cover regex:"
msgstr "Cover-Regex:" msgstr "Cover-Regex:"
#: mpdevil:1057 #: mpdevil:1001
msgid "Choose directory" msgid "Choose directory"
msgstr "Verzeichnis Wählen" msgstr "Verzeichnis Wählen"
#: mpdevil:1090 #: mpdevil:1034
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:1114 mpdevil:1632 mpdevil:1970 mpdevil:2688 #: mpdevil:1058 mpdevil:1576 mpdevil:1914 mpdevil:2642
msgid "No" msgid "No"
msgstr "Nr." msgstr "Nr."
#: mpdevil:1114 mpdevil:2689 #: mpdevil:1058 mpdevil:2643
msgid "Disc" msgid "Disc"
msgstr "CD" msgstr "CD"
#: mpdevil:1114 mpdevil:1637 mpdevil:1975 mpdevil:2690 #: mpdevil:1058 mpdevil:1581 mpdevil:1919 mpdevil:2644
msgid "Title" msgid "Title"
msgstr "Titel" msgstr "Titel"
#: mpdevil:1114 mpdevil:1643 mpdevil:1862 mpdevil:2691 #: mpdevil:1058 mpdevil:1587 mpdevil:1806 mpdevil:2645
msgid "Artist" msgid "Artist"
msgstr "Interpret" msgstr "Interpret"
#: mpdevil:1114 mpdevil:1649 mpdevil:2692 #: mpdevil:1058 mpdevil:1593 mpdevil:2646
msgid "Album" msgid "Album"
msgstr "Album" msgstr "Album"
#: mpdevil:1114 mpdevil:1655 mpdevil:1981 mpdevil:2693 #: mpdevil:1058 mpdevil:1599 mpdevil:1925 mpdevil:2647
msgid "Length" msgid "Length"
msgstr "Länge" msgstr "Länge"
#: mpdevil:1114 mpdevil:2694 #: mpdevil:1058 mpdevil:2648
msgid "Year" msgid "Year"
msgstr "Jahr" msgstr "Jahr"
#: mpdevil:1114 mpdevil:2695 #: mpdevil:1058 mpdevil:2649
msgid "Genre" msgid "Genre"
msgstr "Genre" msgstr "Genre"
#: mpdevil:1230 mpdevil:1238 mpdevil:3544 #: mpdevil:1174 mpdevil:1182 mpdevil:3576
msgid "Settings" msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
#: mpdevil:1249 mpdevil:3361 #: mpdevil:1193 mpdevil:3386
msgid "General" msgid "General"
msgstr "Allgemein" msgstr "Allgemein"
#: mpdevil:1250 #: mpdevil:1194
msgid "Profiles" msgid "Profiles"
msgstr "Profile" msgstr "Profile"
#: mpdevil:1251 mpdevil:3365 #: mpdevil:1195 mpdevil:3390
msgid "Playlist" msgid "Playlist"
msgstr "Wiedergabeliste" msgstr "Wiedergabeliste"
#: mpdevil:1266 mpdevil:1274 #: mpdevil:1210 mpdevil:1218
msgid "Stats" msgid "Stats"
msgstr "Statistik" msgstr "Statistik"
#: mpdevil:1323 #: mpdevil:1267
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:1395 #: mpdevil:1339
msgid "MPD-Tag" msgid "MPD-Tag"
msgstr "MPD-Tag" msgstr "MPD-Tag"
#: mpdevil:1399 #: mpdevil:1343
msgid "Value" msgid "Value"
msgstr "Wert" msgstr "Wert"
#: mpdevil:1553 #: mpdevil:1497
msgid "Append" msgid "Append"
msgstr "Anhängen" msgstr "Anhängen"
#: mpdevil:1554 #: mpdevil:1498
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:1555 #: mpdevil:1499
msgid "Play" msgid "Play"
msgstr "Abspielen" msgstr "Abspielen"
#: mpdevil:1556 #: mpdevil:1500
msgid "Directly play all titles" msgid "Directly play all titles"
msgstr "Alle Titel sofort abspielen" msgstr "Alle Titel sofort abspielen"
#: mpdevil:1557 #: mpdevil:1501
msgid "Enqueue" msgid "Enqueue"
msgstr "Einreihen" msgstr "Einreihen"
#: mpdevil:1558 #: mpdevil:1502
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"
@ -250,58 +250,58 @@ 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:1714 #: mpdevil:1658
#, python-brace-format #, python-brace-format
msgid "{num} hits" msgid "{num} hits"
msgstr "{num} Treffer" msgstr "{num} Treffer"
#: mpdevil:1752 #: mpdevil:1696
msgid "all genres" msgid "all genres"
msgstr "Alle Genres" msgstr "Alle Genres"
#: mpdevil:1860 #: mpdevil:1804
msgid "Album Artist" msgid "Album Artist"
msgstr "Albuminterpret" msgstr "Albuminterpret"
#: mpdevil:1863 #: mpdevil:1807
msgid "all artists" msgid "all artists"
msgstr "Alle Interpreten" msgstr "Alle Interpreten"
#: mpdevil:1987 #: mpdevil:1931
msgid "Close" msgid "Close"
msgstr "Schließen" msgstr "Schließen"
#: mpdevil:2152 #: mpdevil:2096
#, python-brace-format #, python-brace-format
msgid "{titles} titles on {discs} discs ({length})" msgid "{titles} titles on {discs} discs ({length})"
msgstr "{titles} Titel auf {discs} CDs ({length})" msgstr "{titles} Titel auf {discs} CDs ({length})"
#: mpdevil:2155 mpdevil:2783 #: mpdevil:2099 mpdevil:2737
#, python-brace-format #, python-brace-format
msgid "{titles} titles ({length})" msgid "{titles} titles ({length})"
msgstr "{titles} Titel ({length})" msgstr "{titles} Titel ({length})"
#: mpdevil:2282 mpdevil:3377 #: mpdevil:2228 mpdevil:3407
msgid "Back to current album" msgid "Back to current album"
msgstr "Zurück zu aktuellem Album" msgstr "Zurück zu aktuellem Album"
#: mpdevil:2283 #: mpdevil:2233
msgid "Search" msgid "Search"
msgstr "Suche" msgstr "Suche"
#: mpdevil:2467 #: mpdevil:2419
msgid "searching..." msgid "searching..."
msgstr "suche..." msgstr "suche..."
#: mpdevil:2472 #: mpdevil:2424
msgid "connection error" msgid "connection error"
msgstr "Verbindungsfehler" msgstr "Verbindungsfehler"
#: mpdevil:2474 #: mpdevil:2426
msgid "lyrics not found" msgid "lyrics not found"
msgstr "Liedtext nicht gefunden" msgstr "Liedtext nicht gefunden"
#: mpdevil:2522 #: mpdevil:2474
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} channels, " "{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} channels, "
@ -310,160 +310,188 @@ msgstr ""
"{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} Kanäle, " "{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} Kanäle, "
"{file_type}" "{file_type}"
#: mpdevil:2657 #: mpdevil:2609
msgid "Scroll to current song" msgid "Scroll to current song"
msgstr "Gehe zu aktuellem Lied" msgstr "Gehe zu aktuellem Lied"
#: mpdevil:2664 #: mpdevil:2617 mpdevil:3423
msgid "Clear playlist" msgid "Clear playlist"
msgstr "Wiedergabeliste leeren" msgstr "Wiedergabeliste leeren"
#: mpdevil:2939 #: mpdevil:2896
msgid "Show lyrics" msgid "Show lyrics"
msgstr "Zeige Liedtext" msgstr "Zeige Liedtext"
#: mpdevil:3253 #: mpdevil:3192
msgid "Random mode" msgid "Random mode"
msgstr "Zufallsmodus" msgstr "Zufallsmodus"
#: mpdevil:3254 #: mpdevil:3197
msgid "Repeat mode" msgid "Repeat mode"
msgstr "Dauerschleife" msgstr "Dauerschleife"
#: mpdevil:3255 #: mpdevil:3202
msgid "Single mode" msgid "Single mode"
msgstr "Einzelstückmodus" msgstr "Einzelstückmodus"
#: mpdevil:3256 #: mpdevil:3207
msgid "Consume mode" msgid "Consume mode"
msgstr "Wiedergabeliste verbrauchen" msgstr "Wiedergabeliste verbrauchen"
#: mpdevil:3362 #: mpdevil:3387
msgid "Window" msgid "Window"
msgstr "Fenster" msgstr "Fenster"
#: mpdevil:3363 #: mpdevil:3388
msgid "Playback" msgid "Playback"
msgstr "Wiedergabe" msgstr "Wiedergabe"
#: mpdevil:3364 #: mpdevil:3389
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:3374 #: mpdevil:3399
msgid "Toggle mini player"
msgstr "Miniplayer ein-/ausschalten"
#: mpdevil:3375
msgid "Toggle lyrics"
msgstr "Liedtext ein-/ausblenden"
#: mpdevil:3376
msgid "Toggle search"
msgstr "Suche ein-/ausblenden"
#: mpdevil:3378
msgid "Open online help" msgid "Open online help"
msgstr "Onlinehilfe öffnen" msgstr "Onlinehilfe öffnen"
#: mpdevil:3379 mpdevil:3548 #: mpdevil:3400
msgid "Quit" msgid "Open shortcuts window"
msgstr "Beenden" msgstr "Tastenkürzelfenster öffnen"
#: mpdevil:3380 #: mpdevil:3401
msgid "Play/Pause" msgid "Open menu"
msgstr "Wiedergabe/Pause" msgstr "Menü öffnen"
#: mpdevil:3381 #: mpdevil:3402 mpdevil:3583
msgid "Next title"
msgstr "Nächster Titel"
#: mpdevil:3382
msgid "Previous title"
msgstr "Vorheriger Titel"
#: mpdevil:3383
msgid "Seek forward"
msgstr "Vorspulen"
#: mpdevil:3384
msgid "Seek backward"
msgstr "Zurückspulen"
#: mpdevil:3385 mpdevil:3551
msgid "Update database" msgid "Update database"
msgstr "Datenbank aktualisieren" msgstr "Datenbank aktualisieren"
#: mpdevil:3386 #: mpdevil:3403 mpdevil:3580
msgid "Quit"
msgstr "Beenden"
#: mpdevil:3404
msgid "Toggle mini player"
msgstr "Miniplayer ein-/ausschalten"
#: mpdevil:3405
msgid "Toggle lyrics"
msgstr "Liedtext ein-/ausblenden"
#: mpdevil:3406
msgid "Toggle search"
msgstr "Suche ein-/ausblenden"
#: mpdevil:3408
msgid "Play/Pause"
msgstr "Wiedergabe/Pause"
#: mpdevil:3409
msgid "Stop"
msgstr "Stopp"
#: mpdevil:3410
msgid "Next title"
msgstr "Nächster Titel"
#: mpdevil:3411
msgid "Previous title"
msgstr "Vorheriger Titel"
#: mpdevil:3412
msgid "Seek forward"
msgstr "Vorspulen"
#: mpdevil:3413
msgid "Seek backward"
msgstr "Zurückspulen"
#: mpdevil:3414
msgid "Toggle repeat mode"
msgstr "Dauerschleife ein-/ausschalten"
#: mpdevil:3415
msgid "Toggle random mode"
msgstr "Zufallsmodus ein-/ausschalten"
#: mpdevil:3416
msgid "Toggle single mode"
msgstr "Einzelstückmodus ein-/ausschalten"
#: mpdevil:3417
msgid "Toggle consume mode"
msgstr "Wiedergabeliste verbrauchen ein-/ausschalten"
#: mpdevil:3418
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:3386 #: mpdevil:3418
msgid "Left-click" msgid "Left-click"
msgstr "Linksklick" msgstr "Linksklick"
#: mpdevil:3387 #: mpdevil:3419
msgid "Append selected item" msgid "Append selected item"
msgstr "Ausgewähltes Element anhängen" msgstr "Ausgewähltes Element anhängen"
#: mpdevil:3387 mpdevil:3390 #: mpdevil:3419 mpdevil:3422
msgid "Middle-click" msgid "Middle-click"
msgstr "Mittelklick" msgstr "Mittelklick"
#: mpdevil:3388 #: mpdevil:3420
msgid "Play selected item immediately" msgid "Play selected item immediately"
msgstr "Ausgewähltes Element sofort abspielen" msgstr "Ausgewähltes Element sofort abspielen"
#: mpdevil:3388 #: mpdevil:3420
msgid "Double-click" msgid "Double-click"
msgstr "Doppelklick" msgstr "Doppelklick"
#: mpdevil:3389 mpdevil:3391 #: mpdevil:3421 mpdevil:3424
msgid "Show additional information" msgid "Show additional information"
msgstr "Zeige weitere Informationen" msgstr "Zeige weitere Informationen"
#: mpdevil:3389 mpdevil:3391 #: mpdevil:3421 mpdevil:3424
msgid "Right-click" msgid "Right-click"
msgstr "Rechtsklick" msgstr "Rechtsklick"
#: mpdevil:3390 #: mpdevil:3422
msgid "Remove selected song" msgid "Remove selected song"
msgstr "Ausgewählten Titel entfernen" msgstr "Ausgewählten Titel entfernen"
#: mpdevil:3405 #: mpdevil:3438
msgid "Select profile" msgid "Select profile"
msgstr "Profil auswählen" msgstr "Profil auswählen"
#: mpdevil:3478 #: mpdevil:3511
#, 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:3545 #: mpdevil:3577
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "Tastenkürzel" msgstr "Tastenkürzel"
#: mpdevil:3546 #: mpdevil:3578
msgid "Help" msgid "Help"
msgstr "Hilfe" msgstr "Hilfe"
#: mpdevil:3547 #: mpdevil:3579
msgid "About" msgid "About"
msgstr "Über" msgstr "Über"
#: mpdevil:3552 #: mpdevil:3584
msgid "Server stats" msgid "Server stats"
msgstr "Serverstatistik" msgstr "Serverstatistik"
#: mpdevil:3555 #: mpdevil:3587
msgid "Save window layout" msgid "Save window layout"
msgstr "Fensterlayout speichern" msgstr "Fensterlayout speichern"
#: mpdevil:3556 #: mpdevil:3588
msgid "Mini player" msgid "Mini player"
msgstr "Miniplayer" msgstr "Miniplayer"
#: mpdevil:3560 #: mpdevil:3592
msgid "Menu" msgid "Menu"
msgstr "Menü" msgstr "Menü"
@ -527,9 +555,6 @@ msgstr "Menü"
#~ msgid "Return to album of current title" #~ msgid "Return to album of current title"
#~ msgstr "Zu Album des aktuellen Titels zurückkehren" #~ msgstr "Zu Album des aktuellen Titels zurückkehren"
#~ msgid "Main menu"
#~ msgstr "Hauptmenu"
#~ msgid "Not connected to MPD-server. Reconnect?" #~ msgid "Not connected to MPD-server. Reconnect?"
#~ msgstr "Nicht mit MPD-Server verbunden. Verbindung wiederherstellen?" #~ msgstr "Nicht mit MPD-Server verbunden. Verbindung wiederherstellen?"

View File

@ -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-09-24 21:14+0200\n" "POT-Creation-Date: 2020-09-29 12:34+0200\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"
@ -17,442 +17,470 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n" "Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: mpdevil:473 #: mpdevil:404
msgid "Unknown Title" msgid "Unknown Title"
msgstr "" msgstr ""
#: mpdevil:749 #: mpdevil:693
msgid "Main cover size:" msgid "Main cover size:"
msgstr "" msgstr ""
#: mpdevil:750 #: mpdevil:694
msgid "Album view cover size:" msgid "Album view cover size:"
msgstr "" msgstr ""
#: mpdevil:751 #: mpdevil:695
msgid "Action bar icon size:" msgid "Action bar icon size:"
msgstr "" msgstr ""
#: mpdevil:752 #: mpdevil:696
msgid "Secondary icon size:" msgid "Secondary icon size:"
msgstr "" msgstr ""
#: mpdevil:765 #: mpdevil:709
msgid "Sort albums by:" msgid "Sort albums by:"
msgstr "" msgstr ""
#: mpdevil:765 #: mpdevil:709
msgid "name" msgid "name"
msgstr "" msgstr ""
#: mpdevil:765 #: mpdevil:709
msgid "year" msgid "year"
msgstr "" msgstr ""
#: mpdevil:766 #: mpdevil:710
msgid "Position of playlist:" msgid "Position of playlist:"
msgstr "" msgstr ""
#: mpdevil:766 #: mpdevil:710
msgid "bottom" msgid "bottom"
msgstr "" msgstr ""
#: mpdevil:766 #: mpdevil:710
msgid "right" msgid "right"
msgstr "" msgstr ""
#: mpdevil:784 #: mpdevil:728
msgid "Use Client-side decoration" msgid "Use Client-side decoration"
msgstr "" msgstr ""
#: mpdevil:785 #: mpdevil:729
msgid "Show stop button" msgid "Show stop button"
msgstr "" msgstr ""
#: mpdevil:786 #: mpdevil:730
msgid "Show lyrics button" msgid "Show lyrics button"
msgstr "" msgstr ""
#: mpdevil:787 #: mpdevil:731
msgid "Show initials in artist view" msgid "Show initials in artist view"
msgstr "" msgstr ""
#: mpdevil:788 #: mpdevil:732
msgid "Show tooltips in album view" msgid "Show tooltips in album view"
msgstr "" msgstr ""
#: mpdevil:789 #: mpdevil:733
msgid "Use 'Album Artist' tag" msgid "Use 'Album Artist' tag"
msgstr "" msgstr ""
#: mpdevil:790 #: mpdevil:734
msgid "Send notification on title change" msgid "Send notification on title change"
msgstr "" msgstr ""
#: mpdevil:791 #: mpdevil:735
msgid "Stop playback on quit" msgid "Stop playback on quit"
msgstr "" msgstr ""
#: mpdevil:792 #: mpdevil:736
msgid "Play selected albums and titles immediately" msgid "Play selected albums and titles immediately"
msgstr "" msgstr ""
#: mpdevil:805 #: mpdevil:749
msgid "<b>View</b>" msgid "<b>View</b>"
msgstr "" msgstr ""
#: mpdevil:806 #: mpdevil:750
msgid "<b>Behavior</b>" msgid "<b>Behavior</b>"
msgstr "" msgstr ""
#: mpdevil:838 #: mpdevil:782
msgid "(restart required)" msgid "(restart required)"
msgstr "" msgstr ""
#: mpdevil:900 mpdevil:3460 #: mpdevil:844 mpdevil:3493
msgid "Connect" msgid "Connect"
msgstr "" msgstr ""
#: mpdevil:916 #: mpdevil:860
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:921 #: mpdevil:865
msgid "Profile:" msgid "Profile:"
msgstr "" msgstr ""
#: mpdevil:922 #: mpdevil:866
msgid "Name:" msgid "Name:"
msgstr "" msgstr ""
#: mpdevil:923 #: mpdevil:867
msgid "Host:" msgid "Host:"
msgstr "" msgstr ""
#: mpdevil:924 #: mpdevil:868
msgid "Password:" msgid "Password:"
msgstr "" msgstr ""
#: mpdevil:925 #: mpdevil:869
msgid "Music lib:" msgid "Music lib:"
msgstr "" msgstr ""
#: mpdevil:926 #: mpdevil:870
msgid "Cover regex:" msgid "Cover regex:"
msgstr "" msgstr ""
#: mpdevil:1057 #: mpdevil:1001
msgid "Choose directory" msgid "Choose directory"
msgstr "" msgstr ""
#: mpdevil:1090 #: mpdevil:1034
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:1114 mpdevil:1632 mpdevil:1970 mpdevil:2688 #: mpdevil:1058 mpdevil:1576 mpdevil:1914 mpdevil:2642
msgid "No" msgid "No"
msgstr "" msgstr ""
#: mpdevil:1114 mpdevil:2689 #: mpdevil:1058 mpdevil:2643
msgid "Disc" msgid "Disc"
msgstr "" msgstr ""
#: mpdevil:1114 mpdevil:1637 mpdevil:1975 mpdevil:2690 #: mpdevil:1058 mpdevil:1581 mpdevil:1919 mpdevil:2644
msgid "Title" msgid "Title"
msgstr "" msgstr ""
#: mpdevil:1114 mpdevil:1643 mpdevil:1862 mpdevil:2691 #: mpdevil:1058 mpdevil:1587 mpdevil:1806 mpdevil:2645
msgid "Artist" msgid "Artist"
msgstr "" msgstr ""
#: mpdevil:1114 mpdevil:1649 mpdevil:2692 #: mpdevil:1058 mpdevil:1593 mpdevil:2646
msgid "Album" msgid "Album"
msgstr "" msgstr ""
#: mpdevil:1114 mpdevil:1655 mpdevil:1981 mpdevil:2693 #: mpdevil:1058 mpdevil:1599 mpdevil:1925 mpdevil:2647
msgid "Length" msgid "Length"
msgstr "" msgstr ""
#: mpdevil:1114 mpdevil:2694 #: mpdevil:1058 mpdevil:2648
msgid "Year" msgid "Year"
msgstr "" msgstr ""
#: mpdevil:1114 mpdevil:2695 #: mpdevil:1058 mpdevil:2649
msgid "Genre" msgid "Genre"
msgstr "" msgstr ""
#: mpdevil:1230 mpdevil:1238 mpdevil:3544 #: mpdevil:1174 mpdevil:1182 mpdevil:3576
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: mpdevil:1249 mpdevil:3361 #: mpdevil:1193 mpdevil:3386
msgid "General" msgid "General"
msgstr "" msgstr ""
#: mpdevil:1250 #: mpdevil:1194
msgid "Profiles" msgid "Profiles"
msgstr "" msgstr ""
#: mpdevil:1251 mpdevil:3365 #: mpdevil:1195 mpdevil:3390
msgid "Playlist" msgid "Playlist"
msgstr "" msgstr ""
#: mpdevil:1266 mpdevil:1274 #: mpdevil:1210 mpdevil:1218
msgid "Stats" msgid "Stats"
msgstr "" msgstr ""
#: mpdevil:1323 #: mpdevil:1267
msgid "A simple music browser for MPD" msgid "A simple music browser for MPD"
msgstr "" msgstr ""
#: mpdevil:1395 #: mpdevil:1339
msgid "MPD-Tag" msgid "MPD-Tag"
msgstr "" msgstr ""
#: mpdevil:1399 #: mpdevil:1343
msgid "Value" msgid "Value"
msgstr "" msgstr ""
#: mpdevil:1553 #: mpdevil:1497
msgid "Append" msgid "Append"
msgstr "" msgstr ""
#: mpdevil:1554 #: mpdevil:1498
msgid "Add all titles to playlist" msgid "Add all titles to playlist"
msgstr "" msgstr ""
#: mpdevil:1555 #: mpdevil:1499
msgid "Play" msgid "Play"
msgstr "" msgstr ""
#: mpdevil:1556 #: mpdevil:1500
msgid "Directly play all titles" msgid "Directly play all titles"
msgstr "" msgstr ""
#: mpdevil:1557 #: mpdevil:1501
msgid "Enqueue" msgid "Enqueue"
msgstr "" msgstr ""
#: mpdevil:1558 #: mpdevil:1502
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:1714 #: mpdevil:1658
#, python-brace-format #, python-brace-format
msgid "{num} hits" msgid "{num} hits"
msgstr "" msgstr ""
#: mpdevil:1752 #: mpdevil:1696
msgid "all genres" msgid "all genres"
msgstr "" msgstr ""
#: mpdevil:1860 #: mpdevil:1804
msgid "Album Artist" msgid "Album Artist"
msgstr "" msgstr ""
#: mpdevil:1863 #: mpdevil:1807
msgid "all artists" msgid "all artists"
msgstr "" msgstr ""
#: mpdevil:1987 #: mpdevil:1931
msgid "Close" msgid "Close"
msgstr "" msgstr ""
#: mpdevil:2152 #: mpdevil:2096
#, python-brace-format #, python-brace-format
msgid "{titles} titles on {discs} discs ({length})" msgid "{titles} titles on {discs} discs ({length})"
msgstr "" msgstr ""
#: mpdevil:2155 mpdevil:2783 #: mpdevil:2099 mpdevil:2737
#, python-brace-format #, python-brace-format
msgid "{titles} titles ({length})" msgid "{titles} titles ({length})"
msgstr "" msgstr ""
#: mpdevil:2282 mpdevil:3377 #: mpdevil:2228 mpdevil:3407
msgid "Back to current album" msgid "Back to current album"
msgstr "" msgstr ""
#: mpdevil:2283 #: mpdevil:2233
msgid "Search" msgid "Search"
msgstr "" msgstr ""
#: mpdevil:2467 #: mpdevil:2419
msgid "searching..." msgid "searching..."
msgstr "" msgstr ""
#: mpdevil:2472 #: mpdevil:2424
msgid "connection error" msgid "connection error"
msgstr "" msgstr ""
#: mpdevil:2474 #: mpdevil:2426
msgid "lyrics not found" msgid "lyrics not found"
msgstr "" msgstr ""
#: mpdevil:2522 #: mpdevil:2474
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} channels, " "{bitrate} kb/s, {frequency} kHz, {resolution} bit, {channels} channels, "
"{file_type}" "{file_type}"
msgstr "" msgstr ""
#: mpdevil:2657 #: mpdevil:2609
msgid "Scroll to current song" msgid "Scroll to current song"
msgstr "" msgstr ""
#: mpdevil:2664 #: mpdevil:2617 mpdevil:3423
msgid "Clear playlist" msgid "Clear playlist"
msgstr "" msgstr ""
#: mpdevil:2939 #: mpdevil:2896
msgid "Show lyrics" msgid "Show lyrics"
msgstr "" msgstr ""
#: mpdevil:3253 #: mpdevil:3192
msgid "Random mode" msgid "Random mode"
msgstr "" msgstr ""
#: mpdevil:3254 #: mpdevil:3197
msgid "Repeat mode" msgid "Repeat mode"
msgstr "" msgstr ""
#: mpdevil:3255 #: mpdevil:3202
msgid "Single mode" msgid "Single mode"
msgstr "" msgstr ""
#: mpdevil:3256 #: mpdevil:3207
msgid "Consume mode" msgid "Consume mode"
msgstr "" msgstr ""
#: mpdevil:3362 #: mpdevil:3387
msgid "Window" msgid "Window"
msgstr "" msgstr ""
#: mpdevil:3363 #: mpdevil:3388
msgid "Playback" msgid "Playback"
msgstr "" msgstr ""
#: mpdevil:3364 #: mpdevil:3389
msgid "Search, Album Dialog and Album List" msgid "Search, Album Dialog and Album List"
msgstr "" msgstr ""
#: mpdevil:3374 #: mpdevil:3399
msgid "Toggle mini player"
msgstr ""
#: mpdevil:3375
msgid "Toggle lyrics"
msgstr ""
#: mpdevil:3376
msgid "Toggle search"
msgstr ""
#: mpdevil:3378
msgid "Open online help" msgid "Open online help"
msgstr "" msgstr ""
#: mpdevil:3379 mpdevil:3548 #: mpdevil:3400
msgid "Quit" msgid "Open shortcuts window"
msgstr "" msgstr ""
#: mpdevil:3380 #: mpdevil:3401
msgid "Play/Pause" msgid "Open menu"
msgstr "" msgstr ""
#: mpdevil:3381 #: mpdevil:3402 mpdevil:3583
msgid "Next title"
msgstr ""
#: mpdevil:3382
msgid "Previous title"
msgstr ""
#: mpdevil:3383
msgid "Seek forward"
msgstr ""
#: mpdevil:3384
msgid "Seek backward"
msgstr ""
#: mpdevil:3385 mpdevil:3551
msgid "Update database" msgid "Update database"
msgstr "" msgstr ""
#: mpdevil:3386 #: mpdevil:3403 mpdevil:3580
msgid "Play selected item (next)" msgid "Quit"
msgstr "" msgstr ""
#: mpdevil:3386 #: mpdevil:3404
msgid "Left-click" msgid "Toggle mini player"
msgstr ""
#: mpdevil:3387
msgid "Append selected item"
msgstr ""
#: mpdevil:3387 mpdevil:3390
msgid "Middle-click"
msgstr ""
#: mpdevil:3388
msgid "Play selected item immediately"
msgstr ""
#: mpdevil:3388
msgid "Double-click"
msgstr ""
#: mpdevil:3389 mpdevil:3391
msgid "Show additional information"
msgstr ""
#: mpdevil:3389 mpdevil:3391
msgid "Right-click"
msgstr ""
#: mpdevil:3390
msgid "Remove selected song"
msgstr "" msgstr ""
#: mpdevil:3405 #: mpdevil:3405
msgid "Toggle lyrics"
msgstr ""
#: mpdevil:3406
msgid "Toggle search"
msgstr ""
#: mpdevil:3408
msgid "Play/Pause"
msgstr ""
#: mpdevil:3409
msgid "Stop"
msgstr ""
#: mpdevil:3410
msgid "Next title"
msgstr ""
#: mpdevil:3411
msgid "Previous title"
msgstr ""
#: mpdevil:3412
msgid "Seek forward"
msgstr ""
#: mpdevil:3413
msgid "Seek backward"
msgstr ""
#: mpdevil:3414
msgid "Toggle repeat mode"
msgstr ""
#: mpdevil:3415
msgid "Toggle random mode"
msgstr ""
#: mpdevil:3416
msgid "Toggle single mode"
msgstr ""
#: mpdevil:3417
msgid "Toggle consume mode"
msgstr ""
#: mpdevil:3418
msgid "Play selected item (next)"
msgstr ""
#: mpdevil:3418
msgid "Left-click"
msgstr ""
#: mpdevil:3419
msgid "Append selected item"
msgstr ""
#: mpdevil:3419 mpdevil:3422
msgid "Middle-click"
msgstr ""
#: mpdevil:3420
msgid "Play selected item immediately"
msgstr ""
#: mpdevil:3420
msgid "Double-click"
msgstr ""
#: mpdevil:3421 mpdevil:3424
msgid "Show additional information"
msgstr ""
#: mpdevil:3421 mpdevil:3424
msgid "Right-click"
msgstr ""
#: mpdevil:3422
msgid "Remove selected song"
msgstr ""
#: mpdevil:3438
msgid "Select profile" msgid "Select profile"
msgstr "" msgstr ""
#: mpdevil:3478 #: mpdevil:3511
#, python-brace-format #, python-brace-format
msgid "Connection to '{profile}' ({host}:{port}) failed" msgid "Connection to '{profile}' ({host}:{port}) failed"
msgstr "" msgstr ""
#: mpdevil:3545 #: mpdevil:3577
msgid "Keyboard shortcuts" msgid "Keyboard shortcuts"
msgstr "" msgstr ""
#: mpdevil:3546 #: mpdevil:3578
msgid "Help" msgid "Help"
msgstr "" msgstr ""
#: mpdevil:3547 #: mpdevil:3579
msgid "About" msgid "About"
msgstr "" msgstr ""
#: mpdevil:3552 #: mpdevil:3584
msgid "Server stats" msgid "Server stats"
msgstr "" msgstr ""
#: mpdevil:3555 #: mpdevil:3587
msgid "Save window layout" msgid "Save window layout"
msgstr "" msgstr ""
#: mpdevil:3556 #: mpdevil:3588
msgid "Mini player" msgid "Mini player"
msgstr "" msgstr ""
#: mpdevil:3560 #: mpdevil:3592
msgid "Menu" msgid "Menu"
msgstr "" msgstr ""