new feature: command line switch for displaying now playing song
This commit is contained in:
@@ -44,6 +44,7 @@ bool ConnectToMPD()
|
|||||||
void ParseArgv(int argc, char **argv)
|
void ParseArgv(int argc, char **argv)
|
||||||
{
|
{
|
||||||
bool quit = 0;
|
bool quit = 0;
|
||||||
|
std::string now_playing_format = "{{(%l) }{{%a - }%t}}|{%f}}";
|
||||||
|
|
||||||
for (int i = 1; i < argc; ++i)
|
for (int i = 1; i < argc; ++i)
|
||||||
{
|
{
|
||||||
@@ -85,6 +86,8 @@ void ParseArgv(int argc, char **argv)
|
|||||||
<< " -p, --port connect to server at port [6600]\n"
|
<< " -p, --port connect to server at port [6600]\n"
|
||||||
<< " -?, --help show this help message\n"
|
<< " -?, --help show this help message\n"
|
||||||
<< " -v, --version display version information\n\n"
|
<< " -v, --version display version information\n\n"
|
||||||
|
<< " --now-playing display now playing song [" << now_playing_format << "\n"
|
||||||
|
<< "\n"
|
||||||
<< " play start playing\n"
|
<< " play start playing\n"
|
||||||
<< " pause pause the currently playing song\n"
|
<< " pause pause the currently playing song\n"
|
||||||
<< " toggle toggle play/pause mode\n"
|
<< " toggle toggle play/pause mode\n"
|
||||||
@@ -99,7 +102,24 @@ void ParseArgv(int argc, char **argv)
|
|||||||
if (!ConnectToMPD())
|
if (!ConnectToMPD())
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
||||||
if (!strcmp(argv[i], "play"))
|
if (!strcmp(argv[i], "--now-playing"))
|
||||||
|
{
|
||||||
|
Mpd.UpdateStatus();
|
||||||
|
if (Mpd.GetState() > psStop)
|
||||||
|
{
|
||||||
|
if (argc > ++i)
|
||||||
|
{
|
||||||
|
// apply additional pair of braces
|
||||||
|
now_playing_format = "{";
|
||||||
|
now_playing_format += argv[i];
|
||||||
|
now_playing_format += "}";
|
||||||
|
MPD::Song::ValidateFormat("now-playing format", now_playing_format);
|
||||||
|
}
|
||||||
|
std::cout << Mpd.GetCurrentSong().toString(now_playing_format) << "\n";
|
||||||
|
}
|
||||||
|
quit = 1;
|
||||||
|
}
|
||||||
|
else if (!strcmp(argv[i], "play"))
|
||||||
{
|
{
|
||||||
Mpd.Play();
|
Mpd.Play();
|
||||||
quit = 1;
|
quit = 1;
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
# include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
#endif // WIN32
|
#endif // WIN32
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <stdexcept>
|
|
||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
@@ -62,20 +61,6 @@ namespace
|
|||||||
key[1] = !two.empty() && two[0] == '\'' ? two[1] : (atoi(two.c_str()) == 0 ? null_key : atoi(two.c_str()));
|
key[1] = !two.empty() && two[0] == '\'' ? two[1] : (atoi(two.c_str()) == 0 ? null_key : atoi(two.c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ValidateSongFormat(const std::string &type, const std::string &s)
|
|
||||||
{
|
|
||||||
int braces = 0;
|
|
||||||
for (std::string::const_iterator it = s.begin(); it != s.end(); ++it)
|
|
||||||
{
|
|
||||||
if (*it == '{')
|
|
||||||
++braces;
|
|
||||||
else if (*it == '}')
|
|
||||||
--braces;
|
|
||||||
}
|
|
||||||
if (braces)
|
|
||||||
throw std::runtime_error(type + ": number of opening and closing braces does not equal!");
|
|
||||||
}
|
|
||||||
|
|
||||||
Border IntoBorder(const std::string &color)
|
Border IntoBorder(const std::string &color)
|
||||||
{
|
{
|
||||||
return Border(IntoColor(color));
|
return Border(IntoColor(color));
|
||||||
@@ -538,7 +523,7 @@ void ReadConfiguration(ncmpcpp_config &conf)
|
|||||||
{
|
{
|
||||||
if (!v.empty())
|
if (!v.empty())
|
||||||
{
|
{
|
||||||
ValidateSongFormat("song_list_format", v);
|
MPD::Song::ValidateFormat("song_list_format", v);
|
||||||
conf.song_list_format = '{';
|
conf.song_list_format = '{';
|
||||||
conf.song_list_format += v;
|
conf.song_list_format += v;
|
||||||
conf.song_list_format += '}';
|
conf.song_list_format += '}';
|
||||||
@@ -553,7 +538,7 @@ void ReadConfiguration(ncmpcpp_config &conf)
|
|||||||
{
|
{
|
||||||
if (!v.empty())
|
if (!v.empty())
|
||||||
{
|
{
|
||||||
ValidateSongFormat("song_status_format", v);
|
MPD::Song::ValidateFormat("song_status_format", v);
|
||||||
conf.song_status_format = '{';
|
conf.song_status_format = '{';
|
||||||
conf.song_status_format += v;
|
conf.song_status_format += v;
|
||||||
conf.song_status_format += '}';
|
conf.song_status_format += '}';
|
||||||
@@ -563,7 +548,7 @@ void ReadConfiguration(ncmpcpp_config &conf)
|
|||||||
{
|
{
|
||||||
if (!v.empty())
|
if (!v.empty())
|
||||||
{
|
{
|
||||||
ValidateSongFormat("song_library_format", v);
|
MPD::Song::ValidateFormat("song_library_format", v);
|
||||||
conf.song_library_format = '{';
|
conf.song_library_format = '{';
|
||||||
conf.song_library_format += v;
|
conf.song_library_format += v;
|
||||||
conf.song_library_format += '}';
|
conf.song_library_format += '}';
|
||||||
@@ -573,7 +558,7 @@ void ReadConfiguration(ncmpcpp_config &conf)
|
|||||||
{
|
{
|
||||||
if (!v.empty())
|
if (!v.empty())
|
||||||
{
|
{
|
||||||
ValidateSongFormat("tag_editor_album_format", v);
|
MPD::Song::ValidateFormat("tag_editor_album_format", v);
|
||||||
conf.tag_editor_album_format = '{';
|
conf.tag_editor_album_format = '{';
|
||||||
conf.tag_editor_album_format += v;
|
conf.tag_editor_album_format += v;
|
||||||
conf.tag_editor_album_format += '}';
|
conf.tag_editor_album_format += '}';
|
||||||
@@ -598,7 +583,7 @@ void ReadConfiguration(ncmpcpp_config &conf)
|
|||||||
{
|
{
|
||||||
if (!v.empty())
|
if (!v.empty())
|
||||||
{
|
{
|
||||||
ValidateSongFormat("alternative_header_first_line_format", v);
|
MPD::Song::ValidateFormat("alternative_header_first_line_format", v);
|
||||||
conf.new_header_first_line = '{';
|
conf.new_header_first_line = '{';
|
||||||
conf.new_header_first_line += v;
|
conf.new_header_first_line += v;
|
||||||
conf.new_header_first_line += '}';
|
conf.new_header_first_line += '}';
|
||||||
@@ -608,7 +593,7 @@ void ReadConfiguration(ncmpcpp_config &conf)
|
|||||||
{
|
{
|
||||||
if (!v.empty())
|
if (!v.empty())
|
||||||
{
|
{
|
||||||
ValidateSongFormat("alternative_header_second_line_format", v);
|
MPD::Song::ValidateFormat("alternative_header_second_line_format", v);
|
||||||
conf.new_header_second_line = '{';
|
conf.new_header_second_line = '{';
|
||||||
conf.new_header_second_line += v;
|
conf.new_header_second_line += v;
|
||||||
conf.new_header_second_line += '}';
|
conf.new_header_second_line += '}';
|
||||||
@@ -790,7 +775,7 @@ void ReadConfiguration(ncmpcpp_config &conf)
|
|||||||
{
|
{
|
||||||
if (!v.empty())
|
if (!v.empty())
|
||||||
{
|
{
|
||||||
ValidateSongFormat("song_window_title_format", v);
|
MPD::Song::ValidateFormat("song_window_title_format", v);
|
||||||
conf.song_window_title_format = '{';
|
conf.song_window_title_format = '{';
|
||||||
conf.song_window_title_format += v;
|
conf.song_window_title_format += v;
|
||||||
conf.song_window_title_format += '}';
|
conf.song_window_title_format += '}';
|
||||||
|
|||||||
15
src/song.cpp
15
src/song.cpp
@@ -25,6 +25,7 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
#include "charset.h"
|
#include "charset.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
@@ -446,6 +447,20 @@ std::string MPD::Song::ShowTime(int length)
|
|||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MPD::Song::ValidateFormat(const std::string &type, const std::string &s)
|
||||||
|
{
|
||||||
|
int braces = 0;
|
||||||
|
for (std::string::const_iterator it = s.begin(); it != s.end(); ++it)
|
||||||
|
{
|
||||||
|
if (*it == '{')
|
||||||
|
++braces;
|
||||||
|
else if (*it == '}')
|
||||||
|
--braces;
|
||||||
|
}
|
||||||
|
if (braces)
|
||||||
|
throw std::runtime_error(type + ": number of opening and closing braces does not equal!");
|
||||||
|
}
|
||||||
|
|
||||||
void MPD::Song::SetHashAndSlash()
|
void MPD::Song::SetHashAndSlash()
|
||||||
{
|
{
|
||||||
if (!itsSong->file)
|
if (!itsSong->file)
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ namespace MPD
|
|||||||
Song &operator=(const Song &);
|
Song &operator=(const Song &);
|
||||||
|
|
||||||
static std::string ShowTime(int);
|
static std::string ShowTime(int);
|
||||||
|
static void ValidateFormat(const std::string &type, const std::string &format);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SetHashAndSlash();
|
void SetHashAndSlash();
|
||||||
std::string ParseFormat(std::string::const_iterator &it) const;
|
std::string ParseFormat(std::string::const_iterator &it) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user