Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
ad1b6ef0
Commit
ad1b6ef0
authored
Jan 26, 2015
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
{playlist,input}/despotify: remove defunct plugin
parent
ed5c6be2
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
3 additions
and
810 deletions
+3
-810
INSTALL
INSTALL
+0
-3
Makefile.am
Makefile.am
+0
-31
NEWS
NEWS
+1
-0
configure.ac
configure.ac
+0
-14
mpd.conf.5
doc/mpd.conf.5
+0
-10
user.xml
doc/user.xml
+2
-84
DespotifyUtils.cxx
src/DespotifyUtils.cxx
+0
-154
DespotifyUtils.hxx
src/DespotifyUtils.hxx
+0
-71
InputRegistry.cxx
src/InputRegistry.cxx
+0
-7
PlaylistRegistry.cxx
src/PlaylistRegistry.cxx
+0
-4
DespotifyInputPlugin.cxx
src/input/DespotifyInputPlugin.cxx
+0
-234
DespotifyInputPlugin.hxx
src/input/DespotifyInputPlugin.hxx
+0
-25
ls.cxx
src/ls.cxx
+0
-3
DespotifyPlaylistPlugin.cxx
src/playlist/DespotifyPlaylistPlugin.cxx
+0
-145
DespotifyPlaylistPlugin.hxx
src/playlist/DespotifyPlaylistPlugin.hxx
+0
-25
No files found.
INSTALL
View file @
ad1b6ef0
...
...
@@ -114,9 +114,6 @@ For WavPack playback.
libadplug - http://adplug.sourceforge.net/
For AdLib playback.
despotify - https://github.com/SimonKagstrom/despotify
For Spotify playback.
Optional Miscellaneous Dependencies
-----------------------------------
...
...
Makefile.am
View file @
ad1b6ef0
...
...
@@ -221,11 +221,6 @@ EXTRA_src_mpd_DEPENDENCIES = src/win32/mpd_win32_rc.$(OBJEXT)
src_mpd_LDFLAGS
=
-Wl
,src/win32/mpd_win32_rc.
$(OBJEXT)
endif
if
ENABLE_DESPOTIFY
src_mpd_SOURCES
+=
\
src/DespotifyUtils.cxx src/DespotifyUtils.hxx
endif
if
ENABLE_INOTIFY
src_mpd_SOURCES
+=
\
src/InotifyDomain.cxx src/InotifyDomain.hxx
\
...
...
@@ -770,7 +765,6 @@ libinput_a_CPPFLAGS = $(AM_CPPFLAGS) \
$(CURL_CFLAGS)
\
$(CDIO_PARANOIA_CFLAGS)
\
$(FFMPEG_CFLAGS)
\
$(DESPOTIFY_CFLAGS)
\
$(MMS_CFLAGS)
INPUT_LIBS
=
\
...
...
@@ -778,7 +772,6 @@ INPUT_LIBS = \
$(CURL_LIBS)
\
$(CDIO_PARANOIA_LIBS)
\
$(FFMPEG_LIBS)
\
$(DESPOTIFY_LIBS)
\
$(MMS_LIBS)
if
ENABLE_CURL
...
...
@@ -803,12 +796,6 @@ libinput_a_SOURCES += \
src/input/MmsInputPlugin.cxx src/input/MmsInputPlugin.hxx
endif
if
ENABLE_DESPOTIFY
libinput_a_SOURCES
+=
\
src/input/DespotifyInputPlugin.cxx
\
src/input/DespotifyInputPlugin.hxx
endif
liboutput_plugins_a_CPPFLAGS
=
$(AM_CPPFLAGS)
\
$(AO_CFLAGS)
\
...
...
@@ -989,12 +976,6 @@ PLAYLIST_LIBS = \
libplaylist_plugins.a
\
$(FLAC_LIBS)
if
ENABLE_DESPOTIFY
libplaylist_plugins_a_SOURCES
+=
\
src/playlist/DespotifyPlaylistPlugin.cxx
\
src/playlist/DespotifyPlaylistPlugin.hxx
endif
if
ENABLE_SOUNDCLOUD
libplaylist_plugins_a_SOURCES
+=
\
src/playlist/SoundCloudPlaylistPlugin.cxx
\
...
...
@@ -1185,10 +1166,6 @@ test_visit_archive_SOURCES = test/visit_archive.cxx \
src/IOThread.cxx
\
src/InputStream.cxx
if
ENABLE_DESPOTIFY
test_visit_archive_SOURCES
+=
src/DespotifyUtils.cxx
endif
endif
test_dump_text_file_LDADD
=
\
...
...
@@ -1313,14 +1290,6 @@ test_run_filter_SOURCES = test/run_filter.cxx \
src/ReplayGainInfo.cxx
\
src/AudioCompress/compress.c
if
ENABLE_DESPOTIFY
test_read_tags_SOURCES
+=
src/DespotifyUtils.cxx
test_run_input_SOURCES
+=
src/DespotifyUtils.cxx
test_dump_text_file_SOURCES
+=
src/DespotifyUtils.cxx
test_dump_playlist_SOURCES
+=
src/DespotifyUtils.cxx
test_run_decoder_SOURCES
+=
src/DespotifyUtils.cxx
endif
if
ENABLE_ENCODER
noinst_PROGRAMS
+=
test
/run_encoder
test_run_encoder_SOURCES
=
test
/run_encoder.cxx
\
...
...
NEWS
View file @
ad1b6ef0
ver 0.18.23 (not yet released)
* despotify: remove defunct plugin
* fix gcc 5.0 warnings
ver 0.18.22 (2014/01/14)
...
...
configure.ac
View file @
ad1b6ef0
...
...
@@ -276,11 +276,6 @@ AC_ARG_ENABLE(jack,
AC_SYS_LARGEFILE
AC_ARG_ENABLE(despotify,
AS_HELP_STRING([--enable-despotify],
[enable support for despotify (default: disable)]),,
[enable_despotify=no])
AC_ARG_ENABLE(soundcloud,
AS_HELP_STRING([--enable-soundcloud],
[enable support for soundcloud.com]),,
...
...
@@ -725,14 +720,6 @@ if test x$enable_curl = xyes; then
fi
AM_CONDITIONAL(ENABLE_CURL, test x$enable_curl = xyes)
dnl --------------------------------- Despotify ---------------------------------
MPD_AUTO_PKG(despotify, DESPOTIFY, [despotify],
[Despotify support], [despotify not found])
if test x$enable_despotify = xyes; then
AC_DEFINE(ENABLE_DESPOTIFY, 1, [Define when despotify is enabled])
fi
AM_CONDITIONAL(ENABLE_DESPOTIFY, test x$enable_despotify = xyes)
dnl --------------------------------- Soundcloud ------------------------------
if test x$enable_soundcloud != xno; then
PKG_CHECK_MODULES([YAJL], [yajl >= 2.0],
...
...
@@ -1588,7 +1575,6 @@ fi
printf '\nStreaming support:\n\t'
results(cdio_paranoia, [CDIO_PARANOIA])
results(curl,[CURL])
results(despotify,[Despotify])
results(soundcloud,[Soundcloud])
printf '\n\t'
results(mms,[MMS])
...
...
doc/mpd.conf.5
View file @
ad1b6ef0
...
...
@@ -274,16 +274,6 @@ of database.
Limit the depth of the directories being watched, 0 means only watch
the music directory itself. There is no limit by default.
.TP
.B despotify_user <name>
This specifies the user to use when logging in to Spotify using the despotify plugins.
.TP
.B despotify_password <name>
This specifies the password to use when logging in to Spotify using the despotify plugins.
.TP
.B despotify_high_bitrate <yes or no>
This specifies if the requested bitrate for Spotify should be high or not. Higher sounds
better but requires more processing and higher bandwidth. Default is yes.
.TP
.SH REQUIRED AUDIO OUTPUT PARAMETERS
.TP
.B type <type>
...
...
doc/user.xml
View file @
ad1b6ef0
...
...
@@ -220,9 +220,8 @@ systemctl start mpd.socket</programlisting>
</para>
<programlisting>
input {
plugin "despotify"
user "foo"
password "bar"
plugin "curl"
proxy "proxy.local"
}
</programlisting>
...
...
@@ -842,66 +841,6 @@ systemctl start mpd.socket</programlisting>
</tgroup>
</informaltable>
</section>
<section>
<title><varname>
despotify
</varname></title>
<para>
Plays
<ulink
url=
"http://www.spotify.com"
>
Spotify
</ulink>
tracks using the despotify
library. The despotify plugin uses a
<filename>
spt://
</filename>
URI and a Spotify
URL. So for example, you can add a song with:
</para>
<para>
<filename>
mpc add spt://spotify:track:5qENVY0YEdZ7fiuOax70x1
</filename>
</para>
<para>
You need a Spotify premium account to use this plugin, and you need
to setup username and password in the configuration file. The
configuration settings are global since the despotify playlist plugin
use the same settings.
</para>
<informaltable>
<tgroup
cols=
"2"
>
<thead>
<row>
<entry>
Setting
</entry>
<entry>
Description
</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<varname>
despotify_user
</varname>
</entry>
<entry>
Sets up the Spotify username (required)
</entry>
</row>
<row>
<entry>
<varname>
despotify_password
</varname>
</entry>
<entry>
Sets up the Spotify password (required)
</entry>
</row>
<row>
<entry>
<varname>
despotify_high_bitrate
</varname>
</entry>
<entry>
Set up if high bitrate should be used for Spotify tunes.
High bitrate sounds better but slow systems can have problems
with playback (default yes).
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</section>
</section>
<section>
...
...
@@ -2193,27 +2132,6 @@ systemctl start mpd.socket</programlisting>
playlist files.
</para>
</section>
<section>
<title><varname>
despotify
</varname></title>
<para>
Adds
<ulink
url=
"http://www.spotify.com/"
>
Spotify
</ulink>
playlists. Spotify playlists use the
<filename>
spt://
</filename>
URI,
and a Spotify playlist URL. So for example, you can load a playlist
with
</para>
<para>
<filename>
mpc load spt://spotify:user:simon.kagstrom:playlist:3SUwkOe5VbVHysZcidEZtH
</filename>
</para>
<para>
See the despotify input plugin for configuration options (username
and password needs to be setup)
</para>
</section>
</section>
</chapter>
</book>
src/DespotifyUtils.cxx
deleted
100644 → 0
View file @
ed5c6be2
/*
* Copyright (C) 2003-2013 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "DespotifyUtils.hxx"
#include "tag/Tag.hxx"
#include "ConfigGlobal.hxx"
#include "ConfigOption.hxx"
#include "util/Domain.hxx"
#include "Log.hxx"
extern
"C"
{
#include <despotify.h>
}
#include <stdio.h>
const
Domain
despotify_domain
(
"despotify"
);
static
struct
despotify_session
*
g_session
;
static
void
(
*
registered_callbacks
[
8
])(
struct
despotify_session
*
,
int
,
void
*
,
void
*
);
static
void
*
registered_callback_data
[
8
];
static
void
callback
(
struct
despotify_session
*
ds
,
int
sig
,
void
*
data
,
gcc_unused
void
*
callback_data
)
{
size_t
i
;
for
(
i
=
0
;
i
<
sizeof
(
registered_callbacks
)
/
sizeof
(
registered_callbacks
[
0
]);
i
++
)
{
void
(
*
cb
)(
struct
despotify_session
*
,
int
,
void
*
,
void
*
)
=
registered_callbacks
[
i
];
void
*
cb_data
=
registered_callback_data
[
i
];
if
(
cb
)
cb
(
ds
,
sig
,
data
,
cb_data
);
}
}
bool
mpd_despotify_register_callback
(
void
(
*
cb
)(
struct
despotify_session
*
,
int
,
void
*
,
void
*
),
void
*
cb_data
)
{
size_t
i
;
for
(
i
=
0
;
i
<
sizeof
(
registered_callbacks
)
/
sizeof
(
registered_callbacks
[
0
]);
i
++
)
{
if
(
!
registered_callbacks
[
i
])
{
registered_callbacks
[
i
]
=
cb
;
registered_callback_data
[
i
]
=
cb_data
;
return
true
;
}
}
return
false
;
}
void
mpd_despotify_unregister_callback
(
void
(
*
cb
)(
struct
despotify_session
*
,
int
,
void
*
,
void
*
))
{
size_t
i
;
for
(
i
=
0
;
i
<
sizeof
(
registered_callbacks
)
/
sizeof
(
registered_callbacks
[
0
]);
i
++
)
{
if
(
registered_callbacks
[
i
]
==
cb
)
{
registered_callbacks
[
i
]
=
nullptr
;
}
}
}
Tag
*
mpd_despotify_tag_from_track
(
struct
ds_track
*
track
)
{
char
tracknum
[
20
];
char
comment
[
80
];
char
date
[
20
];
Tag
*
tag
=
new
Tag
();
if
(
!
track
->
has_meta_data
)
return
tag
;
snprintf
(
tracknum
,
sizeof
(
tracknum
),
"%d"
,
track
->
tracknumber
);
snprintf
(
date
,
sizeof
(
date
),
"%d"
,
track
->
year
);
snprintf
(
comment
,
sizeof
(
comment
),
"Bitrate %d Kbps, %sgeo restricted"
,
track
->
file_bitrate
/
1000
,
track
->
geo_restricted
?
""
:
"not "
);
tag
->
AddItem
(
TAG_TITLE
,
track
->
title
);
tag
->
AddItem
(
TAG_ARTIST
,
track
->
artist
->
name
);
tag
->
AddItem
(
TAG_TRACK
,
tracknum
);
tag
->
AddItem
(
TAG_ALBUM
,
track
->
album
);
tag
->
AddItem
(
TAG_DATE
,
date
);
tag
->
AddItem
(
TAG_COMMENT
,
comment
);
tag
->
time
=
track
->
length
/
1000
;
return
tag
;
}
struct
despotify_session
*
mpd_despotify_get_session
(
void
)
{
const
char
*
user
;
const
char
*
passwd
;
bool
high_bitrate
;
if
(
g_session
)
return
g_session
;
user
=
config_get_string
(
CONF_DESPOTIFY_USER
,
nullptr
);
passwd
=
config_get_string
(
CONF_DESPOTIFY_PASSWORD
,
nullptr
);
high_bitrate
=
config_get_bool
(
CONF_DESPOTIFY_HIGH_BITRATE
,
true
);
if
(
user
==
nullptr
||
passwd
==
nullptr
)
{
LogDebug
(
despotify_domain
,
"disabling despotify because account is not configured"
);
return
nullptr
;
}
if
(
!
despotify_init
())
{
LogWarning
(
despotify_domain
,
"Can't initialize despotify"
);
return
nullptr
;
}
g_session
=
despotify_init_client
(
callback
,
nullptr
,
high_bitrate
,
true
);
if
(
!
g_session
)
{
LogWarning
(
despotify_domain
,
"Can't initialize despotify client"
);
return
nullptr
;
}
if
(
!
despotify_authenticate
(
g_session
,
user
,
passwd
))
{
LogWarning
(
despotify_domain
,
"Can't authenticate despotify session"
);
despotify_exit
(
g_session
);
return
nullptr
;
}
return
g_session
;
}
src/DespotifyUtils.hxx
deleted
100644 → 0
View file @
ed5c6be2
/*
* Copyright (C) 2003-2013 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef MPD_DESPOTIFY_H
#define MPD_DESPOTIFY_H
struct
Tag
;
struct
despotify_session
;
struct
ds_track
;
extern
const
class
Domain
despotify_domain
;
/**
* Return the current despotify session.
*
* If the session isn't initialized, this function will initialize
* it and connect to Spotify.
*
* @return a pointer to the despotify session, or nullptr if it can't
* be initialized (e.g., if the configuration isn't supplied)
*/
struct
despotify_session
*
mpd_despotify_get_session
(
void
);
/**
* Create a MPD tags structure from a spotify track
*
* @param track the track to convert
*
* @return a pointer to the filled in tags structure
*/
Tag
*
mpd_despotify_tag_from_track
(
struct
ds_track
*
track
);
/**
* Register a despotify callback.
*
* Despotify calls this e.g., when a track ends.
*
* @param cb the callback
* @param cb_data the data to pass to the callback
*
* @return true if the callback could be registered
*/
bool
mpd_despotify_register_callback
(
void
(
*
cb
)(
struct
despotify_session
*
,
int
,
void
*
,
void
*
),
void
*
cb_data
);
/**
* Unregister a despotify callback.
*
* @param cb the callback to unregister.
*/
void
mpd_despotify_unregister_callback
(
void
(
*
cb
)(
struct
despotify_session
*
,
int
,
void
*
,
void
*
));
#endif
src/InputRegistry.cxx
View file @
ad1b6ef0
...
...
@@ -42,10 +42,6 @@
#include "input/CdioParanoiaInputPlugin.hxx"
#endif
#ifdef ENABLE_DESPOTIFY
#include "input/DespotifyInputPlugin.hxx"
#endif
const
InputPlugin
*
const
input_plugins
[]
=
{
&
input_plugin_file
,
#ifdef ENABLE_ARCHIVE
...
...
@@ -63,9 +59,6 @@ const InputPlugin *const input_plugins[] = {
#ifdef ENABLE_CDIO_PARANOIA
&
input_plugin_cdio_paranoia
,
#endif
#ifdef ENABLE_DESPOTIFY
&
input_plugin_despotify
,
#endif
nullptr
};
...
...
src/PlaylistRegistry.cxx
View file @
ad1b6ef0
...
...
@@ -23,7 +23,6 @@
#include "playlist/ExtM3uPlaylistPlugin.hxx"
#include "playlist/M3uPlaylistPlugin.hxx"
#include "playlist/XspfPlaylistPlugin.hxx"
#include "playlist/DespotifyPlaylistPlugin.hxx"
#include "playlist/SoundCloudPlaylistPlugin.hxx"
#include "playlist/PlsPlaylistPlugin.hxx"
#include "playlist/AsxPlaylistPlugin.hxx"
...
...
@@ -52,9 +51,6 @@ const struct playlist_plugin *const playlist_plugins[] = {
&
pls_playlist_plugin
,
&
asx_playlist_plugin
,
&
rss_playlist_plugin
,
#ifdef ENABLE_DESPOTIFY
&
despotify_playlist_plugin
,
#endif
#ifdef ENABLE_SOUNDCLOUD
&
soundcloud_playlist_plugin
,
#endif
...
...
src/input/DespotifyInputPlugin.cxx
deleted
100644 → 0
View file @
ed5c6be2
/*
* Copyright (C) 2011-2013 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "config.h"
#include "DespotifyInputPlugin.hxx"
#include "DespotifyUtils.hxx"
#include "InputStream.hxx"
#include "InputPlugin.hxx"
#include "tag/Tag.hxx"
#include "Log.hxx"
extern
"C"
{
#include <despotify.h>
}
#include <glib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
struct
DespotifyInputStream
{
InputStream
base
;
struct
despotify_session
*
session
;
struct
ds_track
*
track
;
Tag
*
tag
;
struct
ds_pcm_data
pcm
;
size_t
len_available
;
bool
eof
;
DespotifyInputStream
(
const
char
*
uri
,
Mutex
&
mutex
,
Cond
&
cond
,
despotify_session
*
_session
,
ds_track
*
_track
)
:
base
(
input_plugin_despotify
,
uri
,
mutex
,
cond
),
session
(
_session
),
track
(
_track
),
tag
(
mpd_despotify_tag_from_track
(
track
)),
len_available
(
0
),
eof
(
false
)
{
memset
(
&
pcm
,
0
,
sizeof
(
pcm
));
/* Despotify outputs pcm data */
base
.
mime
=
"audio/x-mpd-cdda-pcm"
;
base
.
ready
=
true
;
}
~
DespotifyInputStream
()
{
delete
tag
;
despotify_free_track
(
track
);
}
};
static
void
refill_buffer
(
DespotifyInputStream
*
ctx
)
{
/* Wait until there is data */
while
(
1
)
{
int
rc
=
despotify_get_pcm
(
ctx
->
session
,
&
ctx
->
pcm
);
if
(
rc
==
0
&&
ctx
->
pcm
.
len
)
{
ctx
->
len_available
=
ctx
->
pcm
.
len
;
break
;
}
if
(
ctx
->
eof
==
true
)
break
;
if
(
rc
<
0
)
{
LogDebug
(
despotify_domain
,
"despotify_get_pcm error"
);
ctx
->
eof
=
true
;
break
;
}
/* Wait a while until next iteration */
usleep
(
50
*
1000
);
}
}
static
void
callback
(
gcc_unused
struct
despotify_session
*
ds
,
int
sig
,
gcc_unused
void
*
data
,
void
*
callback_data
)
{
DespotifyInputStream
*
ctx
=
(
DespotifyInputStream
*
)
callback_data
;
switch
(
sig
)
{
case
DESPOTIFY_NEW_TRACK
:
break
;
case
DESPOTIFY_TIME_TELL
:
break
;
case
DESPOTIFY_TRACK_PLAY_ERROR
:
LogWarning
(
despotify_domain
,
"Track play error"
);
ctx
->
eof
=
true
;
ctx
->
len_available
=
0
;
break
;
case
DESPOTIFY_END_OF_PLAYLIST
:
ctx
->
eof
=
true
;
FormatDebug
(
despotify_domain
,
"End of playlist: %d"
,
ctx
->
eof
);
break
;
}
}
static
InputStream
*
input_despotify_open
(
const
char
*
url
,
Mutex
&
mutex
,
Cond
&
cond
,
gcc_unused
Error
&
error
)
{
struct
despotify_session
*
session
;
struct
ds_link
*
ds_link
;
struct
ds_track
*
track
;
if
(
!
g_str_has_prefix
(
url
,
"spt://"
))
return
nullptr
;
session
=
mpd_despotify_get_session
();
if
(
!
session
)
return
nullptr
;
ds_link
=
despotify_link_from_uri
(
url
+
6
);
if
(
!
ds_link
)
{
FormatDebug
(
despotify_domain
,
"Can't find %s"
,
url
);
return
nullptr
;
}
if
(
ds_link
->
type
!=
LINK_TYPE_TRACK
)
{
despotify_free_link
(
ds_link
);
return
nullptr
;
}
track
=
despotify_link_get_track
(
session
,
ds_link
);
despotify_free_link
(
ds_link
);
if
(
!
track
)
return
nullptr
;
DespotifyInputStream
*
ctx
=
new
DespotifyInputStream
(
url
,
mutex
,
cond
,
session
,
track
);
if
(
!
mpd_despotify_register_callback
(
callback
,
ctx
))
{
delete
ctx
;
return
nullptr
;
}
if
(
despotify_play
(
ctx
->
session
,
ctx
->
track
,
false
)
==
false
)
{
mpd_despotify_unregister_callback
(
callback
);
delete
ctx
;
return
nullptr
;
}
return
&
ctx
->
base
;
}
static
size_t
input_despotify_read
(
InputStream
*
is
,
void
*
ptr
,
size_t
size
,
gcc_unused
Error
&
error
)
{
DespotifyInputStream
*
ctx
=
(
DespotifyInputStream
*
)
is
;
size_t
to_cpy
=
size
;
if
(
ctx
->
len_available
==
0
)
refill_buffer
(
ctx
);
if
(
ctx
->
len_available
<
size
)
to_cpy
=
ctx
->
len_available
;
memcpy
(
ptr
,
ctx
->
pcm
.
buf
,
to_cpy
);
ctx
->
len_available
-=
to_cpy
;
is
->
offset
+=
to_cpy
;
return
to_cpy
;
}
static
void
input_despotify_close
(
InputStream
*
is
)
{
DespotifyInputStream
*
ctx
=
(
DespotifyInputStream
*
)
is
;
mpd_despotify_unregister_callback
(
callback
);
delete
ctx
;
}
static
bool
input_despotify_eof
(
InputStream
*
is
)
{
DespotifyInputStream
*
ctx
=
(
DespotifyInputStream
*
)
is
;
return
ctx
->
eof
;
}
static
Tag
*
input_despotify_tag
(
InputStream
*
is
)
{
DespotifyInputStream
*
ctx
=
(
DespotifyInputStream
*
)
is
;
Tag
*
tag
=
ctx
->
tag
;
ctx
->
tag
=
nullptr
;
return
tag
;
}
const
InputPlugin
input_plugin_despotify
=
{
"spt"
,
nullptr
,
nullptr
,
input_despotify_open
,
input_despotify_close
,
nullptr
,
nullptr
,
input_despotify_tag
,
nullptr
,
input_despotify_read
,
input_despotify_eof
,
nullptr
,
};
src/input/DespotifyInputPlugin.hxx
deleted
100644 → 0
View file @
ed5c6be2
/*
* Copyright (C) 2011-2013 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef INPUT_DESPOTIFY_HXX
#define INPUT_DESPOTIFY_HXX
extern
const
struct
InputPlugin
input_plugin_despotify
;
#endif
src/ls.cxx
View file @
ad1b6ef0
...
...
@@ -55,9 +55,6 @@ static const char *remoteUrlPrefixes[] = {
#ifdef ENABLE_CDIO_PARANOIA
"cdda://"
,
#endif
#ifdef ENABLE_DESPOTIFY
"spt://"
,
#endif
NULL
};
...
...
src/playlist/DespotifyPlaylistPlugin.cxx
deleted
100644 → 0
View file @
ed5c6be2
/*
* Copyright (C) 2011-2013 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "config.h"
#include "DespotifyPlaylistPlugin.hxx"
#include "DespotifyUtils.hxx"
#include "PlaylistPlugin.hxx"
#include "MemorySongEnumerator.hxx"
#include "tag/Tag.hxx"
#include "Song.hxx"
#include "Log.hxx"
extern
"C"
{
#include <despotify.h>
}
#include <string.h>
#include <stdlib.h>
static
void
add_song
(
std
::
forward_list
<
SongPointer
>
&
songs
,
struct
ds_track
*
track
)
{
const
char
*
dsp_scheme
=
despotify_playlist_plugin
.
schemes
[
0
];
Song
*
song
;
char
uri
[
128
];
char
*
ds_uri
;
/* Create a spt://... URI for MPD */
snprintf
(
uri
,
sizeof
(
uri
),
"%s://"
,
dsp_scheme
);
ds_uri
=
uri
+
strlen
(
dsp_scheme
)
+
3
;
if
(
despotify_track_to_uri
(
track
,
ds_uri
)
!=
ds_uri
)
{
/* Should never really fail, but let's be sure */
FormatDebug
(
despotify_domain
,
"Can't add track %s"
,
track
->
title
);
return
;
}
song
=
Song
::
NewRemote
(
uri
);
song
->
tag
=
mpd_despotify_tag_from_track
(
track
);
songs
.
emplace_front
(
song
);
}
static
bool
parse_track
(
struct
despotify_session
*
session
,
std
::
forward_list
<
SongPointer
>
&
songs
,
struct
ds_link
*
link
)
{
struct
ds_track
*
track
=
despotify_link_get_track
(
session
,
link
);
if
(
track
==
nullptr
)
return
false
;
add_song
(
songs
,
track
);
return
true
;
}
static
bool
parse_playlist
(
struct
despotify_session
*
session
,
std
::
forward_list
<
SongPointer
>
&
songs
,
struct
ds_link
*
link
)
{
ds_playlist
*
playlist
=
despotify_link_get_playlist
(
session
,
link
);
if
(
playlist
==
nullptr
)
return
false
;
for
(
ds_track
*
track
=
playlist
->
tracks
;
track
!=
nullptr
;
track
=
track
->
next
)
add_song
(
songs
,
track
);
return
true
;
}
static
SongEnumerator
*
despotify_playlist_open_uri
(
const
char
*
url
,
gcc_unused
Mutex
&
mutex
,
gcc_unused
Cond
&
cond
)
{
despotify_session
*
session
=
mpd_despotify_get_session
();
if
(
session
==
nullptr
)
return
nullptr
;
/* Get link without spt:// */
ds_link
*
link
=
despotify_link_from_uri
(
url
+
strlen
(
despotify_playlist_plugin
.
schemes
[
0
])
+
3
);
if
(
link
==
nullptr
)
{
FormatDebug
(
despotify_domain
,
"Can't find %s
\n
"
,
url
);
return
nullptr
;
}
std
::
forward_list
<
SongPointer
>
songs
;
bool
parse_result
;
switch
(
link
->
type
)
{
case
LINK_TYPE_TRACK
:
parse_result
=
parse_track
(
session
,
songs
,
link
);
break
;
case
LINK_TYPE_PLAYLIST
:
parse_result
=
parse_playlist
(
session
,
songs
,
link
);
break
;
default
:
parse_result
=
false
;
break
;
}
despotify_free_link
(
link
);
if
(
!
parse_result
)
return
nullptr
;
songs
.
reverse
();
return
new
MemorySongEnumerator
(
std
::
move
(
songs
));
}
static
const
char
*
const
despotify_schemes
[]
=
{
"spt"
,
nullptr
};
const
struct
playlist_plugin
despotify_playlist_plugin
=
{
"despotify"
,
nullptr
,
nullptr
,
despotify_playlist_open_uri
,
nullptr
,
despotify_schemes
,
nullptr
,
nullptr
,
};
src/playlist/DespotifyPlaylistPlugin.hxx
deleted
100644 → 0
View file @
ed5c6be2
/*
* Copyright (C) 2011-2013 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef MPD_PLAYLIST_DESPOTIFY_PLAYLIST_PLUGIN_HXX
#define MPD_PLAYLIST_DESPOTIFY_PLAYLIST_PLUGIN_HXX
extern
const
struct
playlist_plugin
despotify_playlist_plugin
;
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment