mirror of
https://github.com/SoongNoonien/mpdevil.git
synced 2023-08-10 21:12:44 +03:00
improved emitted signals in client wrapper
This commit is contained in:
parent
db7a8e9944
commit
2b861bb6d8
354
bin/mpdevil.py
354
bin/mpdevil.py
@ -24,7 +24,7 @@ import gi
|
|||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
gi.require_version('Notify', '0.7')
|
gi.require_version('Notify', '0.7')
|
||||||
from gi.repository import Gtk, Gio, Gdk, GdkPixbuf, Pango, GObject, GLib, Notify
|
from gi.repository import Gtk, Gio, Gdk, GdkPixbuf, Pango, GObject, GLib, Notify
|
||||||
from mpd import MPDClient
|
from mpd import MPDClient, base as MPDBase
|
||||||
import requests
|
import requests
|
||||||
from bs4 import BeautifulSoup, Comment
|
from bs4 import BeautifulSoup, Comment
|
||||||
import threading
|
import threading
|
||||||
@ -218,25 +218,29 @@ class MPRISInterface(dbus.service.Object): # TODO emit Seeked if needed
|
|||||||
self.metadata={}
|
self.metadata={}
|
||||||
|
|
||||||
# connect
|
# connect
|
||||||
self.client.emitter.connect("player", self.on_player_changed)
|
self.client.emitter.connect("state", self.on_state_changed)
|
||||||
self.client.emitter.connect("playing_file_changed", self.on_file_changed)
|
self.client.emitter.connect("current_song_changed", self.on_song_changed)
|
||||||
self.client.emitter.connect("mixer", self.on_volume_changed)
|
self.client.emitter.connect("volume_changed", self.on_volume_changed)
|
||||||
self.client.emitter.connect("options", self.on_options_changed)
|
self.client.emitter.connect("repeat", self.on_loop_changed)
|
||||||
|
self.client.emitter.connect("single", self.on_loop_changed)
|
||||||
|
self.client.emitter.connect("random", self.on_random_changed)
|
||||||
|
|
||||||
def on_player_changed(self, *args):
|
def on_state_changed(self, *args):
|
||||||
self.update_property('org.mpris.MediaPlayer2.Player', 'PlaybackStatus')
|
self.update_property('org.mpris.MediaPlayer2.Player', 'PlaybackStatus')
|
||||||
self.update_property('org.mpris.MediaPlayer2.Player', 'CanGoNext')
|
self.update_property('org.mpris.MediaPlayer2.Player', 'CanGoNext')
|
||||||
self.update_property('org.mpris.MediaPlayer2.Player', 'CanGoPrevious')
|
self.update_property('org.mpris.MediaPlayer2.Player', 'CanGoPrevious')
|
||||||
|
|
||||||
def on_file_changed(self, *args):
|
def on_song_changed(self, *args):
|
||||||
self.update_metadata()
|
self.update_metadata()
|
||||||
self.update_property('org.mpris.MediaPlayer2.Player', 'Metadata')
|
self.update_property('org.mpris.MediaPlayer2.Player', 'Metadata')
|
||||||
|
|
||||||
def on_volume_changed(self, *args):
|
def on_volume_changed(self, *args):
|
||||||
self.update_property('org.mpris.MediaPlayer2.Player', 'Volume')
|
self.update_property('org.mpris.MediaPlayer2.Player', 'Volume')
|
||||||
|
|
||||||
def on_options_changed(self, *args):
|
def on_loop_changed(self, *args):
|
||||||
self.update_property('org.mpris.MediaPlayer2.Player', 'LoopStatus')
|
self.update_property('org.mpris.MediaPlayer2.Player', 'LoopStatus')
|
||||||
|
|
||||||
|
def on_random_changed(self, *args):
|
||||||
self.update_property('org.mpris.MediaPlayer2.Player', 'Shuffle')
|
self.update_property('org.mpris.MediaPlayer2.Player', 'Shuffle')
|
||||||
|
|
||||||
def update_metadata(self): # TODO
|
def update_metadata(self): # TODO
|
||||||
@ -722,71 +726,54 @@ class ClientHelper():
|
|||||||
|
|
||||||
class MpdEventEmitter(GObject.Object):
|
class MpdEventEmitter(GObject.Object):
|
||||||
__gsignals__={
|
__gsignals__={
|
||||||
'database': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
||||||
'update': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
'update': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
||||||
'stored_playlist': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
||||||
'playlist': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
||||||
'player': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
||||||
'mixer': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
||||||
'output': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
||||||
'options': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
||||||
'sticker': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
||||||
'subscription': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
||||||
'message': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
|
||||||
'disconnected': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
'disconnected': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
||||||
'reconnected': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
'reconnected': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
||||||
'playing_file_changed': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
'current_song_changed': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
||||||
'periodic_signal': (GObject.SignalFlags.RUN_FIRST, None, ())
|
'state': (GObject.SignalFlags.RUN_FIRST, None, (str,)),
|
||||||
|
'elapsed_changed': (GObject.SignalFlags.RUN_FIRST, None, (float,float,)),
|
||||||
|
'volume_changed': (GObject.SignalFlags.RUN_FIRST, None, (float,)),
|
||||||
|
'playlist_changed': (GObject.SignalFlags.RUN_FIRST, None, (int,)),
|
||||||
|
'repeat': (GObject.SignalFlags.RUN_FIRST, None, (bool,)),
|
||||||
|
'random': (GObject.SignalFlags.RUN_FIRST, None, (bool,)),
|
||||||
|
'single': (GObject.SignalFlags.RUN_FIRST, None, (bool,)),
|
||||||
|
'consume': (GObject.SignalFlags.RUN_FIRST, None, (bool,)),
|
||||||
|
'audio': (GObject.SignalFlags.RUN_FIRST, None, (float,int,int,)),
|
||||||
|
'bitrate': (GObject.SignalFlags.RUN_FIRST, None, (float,))
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
# mpd signals
|
# gsignals
|
||||||
def do_database(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def do_update(self):
|
def do_update(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def do_stored_playlist(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def do_playlist(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def do_player(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def do_mixer(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def do_output(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def do_options(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def do_sticker(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def do_subscription(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def do_message(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
# custom signals
|
|
||||||
def do_disconnected(self):
|
def do_disconnected(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def do_reconnected(self):
|
def do_reconnected(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def do_playing_file_changed(self):
|
def do_current_file_changed(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def do_periodic_signal(self):
|
def do_state(self, state):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def do_elapsed_changed(self, elapsed, duration):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def do_volume_changed(self, volume):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def do_playlist_changed(self, version):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def do_audio(self, sampelrate, bits, channels):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def do_bitrate(self, rate):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class Client(MPDClient):
|
class Client(MPDClient):
|
||||||
@ -865,28 +852,41 @@ class Client(MPDClient):
|
|||||||
return([])
|
return([])
|
||||||
|
|
||||||
def loop(self, *args):
|
def loop(self, *args):
|
||||||
# idle
|
|
||||||
try:
|
try:
|
||||||
# heartbeat
|
|
||||||
status=self.status()
|
status=self.status()
|
||||||
diff=set(status.items())-set(self.last_status.items())
|
diff=set(status.items())-set(self.last_status.items())
|
||||||
for key, val in diff:
|
for key, val in diff:
|
||||||
if key == "state":
|
if key == "elapsed":
|
||||||
self.emitter.emit("player")
|
self.emitter.emit("elapsed_changed", float(val), float(status["duration"]))
|
||||||
|
elif key == "bitrate":
|
||||||
|
self.emitter.emit("bitrate", float(val))
|
||||||
elif key == "songid":
|
elif key == "songid":
|
||||||
self.emitter.emit("playing_file_changed")
|
self.emitter.emit("current_song_changed")
|
||||||
|
elif key == "state":
|
||||||
|
self.emitter.emit("state", val)
|
||||||
|
elif key == "audio":
|
||||||
|
samplerate, bits, channels=val.split(':')
|
||||||
|
self.emitter.emit("audio", float(samplerate), int(bits), int(channels))
|
||||||
elif key == "volume":
|
elif key == "volume":
|
||||||
self.emitter.emit("mixer")
|
self.emitter.emit("volume_changed", float(val))
|
||||||
elif key in ["repeat", "random", "single", "consume"]:
|
|
||||||
self.emitter.emit("options")
|
|
||||||
elif key == "updating_db":
|
|
||||||
self.emitter.emit("update")
|
|
||||||
elif key == "playlist":
|
elif key == "playlist":
|
||||||
self.emitter.emit("playlist")
|
self.emitter.emit("playlist_changed", int(val))
|
||||||
|
elif key in ["repeat", "random", "single", "consume"]:
|
||||||
|
if val == "1":
|
||||||
|
self.emitter.emit(key, True)
|
||||||
|
else:
|
||||||
|
self.emitter.emit(key, False)
|
||||||
|
|
||||||
|
diff=set(self.last_status)-set(status)
|
||||||
|
if "songid" in diff:
|
||||||
|
self.emitter.emit("current_song_changed")
|
||||||
|
if "volume" in diff:
|
||||||
|
self.emitter.emit("volume_changed", 0)
|
||||||
|
if "updating_db" in diff:
|
||||||
|
self.emitter.emit("update")
|
||||||
|
|
||||||
self.last_status=status
|
self.last_status=status
|
||||||
if status['state'] != "stop" and status['state'] != "pause":
|
except MPDBase.ConnectionError:
|
||||||
self.emitter.emit("periodic_signal")
|
|
||||||
except:
|
|
||||||
self.last_status={}
|
self.last_status={}
|
||||||
try:
|
try:
|
||||||
self.disconnect()
|
self.disconnect()
|
||||||
@ -910,7 +910,6 @@ class Client(MPDClient):
|
|||||||
return True
|
return True
|
||||||
# connect successful
|
# connect successful
|
||||||
self.main_timeout_id=GLib.timeout_add(100, self.loop)
|
self.main_timeout_id=GLib.timeout_add(100, self.loop)
|
||||||
self.emitter.emit("periodic_signal")
|
|
||||||
self.emitter.emit("reconnected")
|
self.emitter.emit("reconnected")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -1155,7 +1154,7 @@ class LyricsWindow(Gtk.Overlay):
|
|||||||
close_button.set_valign(1)
|
close_button.set_valign(1)
|
||||||
|
|
||||||
# connect
|
# connect
|
||||||
self.file_changed=self.client.emitter.connect("playing_file_changed", self.refresh)
|
self.song_changed=self.client.emitter.connect("current_song_changed", self.refresh)
|
||||||
self.connect("destroy", self.remove_handlers)
|
self.connect("destroy", self.remove_handlers)
|
||||||
close_button.connect("clicked", self.on_close_button_clicked)
|
close_button.connect("clicked", self.on_close_button_clicked)
|
||||||
|
|
||||||
@ -1169,7 +1168,7 @@ class LyricsWindow(Gtk.Overlay):
|
|||||||
GLib.idle_add(self.text_view.grab_focus) # focus textview
|
GLib.idle_add(self.text_view.grab_focus) # focus textview
|
||||||
|
|
||||||
def remove_handlers(self, *args):
|
def remove_handlers(self, *args):
|
||||||
self.client.emitter.disconnect(self.file_changed)
|
self.client.emitter.disconnect(self.song_changed)
|
||||||
|
|
||||||
def display_lyrics(self, current_song):
|
def display_lyrics(self, current_song):
|
||||||
GLib.idle_add(self.text_buffer.set_text, _("searching..."), -1)
|
GLib.idle_add(self.text_buffer.set_text, _("searching..."), -1)
|
||||||
@ -1401,6 +1400,7 @@ class GenreSelect(Gtk.ComboBoxText):
|
|||||||
|
|
||||||
# connect
|
# connect
|
||||||
self.changed=self.connect("changed", self.on_changed)
|
self.changed=self.connect("changed", self.on_changed)
|
||||||
|
self.client.emitter.connect("reconnected", self.refresh)
|
||||||
self.update_signal=self.client.emitter.connect("update", self.refresh)
|
self.update_signal=self.client.emitter.connect("update", self.refresh)
|
||||||
|
|
||||||
def deactivate(self):
|
def deactivate(self):
|
||||||
@ -1426,10 +1426,12 @@ class GenreSelect(Gtk.ComboBoxText):
|
|||||||
else:
|
else:
|
||||||
return self.get_active_text()
|
return self.get_active_text()
|
||||||
|
|
||||||
|
@GObject.Signal
|
||||||
|
def genre_changed(self):
|
||||||
|
pass
|
||||||
|
|
||||||
def on_changed(self, *args):
|
def on_changed(self, *args):
|
||||||
self.client.emitter.handler_block(self.update_signal)
|
self.emit("genre_changed")
|
||||||
self.client.emitter.emit("update")
|
|
||||||
self.client.emitter.handler_unblock(self.update_signal)
|
|
||||||
|
|
||||||
class ArtistView(FocusFrame):
|
class ArtistView(FocusFrame):
|
||||||
def __init__(self, client, settings, genre_select):
|
def __init__(self, client, settings, genre_select):
|
||||||
@ -1477,7 +1479,9 @@ class ArtistView(FocusFrame):
|
|||||||
self.treeview.connect("row-activated", self.on_row_activated)
|
self.treeview.connect("row-activated", self.on_row_activated)
|
||||||
self.settings.connect("changed::use-album-artist", self.refresh)
|
self.settings.connect("changed::use-album-artist", self.refresh)
|
||||||
self.settings.connect("changed::show-initials", self.on_show_initials_settings_changed)
|
self.settings.connect("changed::show-initials", self.on_show_initials_settings_changed)
|
||||||
|
self.client.emitter.connect("reconnected", self.refresh)
|
||||||
self.client.emitter.connect("update", self.refresh)
|
self.client.emitter.connect("update", self.refresh)
|
||||||
|
self.genre_select.connect("genre_changed", self.refresh)
|
||||||
|
|
||||||
self.set_widget(self.treeview)
|
self.set_widget(self.treeview)
|
||||||
self.add(scroll)
|
self.add(scroll)
|
||||||
@ -1752,6 +1756,7 @@ class AlbumView(FocusFrame):
|
|||||||
self.settings.connect("changed::album-cover", self.on_settings_changed)
|
self.settings.connect("changed::album-cover", self.on_settings_changed)
|
||||||
self.iconview.connect("done", self.on_done)
|
self.iconview.connect("done", self.on_done)
|
||||||
self.client.emitter.connect("update", self.clear)
|
self.client.emitter.connect("update", self.clear)
|
||||||
|
self.genre_select.connect("genre_changed", self.clear)
|
||||||
self.settings.connect("changed::use-album-artist", self.clear)
|
self.settings.connect("changed::use-album-artist", self.clear)
|
||||||
|
|
||||||
self.set_widget(self.iconview)
|
self.set_widget(self.iconview)
|
||||||
@ -1944,30 +1949,50 @@ class AudioType(Gtk.Label):
|
|||||||
|
|
||||||
# adding vars
|
# adding vars
|
||||||
self.client=client
|
self.client=client
|
||||||
|
self.freq=0
|
||||||
|
self.res=0
|
||||||
|
self.chan=0
|
||||||
|
self.brate=0
|
||||||
|
self.file_type=""
|
||||||
|
|
||||||
# connect
|
# connect
|
||||||
self.client.emitter.connect("periodic_signal", self.refresh) # periodic_signal
|
self.client.emitter.connect("audio", self.on_audio)
|
||||||
|
self.client.emitter.connect("bitrate", self.on_bitrate)
|
||||||
|
self.client.emitter.connect("current_song_changed", self.on_song_changed)
|
||||||
self.client.emitter.connect("disconnected", self.clear)
|
self.client.emitter.connect("disconnected", self.clear)
|
||||||
self.client.emitter.connect("player", self.on_player)
|
self.client.emitter.connect("state", self.on_state)
|
||||||
|
|
||||||
def clear(self, *args):
|
def clear(self, *args):
|
||||||
self.set_text("")
|
self.set_text("")
|
||||||
|
self.freq=0
|
||||||
|
self.res=0
|
||||||
|
self.chan=0
|
||||||
|
self.brate=0
|
||||||
|
self.file_type=""
|
||||||
|
|
||||||
def refresh(self, *args):
|
def refresh(self, *args):
|
||||||
try:
|
string=_("%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)i bit, %(channels)i channels, %(file_type)s") % {"bitrate": str(self.brate), "frequency": str(self.freq), "resolution": self.res, "channels": self.chan, "file_type": self.file_type}
|
||||||
file_type=self.client.wrapped_call("currentsong")["file"].split('.')[-1]
|
self.set_text(string)
|
||||||
status=self.client.wrapped_call("status")
|
|
||||||
freq, res, chan=status["audio"].split(':')
|
|
||||||
freq=str(float(freq)/1000)
|
|
||||||
brate=status["bitrate"]
|
|
||||||
string=_("%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s channels, %(file_type)s") % {"bitrate": brate, "frequency": freq, "resolution": res, "channels": chan, "file_type": file_type}
|
|
||||||
self.set_text(string)
|
|
||||||
except:
|
|
||||||
self.clear()
|
|
||||||
|
|
||||||
def on_player(self, *args):
|
def on_audio(self, emitter, freq, res, chan):
|
||||||
status=self.client.wrapped_call("status")
|
self.freq=freq/1000
|
||||||
if status['state'] == "stop":
|
self.res=res
|
||||||
|
self.chan=chan
|
||||||
|
self.refresh()
|
||||||
|
|
||||||
|
def on_bitrate(self, emitter, brate):
|
||||||
|
self.brate=brate
|
||||||
|
self.refresh()
|
||||||
|
|
||||||
|
def on_song_changed(self, *args):
|
||||||
|
try:
|
||||||
|
self.file_type=self.client.wrapped_call("currentsong")["file"].split('.')[-1]
|
||||||
|
self.refresh()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def on_state(self, emitter, state):
|
||||||
|
if state == "stop":
|
||||||
self.clear()
|
self.clear()
|
||||||
|
|
||||||
class MainCover(Gtk.Frame):
|
class MainCover(Gtk.Frame):
|
||||||
@ -2001,7 +2026,7 @@ class MainCover(Gtk.Frame):
|
|||||||
|
|
||||||
# connect
|
# connect
|
||||||
event_box.connect("button-press-event", self.on_button_press_event)
|
event_box.connect("button-press-event", self.on_button_press_event)
|
||||||
self.client.emitter.connect("playing_file_changed", self.refresh)
|
self.client.emitter.connect("current_song_changed", self.refresh)
|
||||||
self.settings.connect("changed::track-cover", self.on_settings_changed)
|
self.settings.connect("changed::track-cover", self.on_settings_changed)
|
||||||
|
|
||||||
event_box.add(self.cover)
|
event_box.add(self.cover)
|
||||||
@ -2139,8 +2164,8 @@ class PlaylistView(Gtk.Box):
|
|||||||
self.key_press_event=self.treeview.connect("key-press-event", self.on_key_press_event)
|
self.key_press_event=self.treeview.connect("key-press-event", self.on_key_press_event)
|
||||||
self.treeview.connect("button-press-event", self.on_button_press_event)
|
self.treeview.connect("button-press-event", self.on_button_press_event)
|
||||||
|
|
||||||
self.client.emitter.connect("playlist", self.on_playlist_changed)
|
self.client.emitter.connect("playlist_changed", self.on_playlist_changed)
|
||||||
self.client.emitter.connect("playing_file_changed", self.on_file_changed)
|
self.client.emitter.connect("current_song_changed", self.on_song_changed)
|
||||||
self.client.emitter.connect("disconnected", self.on_disconnected)
|
self.client.emitter.connect("disconnected", self.on_disconnected)
|
||||||
|
|
||||||
self.settings.connect("changed::column-visibilities", self.load_settings)
|
self.settings.connect("changed::column-visibilities", self.load_settings)
|
||||||
@ -2247,7 +2272,7 @@ class PlaylistView(Gtk.Box):
|
|||||||
def on_row_activated(self, widget, path, view_column):
|
def on_row_activated(self, widget, path, view_column):
|
||||||
self.client.wrapped_call("play", path)
|
self.client.wrapped_call("play", path)
|
||||||
|
|
||||||
def on_playlist_changed(self, *args):
|
def on_playlist_changed(self, emitter, version):
|
||||||
songs=[]
|
songs=[]
|
||||||
if not self.playlist_version == None:
|
if not self.playlist_version == None:
|
||||||
songs=self.client.wrapped_call("plchanges", self.playlist_version)
|
songs=self.client.wrapped_call("plchanges", self.playlist_version)
|
||||||
@ -2268,9 +2293,9 @@ class PlaylistView(Gtk.Box):
|
|||||||
self.refresh_playlist_info()
|
self.refresh_playlist_info()
|
||||||
if self.playlist_version == None or not songs == []:
|
if self.playlist_version == None or not songs == []:
|
||||||
self.refresh_selection()
|
self.refresh_selection()
|
||||||
self.playlist_version=self.client.wrapped_call("status")["playlist"]
|
self.playlist_version=version
|
||||||
|
|
||||||
def on_file_changed(self, *args):
|
def on_song_changed(self, *args):
|
||||||
self.refresh_selection()
|
self.refresh_selection()
|
||||||
|
|
||||||
def on_disconnected(self, *args):
|
def on_disconnected(self, *args):
|
||||||
@ -2904,7 +2929,7 @@ class ClientControl(Gtk.ButtonBox):
|
|||||||
self.next_button.connect("clicked", self.on_next_clicked)
|
self.next_button.connect("clicked", self.on_next_clicked)
|
||||||
self.settings.connect("changed::show-stop", self.on_settings_changed)
|
self.settings.connect("changed::show-stop", self.on_settings_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("player", self.refresh)
|
self.client.emitter.connect("state", self.on_state)
|
||||||
|
|
||||||
# packing
|
# packing
|
||||||
self.pack_start(self.prev_button, True, True, 0)
|
self.pack_start(self.prev_button, True, True, 0)
|
||||||
@ -2913,13 +2938,12 @@ class ClientControl(Gtk.ButtonBox):
|
|||||||
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 refresh(self, *args):
|
def on_state(self, emitter, state):
|
||||||
status=self.client.wrapped_call("status")
|
if state == "play":
|
||||||
if status["state"] == "play":
|
|
||||||
self.play_button.set_image(self.icons["media-playback-pause-symbolic"])
|
self.play_button.set_image(self.icons["media-playback-pause-symbolic"])
|
||||||
self.prev_button.set_sensitive(True)
|
self.prev_button.set_sensitive(True)
|
||||||
self.next_button.set_sensitive(True)
|
self.next_button.set_sensitive(True)
|
||||||
elif status["state"] == "pause":
|
elif state == "pause":
|
||||||
self.play_button.set_image(self.icons["media-playback-start-symbolic"])
|
self.play_button.set_image(self.icons["media-playback-start-symbolic"])
|
||||||
self.prev_button.set_sensitive(True)
|
self.prev_button.set_sensitive(True)
|
||||||
self.next_button.set_sensitive(True)
|
self.next_button.set_sensitive(True)
|
||||||
@ -3011,9 +3035,8 @@ class SeekBar(Gtk.Box):
|
|||||||
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("player", self.on_player)
|
self.client.emitter.connect("state", self.on_state)
|
||||||
# periodic_signal
|
self.client.emitter.connect("elapsed_changed", self.refresh)
|
||||||
self.periodic_signal=self.client.emitter.connect("periodic_signal", self.refresh)
|
|
||||||
|
|
||||||
# packing
|
# packing
|
||||||
self.elapsed_event_box.add(self.elapsed)
|
self.elapsed_event_box.add(self.elapsed)
|
||||||
@ -3022,8 +3045,6 @@ class SeekBar(Gtk.Box):
|
|||||||
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)
|
||||||
|
|
||||||
self.disable()
|
|
||||||
|
|
||||||
def dummy(self, *args):
|
def dummy(self, *args):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -3036,16 +3057,17 @@ class SeekBar(Gtk.Box):
|
|||||||
|
|
||||||
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.scale.set_has_origin(True)
|
||||||
|
status=self.client.wrapped_call("status")
|
||||||
if self.jumped: # actual seek
|
if self.jumped: # actual seek
|
||||||
status=self.client.wrapped_call("status")
|
|
||||||
duration=float(status["duration"])
|
duration=float(status["duration"])
|
||||||
factor=(self.scale.get_value()/100)
|
factor=(self.scale.get_value()/100)
|
||||||
pos=(duration*factor)
|
pos=(duration*factor)
|
||||||
self.client.wrapped_call("seekcur", pos)
|
self.client.wrapped_call("seekcur", pos)
|
||||||
self.jumped=False
|
self.jumped=False
|
||||||
self.scale.set_has_origin(True)
|
else:
|
||||||
self.update=True
|
self.refresh(None, float(status["elapsed"]), float(status["duration"]))
|
||||||
self.refresh()
|
|
||||||
|
|
||||||
def on_change_value(self, range, scroll, value): # value is inaccurate
|
def on_change_value(self, range, scroll, value): # value is inaccurate
|
||||||
if scroll == Gtk.ScrollType.STEP_BACKWARD:
|
if scroll == Gtk.ScrollType.STEP_BACKWARD:
|
||||||
@ -3095,21 +3117,14 @@ class SeekBar(Gtk.Box):
|
|||||||
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_PRESS:
|
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_PRESS:
|
||||||
self.seek_backward()
|
self.seek_backward()
|
||||||
|
|
||||||
def on_player(self, *args):
|
def on_state(self, emitter, state):
|
||||||
status=self.client.wrapped_call("status")
|
if state == "stop":
|
||||||
if status['state'] == "stop":
|
|
||||||
self.disable()
|
self.disable()
|
||||||
elif status['state'] == "pause": # needed for seeking in paused state
|
|
||||||
self.enable()
|
|
||||||
self.refresh()
|
|
||||||
else:
|
else:
|
||||||
self.enable()
|
self.enable()
|
||||||
|
|
||||||
def refresh(self, *args):
|
def refresh(self, emitter, elapsed, duration):
|
||||||
try:
|
try:
|
||||||
status=self.client.wrapped_call("status")
|
|
||||||
duration=float(status["duration"])
|
|
||||||
elapsed=float(status["elapsed"])
|
|
||||||
if elapsed > duration: # fix display error
|
if elapsed > duration: # fix display error
|
||||||
elapsed=duration
|
elapsed=duration
|
||||||
fraction=(elapsed/duration)*100
|
fraction=(elapsed/duration)*100
|
||||||
@ -3144,18 +3159,21 @@ class PlaybackOptions(Gtk.Box):
|
|||||||
self.single.set_tooltip_text(_("Single mode"))
|
self.single.set_tooltip_text(_("Single mode"))
|
||||||
self.consume=Gtk.ToggleButton(image=self.icons["edit-cut-symbolic"])
|
self.consume=Gtk.ToggleButton(image=self.icons["edit-cut-symbolic"])
|
||||||
self.consume.set_tooltip_text(_("Consume mode"))
|
self.consume.set_tooltip_text(_("Consume mode"))
|
||||||
self.volume=Gtk.VolumeButton()
|
self.volume_button=Gtk.VolumeButton()
|
||||||
self.volume.set_property("use-symbolic", True)
|
self.volume_button.set_property("use-symbolic", True)
|
||||||
self.volume.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"))
|
||||||
|
|
||||||
# connect
|
# connect
|
||||||
self.random_toggled=self.random.connect("toggled", self.set_random)
|
self.random_toggled=self.random.connect("toggled", self.set_option, "random")
|
||||||
self.repeat_toggled=self.repeat.connect("toggled", self.set_repeat)
|
self.repeat_toggled=self.repeat.connect("toggled", self.set_option, "repeat")
|
||||||
self.single_toggled=self.single.connect("toggled", self.set_single)
|
self.single_toggled=self.single.connect("toggled", self.set_option, "single")
|
||||||
self.consume_toggled=self.consume.connect("toggled", self.set_consume)
|
self.consume_toggled=self.consume.connect("toggled", self.set_option, "consume")
|
||||||
self.volume_changed=self.volume.connect("value-changed", self.set_volume)
|
self.volume_button_changed=self.volume_button.connect("value-changed", self.set_volume)
|
||||||
self.options_changed=self.client.emitter.connect("options", self.options_refresh)
|
self.repeat_changed=self.client.emitter.connect("repeat", self.repeat_refresh)
|
||||||
self.mixer_changed=self.client.emitter.connect("mixer", self.mixer_refresh)
|
self.random_changed=self.client.emitter.connect("random", self.random_refresh)
|
||||||
|
self.single_changed=self.client.emitter.connect("single", self.single_refresh)
|
||||||
|
self.consume_changed=self.client.emitter.connect("consume", self.consume_refresh)
|
||||||
|
self.volume_changed=self.client.emitter.connect("volume_changed", self.volume_refresh)
|
||||||
self.settings.connect("changed::icon-size", self.on_icon_size_changed)
|
self.settings.connect("changed::icon-size", self.on_icon_size_changed)
|
||||||
|
|
||||||
# packing
|
# packing
|
||||||
@ -3166,76 +3184,50 @@ class PlaybackOptions(Gtk.Box):
|
|||||||
ButtonBox.pack_start(self.single, True, True, 0)
|
ButtonBox.pack_start(self.single, True, True, 0)
|
||||||
ButtonBox.pack_start(self.consume, True, True, 0)
|
ButtonBox.pack_start(self.consume, True, True, 0)
|
||||||
self.pack_start(ButtonBox, True, True, 0)
|
self.pack_start(ButtonBox, True, True, 0)
|
||||||
self.pack_start(self.volume, True, True, 0)
|
self.pack_start(self.volume_button, True, True, 0)
|
||||||
|
|
||||||
def set_random(self, widget):
|
def set_option(self, widget, option):
|
||||||
if widget.get_active():
|
if widget.get_active():
|
||||||
self.client.wrapped_call("random", "1")
|
self.client.wrapped_call(option, "1")
|
||||||
else:
|
else:
|
||||||
self.client.wrapped_call("random", "0")
|
self.client.wrapped_call(option, "0")
|
||||||
|
|
||||||
def set_repeat(self, widget):
|
|
||||||
if widget.get_active():
|
|
||||||
self.client.wrapped_call("repeat", "1")
|
|
||||||
else:
|
|
||||||
self.client.wrapped_call("repeat", "0")
|
|
||||||
|
|
||||||
def set_single(self, widget):
|
|
||||||
if widget.get_active():
|
|
||||||
self.client.wrapped_call("single", "1")
|
|
||||||
else:
|
|
||||||
self.client.wrapped_call("single", "0")
|
|
||||||
|
|
||||||
def set_consume(self, widget):
|
|
||||||
if widget.get_active():
|
|
||||||
self.client.wrapped_call("consume", "1")
|
|
||||||
else:
|
|
||||||
self.client.wrapped_call("consume", "0")
|
|
||||||
|
|
||||||
def set_volume(self, widget, value):
|
def set_volume(self, widget, value):
|
||||||
self.client.wrapped_call("setvol", str(int(value*100)))
|
self.client.wrapped_call("setvol", str(int(value*100)))
|
||||||
|
|
||||||
def options_refresh(self, *args):
|
def repeat_refresh(self, emitter, val):
|
||||||
self.repeat.handler_block(self.repeat_toggled)
|
self.repeat.handler_block(self.repeat_toggled)
|
||||||
self.random.handler_block(self.random_toggled)
|
self.repeat.set_active(val)
|
||||||
self.single.handler_block(self.single_toggled)
|
|
||||||
self.consume.handler_block(self.consume_toggled)
|
|
||||||
status=self.client.wrapped_call("status")
|
|
||||||
if status["repeat"] == "0":
|
|
||||||
self.repeat.set_active(False)
|
|
||||||
else:
|
|
||||||
self.repeat.set_active(True)
|
|
||||||
if status["random"] == "0":
|
|
||||||
self.random.set_active(False)
|
|
||||||
else:
|
|
||||||
self.random.set_active(True)
|
|
||||||
if status["single"] == "0":
|
|
||||||
self.single.set_active(False)
|
|
||||||
else:
|
|
||||||
self.single.set_active(True)
|
|
||||||
if status["consume"] == "0":
|
|
||||||
self.consume.set_active(False)
|
|
||||||
else:
|
|
||||||
self.consume.set_active(True)
|
|
||||||
self.repeat.handler_unblock(self.repeat_toggled)
|
self.repeat.handler_unblock(self.repeat_toggled)
|
||||||
|
|
||||||
|
def random_refresh(self, emitter, val):
|
||||||
|
self.random.handler_block(self.random_toggled)
|
||||||
|
self.random.set_active(val)
|
||||||
self.random.handler_unblock(self.random_toggled)
|
self.random.handler_unblock(self.random_toggled)
|
||||||
|
|
||||||
|
def single_refresh(self, emitter, val):
|
||||||
|
self.single.handler_block(self.single_toggled)
|
||||||
|
self.single.set_active(val)
|
||||||
self.single.handler_unblock(self.single_toggled)
|
self.single.handler_unblock(self.single_toggled)
|
||||||
|
|
||||||
|
def consume_refresh(self, emitter, val):
|
||||||
|
self.consume.handler_block(self.consume_toggled)
|
||||||
|
self.consume.set_active(val)
|
||||||
self.consume.handler_unblock(self.consume_toggled)
|
self.consume.handler_unblock(self.consume_toggled)
|
||||||
|
|
||||||
def mixer_refresh(self, *args):
|
def volume_refresh(self, emitter, volume):
|
||||||
self.volume.handler_block(self.volume_changed)
|
self.volume_button.handler_block(self.volume_button_changed)
|
||||||
status=self.client.wrapped_call("status")
|
|
||||||
try:
|
try:
|
||||||
self.volume.set_value((int(status["volume"])/100))
|
self.volume_button.set_value(volume/100)
|
||||||
except:
|
except:
|
||||||
self.volume.set_value(0)
|
self.volume_button.set_value(0)
|
||||||
self.volume.handler_unblock(self.volume_changed)
|
self.volume_button.handler_unblock(self.volume_button_changed)
|
||||||
|
|
||||||
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")
|
||||||
for icon in self.icons.values():
|
for icon in self.icons.values():
|
||||||
icon.set_pixel_size(pixel_size)
|
icon.set_pixel_size(pixel_size)
|
||||||
self.volume.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"))
|
||||||
|
|
||||||
#################
|
#################
|
||||||
# other dialogs #
|
# other dialogs #
|
||||||
@ -3417,7 +3409,7 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
self.settings.connect("changed::playlist-right", self.on_playlist_pos_settings_changed)
|
self.settings.connect("changed::playlist-right", self.on_playlist_pos_settings_changed)
|
||||||
if not self.use_csd:
|
if not self.use_csd:
|
||||||
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("playing_file_changed", self.on_file_changed)
|
self.client.emitter.connect("current_song_changed", self.on_song_changed)
|
||||||
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)
|
||||||
# unmap space
|
# unmap space
|
||||||
@ -3463,7 +3455,7 @@ class MainWindow(Gtk.ApplicationWindow):
|
|||||||
self.on_settings_changed() # hide profiles button
|
self.on_settings_changed() # hide profiles button
|
||||||
self.client.start() # connect client
|
self.client.start() # connect client
|
||||||
|
|
||||||
def on_file_changed(self, *args):
|
def on_song_changed(self, *args):
|
||||||
try:
|
try:
|
||||||
song=self.client.wrapped_call("currentsong")
|
song=self.client.wrapped_call("currentsong")
|
||||||
if song == {}:
|
if song == {}:
|
||||||
|
320
po/de.po
320
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-06-22 16:58+0200\n"
|
"POT-Creation-Date: 2020-07-13 19:18+0200\n"
|
||||||
"PO-Revision-Date: 2020-06-22 17:00+0200\n"
|
"PO-Revision-Date: 2020-07-13 19:19+0200\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
@ -18,312 +18,312 @@ 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.py:202
|
#: mpdevil.py:650
|
||||||
msgid "Unknown Title"
|
|
||||||
msgstr "Unbekannter Titel"
|
|
||||||
|
|
||||||
#: mpdevil.py:202
|
|
||||||
msgid "Unknown Artist"
|
|
||||||
msgstr "Unbekannter Interpret"
|
|
||||||
|
|
||||||
#: mpdevil.py:202
|
|
||||||
msgid "Unknown Album"
|
|
||||||
msgstr "Unbekanntes Album"
|
|
||||||
|
|
||||||
#: mpdevil.py:930
|
|
||||||
msgid "MPD-Tag"
|
msgid "MPD-Tag"
|
||||||
msgstr "MPD-Tag"
|
msgstr "MPD-Tag"
|
||||||
|
|
||||||
#: mpdevil.py:934
|
#: mpdevil.py:654
|
||||||
msgid "Value"
|
msgid "Value"
|
||||||
msgstr "Wert"
|
msgstr "Wert"
|
||||||
|
|
||||||
#: mpdevil.py:1087 mpdevil.py:1638 mpdevil.py:2395 mpdevil.py:2980
|
#: mpdevil.py:712
|
||||||
|
msgid "Unknown Title"
|
||||||
|
msgstr "Unbekannter Titel"
|
||||||
|
|
||||||
|
#: mpdevil.py:712
|
||||||
|
msgid "Unknown Artist"
|
||||||
|
msgstr "Unbekannter Interpret"
|
||||||
|
|
||||||
|
#: mpdevil.py:712
|
||||||
|
msgid "Unknown Album"
|
||||||
|
msgstr "Unbekanntes Album"
|
||||||
|
|
||||||
|
#: mpdevil.py:989 mpdevil.py:1358 mpdevil.py:2108 mpdevil.py:2763
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr "Nr."
|
msgstr "Nr."
|
||||||
|
|
||||||
#: mpdevil.py:1092 mpdevil.py:1644 mpdevil.py:2395 mpdevil.py:2985
|
#: mpdevil.py:994 mpdevil.py:1363 mpdevil.py:2114 mpdevil.py:2763
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: mpdevil.py:1098 mpdevil.py:1653 mpdevil.py:2395 mpdevil.py:3003
|
#: mpdevil.py:1000 mpdevil.py:1502 mpdevil.py:2117 mpdevil.py:2763
|
||||||
msgid "Length"
|
|
||||||
msgstr "Länge"
|
|
||||||
|
|
||||||
#: mpdevil.py:1140
|
|
||||||
msgid "all genres"
|
|
||||||
msgstr "Alle Genres"
|
|
||||||
|
|
||||||
#: mpdevil.py:1224
|
|
||||||
msgid "Album Artist"
|
|
||||||
msgstr "Albuminterpret"
|
|
||||||
|
|
||||||
#: mpdevil.py:1226 mpdevil.py:1647 mpdevil.py:2395 mpdevil.py:2991
|
|
||||||
msgid "Artist"
|
msgid "Artist"
|
||||||
msgstr "Interpret"
|
msgstr "Interpret"
|
||||||
|
|
||||||
#: mpdevil.py:1227
|
#: mpdevil.py:1006 mpdevil.py:2120 mpdevil.py:2763
|
||||||
|
msgid "Album"
|
||||||
|
msgstr "Album"
|
||||||
|
|
||||||
|
#: mpdevil.py:1012 mpdevil.py:1369 mpdevil.py:2123 mpdevil.py:2763
|
||||||
|
msgid "Length"
|
||||||
|
msgstr "Länge"
|
||||||
|
|
||||||
|
#: mpdevil.py:1029
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "Hinzufügen"
|
||||||
|
|
||||||
|
#: mpdevil.py:1032
|
||||||
|
msgid "Play"
|
||||||
|
msgstr "Wiedergabe"
|
||||||
|
|
||||||
|
#: mpdevil.py:1035
|
||||||
|
msgid "Open"
|
||||||
|
msgstr "Öffnen"
|
||||||
|
|
||||||
|
#: mpdevil.py:1095
|
||||||
|
#, python-format
|
||||||
|
msgid "hits: %i"
|
||||||
|
msgstr "Treffer: %i"
|
||||||
|
|
||||||
|
#: mpdevil.py:1174
|
||||||
|
msgid "searching..."
|
||||||
|
msgstr "suche..."
|
||||||
|
|
||||||
|
#: mpdevil.py:1178
|
||||||
|
msgid "lyrics not found"
|
||||||
|
msgstr "Liedtext nicht gefunden"
|
||||||
|
|
||||||
|
#: mpdevil.py:1412
|
||||||
|
msgid "all genres"
|
||||||
|
msgstr "Alle Genres"
|
||||||
|
|
||||||
|
#: mpdevil.py:1500
|
||||||
|
msgid "Album Artist"
|
||||||
|
msgstr "Albuminterpret"
|
||||||
|
|
||||||
|
#: mpdevil.py:1503
|
||||||
msgid "all artists"
|
msgid "all artists"
|
||||||
msgstr "Alle Interpreten"
|
msgstr "Alle Interpreten"
|
||||||
|
|
||||||
#: mpdevil.py:1375
|
#: mpdevil.py:1650
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(total_tracks)i titles on %(discs)i discs (%(total_length)s)"
|
msgid "%(total_tracks)i titles on %(discs)i discs (%(total_length)s)"
|
||||||
msgstr "%(total_tracks)i Titel auf %(discs)i CDs (%(total_length)s)"
|
msgstr "%(total_tracks)i Titel auf %(discs)i CDs (%(total_length)s)"
|
||||||
|
|
||||||
#: mpdevil.py:1377 mpdevil.py:1739
|
#: mpdevil.py:1652 mpdevil.py:2209
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(total_tracks)i titles (%(total_length)s)"
|
msgid "%(total_tracks)i titles (%(total_length)s)"
|
||||||
msgstr "%(total_tracks)i Titel (%(total_length)s)"
|
msgstr "%(total_tracks)i Titel (%(total_length)s)"
|
||||||
|
|
||||||
#: mpdevil.py:1641 mpdevil.py:2395
|
#: mpdevil.py:1827
|
||||||
msgid "Disc"
|
|
||||||
msgstr "CD"
|
|
||||||
|
|
||||||
#: mpdevil.py:1650 mpdevil.py:2395 mpdevil.py:2997
|
|
||||||
msgid "Album"
|
|
||||||
msgstr "Album"
|
|
||||||
|
|
||||||
#: mpdevil.py:1656 mpdevil.py:2395
|
|
||||||
msgid "Year"
|
|
||||||
msgstr "Jahr"
|
|
||||||
|
|
||||||
#: mpdevil.py:1659 mpdevil.py:2395
|
|
||||||
msgid "Genre"
|
|
||||||
msgstr "Genre"
|
|
||||||
|
|
||||||
#: mpdevil.py:1840
|
|
||||||
msgid "Show lyrics"
|
|
||||||
msgstr "Zeige Liedtext"
|
|
||||||
|
|
||||||
#: mpdevil.py:1915
|
|
||||||
msgid "Back to current album"
|
msgid "Back to current album"
|
||||||
msgstr "Zurück zu aktuellem Album"
|
msgstr "Zurück zu aktuellem Album"
|
||||||
|
|
||||||
#: mpdevil.py:1917
|
#: mpdevil.py:1829
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Suche"
|
msgstr "Suche"
|
||||||
|
|
||||||
#: mpdevil.py:2096
|
#: mpdevil.py:1974
|
||||||
msgid "Profile:"
|
#, python-format
|
||||||
msgstr "Profil:"
|
msgid ""
|
||||||
|
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)i bit, %(channels)i "
|
||||||
|
"channels, %(file_type)s"
|
||||||
|
msgstr ""
|
||||||
|
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)i bit, %(channels)i "
|
||||||
|
"Kanäle, %(file_type)s"
|
||||||
|
|
||||||
#: mpdevil.py:2098
|
#: mpdevil.py:2111 mpdevil.py:2763
|
||||||
msgid "Name:"
|
msgid "Disc"
|
||||||
msgstr "Name:"
|
msgstr "CD"
|
||||||
|
|
||||||
#: mpdevil.py:2100
|
#: mpdevil.py:2126 mpdevil.py:2763
|
||||||
msgid "Host:"
|
msgid "Year"
|
||||||
msgstr "Host:"
|
msgstr "Jahr"
|
||||||
|
|
||||||
#: mpdevil.py:2102
|
#: mpdevil.py:2129 mpdevil.py:2763
|
||||||
msgid "Password:"
|
msgid "Genre"
|
||||||
msgstr "Passwort:"
|
msgstr "Genre"
|
||||||
|
|
||||||
#: mpdevil.py:2104
|
#: mpdevil.py:2319
|
||||||
msgid "Music lib:"
|
msgid "Show lyrics"
|
||||||
msgstr "Musikverzeichnis:"
|
msgstr "Zeige Liedtext"
|
||||||
|
|
||||||
#: mpdevil.py:2191
|
#: mpdevil.py:2418
|
||||||
msgid "Choose directory"
|
|
||||||
msgstr "Verzeichnis Wählen"
|
|
||||||
|
|
||||||
#: mpdevil.py:2229
|
|
||||||
msgid "Main cover size:"
|
msgid "Main cover size:"
|
||||||
msgstr "Größe des Haupt-Covers:"
|
msgstr "Größe des Haupt-Covers:"
|
||||||
|
|
||||||
#: mpdevil.py:2233
|
#: mpdevil.py:2419
|
||||||
msgid "Album view cover size:"
|
msgid "Album view cover size:"
|
||||||
msgstr "Covergröße in Albumliste:"
|
msgstr "Covergröße in Albumliste:"
|
||||||
|
|
||||||
#: mpdevil.py:2237
|
#: mpdevil.py:2420
|
||||||
msgid "Button icon size:"
|
msgid "Button icon size:"
|
||||||
msgstr "Symbolgröße der Knöpfe:"
|
msgstr "Symbolgröße der Knöpfe:"
|
||||||
|
|
||||||
#: mpdevil.py:2239 mpdevil.py:2320
|
#: mpdevil.py:2430
|
||||||
msgid "(restart required)"
|
|
||||||
msgstr "(Neustart erforderlich)"
|
|
||||||
|
|
||||||
#: mpdevil.py:2250
|
|
||||||
msgid "Sort albums by:"
|
msgid "Sort albums by:"
|
||||||
msgstr "Sortiere Alben nach:"
|
msgstr "Sortiere Alben nach:"
|
||||||
|
|
||||||
#: mpdevil.py:2250
|
#: mpdevil.py:2430
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr "Name"
|
msgstr "Name"
|
||||||
|
|
||||||
#: mpdevil.py:2250
|
#: mpdevil.py:2430
|
||||||
msgid "year"
|
msgid "year"
|
||||||
msgstr "Jahr"
|
msgstr "Jahr"
|
||||||
|
|
||||||
#: mpdevil.py:2251
|
#: mpdevil.py:2431
|
||||||
msgid "Position of playlist:"
|
msgid "Position of playlist:"
|
||||||
msgstr "Wiedergabelistenposition:"
|
msgstr "Wiedergabelistenposition:"
|
||||||
|
|
||||||
#: mpdevil.py:2251
|
#: mpdevil.py:2431
|
||||||
msgid "bottom"
|
msgid "bottom"
|
||||||
msgstr "unten"
|
msgstr "unten"
|
||||||
|
|
||||||
#: mpdevil.py:2251
|
#: mpdevil.py:2431
|
||||||
msgid "right"
|
msgid "right"
|
||||||
msgstr "rechts"
|
msgstr "rechts"
|
||||||
|
|
||||||
#: mpdevil.py:2267
|
#: mpdevil.py:2448
|
||||||
msgid "<b>View</b>"
|
|
||||||
msgstr "<b>Ansicht</b>"
|
|
||||||
|
|
||||||
#: mpdevil.py:2270
|
|
||||||
msgid "<b>Behavior</b>"
|
|
||||||
msgstr "<b>Verhalten</b>"
|
|
||||||
|
|
||||||
#: mpdevil.py:2275
|
|
||||||
msgid "Use Client-side decoration"
|
msgid "Use Client-side decoration"
|
||||||
msgstr "Benutze \"Client-side decoration\""
|
msgstr "Benutze \"Client-side decoration\""
|
||||||
|
|
||||||
#: mpdevil.py:2276
|
#: mpdevil.py:2449
|
||||||
msgid "Show stop button"
|
msgid "Show stop button"
|
||||||
msgstr "Zeige Stopp-Knopf"
|
msgstr "Zeige Stopp-Knopf"
|
||||||
|
|
||||||
#: mpdevil.py:2277
|
#: mpdevil.py:2450
|
||||||
msgid "Show lyrics button"
|
msgid "Show lyrics button"
|
||||||
msgstr "Zeige Liedtext-Knopf"
|
msgstr "Zeige Liedtext-Knopf"
|
||||||
|
|
||||||
#: mpdevil.py:2278
|
#: mpdevil.py:2451
|
||||||
msgid "Show initials in artist view"
|
msgid "Show initials in artist view"
|
||||||
msgstr "Zeige Anfangsbuchstaben in Interpretenliste"
|
msgstr "Zeige Anfangsbuchstaben in Interpretenliste"
|
||||||
|
|
||||||
#: mpdevil.py:2279
|
#: mpdevil.py:2452
|
||||||
msgid "Show tooltips in album view"
|
msgid "Show tooltips in album view"
|
||||||
msgstr "Zeige Tooltips in Albumliste"
|
msgstr "Zeige Tooltips in Albumliste"
|
||||||
|
|
||||||
#: mpdevil.py:2280
|
#: mpdevil.py:2453
|
||||||
msgid "Use 'Album Artist' tag"
|
msgid "Use 'Album Artist' tag"
|
||||||
msgstr "Benutze \"Album Artist\" Tag"
|
msgstr "Benutze \"Album Artist\" Tag"
|
||||||
|
|
||||||
#: mpdevil.py:2281
|
#: mpdevil.py:2454
|
||||||
msgid "Send notification on title change"
|
msgid "Send notification on title change"
|
||||||
msgstr "Sende Benachrichtigung bei Titelwechsel"
|
msgstr "Sende Benachrichtigung bei Titelwechsel"
|
||||||
|
|
||||||
#: mpdevil.py:2282
|
#: mpdevil.py:2455
|
||||||
msgid "Stop playback on quit"
|
msgid "Stop playback on quit"
|
||||||
msgstr "Wiedergabe beim Beenden stoppen"
|
msgstr "Wiedergabe beim Beenden stoppen"
|
||||||
|
|
||||||
#: mpdevil.py:2283
|
#: mpdevil.py:2456
|
||||||
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.py:2367
|
#: mpdevil.py:2467
|
||||||
|
msgid "<b>View</b>"
|
||||||
|
msgstr "<b>Ansicht</b>"
|
||||||
|
|
||||||
|
#: mpdevil.py:2470
|
||||||
|
msgid "<b>Behavior</b>"
|
||||||
|
msgstr "<b>Verhalten</b>"
|
||||||
|
|
||||||
|
#: mpdevil.py:2501
|
||||||
|
msgid "(restart required)"
|
||||||
|
msgstr "(Neustart erforderlich)"
|
||||||
|
|
||||||
|
#: mpdevil.py:2581
|
||||||
|
msgid "Profile:"
|
||||||
|
msgstr "Profil:"
|
||||||
|
|
||||||
|
#: mpdevil.py:2583
|
||||||
|
msgid "Name:"
|
||||||
|
msgstr "Name:"
|
||||||
|
|
||||||
|
#: mpdevil.py:2585
|
||||||
|
msgid "Host:"
|
||||||
|
msgstr "Host:"
|
||||||
|
|
||||||
|
#: mpdevil.py:2587
|
||||||
|
msgid "Password:"
|
||||||
|
msgstr "Passwort:"
|
||||||
|
|
||||||
|
#: mpdevil.py:2589
|
||||||
|
msgid "Music lib:"
|
||||||
|
msgstr "Musikverzeichnis:"
|
||||||
|
|
||||||
|
#: mpdevil.py:2702
|
||||||
|
msgid "Choose directory"
|
||||||
|
msgstr "Verzeichnis Wählen"
|
||||||
|
|
||||||
|
#: mpdevil.py:2735
|
||||||
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.py:2480 mpdevil.py:3257
|
#: mpdevil.py:2877 mpdevil.py:3390
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr "Einstellungen"
|
msgstr "Einstellungen"
|
||||||
|
|
||||||
#: mpdevil.py:2494
|
#: mpdevil.py:2891
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Allgemein"
|
msgstr "Allgemein"
|
||||||
|
|
||||||
#: mpdevil.py:2495
|
#: mpdevil.py:2892
|
||||||
msgid "Profiles"
|
msgid "Profiles"
|
||||||
msgstr "Profile"
|
msgstr "Profile"
|
||||||
|
|
||||||
#: mpdevil.py:2496
|
#: mpdevil.py:2893
|
||||||
msgid "Playlist"
|
msgid "Playlist"
|
||||||
msgstr "Wiedergabeliste"
|
msgstr "Wiedergabeliste"
|
||||||
|
|
||||||
#: mpdevil.py:2747
|
#: mpdevil.py:3155
|
||||||
msgid "Random mode"
|
msgid "Random mode"
|
||||||
msgstr "Zufallsmodus"
|
msgstr "Zufallsmodus"
|
||||||
|
|
||||||
#: mpdevil.py:2749
|
#: mpdevil.py:3157
|
||||||
msgid "Repeat mode"
|
msgid "Repeat mode"
|
||||||
msgstr "Dauerschleife"
|
msgstr "Dauerschleife"
|
||||||
|
|
||||||
#: mpdevil.py:2751
|
#: mpdevil.py:3159
|
||||||
msgid "Single mode"
|
msgid "Single mode"
|
||||||
msgstr "Einzelstückmodus"
|
msgstr "Einzelstückmodus"
|
||||||
|
|
||||||
#: mpdevil.py:2753
|
#: mpdevil.py:3161
|
||||||
msgid "Consume mode"
|
msgid "Consume mode"
|
||||||
msgstr "Wiedergabeliste verbrauchen"
|
msgstr "Wiedergabeliste verbrauchen"
|
||||||
|
|
||||||
#: mpdevil.py:2861
|
#: mpdevil.py:3238
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s "
|
|
||||||
"channels, %(file_type)s"
|
|
||||||
msgstr ""
|
|
||||||
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s "
|
|
||||||
"Kanäle, %(file_type)s"
|
|
||||||
|
|
||||||
#: mpdevil.py:2903
|
|
||||||
msgid "Stats"
|
msgid "Stats"
|
||||||
msgstr "Statistik"
|
msgstr "Statistik"
|
||||||
|
|
||||||
#: mpdevil.py:3020
|
#: mpdevil.py:3291
|
||||||
msgid "Add"
|
msgid "A small MPD client written in python"
|
||||||
msgstr "Hinzufügen"
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3023
|
#: mpdevil.py:3383
|
||||||
msgid "Play"
|
|
||||||
msgstr "Wiedergabe"
|
|
||||||
|
|
||||||
#: mpdevil.py:3026
|
|
||||||
msgid "Open"
|
|
||||||
msgstr "Öffnen"
|
|
||||||
|
|
||||||
#: mpdevil.py:3086
|
|
||||||
#, python-format
|
|
||||||
msgid "hits: %i"
|
|
||||||
msgstr "Treffer: %i"
|
|
||||||
|
|
||||||
#: mpdevil.py:3164
|
|
||||||
msgid "searching..."
|
|
||||||
msgstr "suche..."
|
|
||||||
|
|
||||||
#: mpdevil.py:3168
|
|
||||||
msgid "lyrics not found"
|
|
||||||
msgstr "Liedtext nicht gefunden"
|
|
||||||
|
|
||||||
#: mpdevil.py:3250
|
|
||||||
msgid "Select profile"
|
msgid "Select profile"
|
||||||
msgstr "Profil auswählen"
|
msgstr "Profil auswählen"
|
||||||
|
|
||||||
#: mpdevil.py:3258
|
#: mpdevil.py:3391
|
||||||
msgid "Help"
|
msgid "Help"
|
||||||
msgstr "Hilfe"
|
msgstr "Hilfe"
|
||||||
|
|
||||||
#: mpdevil.py:3259
|
#: mpdevil.py:3392
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr "Über"
|
msgstr "Über"
|
||||||
|
|
||||||
#: mpdevil.py:3260
|
#: mpdevil.py:3393
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Beenden"
|
msgstr "Beenden"
|
||||||
|
|
||||||
#: mpdevil.py:3263
|
#: mpdevil.py:3396
|
||||||
msgid "Save window layout"
|
msgid "Save window layout"
|
||||||
msgstr "Fensterlayout speichern"
|
msgstr "Fensterlayout speichern"
|
||||||
|
|
||||||
#: mpdevil.py:3264
|
#: mpdevil.py:3397
|
||||||
msgid "Update database"
|
msgid "Update database"
|
||||||
msgstr "Datenbank aktualisieren"
|
msgstr "Datenbank aktualisieren"
|
||||||
|
|
||||||
#: mpdevil.py:3265
|
#: mpdevil.py:3398
|
||||||
msgid "Server stats"
|
msgid "Server stats"
|
||||||
msgstr "Serverstatistik"
|
msgstr "Serverstatistik"
|
||||||
|
|
||||||
#: mpdevil.py:3271
|
#: mpdevil.py:3404
|
||||||
msgid "Menu"
|
msgid "Menu"
|
||||||
msgstr "Menü"
|
msgstr "Menü"
|
||||||
|
|
||||||
#: mpdevil.py:3469
|
|
||||||
msgid "A small MPD client written in python"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#~ msgid "Show additional information"
|
#~ msgid "Show additional information"
|
||||||
#~ msgstr "Zeige weitere Informationen"
|
#~ msgstr "Zeige weitere Informationen"
|
||||||
|
|
||||||
|
480
po/mpdevil.pot
480
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-06-22 16:58+0200\n"
|
"POT-Creation-Date: 2020-07-13 19:18+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,304 +17,304 @@ 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.py:202
|
#: mpdevil.py:650
|
||||||
msgid "Unknown Title"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:202
|
|
||||||
msgid "Unknown Artist"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:202
|
|
||||||
msgid "Unknown Album"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:930
|
|
||||||
msgid "MPD-Tag"
|
msgid "MPD-Tag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:934
|
#: mpdevil.py:654
|
||||||
msgid "Value"
|
msgid "Value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:1087 mpdevil.py:1638 mpdevil.py:2395 mpdevil.py:2980
|
#: mpdevil.py:712
|
||||||
|
msgid "Unknown Title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:712
|
||||||
|
msgid "Unknown Artist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:712
|
||||||
|
msgid "Unknown Album"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:989 mpdevil.py:1358 mpdevil.py:2108 mpdevil.py:2763
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:1092 mpdevil.py:1644 mpdevil.py:2395 mpdevil.py:2985
|
#: mpdevil.py:994 mpdevil.py:1363 mpdevil.py:2114 mpdevil.py:2763
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:1098 mpdevil.py:1653 mpdevil.py:2395 mpdevil.py:3003
|
#: mpdevil.py:1000 mpdevil.py:1502 mpdevil.py:2117 mpdevil.py:2763
|
||||||
msgid "Length"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:1140
|
|
||||||
msgid "all genres"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:1224
|
|
||||||
msgid "Album Artist"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:1226 mpdevil.py:1647 mpdevil.py:2395 mpdevil.py:2991
|
|
||||||
msgid "Artist"
|
msgid "Artist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:1227
|
#: mpdevil.py:1006 mpdevil.py:2120 mpdevil.py:2763
|
||||||
msgid "all artists"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:1375
|
|
||||||
#, python-format
|
|
||||||
msgid "%(total_tracks)i titles on %(discs)i discs (%(total_length)s)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:1377 mpdevil.py:1739
|
|
||||||
#, python-format
|
|
||||||
msgid "%(total_tracks)i titles (%(total_length)s)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:1641 mpdevil.py:2395
|
|
||||||
msgid "Disc"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:1650 mpdevil.py:2395 mpdevil.py:2997
|
|
||||||
msgid "Album"
|
msgid "Album"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:1656 mpdevil.py:2395
|
#: mpdevil.py:1012 mpdevil.py:1369 mpdevil.py:2123 mpdevil.py:2763
|
||||||
msgid "Year"
|
msgid "Length"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:1659 mpdevil.py:2395
|
#: mpdevil.py:1029
|
||||||
msgid "Genre"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:1840
|
|
||||||
msgid "Show lyrics"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:1915
|
|
||||||
msgid "Back to current album"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:1917
|
|
||||||
msgid "Search"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2096
|
|
||||||
msgid "Profile:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2098
|
|
||||||
msgid "Name:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2100
|
|
||||||
msgid "Host:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2102
|
|
||||||
msgid "Password:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2104
|
|
||||||
msgid "Music lib:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2191
|
|
||||||
msgid "Choose directory"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2229
|
|
||||||
msgid "Main cover size:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2233
|
|
||||||
msgid "Album view cover size:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2237
|
|
||||||
msgid "Button icon size:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2239 mpdevil.py:2320
|
|
||||||
msgid "(restart required)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2250
|
|
||||||
msgid "Sort albums by:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2250
|
|
||||||
msgid "name"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2250
|
|
||||||
msgid "year"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2251
|
|
||||||
msgid "Position of playlist:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2251
|
|
||||||
msgid "bottom"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2251
|
|
||||||
msgid "right"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2267
|
|
||||||
msgid "<b>View</b>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2270
|
|
||||||
msgid "<b>Behavior</b>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2275
|
|
||||||
msgid "Use Client-side decoration"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2276
|
|
||||||
msgid "Show stop button"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2277
|
|
||||||
msgid "Show lyrics button"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2278
|
|
||||||
msgid "Show initials in artist view"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2279
|
|
||||||
msgid "Show tooltips in album view"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2280
|
|
||||||
msgid "Use 'Album Artist' tag"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2281
|
|
||||||
msgid "Send notification on title change"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2282
|
|
||||||
msgid "Stop playback on quit"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2283
|
|
||||||
msgid "Play selected albums and titles immediately"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2367
|
|
||||||
msgid "Choose the order of information to appear in the playlist:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2480 mpdevil.py:3257
|
|
||||||
msgid "Settings"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2494
|
|
||||||
msgid "General"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2495
|
|
||||||
msgid "Profiles"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2496
|
|
||||||
msgid "Playlist"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2747
|
|
||||||
msgid "Random mode"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2749
|
|
||||||
msgid "Repeat mode"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2751
|
|
||||||
msgid "Single mode"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2753
|
|
||||||
msgid "Consume mode"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2861
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s "
|
|
||||||
"channels, %(file_type)s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:2903
|
|
||||||
msgid "Stats"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mpdevil.py:3020
|
|
||||||
msgid "Add"
|
msgid "Add"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3023
|
#: mpdevil.py:1032
|
||||||
msgid "Play"
|
msgid "Play"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3026
|
#: mpdevil.py:1035
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3086
|
#: mpdevil.py:1095
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "hits: %i"
|
msgid "hits: %i"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3164
|
#: mpdevil.py:1174
|
||||||
msgid "searching..."
|
msgid "searching..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3168
|
#: mpdevil.py:1178
|
||||||
msgid "lyrics not found"
|
msgid "lyrics not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3250
|
#: mpdevil.py:1412
|
||||||
|
msgid "all genres"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:1500
|
||||||
|
msgid "Album Artist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:1503
|
||||||
|
msgid "all artists"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:1650
|
||||||
|
#, python-format
|
||||||
|
msgid "%(total_tracks)i titles on %(discs)i discs (%(total_length)s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:1652 mpdevil.py:2209
|
||||||
|
#, python-format
|
||||||
|
msgid "%(total_tracks)i titles (%(total_length)s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:1827
|
||||||
|
msgid "Back to current album"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:1829
|
||||||
|
msgid "Search"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:1974
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)i bit, %(channels)i "
|
||||||
|
"channels, %(file_type)s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2111 mpdevil.py:2763
|
||||||
|
msgid "Disc"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2126 mpdevil.py:2763
|
||||||
|
msgid "Year"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2129 mpdevil.py:2763
|
||||||
|
msgid "Genre"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2319
|
||||||
|
msgid "Show lyrics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2418
|
||||||
|
msgid "Main cover size:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2419
|
||||||
|
msgid "Album view cover size:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2420
|
||||||
|
msgid "Button icon size:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2430
|
||||||
|
msgid "Sort albums by:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2430
|
||||||
|
msgid "name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2430
|
||||||
|
msgid "year"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2431
|
||||||
|
msgid "Position of playlist:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2431
|
||||||
|
msgid "bottom"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2431
|
||||||
|
msgid "right"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2448
|
||||||
|
msgid "Use Client-side decoration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2449
|
||||||
|
msgid "Show stop button"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2450
|
||||||
|
msgid "Show lyrics button"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2451
|
||||||
|
msgid "Show initials in artist view"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2452
|
||||||
|
msgid "Show tooltips in album view"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2453
|
||||||
|
msgid "Use 'Album Artist' tag"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2454
|
||||||
|
msgid "Send notification on title change"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2455
|
||||||
|
msgid "Stop playback on quit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2456
|
||||||
|
msgid "Play selected albums and titles immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2467
|
||||||
|
msgid "<b>View</b>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2470
|
||||||
|
msgid "<b>Behavior</b>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2501
|
||||||
|
msgid "(restart required)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2581
|
||||||
|
msgid "Profile:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2583
|
||||||
|
msgid "Name:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2585
|
||||||
|
msgid "Host:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2587
|
||||||
|
msgid "Password:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2589
|
||||||
|
msgid "Music lib:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2702
|
||||||
|
msgid "Choose directory"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2735
|
||||||
|
msgid "Choose the order of information to appear in the playlist:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2877 mpdevil.py:3390
|
||||||
|
msgid "Settings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2891
|
||||||
|
msgid "General"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2892
|
||||||
|
msgid "Profiles"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:2893
|
||||||
|
msgid "Playlist"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:3155
|
||||||
|
msgid "Random mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:3157
|
||||||
|
msgid "Repeat mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:3159
|
||||||
|
msgid "Single mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:3161
|
||||||
|
msgid "Consume mode"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:3238
|
||||||
|
msgid "Stats"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:3291
|
||||||
|
msgid "A small MPD client written in python"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mpdevil.py:3383
|
||||||
msgid "Select profile"
|
msgid "Select profile"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3258
|
#: mpdevil.py:3391
|
||||||
msgid "Help"
|
msgid "Help"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3259
|
#: mpdevil.py:3392
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3260
|
#: mpdevil.py:3393
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3263
|
#: mpdevil.py:3396
|
||||||
msgid "Save window layout"
|
msgid "Save window layout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3264
|
#: mpdevil.py:3397
|
||||||
msgid "Update database"
|
msgid "Update database"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3265
|
#: mpdevil.py:3398
|
||||||
msgid "Server stats"
|
msgid "Server stats"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3271
|
#: mpdevil.py:3404
|
||||||
msgid "Menu"
|
msgid "Menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mpdevil.py:3469
|
|
||||||
msgid "A small MPD client written in python"
|
|
||||||
msgstr ""
|
|
||||||
|
Loading…
Reference in New Issue
Block a user