add support for consume mode
info about this feature can be found in mpd docs.
This commit is contained in:
2
doc/keys
2
doc/keys
@@ -74,6 +74,8 @@
|
|||||||
#
|
#
|
||||||
#key_toggle_single = 'y'
|
#key_toggle_single = 'y'
|
||||||
#
|
#
|
||||||
|
#key_toggle_consume = 'R'
|
||||||
|
#
|
||||||
#key_shuffle = 'Z'
|
#key_shuffle = 'Z'
|
||||||
#
|
#
|
||||||
#key_toggle_crossfade = 'x'
|
#key_toggle_crossfade = 'x'
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ void Help::GetKeybindings()
|
|||||||
*w << DisplayKeys(Key.ToggleRepeat) << "Toggle repeat mode\n";
|
*w << DisplayKeys(Key.ToggleRepeat) << "Toggle repeat mode\n";
|
||||||
*w << DisplayKeys(Key.ToggleRandom) << "Toggle random mode\n";
|
*w << DisplayKeys(Key.ToggleRandom) << "Toggle random mode\n";
|
||||||
*w << DisplayKeys(Key.ToggleSingle) << "Toggle single mode\n";
|
*w << DisplayKeys(Key.ToggleSingle) << "Toggle single mode\n";
|
||||||
|
*w << DisplayKeys(Key.ToggleConsume) << "Toggle consume mode\n";
|
||||||
*w << DisplayKeys(Key.Shuffle) << "Shuffle playlist\n";
|
*w << DisplayKeys(Key.Shuffle) << "Shuffle playlist\n";
|
||||||
*w << DisplayKeys(Key.ToggleCrossfade) << "Toggle crossfade mode\n";
|
*w << DisplayKeys(Key.ToggleCrossfade) << "Toggle crossfade mode\n";
|
||||||
*w << DisplayKeys(Key.SetCrossfade) << "Set crossfade\n";
|
*w << DisplayKeys(Key.SetCrossfade) << "Set crossfade\n";
|
||||||
|
|||||||
@@ -740,6 +740,7 @@ mpd_Status * mpd_getStatus(mpd_Connection * connection) {
|
|||||||
status->repeat = 0;
|
status->repeat = 0;
|
||||||
status->random = 0;
|
status->random = 0;
|
||||||
status->single = 0;
|
status->single = 0;
|
||||||
|
status->consume = 0;
|
||||||
status->playlist = -1;
|
status->playlist = -1;
|
||||||
status->playlistLength = -1;
|
status->playlistLength = -1;
|
||||||
status->state = -1;
|
status->state = -1;
|
||||||
@@ -773,6 +774,9 @@ mpd_Status * mpd_getStatus(mpd_Connection * connection) {
|
|||||||
else if(strcmp(re->name,"single")==0) {
|
else if(strcmp(re->name,"single")==0) {
|
||||||
status->single = atoi(re->value);
|
status->single = atoi(re->value);
|
||||||
}
|
}
|
||||||
|
else if(strcmp(re->name,"consume")==0) {
|
||||||
|
status->consume = atoi(re->value);
|
||||||
|
}
|
||||||
else if(strcmp(re->name,"playlist")==0) {
|
else if(strcmp(re->name,"playlist")==0) {
|
||||||
status->playlist = strtol(re->value,NULL,10);
|
status->playlist = strtol(re->value,NULL,10);
|
||||||
}
|
}
|
||||||
@@ -1704,6 +1708,14 @@ void mpd_sendSingleCommand(mpd_Connection * connection, int singleMode) {
|
|||||||
free(string);
|
free(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mpd_sendConsumeCommand(mpd_Connection * connection, int consumeMode) {
|
||||||
|
int len = strlen("consume")+2+INTLEN+3;
|
||||||
|
char *string = malloc(len);
|
||||||
|
snprintf(string, len, "consume \"%i\"\n", consumeMode);
|
||||||
|
mpd_executeCommand(connection,string);
|
||||||
|
free(string);
|
||||||
|
}
|
||||||
|
|
||||||
void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange) {
|
void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange) {
|
||||||
int len = strlen("setvol")+2+INTLEN+3;
|
int len = strlen("setvol")+2+INTLEN+3;
|
||||||
char *string = malloc(len);
|
char *string = malloc(len);
|
||||||
|
|||||||
@@ -175,6 +175,8 @@ typedef struct mpd_Status {
|
|||||||
int random;
|
int random;
|
||||||
/* 1 if single mode is on, 0 otherwise */
|
/* 1 if single mode is on, 0 otherwise */
|
||||||
int single;
|
int single;
|
||||||
|
/* 1 if consume mode is on, 0 otherwise */
|
||||||
|
int consume;
|
||||||
/* playlist length */
|
/* playlist length */
|
||||||
int playlistLength;
|
int playlistLength;
|
||||||
/* playlist, use this to determine when the playlist has changed */
|
/* playlist, use this to determine when the playlist has changed */
|
||||||
@@ -524,6 +526,8 @@ void mpd_sendRandomCommand(mpd_Connection * connection, int randomMode);
|
|||||||
|
|
||||||
void mpd_sendSingleCommand(mpd_Connection * connection, int singleMode);
|
void mpd_sendSingleCommand(mpd_Connection * connection, int singleMode);
|
||||||
|
|
||||||
|
void mpd_sendConsumeCommand(mpd_Connection * connection, int consumeMode);
|
||||||
|
|
||||||
void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange);
|
void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange);
|
||||||
|
|
||||||
/* WARNING: don't use volume command, its depreacted */
|
/* WARNING: don't use volume command, its depreacted */
|
||||||
|
|||||||
@@ -165,6 +165,7 @@ void Connection::UpdateStatus()
|
|||||||
itsChanges.Random = 1;
|
itsChanges.Random = 1;
|
||||||
itsChanges.Repeat = 1;
|
itsChanges.Repeat = 1;
|
||||||
itsChanges.Single = 1;
|
itsChanges.Single = 1;
|
||||||
|
itsChanges.Consume = 1;
|
||||||
itsChanges.PlayerState = 1;
|
itsChanges.PlayerState = 1;
|
||||||
itsChanges.StatusFlags = 1;
|
itsChanges.StatusFlags = 1;
|
||||||
}
|
}
|
||||||
@@ -180,8 +181,9 @@ void Connection::UpdateStatus()
|
|||||||
itsChanges.Random = itsOldStatus->random != itsCurrentStatus->random;
|
itsChanges.Random = itsOldStatus->random != itsCurrentStatus->random;
|
||||||
itsChanges.Repeat = itsOldStatus->repeat != itsCurrentStatus->repeat;
|
itsChanges.Repeat = itsOldStatus->repeat != itsCurrentStatus->repeat;
|
||||||
itsChanges.Single = itsOldStatus->single != itsCurrentStatus->single;
|
itsChanges.Single = itsOldStatus->single != itsCurrentStatus->single;
|
||||||
|
itsChanges.Consume = itsOldStatus->consume != itsCurrentStatus->consume;
|
||||||
itsChanges.PlayerState = itsOldStatus->state != itsCurrentStatus->state;
|
itsChanges.PlayerState = itsOldStatus->state != itsCurrentStatus->state;
|
||||||
itsChanges.StatusFlags = itsChanges.Repeat || itsChanges.Random || itsChanges.Single || itsChanges.Crossfade || itsChanges.DBUpdating;
|
itsChanges.StatusFlags = itsChanges.Repeat || itsChanges.Random || itsChanges.Single || itsChanges.Consume || itsChanges.Crossfade || itsChanges.DBUpdating;
|
||||||
}
|
}
|
||||||
itsUpdater(this, itsChanges, itsErrorHandlerUserdata);
|
itsUpdater(this, itsChanges, itsErrorHandlerUserdata);
|
||||||
}
|
}
|
||||||
@@ -495,6 +497,16 @@ void Connection::SetSingle(bool mode) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Connection::SetConsume(bool mode) const
|
||||||
|
{
|
||||||
|
if (isConnected)
|
||||||
|
{
|
||||||
|
mpd_sendConsumeCommand(itsConnection, mode);
|
||||||
|
if (!isCommandsListEnabled)
|
||||||
|
mpd_finishCommand(itsConnection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Connection::SetVolume(int vol)
|
void Connection::SetVolume(int vol)
|
||||||
{
|
{
|
||||||
if (isConnected)
|
if (isConnected)
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ namespace MPD
|
|||||||
|
|
||||||
struct StatusChanges
|
struct StatusChanges
|
||||||
{
|
{
|
||||||
StatusChanges() : Playlist(0), SongID(0), Database(0), DBUpdating(0), Volume(0), ElapsedTime(0), Crossfade(0), Random(0), Repeat(0), Single(0), PlayerState(0), StatusFlags(0) { }
|
StatusChanges() : Playlist(0), SongID(0), Database(0), DBUpdating(0), Volume(0), ElapsedTime(0), Crossfade(0), Random(0), Repeat(0), Single(0), Consume(0), PlayerState(0), StatusFlags(0) { }
|
||||||
bool Playlist:1;
|
bool Playlist:1;
|
||||||
bool SongID:1;
|
bool SongID:1;
|
||||||
bool Database:1;
|
bool Database:1;
|
||||||
@@ -59,6 +59,7 @@ namespace MPD
|
|||||||
bool Random:1;
|
bool Random:1;
|
||||||
bool Repeat:1;
|
bool Repeat:1;
|
||||||
bool Single:1;
|
bool Single:1;
|
||||||
|
bool Consume:1;
|
||||||
bool PlayerState:1;
|
bool PlayerState:1;
|
||||||
bool StatusFlags:1;
|
bool StatusFlags:1;
|
||||||
};
|
};
|
||||||
@@ -118,6 +119,7 @@ namespace MPD
|
|||||||
bool GetRepeat() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->repeat : 0; }
|
bool GetRepeat() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->repeat : 0; }
|
||||||
bool GetRandom() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->random : 0; }
|
bool GetRandom() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->random : 0; }
|
||||||
bool GetSingle() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->single : 0; }
|
bool GetSingle() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->single : 0; }
|
||||||
|
bool GetConsume() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->consume : 0; }
|
||||||
bool GetDBIsUpdating() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->updatingDb : 0; }
|
bool GetDBIsUpdating() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->updatingDb : 0; }
|
||||||
int GetVolume() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->volume : -1; }
|
int GetVolume() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->volume : -1; }
|
||||||
int GetCrossfade() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->crossfade : -1; }
|
int GetCrossfade() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->crossfade : -1; }
|
||||||
@@ -140,6 +142,7 @@ namespace MPD
|
|||||||
void SetRepeat(bool) const;
|
void SetRepeat(bool) const;
|
||||||
void SetRandom(bool) const;
|
void SetRandom(bool) const;
|
||||||
void SetSingle(bool) const;
|
void SetSingle(bool) const;
|
||||||
|
void SetConsume(bool) const;
|
||||||
void SetCrossfade(int) const;
|
void SetCrossfade(int) const;
|
||||||
void SetVolume(int);
|
void SetVolume(int);
|
||||||
|
|
||||||
|
|||||||
@@ -1109,6 +1109,11 @@ int main(int argc, char *argv[])
|
|||||||
Mpd->UpdateStatus();
|
Mpd->UpdateStatus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (Keypressed(input, Key.ToggleConsume))
|
||||||
|
{
|
||||||
|
Mpd->SetConsume(!Mpd->GetConsume());
|
||||||
|
Mpd->UpdateStatus();
|
||||||
|
}
|
||||||
else if (Keypressed(input, Key.ToggleCrossfade))
|
else if (Keypressed(input, Key.ToggleCrossfade))
|
||||||
{
|
{
|
||||||
Mpd->SetCrossfade(Mpd->GetCrossfade() ? 0 : Config.crossfade_time);
|
Mpd->SetCrossfade(Mpd->GetCrossfade() ? 0 : Config.crossfade_time);
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ void DefaultKeys(ncmpcpp_keys &keys)
|
|||||||
keys.ToggleRepeat[0] = 'r';
|
keys.ToggleRepeat[0] = 'r';
|
||||||
keys.ToggleRandom[0] = 'z';
|
keys.ToggleRandom[0] = 'z';
|
||||||
keys.ToggleSingle[0] = 'y';
|
keys.ToggleSingle[0] = 'y';
|
||||||
|
keys.ToggleConsume[0] = 'R';
|
||||||
keys.ToggleSpaceMode[0] = 't';
|
keys.ToggleSpaceMode[0] = 't';
|
||||||
keys.ToggleAddMode[0] = 'T';
|
keys.ToggleAddMode[0] = 'T';
|
||||||
keys.Shuffle[0] = 'Z';
|
keys.Shuffle[0] = 'Z';
|
||||||
@@ -185,6 +186,7 @@ void DefaultKeys(ncmpcpp_keys &keys)
|
|||||||
keys.ToggleRepeat[1] = null_key;
|
keys.ToggleRepeat[1] = null_key;
|
||||||
keys.ToggleRandom[1] = null_key;
|
keys.ToggleRandom[1] = null_key;
|
||||||
keys.ToggleSingle[1] = null_key;
|
keys.ToggleSingle[1] = null_key;
|
||||||
|
keys.ToggleConsume[1] = null_key;
|
||||||
keys.ToggleSpaceMode[1] = null_key;
|
keys.ToggleSpaceMode[1] = null_key;
|
||||||
keys.ToggleAddMode[1] = null_key;
|
keys.ToggleAddMode[1] = null_key;
|
||||||
keys.Shuffle[1] = null_key;
|
keys.Shuffle[1] = null_key;
|
||||||
@@ -357,6 +359,8 @@ void ReadKeys(ncmpcpp_keys &keys)
|
|||||||
GetKeys(key, keys.ToggleRandom);
|
GetKeys(key, keys.ToggleRandom);
|
||||||
else if (key.find("key_toggle_single ") != string::npos)
|
else if (key.find("key_toggle_single ") != string::npos)
|
||||||
GetKeys(key, keys.ToggleSingle);
|
GetKeys(key, keys.ToggleSingle);
|
||||||
|
else if (key.find("key_toggle_consume ") != string::npos)
|
||||||
|
GetKeys(key, keys.ToggleConsume);
|
||||||
else if (key.find("key_toggle_space_mode ") != string::npos)
|
else if (key.find("key_toggle_space_mode ") != string::npos)
|
||||||
GetKeys(key, keys.ToggleSpaceMode);
|
GetKeys(key, keys.ToggleSpaceMode);
|
||||||
else if (key.find("key_toggle_add_mode ") != string::npos)
|
else if (key.find("key_toggle_add_mode ") != string::npos)
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ struct ncmpcpp_keys
|
|||||||
int ToggleRepeat[2];
|
int ToggleRepeat[2];
|
||||||
int ToggleRandom[2];
|
int ToggleRandom[2];
|
||||||
int ToggleSingle[2];
|
int ToggleSingle[2];
|
||||||
|
int ToggleConsume[2];
|
||||||
int ToggleSpaceMode[2];
|
int ToggleSpaceMode[2];
|
||||||
int ToggleAddMode[2];
|
int ToggleAddMode[2];
|
||||||
int Shuffle[2];
|
int Shuffle[2];
|
||||||
|
|||||||
@@ -416,6 +416,7 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
|
|||||||
static char mpd_repeat;
|
static char mpd_repeat;
|
||||||
static char mpd_random;
|
static char mpd_random;
|
||||||
static char mpd_single;
|
static char mpd_single;
|
||||||
|
static char mpd_consume;
|
||||||
static char mpd_crossfade;
|
static char mpd_crossfade;
|
||||||
static char mpd_db_updating;
|
static char mpd_db_updating;
|
||||||
|
|
||||||
@@ -434,6 +435,11 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
|
|||||||
mpd_single = Mpd->GetSingle() ? 's' : 0;
|
mpd_single = Mpd->GetSingle() ? 's' : 0;
|
||||||
ShowMessage("Single mode is %s", !mpd_single ? "off" : "on");
|
ShowMessage("Single mode is %s", !mpd_single ? "off" : "on");
|
||||||
}
|
}
|
||||||
|
if (changed.Consume)
|
||||||
|
{
|
||||||
|
mpd_consume = Mpd->GetConsume() ? 'c' : 0;
|
||||||
|
ShowMessage("Consume mode is %s", !mpd_consume ? "off" : "on");
|
||||||
|
}
|
||||||
if (changed.Crossfade)
|
if (changed.Crossfade)
|
||||||
{
|
{
|
||||||
int crossfade = Mpd->GetCrossfade();
|
int crossfade = Mpd->GetCrossfade();
|
||||||
@@ -456,6 +462,8 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
|
|||||||
switch_state += mpd_random;
|
switch_state += mpd_random;
|
||||||
if (mpd_single)
|
if (mpd_single)
|
||||||
switch_state += mpd_single;
|
switch_state += mpd_single;
|
||||||
|
if (mpd_consume)
|
||||||
|
switch_state += mpd_consume;
|
||||||
if (mpd_crossfade)
|
if (mpd_crossfade)
|
||||||
switch_state += mpd_crossfade;
|
switch_state += mpd_crossfade;
|
||||||
if (mpd_db_updating)
|
if (mpd_db_updating)
|
||||||
|
|||||||
Reference in New Issue
Block a user