[Solved] [Linux] Spotify 0.9.4, no Local Files reproduction after system update

Solved!
Reply

Re: [Linux] spotifuggle 0.9.4, no Local Files reproduction after system update

leamas
Community Legend

I still think this is a packaging issue. ffmpeg 1.1 is certainly not the latest version, rpmfusion uses 2.1.1, upstream has released the 2.1.4 tarball. Yet rpmfusion is able to provide the proper compatibility  libraries in ffmpeg-compat; there is really no point updating those from current state.

 

If rpmfusion can I guess Gentoo can as well.

 

That said, if they just use a dlopen() without quirks the they will first try loading from same directory as the binary (it has a $ORIGIN rpath). So if you could get the hands on the proper 0.52/0.53 libraries I  think they will be used if put in same place as where you have the binary. It certainly works for normal, dynamic loading done by ld.so.

 

I agree that that it would be better if the devs answered this. It's just that they so far doesn't; it's kind of a habit. To be frank, I doubt they even read it - there are no signs  whatsoever on that so far.

 

--alec

Highlighted

Re: [Linux] Spotify 0.9.4, no Local Files reproduction after system update

sdlion
Music Fan

Ok, I'll try compiling a ffmpeg version that uses libavcodec.so.53 and place it on the same folder as spotify.

 

The last libavcodec.so.53 that I compiled was from libav not from ffmpeg, so if Spotify is really dependant on ffmpeg, this might work.

 

I'll update later to post the results!

 

-- Edited Subject, for some reason it said "spotifuggle" --

Re: [Linux] Spotify 0.9.4, no Local Files reproduction after system update

sdlion
Music Fan

BTW

https://www.archlinux.org/packages/extra/i686/ffmpeg-compat/

 

and

 

https://www.archlinux.org/packages/extra/x86-64/ffmpeg-compat/

 

Comes with just the shared libraries (.53) and their headers.


Pasted them on spotify-client folder and didn't worked either.

 

# ls -l
total 31660
-rw-r--r-- 1 user user     3915 oct 10 03:22 changelog
drwxr-xr-x 3 user user     4096 feb 20 09:38 Data
drwxr-xr-x 2 user user     4096 oct 10 03:39 Icons
lrwxrwxrwx 1 root root       23 feb 26 23:13 libavcodec.so -> libavcodec.so.53.61.100
lrwxrwxrwx 1 root root       23 feb 26 23:13 libavcodec.so.53 -> libavcodec.so.53.61.100
-rwxr-xr-x 1 root root  7122356 feb 26 23:13 libavcodec.so.53.61.100
lrwxrwxrwx 1 root root       23 feb 26 23:13 libavdevice.so -> libavdevice.so.53.4.100
lrwxrwxrwx 1 root root       23 feb 26 23:13 libavdevice.so.53 -> libavdevice.so.53.4.100
-rwxr-xr-x 1 root root    59804 feb 26 23:13 libavdevice.so.53.4.100
lrwxrwxrwx 1 root root       23 feb 26 23:13 libavfilter.so -> libavfilter.so.2.61.100
lrwxrwxrwx 1 root root       23 feb 26 23:13 libavfilter.so.2 -> libavfilter.so.2.61.100
-rwxr-xr-x 1 root root   555124 feb 26 23:13 libavfilter.so.2.61.100
lrwxrwxrwx 1 root root       24 feb 26 23:13 libavformat.so -> libavformat.so.53.32.100
lrwxrwxrwx 1 root root       24 feb 26 23:13 libavformat.so.53 -> libavformat.so.53.32.100
-rwxr-xr-x 1 root root  1343232 feb 26 23:13 libavformat.so.53.32.100
lrwxrwxrwx 1 root root       22 feb 26 23:13 libavutil.so -> libavutil.so.51.35.100
lrwxrwxrwx 1 root root       22 feb 26 23:13 libavutil.so.51 -> libavutil.so.51.35.100
-rwxr-xr-x 1 root root   157052 feb 26 23:13 libavutil.so.51.35.100
lrwxrwxrwx 1 root root       27 feb 18 09:57 libcrypto.so.0.9.8 -> /usr/lib/libcrypto.so.0.9.8
lrwxrwxrwx 1 root root       20 feb 18 09:57 libnspr4.so.0d -> /usr/lib/libnspr4.so
lrwxrwxrwx 1 root root       19 feb 18 09:57 libnss3.so.1d -> /usr/lib/libnss3.so
lrwxrwxrwx 1 root root       23 feb 18 09:57 libnssutil3.so.1d -> /usr/lib/libnssutil3.so
lrwxrwxrwx 1 root root       19 feb 18 09:57 libplc4.so.0d -> /usr/lib/libplc4.so
lrwxrwxrwx 1 root root       20 feb 18 09:57 libplds4.so.0d -> /usr/lib/libplds4.so
lrwxrwxrwx 1 root root       23 feb 26 23:13 libpostproc.so -> libpostproc.so.52.0.100
lrwxrwxrwx 1 root root       23 feb 26 23:13 libpostproc.so.52 -> libpostproc.so.52.0.100
-rwxr-xr-x 1 root root    99688 feb 26 23:13 libpostproc.so.52.0.100
lrwxrwxrwx 1 root root       21 feb 18 09:57 libsmime3.so.1d -> /usr/lib/libsmime3.so
lrwxrwxrwx 1 root root       19 feb 18 09:57 libssl3.so.1d -> /usr/lib/libssl3.so
lrwxrwxrwx 1 root root       24 feb 18 09:57 libssl.so.0.9.8 -> /usr/lib/libssl.so.0.9.8
lrwxrwxrwx 1 root root       24 feb 26 23:13 libswresample.so -> libswresample.so.0.6.100
lrwxrwxrwx 1 root root       24 feb 26 23:13 libswresample.so.0 -> libswresample.so.0.6.100
-rwxr-xr-x 1 root root    38248 feb 26 23:13 libswresample.so.0.6.100
lrwxrwxrwx 1 root root       21 feb 26 23:13 libswscale.so -> libswscale.so.2.1.100
lrwxrwxrwx 1 root root       21 feb 26 23:13 libswscale.so.2 -> libswscale.so.2.1.100
-rwxr-xr-x 1 root root   320872 feb 26 23:13 libswscale.so.2.1.100
-rw-r--r-- 1 user user   218801 oct  9 11:56 licenses.xhtml
-rwxr-xr-x 1 user user      978 feb 18 11:01 linklibs-fedora.sh
-rwxr-xr-x 1 user user      863 oct 10 03:22 linklibs.sh
drwxr-xr-x 2 root root     4096 feb 26 23:13 pkgconfig
-rw-r--r-- 1 user user     2285 oct  9 11:56 readme.fedora
-rwxr-xr-x 1 user user      980 sep 30 08:45 register.sh
-rwxr-xr-x 1 user user 22444348 oct 10 03:39 spotify
-rw-r--r-- 1 user user      254 sep 30 08:45 spotify.desktop
-rwxr-xr-x 1 user user      883 sep 30 08:45 unregister.sh

 

Re: [Linux] Spotify 0.9.4, no Local Files reproduction after system update

sdlion
Music Fan

I got a lot more useful lot of information through strace

 

As you supposed it's using ldopen and it first checks on /opt/spotify/spotify-client and then /opt/spotify/spotify-client/Data, finally it those places fail then it goes to /usr/lib


It seems I should go and get few more shared libraries that are missing. But I think these are dependencies of ffmpeg-compat not from spotify itself.

 

Digest:

 

libavcodec.so.53 (Found using ffmpeg compat)
libavutil.so.51 (Found using ffmpeg compat)
libva.so.1 (missing)
libxvidcore.so.4 (missing)
libx264.so.138 (missing)
libvpx.so.1 (missing)
libtheoraenc.so.1 (missing)
libtheoradec.so.1 (missing)
libspeex.so.1 (missing)
libschroedinger-1.0.so.0 (missing)
libopenjpeg.so.1 (missing)
libavcodec.so.52 (missing)
\17v\265\230\257a\315\256\246 (??? missing, in Hex: 3d6a9857b355ca0) 

 

 

write(2, "05:48:04.376 I [audio_driver_lin"..., 6705:48:04.376 I [audio_driver_linux.cpp:18       ] Using PulseAudio
) = 67
open("/opt/spotify/spotify-client/libavcodec.so.53", O_RDONLY|O_CLOEXEC) = 141
read(141, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0\251\5\0004\0\0\0"..., 512) = 512
fstat64(141, {st_mode=S_IFREG|0755, st_size=7122356, ...}) = 0
mmap2(NULL, 12825696, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 141, 0) = 0x9a7ac000
mmap2(0x9ae67000, 69632, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 141, 0x6ba000) = 0x9ae67000
mmap2(0x9ae78000, 5698656, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x9ae78000
close(141)                              = 0
open("/opt/spotify/spotify-client/libavutil.so.51", O_RDONLY|O_CLOEXEC) = 141
read(141, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 e\0\0004\0\0\0"..., 512) = 512
fstat64(141, {st_mode=S_IFREG|0755, st_size=157052, ...}) = 0
mmap2(NULL, 174792, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 141, 0) = 0xa310d000
mmap2(0xa3133000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 141, 0x25000) = 0xa3133000
mmap2(0xa3135000, 10952, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xa3135000
close(141)                              = 0
open("/opt/spotify/spotify-client/libva.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/libva.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 141
fstat64(141, {st_mode=S_IFREG|0644, st_size=205757, ...}) = 0
mmap2(NULL, 205757, PROT_READ, MAP_PRIVATE, 141, 0) = 0xa2099000
close(141)                              = 0
open("/usr/lib/libva.so.1", O_RDONLY|O_CLOEXEC) = 141
read(141, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300'\0\0004\0\0\0"..., 512) = 512
fstat64(141, {st_mode=S_IFREG|0755, st_size=71260, ...}) = 0
mmap2(NULL, 90912, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 141, 0) = 0xa2082000
mmap2(0xa2093000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 141, 0x10000) = 0xa2093000
mmap2(0xa2095000, 13088, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xa2095000
close(141)                              = 0
open("/opt/spotify/spotify-client/libxvidcore.so.4", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/libxvidcore.so.4", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libxvidcore.so.4", O_RDONLY|O_CLOEXEC) = 141
read(141, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20\215\0\0004\0\0\0"..., 512) = 512
fstat64(141, {st_mode=S_IFREG|0755, st_size=743832, ...}) = 0
mmap2(NULL, 1178292, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 141, 0) = 0xa1f62000
mmap2(0xa200e000, 45056, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 141, 0xab000) = 0xa200e000
mmap2(0xa2019000, 428724, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xa2019000
close(141)                              = 0
open("/opt/spotify/spotify-client/libx264.so.138", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/libx264.so.138", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libx264.so.138", O_RDONLY|O_CLOEXEC) = 141
read(141, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260\234\0\0004\0\0\0"..., 512) = 512
fstat64(141, {st_mode=S_IFREG|0755, st_size=968636, ...}) = 0
mmap2(NULL, 1475488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 141, 0) = 0xa1df9000
mprotect(0xa1ee4000, 4096, PROT_NONE)   = 0
mmap2(0xa1ee5000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 141, 0xeb000) = 0xa1ee5000
mmap2(0xa1ee7000, 500640, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xa1ee7000
close(141)                              = 0
open("/opt/spotify/spotify-client/libvpx.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/libvpx.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libvpx.so.1", O_RDONLY|O_CLOEXEC) = 141
read(141, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@6\0\0004\0\0\0"..., 512) = 512
fstat64(141, {st_mode=S_IFREG|0755, st_size=985044, ...}) = 0
mmap2(NULL, 1269624, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 141, 0) = 0x9a676000
mmap2(0x9a764000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 141, 0xee000) = 0x9a764000
mmap2(0x9a767000, 282488, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x9a767000
close(141)                              = 0
open("/opt/spotify/spotify-client/libtheoraenc.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/libtheoraenc.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libtheoraenc.so.1", O_RDONLY|O_CLOEXEC) = 141
read(141, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\360\20\0\0004\0\0\0"..., 512) = 512
fstat64(141, {st_mode=S_IFREG|0755, st_size=189952, ...}) = 0
mmap2(NULL, 188568, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 141, 0) = 0x9a647000
mmap2(0x9a674000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 141, 0x2d000) = 0x9a674000
close(141)                              = 0
open("/opt/spotify/spotify-client/libtheoradec.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/libtheoradec.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libtheoradec.so.1", O_RDONLY|O_CLOEXEC) = 141
read(141, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P\23\0\0004\0\0\0"..., 512) = 512
fstat64(141, {st_mode=S_IFREG|0755, st_size=67072, ...}) = 0
mmap2(NULL, 69780, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 141, 0) = 0x9a635000
mmap2(0x9a645000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 141, 0xf000) = 0x9a645000
close(141)                              = 0
open("/opt/spotify/spotify-client/libspeex.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/libspeex.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libspeex.so.1", O_RDONLY|O_CLOEXEC) = 141
read(141, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300\34\0\0004\0\0\0"..., 512) = 512
fstat64(141, {st_mode=S_IFREG|0755, st_size=91604, ...}) = 0
mmap2(NULL, 94372, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 141, 0) = 0x9a61d000
mmap2(0x9a633000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 141, 0x15000) = 0x9a633000
close(141)                              = 0
open("/opt/spotify/spotify-client/libschroedinger-1.0.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/libschroedinger-1.0.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libschroedinger-1.0.so.0", O_RDONLY|O_CLOEXEC) = 141
read(141, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0\377\0\0004\0\0\0"..., 512) = 512
fstat64(141, {st_mode=S_IFREG|0755, st_size=738676, ...}) = 0
mmap2(NULL, 742808, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 141, 0) = 0x9a567000
mmap2(0x9a619000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 141, 0xb1000) = 0x9a619000
close(141)                              = 0
open("/opt/spotify/spotify-client/libopenjpeg.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/libopenjpeg.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libopenjpeg.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libopenjpeg.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
munmap(0xa2099000, 205757)              = 0
munmap(0x9a7ac000, 12825696)            = 0
munmap(0xa310d000, 174792)              = 0
munmap(0xa2082000, 90912)               = 0
munmap(0xa1f62000, 1178292)             = 0
munmap(0xa1df9000, 1475488)             = 0
munmap(0x9a676000, 1269624)             = 0
munmap(0x9a647000, 188568)              = 0
munmap(0x9a635000, 69780)               = 0
munmap(0x9a61d000, 94372)               = 0
munmap(0x9a567000, 742808)              = 0
open("/opt/spotify/spotify-client/libavcodec.so.52", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/libavcodec.so.52", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 141
fstat64(141, {st_mode=S_IFREG|0644, st_size=205757, ...}) = 0
mmap2(NULL, 205757, PROT_READ, MAP_PRIVATE, 141, 0) = 0xa3105000
close(141)                              = 0
open("/lib/libavcodec.so.52", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libavcodec.so.52", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
munmap(0xa3105000, 205757)              = 0
open("/opt/spotify/spotify-client/\17v\265\230\257a\315\256\246", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/spotify/spotify-client/Data/\17v\265\230\257a\315\256\246", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 141
fstat64(141, {st_mode=S_IFREG|0644, st_size=205757, ...}) = 0
mmap2(NULL, 205757, PROT_READ, MAP_PRIVATE, 141, 0) = 0xa3105000
close(141)                              = 0
open("/lib/\17v\265\230\257a\315\256\246", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/\17v\265\230\257a\315\256\246", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
munmap(0xa3105000, 205757)              = 0
clock_gettime(CLOCK_MONOTONIC, {7209, 384498944}) = 0
clock_gettime(CLOCK_MONOTONIC, {7209, 384536402}) = 0
gettid()                                = 8966
gettid()                                = 8966
gettid()                                = 8966
gettid()                                = 8966
gettid()                                = 8966
gettid()                                = 8966
gettid()                                = 8966
gettid()                                = 8966
gettid()                                = 8966
clock_gettime(CLOCK_MONOTONIC, {7209, 385267208}) = 0

 

Solution!

Re: [Linux] Spotify 0.9.4, no Local Files reproduction after system update

sdlion
Music Fan

Solved!!


It seems what it's missing is libavutil.so.51
The libraries that appeared missing from the test with ffmpeg-compat libraries seem that were dependencies from that libavutil, but it worked just fine with the shared libraries that libav 0.8.10 builds when it's compiled from source with the --enable-shared flag (./configure --help will give you all the options to enable different codecs).

 

Copied libavcodec.so.53 and strace showed that it was still calling to libavutil.so.51. Copied that too and that did the trick.

 

The names seems that are hardcoded so I didn't need to create symlinks without the soname version.

 

This could mean that if you compile your libav-0.8.10 without installing it (preferred method) one could just add the paths to these libraries in a file in /etc/ld.so.conf.d/ to make them available without copying the whole files to spotify's directory. But maybe it's not a good idea since some other program might want to use them and conflict with libav-0.9.

 

Libav-0.8.10 sources http://libav.org/releases/libav-0.8.10.tar.gz 

 

First configure and be sure to install first the external libraries (with your package manager) that you will enable

 

(this were my flags, you can use the ones that suits you better)

./configure --enable-shared --enable-nonfree --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libpulse --enable-libx264

and make

 

files to symlink or copy to the spotify-client directoy:
libavcodec/libavcodec.so.53

libavutil/libavutil.so.51

Re: [Linux] Spotify 0.9.4, no Local Files reproduction after system update

leamas
Community Legend

Amazing job. Really! Thanks!

 

--alec

Re: [Linux] Spotify 0.9.4, no Local Files reproduction after system update

LinuxNerd
Casual Listener

Excellent work, my friend!

SUGGESTED POSTS