Giter Club home page Giter Club logo

plattenalbum's Introduction

Plattenalbum

A client for the Music Player Daemon (MPD).

Browse your collection while viewing large album covers. Play your music without managing playlists.

ScreenShot

Package Installation

Flatpak:

Download on Flathub

Arch:

Gentoo (see: https://wiki.gentoo.org/wiki/Custom_repository):

Building

Build dependencies:

  • meson
  • gettext
  • glib2 (Ubuntu/Debian: libglib2.0-dev-bin, libglib2.0-bin)

Dependencies:

  • GTK4 >=4.12.0
  • libadwaita >=1.5.0
  • Python3

Python modules:

  • mpd (python-mpd2 >=3.1)
  • gi (Gtk, Adw, Gio, Gdk, Pango, GObject, GLib)

Run:

git clone https://github.com/SoongNoonien/plattenalbum.git
cd plattenalbum
meson setup builddir --prefix=/usr/local
sudo ninja -C builddir install

Translation

This program is currently available in English, German, Dutch, Bulgarian, Turkish, Polish, French and Japanese. If you speak one of these or even another language, you can easily translate it by using poedit. Just import po/de.wagnermartin.Plattenalbum.pot from this repo into poedit. To test your translation, copy the new .po file into the po directory of your cloned plattenalbum repo and proceed as described in the Building section. To get your translation merged, just send me an e-mail or create a pull request.

plattenalbum's People

Contributors

dgcampea avatar gnuey56 avatar grosmanal avatar kianmeng avatar kingosticks avatar masflam avatar newbytee avatar oersen avatar rien333 avatar soongnoonien avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

plattenalbum's Issues

Disc number column emptied after play

Hi,

I found a minor issue in 1.3.0.

When starting to play an album the Disc column is filled for all the tracks. However, after a track has finished playing the disc column value of that track is emptied and remains empty.

Screenshot from 2021-08-26 14-49-50

It does not happen when you jump to the next from one that is playing.

Tested with just MP3 files and running mpdevil on Ubuntu 21.04 with MPD 0.22.9.
Let me know if you need a test file or if you're already able to reproduce it with your own.

albumartist_sort tag

Hi,

First, congrats on the excellent mpd frontend. IMHO it is without a doubt the most well thought out and cleanest mpd gui I have tried - and I am pretty sure I have tried them all.

All my music is tagged with beets, which mainly uses musicbrainz as a source, and a large portion of the files have albumartist_sort tags.

Is mpdevil able to use the albumartist_sort tag, if not would you be open to using it? Before I stumbled on your program I made a rofi fronted for mpd, and it first looks for albumartist_sort tag and if not present uses albumartist.

As an example the following screenshot shows how the artist alice sara ott it displayed in both players artist list.

Screenshot from 2021-11-24 20-56-43

Perhaps mpdevil could have an option to prefer albumartist_sort, fallback to albumartist?

Thanks for your time

no sound with httpd stream

version 1.1.1 on Ubuntu 18.04.

When streaming httpd to android using mpdroid as the client, or to the desktop ubuntu computer using a web browser as a client, I can hear the audio. But, when I use mpdevil as the client on that same ubuntu computer, the httpd stream has no audio, the volume button is muted and I am unable to alter it.

(mpdevil does play the MPD pulse output with no problem.)

Stuck while autogenerating

I'm a newbie in Python - please forgive me. This is what I get running autogen.sh:

:
checking for gtk 3.0 installed... not found
configure: error: required gtk version not found

I was expecting "sudo apt -y install libgtk-3-dev" to do the trick, but no.

Can you please help me?

Support MPD server albumart for Covers

Since MPD 0.21 the mpd protocol supports albumart images.
Can mpdevil retrieve the covers by this way?

I've first read about it on myMPD.
Mpdevil music lib only works locally, and I'm looking for some way to retrieve covers over LAN.

And thanks so much for the best linux MPD client. Mpdevil it's really awesome!

Request: re-add right click popover in Artist list

I'm using this feature regularly -- right clicking on an artist (or "all artists" in a genre) and queueing / playing all their tracks. Sometimes I just don't have a particular album in mind, and just want to randomly play tracks of certain artist. This feature was very useful for that.

I believe 1bd3409 is the commit that removed this. I don't know if there was any particular reason it had to be removed, but if possible, I would personally very much appreciate if it was re-added!

Explicit use of bindtextdomain for gettext? (NixOS, non-FHS)

Hello!

I've packaged und submitted mpdevil for NixOS. In the initial submitted package only the original strings are available, even though the translations are created and installed.

The reason for this is the way how NixOS is working. Nix(OS) has an so-called nix-store where the output of every 'derivation' (means a package here) is placed. In the corresponding folder the files are placed most of time FHS-conform, but prefixed with the nix-store folder (e.g. /nix/store/qaqz01z1yf3ah2n68b258fdbchjyakn2-mpdevil-1.1.1/bin/mpdevil)

Now the point is:

mpdevil only uses textdomain("mpdevil") without explicit usage of bindtextdomain. That results is the circumstance that mpdevil looks for the locale in the default system-wide locale folder (/usr/share/locale on most systems I believe). But on NixOS the locale is placed under /nix/store/qaqz01z1yf3ah2n68b258fdbchjyakn2-mpdevil-1.1.1/share/locale.

I got the locale working with patching bin/mpdevil to contain the bindtextdomain entry and then substite the path in a later build phase with the correct path. That's working, but it's not very elegant.

A bit more elegant would be to have the bindtextdomain line already in the source code and subsitute it with a static path (the previous mentioned hacky solution, but without patching -> atleast that's more the 'way of nix'). The best solution would be to implement something more dynamically, which gets the locale path more OS-independent, so it works on FHS and non-FHS systems.


What do you think?

If you have are any questions about NixOS don't hesitate to ask me, maybe I can answer your question. ๐Ÿ‘

Group by album

It would be really great to have some way to choose full album even if it's a compilation of songs by different artists.

Directory based browsing

Really nice clean MPD client, thanks.

I was curious if there are any plans (or existing functionality) to browse by directory rather than tags as I've a lot of untagged music which is organised in a structured way (nested directories).

Make lyrics button optional (toggle in settings)

My music library is much focussed on album arts, and I usually don't care about lyrics, but the lyrics button permanently covers the right corner of the album art.

Wouldn't it be a good idea to add an toggle in the settings to optionally disable the lyrics button?

mpdevil hangs after installing python3-mpd 3.0.3

Today I took mpdevil for a spin (1.2.1) and it works nicely. Thank you for you effort.
With using Ubuntu 20.10, python3-mpd is stuck at version 1.1.0 which means no cover art being retrieved.
I downloaded python3-mpd 3.0.3 manually, but after installing it, mpdevil hangs as soon as it switches to an artist. Either switching to one automatically a start-up when MPD is already playing or manually when nothing is playing yet.
The only way to stop it is to force-quit the application.

Is there a way to get some debugging info to see what is happening?

main pane stops working after encountering certain files

Hey,

On my machine mpdevil stops updating the main pane after encountering certain files.

Steps to reproduce

  1. Place this file somewhere in your mpd music directory
  2. Place it at the current position in the playing queue.
  3. Start mpdevil.

Observed behaviour

  1. mpdevil outputs
Traceback (most recent call last):
  File "/usr/bin/mpdevil", line 359, in _on_song_changed
    self._update_metadata()
  File "/usr/bin/mpdevil", line 340, in _update_metadata
    self._metadata[key]=self.implemented_tags[key](value)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
Traceback (most recent call last):
  File "/usr/bin/mpdevil", line 2102, in _refresh
    callback()
  File "/usr/bin/mpdevil", line 2076, in callback
    discs=int(album["songs"][-1].get("disc", 1))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
  1. The main pane stays empty, even after selecting other artists:

This happens both with the latest release and current HEAD.

Expected behaviour

The main pane keeps working.

Thanks for all the work.

Sort by originaldate

  • OS: Arch Linux
  • MPD version: 0.23.6
  • mpdevil version: 1.7.0.r12.g22f452c-1 from AUR

Hi, I started using your client and I really like it, however I'd like to be able to see my albums sorted by original release date (MPD tag originaldate) rather than recording date (the default MPD date). The reason is that when I look at the albums from a given artist, at first glance I wanna see when they were first released, not the date of the specific release I own.
Do you think it's something that can be implemented either as additional option in the settings or as a cli/config argument?

Thanks for the good work

Album cover fallback

Sometimes, instead of using "cover.jpg" and the like for album covers, "<album artist> - <album name>" is used. Users should be allowed to configure mpdevil to fall back to any images it finds in the same directory as the track, or, better, enter their own regular expression string to find album covers.

cover art - missing in dedicated panel, visible in browser

I'm a long time cantata user, and I enjoy your fresh take and especially the mini player mode, thanks!

I have noticed that album cover art does not display in the dedicated window above the playlist. This happens for all albums, even those who have their cover art displayed in the browser part. I have setup the path to the library in the settings panel and all of my library has embedded cover art.

Is this expected behaviour, or do you need more details to diagnose this?

Albums erroneously split by year

I have an album which contains tracks of different years.
In the interface, this is displayed as multiple albums, when it's really one album.
Is there some way to fix this, or is it just a design decision?
(I'd like to avoid editing the metadata if possible)

Remove technical track details

The UI shows technical details like 256.0 kb/s, 44.1 kHz, 24 bit, 2 channels, mp3 for the track currently being played.
I think these details aren't that important to have available at all times. Especially for VBR tracks it makes the UI a bit 'nervous' with the number changing continuously. Removing the line all together cleans up the UI in general.
Personally I'm not a fan of adding yet another option for showing/hiding it either, but that could be a compromise.

Performance Issues and discussion

  • 1. all artists is unusable with very large library collections, the indexing is too slow.
    Caching results and cover images could result in performance boosts. Having it work asynchronously can improve responsiveness too.

    • 1.1 Even showing albums from an artist is somewhat unresponsive since it blocks while retrieving. Not sure if the bulk of the responsiveness issue is due to cover image retrieval but they could be retrieved in the background and displayed as they come (showing the "default" no cover image while waiting).
    • 1.2. GdkPixbuf.Pixbuf.new_from_file_at_size() gets performed multiple times for cover-less albums/tracks when it can be cached/done once at application startup. (it's using the default CD image after all)
  • 2. mpd update handling: currently done using mpd protocol command status. A better way would be to use idle command (python-mpd2 has MPDClient.idle) that can inform when a database update was finished which can then trigger a mpdevil update instead of triggering multiple updates while mpd hasn't even finished (every "mpdevil update" resets the library navigation position). This might not be too bad if mpd is updated manually but under auto updates from mpd it's infuriating to have the UI jump around at times or even unusable if the library changes are large.

Others:

  • Can shuffle all tracks or albums be efficiently done with mpdevil? Solving 1. does not necessarily imply this.

I can offer to look into 1.2 and 2 but I doubt I can be of any help about the rest of the points.

Multiple values for Album Artist cause duplicate artist entries

This release has two different values set as the AlbumArtist tag. Mpdevil displays this correctly as a release for both artists, but generates a duplicate of the other artist, which contains only this release.

Tags

image

Correct first artist

image

Duplicate second artist

image

Duplicate first artist

image

Correct second artist

image

Multiple artist values are ignored, only takes one value

If you add "Alva Noto" and "Ryuichi Sakamoto" as values, the tracklist shows the credit as "Ryuichi Sakamoto".

imagen

If mpdevil is to show proper credit, it should concatenate all values.

EDIT: It seems that it doesn't consider multiple values for the album artist tag either. It just takes the first value and populates the artist list with that.

EDIT 2: album artist tag problems are apparently WavPack's fault.

Mpdevil does not show some albums

image

Here you can see ncmcpcppccdc and Mpdevil side by side and Mpdevil misses two albums from Mogwai (KIN, Every Country's Sun), that show up in ncmncppdcdn.

Curiously the Album can be found via the search in Mpdevil:
image

Support for selecting mpd audio_output

MPD allows configuration of multiple named audio_outputs, and the protocol supports listing / switching the active ones (https://www.musicpd.org/doc/html/protocol.html#audio-output-devices). It would be great if mpdevil could support listing / switching audio outputs through the UI.

In my config I have one audio_output to play music through the speakers on the device mpd is running on, and a second audio_output to play music on a remote speaker. At present I have to switch to a different mpd client to change playback device.

Album loading performance

The album(-cover) loading performance is improvable. This issue is to provide a place for discussion on that topic. It has been extracted from #39.

Stuck while compiling

First thing first: thanks a lot for your hard work, Markus!
I'm very bad at compiling. I use Manjaro and the AUR depository to avoid compiling stuff I want!
I tried to compile 0.8.3 and I don't know where it hangs. Autogen begins with:

Please add the files codeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 lcmessage.m4 progtest.m4

I had to find them online and copied them into the aclocal folder.
I also checked if config.guess and config.sub are present and I found files with these names.
Here's my ./autogen.sh terminal output:

$ sudo ./autogen.sh
*** WARNING: I am going to run 'configure' with no arguments.
*** If you wish to pass any to it, please specify them on the
*** './autogen.sh' command line.

Copying file po/Makefile.in.in

Please add the files
codeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 lcmessage.m4
progtest.m4
from the /usr/share/aclocal directory to your autoconf macro directory
or directly to your aclocal.m4 file.
You will also need config.guess and config.sub, which you can get from
ftp://ftp.gnu.org/pub/gnu/config/.

autoreconf: Entering directory .' autoreconf: configure.ac: not using Gettext autoreconf: running: aclocal --force autoreconf: configure.ac: tracing autoreconf: configure.ac: not using Libtool autoreconf: running: /usr/bin/autoconf --force autoreconf: configure.ac: not using Autoheader autoreconf: running: automake --add-missing --copy --force-missing autoreconf: Leaving directory .'
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports the include directive... yes (GNU style)
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... none
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking for LC_MESSAGES... yes
checking for CFPreferencesCopyAppValue... no
checking for CFLocaleCopyCurrent... no
checking libintl.h usability... yes
checking libintl.h presence... yes
checking for libintl.h... yes
checking for ngettext in libc... yes
checking for dgettext in libc... yes
checking for bind_textdomain_codeset... yes
checking for msgfmt... /usr/bin/msgfmt
checking for dcgettext... yes
checking if msgfmt accepts -c... yes
checking for gmsgfmt... /usr/bin/msgfmt
checking for xgettext... /usr/bin/xgettext
checking for catalogs to be installed... de
checking whether NLS is requested... yes
checking for intltool-update... /usr/bin/intltool-update
checking for intltool-merge... /usr/bin/intltool-merge
checking for intltool-extract... /usr/bin/intltool-extract
checking for xgettext... (cached) /usr/bin/xgettext
checking for msgmerge... /usr/bin/msgmerge
checking for msgfmt... (cached) /usr/bin/msgfmt
checking for gmsgfmt... (cached) /usr/bin/msgfmt
checking for perl... /usr/bin/perl
checking for perl >= 5.8.1... 5.30.2
checking for XML::Parser... ok
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.16... yes
checking for a Python interpreter with version >= 3.0... python
checking for python... /usr/bin/python
checking for python version... 3.8
checking for python platform... linux
checking for python script directory... ${prefix}/lib/python3.8/site-packages
checking for python extension module directory... ${exec_prefix}/lib/python3.8/site-packages
checking for gtk 3.0 installed... found
checking for MPDClient installed... found
checking for beautifulsoup installed... found
checking for requests installed... found
checking for dbus installed... found
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating po/Makefile.in
config.status: creating bin/Makefile
config.status: creating data/Makefile
config.status: creating data/mpdevil.desktop.in
config.status: executing depfiles commands
config.status: executing default-1 commands
config.status: executing po/stamp-it commands

Then with:

$ sudo make
Making all in bin
make[1]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/bin'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/bin'
Making all in data
make[1]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/data'
LC_ALL=C /usr/bin/intltool-merge -d -u -c ../po/.intltool-merge-cache ../po mpdevil.desktop.in mpdevil.desktop
Found cached translation database
Merging translations into mpdevil.desktop.
make[1]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/data'
Making all in po
make[1]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/po'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/po'
make[1]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3'
make[1]: Nothing to be done for 'all-am'.
make[1]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3'

And the last one:

$ sudo make install
Making install in bin
make[1]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/bin'
make[2]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/bin'
/usr/bin/mkdir -p '/usr/local/bin'
/usr/bin/install -c mpdevil '/usr/local/bin'
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/bin'
make[1]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/bin'
Making install in data
make[1]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/data'
make[2]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/data'
make[2]: Nothing to be done for 'install-exec-am'.
/usr/bin/mkdir -p '/usr/local/share/applications'
/usr/bin/install -c -m 644 mpdevil.desktop '/usr/local/share/applications'
/usr/bin/mkdir -p '/usr/local/share/icons/hicolor/48x48/apps'
/usr/bin/install -c -m 644 mpdevil.png '/usr/local/share/icons/hicolor/48x48/apps'
/usr/bin/mkdir -p '/usr/local/share/icons/hicolor/scalable/apps'
/usr/bin/install -c -m 644 mpdevil.svg '/usr/local/share/icons/hicolor/scalable/apps'
if test -n "org.mpdevil.gschema.xml"; then
test -z "/usr/local/share/glib-2.0/schemas" || /usr/bin/mkdir -p "/usr/local/share/glib-2.0/schemas";
/usr/bin/install -c -m 644 org.mpdevil.gschema.xml "/usr/local/share/glib-2.0/schemas";
test -n "" || /usr/bin/glib-compile-schemas /usr/local/share/glib-2.0/schemas;
fi
make install-data-hook
make[3]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/data'
*** Icon cache not updated. After (un)install, run this:
*** gtk-update-icon-cache -f -t /usr/local/share/icons/hicolor
make[3]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/data'
make[2]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/data'
make[1]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/data'
Making install in po
make[1]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/po'
linguas="de ";
for lang in $linguas; do
dir=/usr/local/share/locale/$lang/LC_MESSAGES;
/bin/sh /home/me/.local/share/Trash/files/mpdevil-0.8.3/install-sh -d $dir;
if test -r $lang.gmo; then
/usr/bin/install -c -m 644 $lang.gmo $dir/mpdevil.mo;
echo "installing $lang.gmo as $dir/mpdevil.mo";
else
/usr/bin/install -c -m 644 ./$lang.gmo $dir/mpdevil.mo;
echo "installing ./$lang.gmo as"
"$dir/mpdevil.mo";
fi;
if test -r $lang.gmo.m; then
/usr/bin/install -c -m 644 $lang.gmo.m $dir/mpdevil.mo.m;
echo "installing $lang.gmo.m as $dir/mpdevil.mo.m";
else
if test -r ./$lang.gmo.m ; then
/usr/bin/install -c -m 644 ./$lang.gmo.m
$dir/mpdevil.mo.m;
echo "installing ./$lang.gmo.m as"
"$dir/mpdevil.mo.m";
else
true;
fi;
fi;
done
installing de.gmo as /usr/local/share/locale/de/LC_MESSAGES/mpdevil.mo
make[1]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3/po'
make[1]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3'
make[2]: Entering directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3'
make[2]: Nothing to be done for 'install-exec-am'.
make[2]: Nothing to be done for 'install-data-am'.
make[2]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3'
make[1]: Leaving directory '/home/me/.local/share/Trash/files/mpdevil-0.8.3'

Thanks a lot for any help!

Read UNSYNCEDLYRICS

So mpdevil currently fetches lyrics from www.letras.mus.br
Some of my music is not listed on the site, but it does include in the metadata an UNSYNCEDLYRICS field containing the lyrics.
Could mpdevil use this as an additional source of lyrics?

Frozen during startup

Hi

I installed this on Debian using Flatpak. When I run it is in frozen state while "connecting". I have bunch of Mpd servers running on the network and on the machine running Mpdevil, and it is running at default port 6600 with interface "any"


latpak run org.mpdevil.mpdevil



Traceback (most recent call last):
  File "/app/bin/mpdevil", line 2202, in _on_reconnected
    self._refresh()
  File "/app/bin/mpdevil", line 2116, in _refresh
    artists=self._client.comp_list(self._settings.get_artist_type())
  File "/app/bin/mpdevil", line 677, in comp_list
    native_list=self.list(*args)
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 469, in mpd_command
    return wrapper(self, name, args, callback)
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 532, in _execute
    return retval()
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 457, in command_callback
    res = self._wrap_iterator(res)
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 706, in _wrap_iterator
    return list(iterator)
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 240, in _parse_objects
    for key, value in self._parse_pairs(lines):
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 235, in _parse_pairs
    for line in lines:
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 586, in _read_lines
    line = self._read_line()
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 571, in _read_line
    raise ConnectionError("Connection lost while reading line")
mpd.base.ConnectionError: Connection lost while reading line
Traceback (most recent call last):
  File "/app/bin/mpdevil", line 1919, in _on_reconnected
    for tag in self._client.tagtypes():
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 469, in mpd_command
    return wrapper(self, name, args, callback)
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 530, in _execute
    self._write_command(command, args)
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 565, in _write_command
    self._write_line(cmd)
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 537, in _write_line
    self._wfile.write("{}\n".format(line))
  File "/app/lib/python3.8/site-packages/mpd/base.py", line 479, in _dummy
    raise ConnectionError("Not connected")
mpd.base.ConnectionError: Not connected



```



thanks

Display albumartistsort instead of albumartist on the left pane

The left pane sorts the album artists by albumartist_sort, but it displays every credit they've been given as well.

This is very confusing as the albums contained in every entry don't make sense to me.

If we could optionally merge using the albumartistsort and mb_albumid tags it'd work perfectly. Aditionally we could customize the appearance of our library without messing up the scrobbling to Last.fm.

The albumartistsort tags are also linked to the MBIDs the same way as the albumartist tags are.

[Not that I scrobble to Last.fm anymore. It's a mess.]

Ignore letter case for (album) artists

Artists Foo and far are grouped separately in the left bar. The letter casing shouldn't matter here.

Note: Ignoring diacritics might not be a good idea since depending on the language it might represent different letters.
Further investigation leads to https://en.wikipedia.org/wiki/Collation which suggests that it might not be trivial to implement this. Perhaps there's a library that can be used here instead?

dependency issue python3-mpd

Thanks for the solid player!

Runs nicely on debian (mobian on the pinephone) but the .deb installer wants to install python3-mpd via apt which is not the mpd2 needed to run the application.

I fixed it by installing python-mpd2 via pip.

Settings schema does not contain a key named 'regex'

Thank you for your good work, which I have enjoyed daily for some time now.

I am excited to see that you have finished a new version. It seems to install fine with

sudo apt -y install ./mpdevil_0.9.1-1_all.deb

on my Raspberry Pi 4B with Raspberry Pi O, but when attempting to run, I get

(mpdevil:2093): GLib-GIO-ERROR **: 23:30:07.618: Settings schema 'org.mpdevil' does not contain a key named 'regex'
Sporings-/stoppunkts-felle

Please direct me what to do.

Previous Media key behavior

Feature request: Allow Previous media key to rewind to start of track (configurable in Settings for users who prefer old behavior).

Rewind behavior: when clicked once at any point, it should rewind to the start of track, and only if it gets clicked again in a short period of time, it should go to previous track (this allows any track to be manually repeated more than once). For reference, Clementine Music Player has this behavior.

Feature Request: Fast way to open an Album/Song in the default file browser

I'm often in the situation that I find an issue in my tags like duplicate artists because of mismatched capitalization in the artist name.
Finding the album can be a bit annoying because of the way I sort my music (basically by 'source' e.g Web-DL, CD rip, Vinyl Rip and so on, which means the same artist can be in multiple locations).

It would be nice if there was an option to open an album or a song in the default filebrowser. Alternatively making it possible to copy the file name from the context menu of a song would be helpful as well.

mpdevil v0.3 does not start with error message

Please refer to the followings.

Traceback (most recent call last):
  File "/usr/local/bin/mpdevil", line 1605, in <module>
    app = mpdevil()
  File "/usr/local/bin/mpdevil", line 1563, in __init__
    super().__init__(*args, application_id="org.mpdevil", flags=Gio.ApplicationFlags.FLAGS_NONE, **kwargs)
TypeError: super() takes at least 1 argument (0 given)

App breakage with unknown cover formats

Found by trying to use "all artists".
Version: 1.2.1, flatpak
Log:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/app/bin/mpdevil", line 2378, in render_covers
    album["cover"]=ClientHelper.binary_to_pixbuf(album["cover_binary"], size)
  File "/app/bin/mpdevil", line 506, in binary_to_pixbuf
    loader.write(binary)
gi.repository.GLib.Error: gdk-pixbuf-error-quark: Unrecognized image file format (3)

Local Lyrics (lrc)

Searching for lyrics (lrc files) in music directory, would be nice, because not all the songs I have, have their lyrics on that site

directory browsing

Would it be possible/acceptable to add a feature for directory/filesystem based browsing?

Change default album artwork

Hi! First of all, this program deserves more attention, it's great!

But I have one little request and don't want to create a whole pull request for it:

Could you please change the value of the default icon for albums with no available artwork from the application icon to "media-optical" (rendering of a CD)?
Position: bin/mpdevil.py:689:76

This looks more pleasing and it also makes more sense to show a plain CD for tracks without artwork than the little red devil, in my opinion.

LG

Possibly port to MacOS?

I really like this program, far better than any other gui client for mac (or linux ftm). I have this running on my Thinkpad which has Arch installed, but I really would like to run this on my new Macbook. How could this possibly be done? Im more than willing to help

Feature Request: Add whole library to playlist

Sometimes when I don't know what I want to listen to I like to add my whole library to the playlist, hit shuffle and see what comes up.
As far as I can tell that is currently not possible with mpdevil.

cannot import name 'base' error

pi@raspberrypi:~ $ mpdevil
Traceback (most recent call last): File "/usr/bin/mpdevil", line 24, in <module> from mpd import MPDClient, base as MPDBase ImportError: cannot import name 'base'

From installing on rpi. I have python3-mpd and python-mpd2 installed

mpdevil fails if there are multiple artists tags (even multiple album artist tags)

If a file have multiple artist tags (separated by NULL per id3v2.4 specification), they aren't correctly recognized by mpdevil. They are displayed right in the left artist sidebar, but adding them to the playlist results in error like this:

Traceback (most recent call last):
  File "/usr/bin/mpdevil", line 1696, in on_playlist_changed
    self.store.set(treeiter, 0, track, 1, disc, 2, title, 3, artist, 4, album, 5, duration, 6, year, 7, genre, 8, song["file"], 9, Pango.Weight.BOOK)
  File "/usr/lib/python3.8/site-packages/gi/overrides/Gtk.py", line 1051, in set
    _set_lists(args[::2], args[1::2])
  File "/usr/lib/python3.8/site-packages/gi/overrides/Gtk.py", line 1045, in _set_lists
    values.append(self._convert_value(col_num, value))
  File "/usr/lib/python3.8/site-packages/gi/overrides/Gtk.py", line 914, in _convert_value
    return GObject.Value(self.get_column_type(column), value)
  File "/usr/lib/python3.8/site-packages/gi/overrides/GObject.py", line 210, in __init__
    self.set_value(py_value)
  File "/usr/lib/python3.8/site-packages/gi/overrides/GObject.py", line 249, in set_value
    raise TypeError("Expected string but got %s%s" %
TypeError: Expected string but got ['Melissa Benoist', 'Grant Gustin']<class 'list'>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/mpdevil", line 1698, in on_playlist_changed
    self.store.append([track, disc, title, artist, album, duration, year, genre, song["file"], Pango.Weight.BOOK])
  File "/usr/lib/python3.8/site-packages/gi/overrides/Gtk.py", line 997, in append
    return self._do_insert(-1, row)
  File "/usr/lib/python3.8/site-packages/gi/overrides/Gtk.py", line 988, in _do_insert
    row, columns = self._convert_row(row)
  File "/usr/lib/python3.8/site-packages/gi/overrides/Gtk.py", line 900, in _convert_row
    result.append(self._convert_value(cur_col, value))
  File "/usr/lib/python3.8/site-packages/gi/overrides/Gtk.py", line 914, in _convert_value
    return GObject.Value(self.get_column_type(column), value)
  File "/usr/lib/python3.8/site-packages/gi/overrides/GObject.py", line 210, in __init__
    self.set_value(py_value)
  File "/usr/lib/python3.8/site-packages/gi/overrides/GObject.py", line 249, in set_value
    raise TypeError("Expected string but got %s%s" %
TypeError: Expected string but got ['Melissa Benoist', 'Grant Gustin']<class 'list'>

They are correctly recognized and sorted by MPD and mpdevil sends the correct playlist to MPD and all songs are played. Only the playlist box stucks in a state, where for e.g. songs from the previous album are listed.

You can see the issue on the screenshot below:

Screenshot

That's the right tracklisting:

Screenshot

Add an entire artist to playlist

Currently it is only possible to add an album or track to the queue. If you wanna listen an entire artist, you are forced to click on every album with a middle mouse click. That's not a problem if you have just a few albums, but a bit annoying with more albums.

Maybe there is a convenient to add such an shortcut, interaction, click action, whatever โ€ฆ to add a whole artist?

Crash while searching

If mpdevil gets disconnected from mpd while searching, the search bar is unusable/greyed-out after reconnecting, requiring a program restart in order to unblock it again.

Steps to reproduce:
Search for something and have mpd disconnect while in progress.
Reconnect.
Search bar is greyed out with previous search text.

Extra info:
Before mpdevil gets disconnected, mpd logs show:

"exception: error on client 22: Output buffer is full"

I've asked over #mpd IRC channel and someone suggested that it's most likely a MPD client bug.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.