add support for lyricsplugin database
This commit is contained in:
10
doc/config
10
doc/config
@@ -146,6 +146,16 @@
|
||||
#
|
||||
#enable_window_title = "yes"
|
||||
#
|
||||
##### lyrics support #####
|
||||
##
|
||||
## supported lyrics databases:
|
||||
##
|
||||
## - 1 - lyricwiki.org
|
||||
## - 2 - lyricsplugin.com
|
||||
##
|
||||
#
|
||||
#lyrics_database = "1"
|
||||
#
|
||||
##### colors definitions #####
|
||||
#
|
||||
#colors_enabled = "yes"
|
||||
|
||||
@@ -31,8 +31,8 @@ extern Window *wCurrent;
|
||||
extern Scrollpad *sLyrics;
|
||||
extern Scrollpad *sInfo;
|
||||
|
||||
const string artists_folder = home_folder + "/" + ".ncmpcpp/artists";
|
||||
const string lyrics_folder = home_folder + "/" + ".lyrics";
|
||||
const string artists_folder = home_folder + "/.ncmpcpp/artists";
|
||||
const string lyrics_folder = home_folder + "/.lyrics";
|
||||
|
||||
#ifdef HAVE_CURL_CURL_H
|
||||
extern pthread_t lyrics_downloader;
|
||||
@@ -40,7 +40,6 @@ extern pthread_t artist_info_downloader;
|
||||
extern bool lyrics_ready;
|
||||
extern bool artist_info_ready;
|
||||
pthread_mutex_t curl = PTHREAD_MUTEX_INITIALIZER;
|
||||
#endif
|
||||
|
||||
namespace
|
||||
{
|
||||
@@ -101,7 +100,6 @@ namespace
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_CURL_CURL_H
|
||||
void * GetArtistInfo(void *ptr)
|
||||
{
|
||||
string *strptr = static_cast<string *>(ptr);
|
||||
@@ -253,6 +251,54 @@ void * GetArtistInfo(void *ptr)
|
||||
artist_info_ready = 1;
|
||||
pthread_exit(NULL);
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
bool lyricwiki_not_found(const string &s)
|
||||
{
|
||||
return s == "Not found";
|
||||
}
|
||||
|
||||
bool lyricsplugin_not_found(const string &s)
|
||||
{
|
||||
if (s.empty())
|
||||
return true;
|
||||
for (string::const_iterator it = s.begin(); it != s.end(); it++)
|
||||
if (isprint(*it))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
const LyricsPlugin lyricwiki =
|
||||
{
|
||||
"http://lyricwiki.org/api.php?artist=%artist%&song=%title%&fmt=xml",
|
||||
"<lyrics>",
|
||||
"</lyrics>",
|
||||
lyricwiki_not_found
|
||||
};
|
||||
|
||||
const LyricsPlugin lyricsplugin =
|
||||
{
|
||||
"http://www.lyricsplugin.com/winamp03/plugin/?artist=%artist%&title=%title%",
|
||||
"<div id=\"lyrics\">",
|
||||
"</div>",
|
||||
lyricsplugin_not_found
|
||||
};
|
||||
|
||||
const LyricsPlugin *ChooseLyricsPlugin(int i)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 1:
|
||||
return &lyricwiki;
|
||||
case 2:
|
||||
return &lyricsplugin;
|
||||
default:
|
||||
return &lyricwiki;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif // HAVE_CURL_CURL_H
|
||||
|
||||
void *GetLyrics(void *song)
|
||||
@@ -289,16 +335,16 @@ void *GetLyrics(void *song)
|
||||
# ifdef HAVE_CURL_CURL_H
|
||||
CURLcode code;
|
||||
|
||||
const LyricsPlugin *my_lyrics = ChooseLyricsPlugin(Config.lyrics_db);
|
||||
|
||||
string result;
|
||||
|
||||
char *c_artist = curl_easy_escape(0, artist.c_str(), artist.length());
|
||||
char *c_title = curl_easy_escape(0, title.c_str(), title.length());
|
||||
|
||||
string url = "http://lyricwiki.org/api.php?artist=";
|
||||
url += c_artist;
|
||||
url += "&song=";
|
||||
url += c_title;
|
||||
url += "&fmt=xml";
|
||||
string url = my_lyrics->url;
|
||||
url.replace(url.find("%artist%"), 8, c_artist);
|
||||
url.replace(url.find("%title%"), 7, c_title);
|
||||
|
||||
pthread_mutex_lock(&curl);
|
||||
CURL *lyrics = curl_easy_init();
|
||||
@@ -322,13 +368,13 @@ void *GetLyrics(void *song)
|
||||
}
|
||||
|
||||
size_t a, b;
|
||||
a = result.find("<lyrics>")+8;
|
||||
b = result.find("</lyrics>");
|
||||
a = result.find(my_lyrics->tag_open)+strlen(my_lyrics->tag_open);
|
||||
b = result.find(my_lyrics->tag_close, a);
|
||||
result = result.substr(a, b-a);
|
||||
|
||||
if (result == "Not found")
|
||||
if (my_lyrics->not_found(result))
|
||||
{
|
||||
*sLyrics << result;
|
||||
*sLyrics << "Not found";
|
||||
lyrics_ready = 1;
|
||||
pthread_exit(NULL);
|
||||
}
|
||||
@@ -339,6 +385,7 @@ void *GetLyrics(void *song)
|
||||
result.replace(i, 4, ">");
|
||||
|
||||
EscapeHtml(result);
|
||||
Trim(result);
|
||||
|
||||
*sLyrics << utf_to_locale_cpy(result);
|
||||
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
# include <pthread.h>
|
||||
# include "curl/curl.h"
|
||||
void * GetArtistInfo(void *);
|
||||
|
||||
struct LyricsPlugin
|
||||
{
|
||||
const char *url;
|
||||
const char *tag_open;
|
||||
const char *tag_close;
|
||||
bool (*not_found)(const string &);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
void * GetLyrics(void *);
|
||||
|
||||
@@ -284,6 +284,7 @@ void DefaultConfiguration(ncmpcpp_config &conf)
|
||||
conf.seek_time = 1;
|
||||
conf.playlist_disable_highlight_delay = 5;
|
||||
conf.message_delay_time = 4;
|
||||
conf.lyrics_db = 1;
|
||||
}
|
||||
|
||||
string GetLineValue(string &line, char a, char b, bool once)
|
||||
@@ -699,6 +700,11 @@ void ReadConfiguration(ncmpcpp_config &conf)
|
||||
{
|
||||
conf.set_window_title = v == "yes";
|
||||
}
|
||||
else if (cl.find("lyrics_database") != string::npos)
|
||||
{
|
||||
if (!v.empty())
|
||||
conf.lyrics_db = StrToInt(v);
|
||||
}
|
||||
else if (cl.find("song_window_title_format") != string::npos)
|
||||
{
|
||||
if (!v.empty())
|
||||
|
||||
@@ -157,6 +157,7 @@ struct ncmpcpp_config
|
||||
int seek_time;
|
||||
int playlist_disable_highlight_delay;
|
||||
int message_delay_time;
|
||||
int lyrics_db;
|
||||
};
|
||||
|
||||
extern ncmpcpp_config Config;
|
||||
|
||||
Reference in New Issue
Block a user