7 Commits
v0.3 ... v0.3.1

Author SHA1 Message Date
Martin Wagner
ab7c9c6bd6 fixed duration display error and small translation update 2020-01-12 16:27:23 +01:00
Martin Wagner
4c7f953c98 Update README.md 2020-01-12 15:32:02 +01:00
Martin Wagner
8ba986bb4d Update configure.ac
added dependency tests
2020-01-12 13:57:18 +01:00
Martin Wagner
0230544df4 Update README.md 2020-01-11 22:29:19 +01:00
Martin Wagner
0b08bd80bf updated READMEs 2020-01-11 15:09:10 +01:00
Martin Wagner
b786b55644 added screenshot 2020-01-11 14:29:37 +01:00
Martin Wagner
6f608d923b Update README.rst 2020-01-11 14:02:45 +01:00
8 changed files with 193 additions and 160 deletions

2
README
View File

@@ -1 +1 @@
README.rst
README.md

32
README.md Normal file
View File

@@ -0,0 +1,32 @@
README for mpdevil
==================
mpdevil is focused on playing your local music directly instead of managing playlists or playing network streams. So it neither supports saving playlists nor restoring them. Therefore mpdevil is mainly a music browser which aims to be easy to use. mpdevil dosen't store any client side database of your music library. Instead all tags and covers get presented to you in real time. So you'll never see any outdated information in your browser. mpdevil strongly relies on tags especially on the AlbumArtist tag.
![ScreenShot](screenshots/mainwindow.png)
Features
--------
1. playing songs without doubleclicking
2. displaying covers
3. fetching lyrics form the web (based on PyLyrics 1.1.0)
4. searching songs in your music library
5. removing single tracks form playlist by hovering and pressing del
6. appending albums by rightclick
7. sending notifications on title change
8. managing multiple mpd servers
TODO
----
1. MPRIS interface
2. connecting to mpd servers with password
Building and installation
-------------------------
To build from source, use::
./autogen.sh
make
make install

View File

@@ -1,30 +0,0 @@
README for mpdevil
==================
mpdevil is focused on playing your local music directly instead of managing playlists or playing network streams. So it neither supports saving playlists nor restoring them. Therefore mpdevil is mainly a music browser which aims to be easy to use. mpdevil dosen't store any client side database of your music library. Instead all tags and covers get presented to you in real time. So you'll never see any outdated information in your browser.
Features
--------
-playing songs without doubleclicking
-displaying covers
-fetching lyrics form the web (based on PyLyrics 1.1.0)
-searching songs in your music library
-removing single tracks form playlist by hovering and pressing del
-sending notifications on title change
-managing multiple mpd servers
Building and installation
-------------------------
To build from source, use::
./autogen.sh
make
make install

View File

@@ -113,7 +113,7 @@ class ArtistView(Gtk.ScrolledWindow):
#Old Name Column
renderer_text = Gtk.CellRendererText()
self.column_name = Gtk.TreeViewColumn(_("Artist"), renderer_text, text=0)
self.column_name = Gtk.TreeViewColumn(_("Album Artist"), renderer_text, text=0)
self.column_name.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
self.column_name.set_property("resizable", True)
self.column_name.set_sort_column_id(0)
@@ -175,8 +175,12 @@ class AlbumView(Gtk.ScrolledWindow):
track=song["track"].zfill(2)
except:
track="00"
length=length+float(song["duration"])
duration=str(datetime.timedelta(seconds=int(float(song["duration"]))))
try:
dura=float(song["duration"])
except:
dura=0.0
length=length+dura
duration=str(datetime.timedelta(seconds=int(dura)))
title_list=title_list+"\n"+(track+" - "+title+" ("+duration+")")
if not year == "":
year=" ("+year+")"
@@ -356,7 +360,11 @@ class TrackView(Gtk.Box):
album=song["album"]
except:
album=_("Unknown Album")
duration=str(datetime.timedelta(seconds=int(float(song["duration"]))))
try:
dura=float(song["duration"])
except:
dura=0.0
duration=str(datetime.timedelta(seconds=int(dura )))
self.store.append([track, title, artist, album, duration, song["file"].replace("&", "")])
self.playlist=self.client.playlist()
else:
@@ -882,13 +890,10 @@ class SeekBar(Gtk.Box):
def seek(self, range, scroll, value):
status=self.client.status()
try:
duration=float(status["duration"])
factor=(value/100)
pos=(duration*factor)
self.client.seekcur(pos)
except:
pass
def update(self):
try:
@@ -1270,7 +1275,11 @@ class Search(Gtk.Dialog):
album=song["album"]
except:
album=_("Unknown Album")
duration=str(datetime.timedelta(seconds=int(float(song["duration"]))))
try:
dura=float(song["duration"])
except:
dura=0.0
duration=str(datetime.timedelta(seconds=int(dura)))
self.store.append([track, title, artist, album, duration, song["file"].replace("&", "")] )
self.label.set_text(_("Hits: %i") % (len(self.store)))
@@ -1561,6 +1570,7 @@ class mpdevil(Gtk.Application):
BASE_KEY = "org.mpdevil"
def __init__(self, *args, **kwargs):
super().__init__(*args, application_id="org.mpdevil", flags=Gio.ApplicationFlags.FLAGS_NONE, **kwargs)
#Gtk.window_set_default_icon_name("mpdevil")
self.client=Client()
self.settings = Gio.Settings.new(self.BASE_KEY)
self.window=None
@@ -1592,6 +1602,7 @@ class mpdevil(Gtk.Application):
dialog.set_version(VERSION)
dialog.set_comments(_("A small MPD client written in python"))
dialog.set_authors(["Martin Wagner"])
dialog.set_website("https://github.com/SoongNoonien/mpdevil")
dialog.set_logo_icon_name(PACKAGE)
dialog.run()
dialog.destroy()

View File

@@ -1,7 +1,7 @@
dnl -*- Mode: autoconf -*-
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ([2.68])
AC_INIT([mpdevil], [0.3])
AC_INIT([mpdevil], [0.3.1])
AC_CONFIG_SRCDIR([bin/mpdevil.py])
AM_INIT_AUTOMAKE
AC_CONFIG_MACRO_DIR([m4])
@@ -50,7 +50,7 @@ if $PYTHON -c "$prog" 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
AC_MSG_RESULT(found)
else
AC_MSG_RESULT(not found)
AC_MSG_ERROR(MPDClient not found)
AC_MSG_ERROR(python module mpd not found)
fi
dnl Check for beautifulsoup
@@ -62,7 +62,19 @@ if $PYTHON -c "$prog" 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
AC_MSG_RESULT(found)
else
AC_MSG_RESULT(not found)
AC_MSG_ERROR(beautifulsoup not found)
AC_MSG_ERROR(python module bs4 not found)
fi
dnl Check for requests
AC_MSG_CHECKING(for requests installed)
prog="
import requests
"
if $PYTHON -c "$prog" 1>&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
AC_MSG_RESULT(found)
else
AC_MSG_RESULT(not found)
AC_MSG_ERROR(python module requests not found)
fi
AC_CONFIG_FILES([Makefile

120
po/de.po
View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-01-06 00:53+0100\n"
"PO-Revision-Date: 2020-01-06 00:55+0100\n"
"POT-Creation-Date: 2020-01-12 16:18+0100\n"
"PO-Revision-Date: 2020-01-12 16:18+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: de\n"
@@ -18,136 +18,140 @@ msgstr ""
"X-Generator: Poedit 2.2.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: mpdevil.py:116 mpdevil.py:250 mpdevil.py:1215
msgid "Artist"
msgstr "Künstler"
#: mpdevil.py:116
msgid "Album Artist"
msgstr "Albuminterpret"
#: mpdevil.py:173 mpdevil.py:346 mpdevil.py:1260
#: mpdevil.py:173 mpdevil.py:350 mpdevil.py:1265
msgid "Unknown Title"
msgstr "Unbekannter Titel"
#: mpdevil.py:184
#: mpdevil.py:188
#, python-format
msgid "%(album)s%(year)s (tracks: %(total_tracks)i) (%(total_length)s):"
msgstr "%(album)s%(year)s (Titel: %(total_tracks)i) (%(total_length)s):"
#: mpdevil.py:240 mpdevil.py:1205
#: mpdevil.py:244 mpdevil.py:1210
msgid "No"
msgstr "Nr."
#: mpdevil.py:245 mpdevil.py:1210
#: mpdevil.py:249 mpdevil.py:1215
msgid "Title"
msgstr "Titel"
#: mpdevil.py:255 mpdevil.py:1225
#: mpdevil.py:254 mpdevil.py:1220
msgid "Artist"
msgstr "Interpret"
#: mpdevil.py:259 mpdevil.py:1230
msgid "Length"
msgstr "Länge"
#: mpdevil.py:354 mpdevil.py:1268
#: mpdevil.py:358 mpdevil.py:1273
msgid "Unknown Artist"
msgstr "Unbekannter Künstler"
#: mpdevil.py:358 mpdevil.py:1272
#: mpdevil.py:362 mpdevil.py:1277
msgid "Unknown Album"
msgstr "Unbekanntes Album"
#: mpdevil.py:567
#: mpdevil.py:575
msgid "Select"
msgstr "Auswählen"
#: mpdevil.py:569
#: mpdevil.py:577
msgid "Profile:"
msgstr "Profil:"
#: mpdevil.py:571
#: mpdevil.py:579
msgid "Name:"
msgstr "Name:"
#: mpdevil.py:573
#: mpdevil.py:581
msgid "Host:"
msgstr "Host:"
#: mpdevil.py:575
#: mpdevil.py:583
msgid "Port:"
msgstr "Port:"
#: mpdevil.py:577
#: mpdevil.py:585
msgid "Music lib:"
msgstr "Musikverzeichnis:"
#: mpdevil.py:667
#: mpdevil.py:675
msgid "Choose directory"
msgstr "Verzeichnis Wählen"
#: mpdevil.py:703
#: mpdevil.py:711
msgid "Main cover size:"
msgstr "Größe des Haupt-Covers:"
#: mpdevil.py:705
#: mpdevil.py:713
msgid "Album-view cover size:"
msgstr "Covergröße in Albumansicht:"
#: mpdevil.py:711
#: mpdevil.py:719
msgid "Show stop button"
msgstr "Zeige Stopp-Knopf"
#: mpdevil.py:714
#: mpdevil.py:722
msgid "Show title list as tooltip in album view"
msgstr "Zeige Titellisten als Tooltips in Albumansicht"
#: mpdevil.py:717
#: mpdevil.py:725
msgid "Send notification on title change"
msgstr "Sende Benachrichtigung bei Titelwechsel"
#: mpdevil.py:720
#: mpdevil.py:728
msgid "Stop playback on quit"
msgstr "Wiedergabe beim Beenden stoppen"
#: mpdevil.py:723
#: mpdevil.py:731
msgid "Play selected album after current title"
msgstr "Ausgewähltes Album hinter aktuellem Titel einreihen"
#: mpdevil.py:754 mpdevil.py:1432
#: mpdevil.py:762 mpdevil.py:1441
msgid "Settings"
msgstr "Einstellungen"
#: mpdevil.py:767
#: mpdevil.py:775
msgid "General"
msgstr "Allgemein"
#: mpdevil.py:768
#: mpdevil.py:776
msgid "Profiles"
msgstr "Profile"
#: mpdevil.py:919
#: mpdevil.py:924
msgid "Random mode"
msgstr "Zufallsmodus"
#: mpdevil.py:921
#: mpdevil.py:926
msgid "Repeat mode"
msgstr "Dauerschleife"
#: mpdevil.py:923
#: mpdevil.py:928
msgid "Single mode"
msgstr "Einzelstückmodus"
#: mpdevil.py:925
#: mpdevil.py:930
msgid "Consume mode"
msgstr "Playliste verbrauchen"
#: mpdevil.py:1019
#: mpdevil.py:1024
msgid "Right click to show additional information"
msgstr "Rechtsclick für weitere Informationen"
#: mpdevil.py:1042
#: mpdevil.py:1047
msgid "MPD-Tag"
msgstr "MPD-Tag"
#: mpdevil.py:1045 mpdevil.py:1153
#: mpdevil.py:1050 mpdevil.py:1158
msgid "Value"
msgstr "Wert"
#: mpdevil.py:1066
#: mpdevil.py:1071
#, python-format
msgid ""
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s "
@@ -156,88 +160,88 @@ msgstr ""
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s "
"Kanäle, %(file_type)s"
#: mpdevil.py:1132
#: mpdevil.py:1137
msgid "Stats"
msgstr "Statistik"
#: mpdevil.py:1150
#: mpdevil.py:1155
msgid "Tag"
msgstr "Tag"
#: mpdevil.py:1170
#: mpdevil.py:1175
msgid "Search"
msgstr "Suche"
#: mpdevil.py:1220
#: mpdevil.py:1225
msgid "Album"
msgstr "Album"
#: mpdevil.py:1275
#: mpdevil.py:1284
#, python-format
msgid "Hits: %i"
msgstr "Treffer: %i"
#: mpdevil.py:1279
#: mpdevil.py:1288
msgid "Lyrics"
msgstr "Liedtext"
#: mpdevil.py:1323
#: mpdevil.py:1332
msgid "searching..."
msgstr "suche..."
#: mpdevil.py:1327
#: mpdevil.py:1336
msgid "not found"
msgstr "nicht gefunden"
#: mpdevil.py:1332
#: mpdevil.py:1341
msgid "not connected"
msgstr "nicht verbunden"
#: mpdevil.py:1412
#: mpdevil.py:1421
msgid "Select profile"
msgstr "Profil auswählen"
#: mpdevil.py:1416
#: mpdevil.py:1425
msgid "Return to album of current title"
msgstr "Zu Album des aktuellen Titels zurückkehren"
#: mpdevil.py:1418
#: mpdevil.py:1427
msgid "Title search"
msgstr "Titelsuche"
#: mpdevil.py:1420
#: mpdevil.py:1429
msgid "Show lyrics"
msgstr "Zeige Liedtext"
#: mpdevil.py:1427
#: mpdevil.py:1436
msgid "Not connected to MPD-server. Reconnect?"
msgstr "Nicht mit MPD-Server verbunden. Verbindung wiederherstellen?"
#: mpdevil.py:1431
#: mpdevil.py:1440
msgid "Save window size"
msgstr "Fenstergröße speichern"
#: mpdevil.py:1433
#: mpdevil.py:1442
msgid "Update database"
msgstr "Datenbank aktualisieren"
#: mpdevil.py:1434
#: mpdevil.py:1443
msgid "Server stats"
msgstr "Serverstatistik"
#: mpdevil.py:1435
#: mpdevil.py:1444
msgid "About"
msgstr "Über"
#: mpdevil.py:1436
#: mpdevil.py:1445
msgid "Quit"
msgstr "Beenden"
#: mpdevil.py:1441
#: mpdevil.py:1450
msgid "Main menu"
msgstr "Hauptmenu"
#: mpdevil.py:1593
#: mpdevil.py:1603
msgid "A small MPD client written in python"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-01-06 00:53+0100\n"
"POT-Creation-Date: 2020-01-12 16:18+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,223 +17,227 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: mpdevil.py:116 mpdevil.py:250 mpdevil.py:1215
msgid "Artist"
#: mpdevil.py:116
msgid "Album Artist"
msgstr ""
#: mpdevil.py:173 mpdevil.py:346 mpdevil.py:1260
#: mpdevil.py:173 mpdevil.py:350 mpdevil.py:1265
msgid "Unknown Title"
msgstr ""
#: mpdevil.py:184
#: mpdevil.py:188
#, python-format
msgid "%(album)s%(year)s (tracks: %(total_tracks)i) (%(total_length)s):"
msgstr ""
#: mpdevil.py:240 mpdevil.py:1205
#: mpdevil.py:244 mpdevil.py:1210
msgid "No"
msgstr ""
#: mpdevil.py:245 mpdevil.py:1210
#: mpdevil.py:249 mpdevil.py:1215
msgid "Title"
msgstr ""
#: mpdevil.py:255 mpdevil.py:1225
#: mpdevil.py:254 mpdevil.py:1220
msgid "Artist"
msgstr ""
#: mpdevil.py:259 mpdevil.py:1230
msgid "Length"
msgstr ""
#: mpdevil.py:354 mpdevil.py:1268
#: mpdevil.py:358 mpdevil.py:1273
msgid "Unknown Artist"
msgstr ""
#: mpdevil.py:358 mpdevil.py:1272
#: mpdevil.py:362 mpdevil.py:1277
msgid "Unknown Album"
msgstr ""
#: mpdevil.py:567
#: mpdevil.py:575
msgid "Select"
msgstr ""
#: mpdevil.py:569
#: mpdevil.py:577
msgid "Profile:"
msgstr ""
#: mpdevil.py:571
#: mpdevil.py:579
msgid "Name:"
msgstr ""
#: mpdevil.py:573
#: mpdevil.py:581
msgid "Host:"
msgstr ""
#: mpdevil.py:575
#: mpdevil.py:583
msgid "Port:"
msgstr ""
#: mpdevil.py:577
#: mpdevil.py:585
msgid "Music lib:"
msgstr ""
#: mpdevil.py:667
#: mpdevil.py:675
msgid "Choose directory"
msgstr ""
#: mpdevil.py:703
#: mpdevil.py:711
msgid "Main cover size:"
msgstr ""
#: mpdevil.py:705
#: mpdevil.py:713
msgid "Album-view cover size:"
msgstr ""
#: mpdevil.py:711
#: mpdevil.py:719
msgid "Show stop button"
msgstr ""
#: mpdevil.py:714
#: mpdevil.py:722
msgid "Show title list as tooltip in album view"
msgstr ""
#: mpdevil.py:717
#: mpdevil.py:725
msgid "Send notification on title change"
msgstr ""
#: mpdevil.py:720
#: mpdevil.py:728
msgid "Stop playback on quit"
msgstr ""
#: mpdevil.py:723
#: mpdevil.py:731
msgid "Play selected album after current title"
msgstr ""
#: mpdevil.py:754 mpdevil.py:1432
#: mpdevil.py:762 mpdevil.py:1441
msgid "Settings"
msgstr ""
#: mpdevil.py:767
#: mpdevil.py:775
msgid "General"
msgstr ""
#: mpdevil.py:768
#: mpdevil.py:776
msgid "Profiles"
msgstr ""
#: mpdevil.py:919
#: mpdevil.py:924
msgid "Random mode"
msgstr ""
#: mpdevil.py:921
#: mpdevil.py:926
msgid "Repeat mode"
msgstr ""
#: mpdevil.py:923
#: mpdevil.py:928
msgid "Single mode"
msgstr ""
#: mpdevil.py:925
#: mpdevil.py:930
msgid "Consume mode"
msgstr ""
#: mpdevil.py:1019
#: mpdevil.py:1024
msgid "Right click to show additional information"
msgstr ""
#: mpdevil.py:1042
#: mpdevil.py:1047
msgid "MPD-Tag"
msgstr ""
#: mpdevil.py:1045 mpdevil.py:1153
#: mpdevil.py:1050 mpdevil.py:1158
msgid "Value"
msgstr ""
#: mpdevil.py:1066
#: mpdevil.py:1071
#, python-format
msgid ""
"%(bitrate)s kb/s, %(frequency)s kHz, %(resolution)s bit, %(channels)s "
"channels, %(file_type)s"
msgstr ""
#: mpdevil.py:1132
#: mpdevil.py:1137
msgid "Stats"
msgstr ""
#: mpdevil.py:1150
#: mpdevil.py:1155
msgid "Tag"
msgstr ""
#: mpdevil.py:1170
#: mpdevil.py:1175
msgid "Search"
msgstr ""
#: mpdevil.py:1220
#: mpdevil.py:1225
msgid "Album"
msgstr ""
#: mpdevil.py:1275
#: mpdevil.py:1284
#, python-format
msgid "Hits: %i"
msgstr ""
#: mpdevil.py:1279
#: mpdevil.py:1288
msgid "Lyrics"
msgstr ""
#: mpdevil.py:1323
#: mpdevil.py:1332
msgid "searching..."
msgstr ""
#: mpdevil.py:1327
#: mpdevil.py:1336
msgid "not found"
msgstr ""
#: mpdevil.py:1332
#: mpdevil.py:1341
msgid "not connected"
msgstr ""
#: mpdevil.py:1412
#: mpdevil.py:1421
msgid "Select profile"
msgstr ""
#: mpdevil.py:1416
#: mpdevil.py:1425
msgid "Return to album of current title"
msgstr ""
#: mpdevil.py:1418
#: mpdevil.py:1427
msgid "Title search"
msgstr ""
#: mpdevil.py:1420
#: mpdevil.py:1429
msgid "Show lyrics"
msgstr ""
#: mpdevil.py:1427
#: mpdevil.py:1436
msgid "Not connected to MPD-server. Reconnect?"
msgstr ""
#: mpdevil.py:1431
#: mpdevil.py:1440
msgid "Save window size"
msgstr ""
#: mpdevil.py:1433
#: mpdevil.py:1442
msgid "Update database"
msgstr ""
#: mpdevil.py:1434
#: mpdevil.py:1443
msgid "Server stats"
msgstr ""
#: mpdevil.py:1435
#: mpdevil.py:1444
msgid "About"
msgstr ""
#: mpdevil.py:1436
#: mpdevil.py:1445
msgid "Quit"
msgstr ""
#: mpdevil.py:1441
#: mpdevil.py:1450
msgid "Main menu"
msgstr ""
#: mpdevil.py:1593
#: mpdevil.py:1603
msgid "A small MPD client written in python"
msgstr ""

BIN
screenshots/mainwindow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1021 KiB