lyrics: add support for storing lyrics in song's directory
This commit is contained in:
@@ -287,6 +287,8 @@
|
|||||||
#
|
#
|
||||||
#follow_now_playing_lyrics = "no"
|
#follow_now_playing_lyrics = "no"
|
||||||
#
|
#
|
||||||
|
#store_lyrics_in_song_dir = "no"
|
||||||
|
#
|
||||||
##
|
##
|
||||||
## Note: If you set this variable, ncmpcpp will try to
|
## Note: If you set this variable, ncmpcpp will try to
|
||||||
## get info from last.fm in language you set and if it
|
## get info from last.fm in language you set and if it
|
||||||
|
|||||||
@@ -219,6 +219,9 @@ If enabled, seek time will increment by one each second of seeking.
|
|||||||
.B follow_now_playing_lyrics = yes/no
|
.B follow_now_playing_lyrics = yes/no
|
||||||
If enabled, lyrics will be switched at song's change to currently playing one's (Note: this works only if you are viewing lyrics of item from Playlist).
|
If enabled, lyrics will be switched at song's change to currently playing one's (Note: this works only if you are viewing lyrics of item from Playlist).
|
||||||
.TP
|
.TP
|
||||||
|
.B store_lyrics_in_song_dir = yes/no
|
||||||
|
If enabled, lyrics will be saved in song's directory, otherwise in ~/.lyrics. Note that it needs properly set mpd_music_dir.
|
||||||
|
.TP
|
||||||
.B lastfm_preferred_language = ISO 639 alpha-2 language code
|
.B lastfm_preferred_language = ISO 639 alpha-2 language code
|
||||||
If set, ncmpcpp will try to get info from last.fm in language you set and if it fails, it will fall back to english. Otherwise it will use english the first time.
|
If set, ncmpcpp will try to get info from last.fm in language you set and if it fails, it will fall back to english. Otherwise it will use english the first time.
|
||||||
.TP
|
.TP
|
||||||
|
|||||||
@@ -48,13 +48,12 @@ using Global::MainStartY;
|
|||||||
using Global::myScreen;
|
using Global::myScreen;
|
||||||
using Global::myOldScreen;
|
using Global::myOldScreen;
|
||||||
|
|
||||||
const std::string Lyrics::Folder = home_path + LYRICS_FOLDER;
|
|
||||||
|
|
||||||
Lyrics *myLyrics = new Lyrics;
|
Lyrics *myLyrics = new Lyrics;
|
||||||
|
|
||||||
void Lyrics::Init()
|
void Lyrics::Init()
|
||||||
{
|
{
|
||||||
w = new Scrollpad(0, MainStartY, COLS, MainHeight, "", Config.main_color, brNone);
|
w = new Scrollpad(0, MainStartY, COLS, MainHeight, "", Config.main_color, brNone);
|
||||||
|
itsFolder = home_path + LYRICS_FOLDER;
|
||||||
isInitialized = 1;
|
isInitialized = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,6 +179,37 @@ void *Lyrics::Download()
|
|||||||
}
|
}
|
||||||
#endif // HAVE_CURL_CURL_H
|
#endif // HAVE_CURL_CURL_H
|
||||||
|
|
||||||
|
void Lyrics::SetFilename()
|
||||||
|
{
|
||||||
|
if (Config.store_lyrics_in_song_dir)
|
||||||
|
{
|
||||||
|
if (itsSong.isFromDB())
|
||||||
|
{
|
||||||
|
itsFilename = Config.mpd_music_dir;
|
||||||
|
itsFilename += "/";
|
||||||
|
itsFilename += itsSong.GetFile();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
itsFilename = itsSong.GetFile();
|
||||||
|
// replace song's extension with .txt
|
||||||
|
size_t dot = itsFilename.rfind('.');
|
||||||
|
assert(dot != std::string::npos);
|
||||||
|
itsFilename.resize(dot);
|
||||||
|
itsFilename += ".txt";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::string file = locale_to_utf_cpy(itsSong.GetArtist());
|
||||||
|
file += " - ";
|
||||||
|
file += locale_to_utf_cpy(itsSong.GetTitle());
|
||||||
|
file += ".txt";
|
||||||
|
EscapeUnallowedChars(file);
|
||||||
|
itsFilename = itsFolder;
|
||||||
|
itsFilename += "/";
|
||||||
|
itsFilename += file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Lyrics::Load()
|
void Lyrics::Load()
|
||||||
{
|
{
|
||||||
# ifdef HAVE_CURL_CURL_H
|
# ifdef HAVE_CURL_CURL_H
|
||||||
@@ -191,11 +221,9 @@ void Lyrics::Load()
|
|||||||
assert(!itsSong.GetTitle().empty());
|
assert(!itsSong.GetTitle().empty());
|
||||||
|
|
||||||
itsSong.Localize();
|
itsSong.Localize();
|
||||||
std::string file = locale_to_utf_cpy(itsSong.GetArtist()) + " - " + locale_to_utf_cpy(itsSong.GetTitle()) + ".txt";
|
SetFilename();
|
||||||
EscapeUnallowedChars(file);
|
|
||||||
itsFilename = Folder + "/" + file;
|
|
||||||
|
|
||||||
mkdir(Folder.c_str()
|
mkdir(itsFolder.c_str()
|
||||||
# ifndef WIN32
|
# ifndef WIN32
|
||||||
, 0755
|
, 0755
|
||||||
# endif // !WIN32
|
# endif // !WIN32
|
||||||
|
|||||||
@@ -63,8 +63,9 @@ class Lyrics : public Screen<Scrollpad>
|
|||||||
private:
|
private:
|
||||||
void Load();
|
void Load();
|
||||||
|
|
||||||
|
void SetFilename();
|
||||||
std::string itsFilename;
|
std::string itsFilename;
|
||||||
static const std::string Folder;
|
std::string itsFolder;
|
||||||
|
|
||||||
# ifdef HAVE_CURL_CURL_H
|
# ifdef HAVE_CURL_CURL_H
|
||||||
void *Download();
|
void *Download();
|
||||||
|
|||||||
@@ -410,6 +410,7 @@ void NcmpcppConfig::SetDefaults()
|
|||||||
media_library_display_date = true;
|
media_library_display_date = true;
|
||||||
media_library_disable_two_column_mode = false;
|
media_library_disable_two_column_mode = false;
|
||||||
discard_colors_if_item_is_selected = true;
|
discard_colors_if_item_is_selected = true;
|
||||||
|
store_lyrics_in_song_dir = false;
|
||||||
set_window_title = true;
|
set_window_title = true;
|
||||||
mpd_port = 6600;
|
mpd_port = 6600;
|
||||||
mpd_connection_timeout = 15;
|
mpd_connection_timeout = 15;
|
||||||
@@ -1047,6 +1048,16 @@ void NcmpcppConfig::Read()
|
|||||||
{
|
{
|
||||||
discard_colors_if_item_is_selected = v == "yes";
|
discard_colors_if_item_is_selected = v == "yes";
|
||||||
}
|
}
|
||||||
|
else if (cl.find("store_lyrics_in_song_dir") != std::string::npos)
|
||||||
|
{
|
||||||
|
if (mpd_music_dir.empty())
|
||||||
|
{
|
||||||
|
std::cout << "Warning: store_lyrics_in_song_dir = \"yes\" is ";
|
||||||
|
std::cout << "not allowed without mpd_music_dir set, discarding.\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
store_lyrics_in_song_dir = v == "yes";
|
||||||
|
}
|
||||||
else if (cl.find("enable_window_title") != std::string::npos)
|
else if (cl.find("enable_window_title") != std::string::npos)
|
||||||
{
|
{
|
||||||
set_window_title = v == "yes";
|
set_window_title = v == "yes";
|
||||||
|
|||||||
@@ -248,6 +248,7 @@ struct NcmpcppConfig
|
|||||||
bool media_library_display_date;
|
bool media_library_display_date;
|
||||||
bool media_library_disable_two_column_mode;
|
bool media_library_disable_two_column_mode;
|
||||||
bool discard_colors_if_item_is_selected;
|
bool discard_colors_if_item_is_selected;
|
||||||
|
bool store_lyrics_in_song_dir;
|
||||||
|
|
||||||
int mpd_port;
|
int mpd_port;
|
||||||
int mpd_connection_timeout;
|
int mpd_connection_timeout;
|
||||||
|
|||||||
Reference in New Issue
Block a user