add custom keys configuration

This commit is contained in:
unknown
2008-08-23 19:31:22 +02:00
parent 72cb5d8217
commit f61847c46c
11 changed files with 399 additions and 95 deletions

View File

@@ -61,6 +61,64 @@ extern string UNKNOWN_ARTIST;
extern string UNKNOWN_TITLE;
extern string UNKNOWN_ALBUM;
string DisplayKeys(int *key, int size)
{
bool backspace = 1;
string result = "\t";
for (int i = 0; i < size; i++)
{
if (key[i] == null_key);
else if (key[i] == 259)
result += "Up";
else if (key[i] == 258)
result += "Down";
else if (key[i] == 339)
result += "Page Up";
else if (key[i] == 338)
result += "Page Down";
else if (key[i] == 262)
result += "Home";
else if (key[i] == 360)
result += "End";
else if (key[i] == 32)
result += "Space";
else if (key[i] == 10)
result += "Enter";
else if (key[i] == 330)
result += "Delete";
else if (key[i] == 261)
result += "Right";
else if (key[i] == 260)
result += "Left";
else if (key[i] == 9)
result += "Tab";
else if (key[i] >= 1 && key[i] <= 26)
{
result += "Ctrl-";
result += key[i]+64;
}
else if (key[i] >= 265 && key[i] <= 276)
{
result += "F";
result += key[i]-216;
}
else if ((key[i] == 263 || key[i] == 127) && !backspace);
else if ((key[i] == 263 || key[i] == 127) && backspace)
{
result += "Backspace";
backspace = 0;
}
else
result += key[i];
result += " ";
}
if (result.length() > 12)
result = result.substr(0, 12);
for (int i = result.length(); i <= 12; result += " ", i++);
result += ": ";
return result;
}
bool Keypressed(int in, const int *key)
{
return in == key[0] || in == key[1];

View File

@@ -30,6 +30,7 @@
extern ncmpcpp_config Config;
string DisplayKeys(int *, int = 2);
bool Keypressed(int, const int *);
bool SortSongsByTrack(Song *, Song *);
bool CaseInsensitiveComparison(string, string);

View File

@@ -22,7 +22,7 @@
const string playlist_max_message = "playlist is at the max size";
MPDConnection::MPDConnection() : isConnected(0), MPD_HOST("localhost"), MPD_PORT(6600), MPD_TIMEOUT(30), itsUpdater(0), itsErrorHandler(0), itsMaxPlaylistLength(-1)
MPDConnection::MPDConnection() : isConnected(0), itsMaxPlaylistLength(-1), MPD_HOST("localhost"), MPD_PORT(6600), MPD_TIMEOUT(15), itsUpdater(0), itsErrorHandler(0)
{
itsConnection = 0;
itsCurrentStats = 0;
@@ -61,7 +61,7 @@ bool MPDConnection::Connect()
return true;
}
bool MPDConnection::Connected()
bool MPDConnection::Connected() const
{
return isConnected;
}
@@ -88,7 +88,7 @@ void MPDConnection::Disconnect()
ClearQueue();
}
void MPDConnection::SendPassword()
void MPDConnection::SendPassword() const
{
mpd_sendPasswordCommand(itsConnection, MPD_PASSWORD.c_str());
mpd_finishCommand(itsConnection);
@@ -475,7 +475,7 @@ bool MPDConnection::CommitQueue()
return retval;
}
void MPDConnection::DeletePlaylist(const string &name)
void MPDConnection::DeletePlaylist(const string &name) const
{
if (isConnected)
{
@@ -484,7 +484,7 @@ void MPDConnection::DeletePlaylist(const string &name)
}
}
bool MPDConnection::SavePlaylist(const string &name)
bool MPDConnection::SavePlaylist(const string &name) const
{
if (isConnected)
{

View File

@@ -76,14 +76,14 @@ class MPDConnection
~MPDConnection();
bool Connect();
bool Connected();
bool Connected() const;
void Disconnect();
void SetHostname(string hostname) { MPD_HOST = hostname; }
void SetPort(int port) { MPD_PORT = port; }
void SetTimeout(int timeout) { MPD_TIMEOUT = timeout; }
void SetPassword(string password) { MPD_PASSWORD = password; }
void SendPassword();
void SendPassword() const;
void SetStatusUpdater(StatusUpdater, void *);
void SetErrorHandler(ErrorHandler, void *);
@@ -112,7 +112,7 @@ class MPDConnection
long long GetOldPlaylistID() const { return isConnected && itsOldStatus ? itsOldStatus->playlist : -1; }
int GetElapsedTime() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->elapsedTime : -1; }
unsigned int GetMaxPlaylistLength() { return itsMaxPlaylistLength; }
unsigned int GetMaxPlaylistLength() const { return itsMaxPlaylistLength; }
int GetPlaylistLength() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->playlistLength : 0; }
void GetPlaylistChanges(long long, SongList &) const;
@@ -136,8 +136,8 @@ class MPDConnection
void QueueDeleteSongId(int);
bool CommitQueue();
void DeletePlaylist(const string &);
bool SavePlaylist(const string &);
void DeletePlaylist(const string &) const;
bool SavePlaylist(const string &) const;
void StartSearch(bool) const;
void AddSearch(mpd_TagItems, const string &) const;
@@ -151,11 +151,13 @@ class MPDConnection
private:
int CheckForErrors();
void ClearQueue();
string itsLastErrorMessage;
mpd_Connection *itsConnection;
bool isConnected;
string itsLastErrorMessage;
unsigned int itsMaxPlaylistLength;
string MPD_HOST;
int MPD_PORT;
int MPD_TIMEOUT;
@@ -172,7 +174,6 @@ class MPDConnection
void *itsErrorHandlerUserdata;
std::vector<QueueCommand *> itsQueue;
unsigned int itsMaxPlaylistLength;
};
#endif

View File

@@ -52,10 +52,10 @@
#ifdef HAVE_TAGLIB_H
const string tag_screen = "Tag editor";
const string tag_screen_keydesc = "\te : Edit song's tags\n";
const string tag_screen_keydesc = "Edit song's tags\n";
#else
const string tag_screen = "Tag info";
const string tag_screen_keydesc = "\te : Show song's tags\n";
const string tag_screen_keydesc = "Show song's tags\n";
#endif
ncmpcpp_config Config;
@@ -149,6 +149,7 @@ int main(int argc, char *argv[])
DefaultConfiguration(Config);
DefaultKeys(Key);
ReadConfiguration(Config);
ReadKeys(Key);
DefineEmptyTags();
Mpd = new MPDConnection;
@@ -207,80 +208,80 @@ int main(int argc, char *argv[])
sLyrics = new Scrollpad(sHelp->EmptyClone());
sHelp->Add(" [b]Keys - Movement\n -----------------------------------------[/b]\n");
sHelp->Add("\tUp k : Move Cursor up\n");
sHelp->Add("\tDown j : Move Cursor down\n");
sHelp->Add("\tPage up : Page up\n");
sHelp->Add("\tPage down : Page down\n");
sHelp->Add("\tHome : Home\n");
sHelp->Add("\tEnd : End\n\n");
sHelp->Add(DisplayKeys(Key.Up) + "Move Cursor up\n");
sHelp->Add(DisplayKeys(Key.Down) + "Move Cursor down\n");
sHelp->Add(DisplayKeys(Key.PageUp) + "Page up\n");
sHelp->Add(DisplayKeys(Key.PageDown) + "Page down\n");
sHelp->Add(DisplayKeys(Key.Home) + "Home\n");
sHelp->Add(DisplayKeys(Key.End) + "End\n\n");
sHelp->Add("\tTab : Switch between playlist and browser\n");
sHelp->Add("\t1 : Help screen\n");
sHelp->Add("\t2 : Playlist screen\n");
sHelp->Add("\t3 : Browse screen\n");
sHelp->Add("\t4 : Search engine\n");
sHelp->Add("\t5 : Media library\n\n\n");
sHelp->Add(DisplayKeys(Key.ScreenSwitcher) + "Switch between playlist and browser\n");
sHelp->Add(DisplayKeys(Key.Help) + "Help screen\n");
sHelp->Add(DisplayKeys(Key.Playlist) + "Playlist screen\n");
sHelp->Add(DisplayKeys(Key.Browser) + "Browse screen\n");
sHelp->Add(DisplayKeys(Key.SearchEngine) + "Search engine\n");
sHelp->Add(DisplayKeys(Key.MediaLibrary) + "Media library\n\n\n");
sHelp->Add(" [b]Keys - Global\n -----------------------------------------[/b]\n");
sHelp->Add("\ts : Stop\n");
sHelp->Add("\tP : Pause\n");
sHelp->Add("\t> : Next track\n");
sHelp->Add("\t< : Previous track\n");
sHelp->Add("\tf : Seek forward\n");
sHelp->Add("\tb : Seek backward\n");
sHelp->Add("\t- Left : Decrease volume\n");
sHelp->Add("\t+ Right : Increase volume\n\n");
sHelp->Add(DisplayKeys(Key.Stop) + "Stop\n");
sHelp->Add(DisplayKeys(Key.Pause) + "Pause\n");
sHelp->Add(DisplayKeys(Key.Next) + "Next track\n");
sHelp->Add(DisplayKeys(Key.Prev) + "Previous track\n");
sHelp->Add(DisplayKeys(Key.SeekForward) + "Seek forward\n");
sHelp->Add(DisplayKeys(Key.SeekBackward) + "Seek backward\n");
sHelp->Add(DisplayKeys(Key.VolumeDown) + "Decrease volume\n");
sHelp->Add(DisplayKeys(Key.VolumeUp) + "Increase volume\n\n");
sHelp->Add("\tr : Toggle repeat mode\n");
sHelp->Add("\tz : Toggle random mode\n");
sHelp->Add("\tZ : Shuffle playlist\n");
sHelp->Add("\tx : Toggle crossfade mode\n");
sHelp->Add("\tX : Set crossfade\n");
sHelp->Add("\tu : Start a music database update\n\n");
sHelp->Add(DisplayKeys(Key.ToggleRepeat) + "Toggle repeat mode\n");
sHelp->Add(DisplayKeys(Key.ToggleRandom) + "Toggle random mode\n");
sHelp->Add(DisplayKeys(Key.Shuffle) + "Shuffle playlist\n");
sHelp->Add(DisplayKeys(Key.ToggleCrossfade) + "Toggle crossfade mode\n");
sHelp->Add(DisplayKeys(Key.SetCrossfade) + "Set crossfade\n");
sHelp->Add(DisplayKeys(Key.UpdateDB) + "Start a music database update\n\n");
sHelp->Add("\t/ : Forward find\n");
sHelp->Add("\t? : Backward find\n");
sHelp->Add("\t, : Go to previous found position\n");
sHelp->Add("\t. : Go to next found position\n");
sHelp->Add(tag_screen_keydesc);
sHelp->Add("\tg : Go to chosen position in current song\n");
sHelp->Add("\tl : Show/hide song's lyrics\n\n");
sHelp->Add(DisplayKeys(Key.FindForward) + "Forward find\n");
sHelp->Add(DisplayKeys(Key.FindBackward) + "Backward find\n");
sHelp->Add(DisplayKeys(Key.PrevFoundPosition) + "Go to previous found position\n");
sHelp->Add(DisplayKeys(Key.NextFoundPosition) + "Go to next found position\n");
sHelp->Add(DisplayKeys(Key.EditTags) + tag_screen_keydesc);
sHelp->Add(DisplayKeys(Key.GoToPosition) + "Go to chosen position in current song\n");
sHelp->Add(DisplayKeys(Key.Lyrics) + "Show/hide song's lyrics\n\n");
sHelp->Add("\tQ q : Quit\n\n\n");
sHelp->Add(DisplayKeys(Key.Quit) + "Quit\n\n\n");
sHelp->Add(" [b]Keys - Playlist screen\n -----------------------------------------[/b]\n");
sHelp->Add("\tEnter : Play\n");
sHelp->Add("\tDelete d : Delete song from playlist\n");
sHelp->Add("\tc : Clear whole playlist\n");
sHelp->Add("\tC : Clear playlist but hold currently playing song\n");
sHelp->Add("\tm : Move song up\n");
sHelp->Add("\tn : Move song down\n");
sHelp->Add("\tS : Save playlist\n");
sHelp->Add("\to : Go to currently playing position\n");
sHelp->Add("\tU : Toggle auto center mode\n\n\n");
sHelp->Add(DisplayKeys(Key.Enter) + "Play\n");
sHelp->Add(DisplayKeys(Key.Delete) + "Delete song from playlist\n");
sHelp->Add(DisplayKeys(Key.Clear) + "Clear whole playlist\n");
sHelp->Add(DisplayKeys(Key.Crop) + "Clear playlist but hold currently playing song\n");
sHelp->Add(DisplayKeys(Key.MvSongUp) + "Move song up\n");
sHelp->Add(DisplayKeys(Key.MvSongDown) + "Move song down\n");
sHelp->Add(DisplayKeys(Key.SavePlaylist) + "Save playlist\n");
sHelp->Add(DisplayKeys(Key.GoToNowPlaying) + "Go to currently playing position\n");
sHelp->Add(DisplayKeys(Key.ToggleAutoCenter) + "Toggle auto center mode\n\n\n");
sHelp->Add(" [b]Keys - Browse screen\n -----------------------------------------[/b]\n");
sHelp->Add("\tEnter : Enter directory/Add item to playlist and play\n");
sHelp->Add("\tSpace : Add item to playlist\n");
sHelp->Add("\tBackspace : Go to parent directory\n");
sHelp->Add("\tDelete d : Delete playlist\n\n\n");
sHelp->Add(DisplayKeys(Key.Enter) + "Enter directory/Add item to playlist and play\n");
sHelp->Add(DisplayKeys(Key.Space) + "Add item to playlist\n");
sHelp->Add(DisplayKeys(Key.GoToParentDir) + "Go to parent directory\n");
sHelp->Add(DisplayKeys(Key.Delete) + "Delete playlist\n\n\n");
sHelp->Add(" [b]Keys - Search engine\n -----------------------------------------[/b]\n");
sHelp->Add("\tEnter : Change option/Add to playlist and play song\n");
sHelp->Add("\tSpace : Add song to playlist\n\n\n");
sHelp->Add(DisplayKeys(Key.Enter) + "Change option/Add to playlist and play song\n");
sHelp->Add(DisplayKeys(Key.Space) + "Add song to playlist\n\n\n");
sHelp->Add(" [b]Keys - Media library\n -----------------------------------------[/b]\n");
sHelp->Add("\tLeft : Previous column\n");
sHelp->Add("\tRight : Next column\n");
sHelp->Add("\tEnter : Add to playlist and play song/album/artist's songs\n");
sHelp->Add("\tSpace : Add to playlist song/album/artist's songs\n\n\n");
sHelp->Add(DisplayKeys(&Key.VolumeDown[0], 1) + "Previous column\n");
sHelp->Add(DisplayKeys(&Key.VolumeUp[0], 1) + "Next column\n");
sHelp->Add(DisplayKeys(Key.Enter) + "Add to playlist and play song/album/artist's songs\n");
sHelp->Add(DisplayKeys(Key.Space) + "Add to playlist song/album/artist's songs\n\n\n");
# ifdef HAVE_TAGLIB_H
sHelp->Add(" [b]Keys - Tag editor\n -----------------------------------------[/b]\n");
sHelp->Add("\tEnter : Change option\n");
sHelp->Add(DisplayKeys(Key.Enter) + "Change option\n");
# else
sHelp->Add(" [b]Keys - Tag info\n -----------------------------------------[/b]\n");
sHelp->Add("\tEnter : Return\n");
sHelp->Add(DisplayKeys(Key.Enter) + "Return\n");
# endif
if (Config.header_visibility)
@@ -1245,7 +1246,7 @@ int main(int argc, char *argv[])
if (playlist_name.find("/") != string::npos)
{
ShowMessage("Playlist name cannot contain slashes!");
break;
continue;
}
if (!playlist_name.empty())
{
@@ -1487,7 +1488,7 @@ int main(int argc, char *argv[])
UNLOCK_STATUSBAR;
timer = time(NULL);
if (findme.empty())
break;
continue;
transform(findme.begin(), findme.end(), findme.begin(), tolower);
if (Keypressed(input, Key.FindForward)) // forward

View File

@@ -35,10 +35,6 @@ const bool UNICODE = 0;
# define NCMPCPP_TO_WSTRING(x) (x)
#endif
#define KEY_TAB 9
#define ENTER 10
#define KEY_SPACE 32
#ifdef HAVE_TAGLIB_H
# include "fileref.h"
# include "tag.h"

View File

@@ -21,13 +21,12 @@
#include "settings.h"
const string config_file = home_folder + "/.ncmpcpprc";
const string keys_config_file = home_folder + "/.ncmpcpp_keys";
using std::ifstream;
void DefaultKeys(ncmpcpp_keys &keys)
{
const int null_key = 0x0fffffff;
keys.Up[0] = KEY_UP;
keys.Down[0] = KEY_DOWN;
keys.PageUp[0] = KEY_PPAGE;
@@ -150,6 +149,29 @@ void DefaultConfiguration(ncmpcpp_config &conf)
conf.message_delay_time = 4;
}
void GetKeys(string line, int *key)
{
int i = line.find("=")+1;
line = line.substr(i, line.length()-i);
i = 0;
if (line[i] == ' ')
while (line[++i] == ' ');
line = line.substr(i, line.length()-i);
i = line.find(" ");
string one;
string two;
if (i != string::npos)
{
one = line.substr(0, i);
i++;
two = line.substr(i, line.length()-i);
}
else
one = line;
key[0] = !one.empty() && one[0] == '\'' ? one[1] : (atoi(one.c_str()) == 0 ? null_key : atoi(one.c_str()));
key[1] = !two.empty() && two[0] == '\'' ? two[1] : (atoi(two.c_str()) == 0 ? null_key : atoi(two.c_str()));
}
string GetConfigLineValue(const string &line)
{
int i = 0;
@@ -176,19 +198,19 @@ string IntoStr(COLOR color)
if (color == clBlack)
result = "black";
if (color == clRed)
else if (color == clRed)
result = "red";
if (color == clGreen)
else if (color == clGreen)
result = "green";
if (color == clYellow)
else if (color == clYellow)
result = "yellow";
if (color == clBlue)
else if (color == clBlue)
result = "blue";
if (color == clMagenta)
else if (color == clMagenta)
result = "magenta";
if (color == clCyan)
else if (color == clCyan)
result = "cyan";
if (color == clWhite)
else if (color == clWhite)
result = "white";
return result;
@@ -200,24 +222,135 @@ COLOR IntoColor(const string &color)
if (color == "black")
result = clBlack;
if (color == "red")
else if (color == "red")
result = clRed;
if (color == "green")
else if (color == "green")
result = clGreen;
if (color == "yellow")
else if (color == "yellow")
result = clYellow;
if (color == "blue")
else if (color == "blue")
result = clBlue;
if (color == "magenta")
else if (color == "magenta")
result = clMagenta;
if (color == "cyan")
else if (color == "cyan")
result = clCyan;
if (color == "white")
else if (color == "white")
result = clWhite;
return result;
}
void ReadKeys(ncmpcpp_keys &keys)
{
ifstream f(keys_config_file.c_str());
string key_line;
vector<string> keys_sets;
if (f.is_open())
{
while (!f.eof())
{
getline(f, key_line);
if (!key_line.empty() && key_line[0] != '#')
keys_sets.push_back(key_line);
}
for (vector<string>::const_iterator it = keys_sets.begin(); it != keys_sets.end(); it++)
{
if (it->find("key_up ") != string::npos)
GetKeys(*it, keys.Up);
else if (it->find("key_down ") != string::npos)
GetKeys(*it, keys.Down);
else if (it->find("key_page_up ") != string::npos)
GetKeys(*it, keys.PageUp);
else if (it->find("key_page_down ") != string::npos)
GetKeys(*it, keys.PageDown);
else if (it->find("key_home ") != string::npos)
GetKeys(*it, keys.Home);
else if (it->find("key_end ") != string::npos)
GetKeys(*it, keys.End);
else if (it->find("key_space ") != string::npos)
GetKeys(*it, keys.Space);
else if (it->find("key_enter ") != string::npos)
GetKeys(*it, keys.Enter);
else if (it->find("key_delete ") != string::npos)
GetKeys(*it, keys.Delete);
else if (it->find("key_volume_up ") != string::npos)
GetKeys(*it, keys.VolumeUp);
else if (it->find("key_volume_down ") != string::npos)
GetKeys(*it, keys.VolumeDown);
else if (it->find("key_screen_switcher ") != string::npos)
GetKeys(*it, keys.ScreenSwitcher);
else if (it->find("key_help ") != string::npos)
GetKeys(*it, keys.Help);
else if (it->find("key_playlist ") != string::npos)
GetKeys(*it, keys.Playlist);
else if (it->find("key_browser ") != string::npos)
GetKeys(*it, keys.Browser);
else if (it->find("key_search_engine ") != string::npos)
GetKeys(*it, keys.SearchEngine);
else if (it->find("key_media_library ") != string::npos)
GetKeys(*it, keys.MediaLibrary);
else if (it->find("key_stop ") != string::npos)
GetKeys(*it, keys.Stop);
else if (it->find("key_pause ") != string::npos)
GetKeys(*it, keys.Pause);
else if (it->find("key_next ") != string::npos)
GetKeys(*it, keys.Next);
else if (it->find("key_prev ") != string::npos)
GetKeys(*it, keys.Prev);
else if (it->find("key_seek_forward ") != string::npos)
GetKeys(*it, keys.SeekForward);
else if (it->find("key_seek_backward ") != string::npos)
GetKeys(*it, keys.SeekBackward);
else if (it->find("key_toggle_repeat ") != string::npos)
GetKeys(*it, keys.ToggleRepeat);
else if (it->find("key_toggle_random ") != string::npos)
GetKeys(*it, keys.ToggleRandom);
else if (it->find("key_shuffle ") != string::npos)
GetKeys(*it, keys.Shuffle);
else if (it->find("key_toggle_crossfade ") != string::npos)
GetKeys(*it, keys.ToggleCrossfade);
else if (it->find("key_set_crossfade ") != string::npos)
GetKeys(*it, keys.SetCrossfade);
else if (it->find("key_update_db ") != string::npos)
GetKeys(*it, keys.UpdateDB);
else if (it->find("key_find_forward ") != string::npos)
GetKeys(*it, keys.FindForward);
else if (it->find("key_find_backward ") != string::npos)
GetKeys(*it, keys.FindBackward);
else if (it->find("key_next_found_position ") != string::npos)
GetKeys(*it, keys.NextFoundPosition);
else if (it->find("key_prev_found_position ") != string::npos)
GetKeys(*it, keys.PrevFoundPosition);
else if (it->find("key_edit_tags ") != string::npos)
GetKeys(*it, keys.EditTags);
else if (it->find("key_go_to_position ") != string::npos)
GetKeys(*it, keys.GoToPosition);
else if (it->find("key_lyrics ") != string::npos)
GetKeys(*it, keys.Lyrics);
else if (it->find("key_clear ") != string::npos)
GetKeys(*it, keys.Clear);
else if (it->find("key_crop ") != string::npos)
GetKeys(*it, keys.Crop);
else if (it->find("key_move_song_up ") != string::npos)
GetKeys(*it, keys.MvSongUp);
else if (it->find("key_move_song_down ") != string::npos)
GetKeys(*it, keys.MvSongDown);
else if (it->find("key_save_playlist ") != string::npos)
GetKeys(*it, keys.SavePlaylist);
else if (it->find("key_go_to_now_playing ") != string::npos)
GetKeys(*it, keys.GoToNowPlaying);
else if (it->find("key_toggle_auto_center ") != string::npos)
GetKeys(*it, keys.ToggleAutoCenter);
else if (it->find("key_go_to_parent_dir ") != string::npos)
GetKeys(*it, keys.GoToParentDir);
else if (it->find("key_quit ") != string::npos)
GetKeys(*it, keys.Quit);
}
}
}
void ReadConfiguration(ncmpcpp_config &conf)
{
ifstream f(config_file.c_str());

View File

@@ -25,6 +25,8 @@
#include "ncmpcpp.h"
const int null_key = 0x0fffffff;
struct ncmpcpp_keys
{
int Up[2];
@@ -108,9 +110,11 @@ struct ncmpcpp_config
void DefaultKeys(ncmpcpp_keys &);
void DefaultConfiguration(ncmpcpp_config &);
void GetKeys(string, int *);
string GetLineValue(const string &);
string IntoStr(COLOR);
COLOR IntoColor(const string &);
void ReadKeys(ncmpcpp_keys &);
void ReadConfiguration(ncmpcpp_config &);
#endif

View File

@@ -293,6 +293,11 @@ void NcmpcppStatusChanged(MPDConnection *Mpd, MPDStatusChanges changed, void *da
PlayerState mpd_state = Mpd->GetState();
switch (mpd_state)
{
case psUnknown:
{
player_state = "[unknown]";
break;
}
case psPlay:
{
player_state = "Playing: ";