handle single command and remove hacks used as substitute for it
mpd-git has single command, which provides functionality of both "repeat one" and "stop after current track" modes. repeat one = single && repeat stop after current track = single && !repeat
This commit is contained in:
@@ -124,8 +124,6 @@
|
|||||||
#
|
#
|
||||||
#autocenter_mode = "no"
|
#autocenter_mode = "no"
|
||||||
#
|
#
|
||||||
#repeat_one_mode = "no"
|
|
||||||
#
|
|
||||||
#default_place_to_search_in = "database" (database/playlist)
|
#default_place_to_search_in = "database" (database/playlist)
|
||||||
#
|
#
|
||||||
#media_library_left_column = "a" (possible values: a,y,g,c,p, legend above)
|
#media_library_left_column = "a" (possible values: a,y,g,c,p, legend above)
|
||||||
|
|||||||
6
doc/keys
6
doc/keys
@@ -70,10 +70,10 @@
|
|||||||
#
|
#
|
||||||
#key_toggle_repeat = 'r'
|
#key_toggle_repeat = 'r'
|
||||||
#
|
#
|
||||||
#key_toggle_repeat_one = 'R'
|
|
||||||
#
|
|
||||||
#key_toggle_random = 'z'
|
#key_toggle_random = 'z'
|
||||||
#
|
#
|
||||||
|
#key_toggle_single = 'y'
|
||||||
|
#
|
||||||
#key_shuffle = 'Z'
|
#key_shuffle = 'Z'
|
||||||
#
|
#
|
||||||
#key_toggle_crossfade = 'x'
|
#key_toggle_crossfade = 'x'
|
||||||
@@ -136,8 +136,6 @@
|
|||||||
#
|
#
|
||||||
#key_go_to_containing_directory = 'G'
|
#key_go_to_containing_directory = 'G'
|
||||||
#
|
#
|
||||||
#key_start_searching = 'y'
|
|
||||||
#
|
|
||||||
#key_go_to_parent_dir = 263 127
|
#key_go_to_parent_dir = 263 127
|
||||||
#
|
#
|
||||||
#key_switch_tag_type_list = '`'
|
#key_switch_tag_type_list = '`'
|
||||||
|
|||||||
@@ -144,9 +144,6 @@ If enabled, statusbar will be displayed, otherwise hidden.
|
|||||||
.B autocenter_mode = yes/no
|
.B autocenter_mode = yes/no
|
||||||
Default state for autocenter mode at start.
|
Default state for autocenter mode at start.
|
||||||
.TP
|
.TP
|
||||||
.B repeat_one_mode = yes/no
|
|
||||||
Default state for "repeat one" mode at start.
|
|
||||||
.TP
|
|
||||||
.B default_find_mode = wrapped/normal
|
.B default_find_mode = wrapped/normal
|
||||||
If set to "wrapped", going from last found position to next will take you to the first one (same goes for the first position and going to previous one), otherwise no actions will be performed.
|
If set to "wrapped", going from last found position to next will take you to the first one (same goes for the first position and going to previous one), otherwise no actions will be performed.
|
||||||
.TP
|
.TP
|
||||||
|
|||||||
@@ -161,8 +161,8 @@ void Help::GetKeybindings()
|
|||||||
*w << DisplayKeys(Key.AddSelected) << "Add selected items to playlist/m3u file\n\n";
|
*w << DisplayKeys(Key.AddSelected) << "Add selected items to playlist/m3u file\n\n";
|
||||||
|
|
||||||
*w << DisplayKeys(Key.ToggleRepeat) << "Toggle repeat mode\n";
|
*w << DisplayKeys(Key.ToggleRepeat) << "Toggle repeat mode\n";
|
||||||
*w << DisplayKeys(Key.ToggleRepeatOne) << "Toggle \"repeat one\" 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.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";
|
||||||
@@ -202,7 +202,6 @@ void Help::GetKeybindings()
|
|||||||
*w << DisplayKeys(Key.SavePlaylist) << "Save playlist\n";
|
*w << DisplayKeys(Key.SavePlaylist) << "Save playlist\n";
|
||||||
*w << DisplayKeys(Key.SortPlaylist) << "Sort/reverse playlist\n";
|
*w << DisplayKeys(Key.SortPlaylist) << "Sort/reverse playlist\n";
|
||||||
*w << DisplayKeys(Key.GoToNowPlaying) << "Go to currently playing position\n";
|
*w << DisplayKeys(Key.GoToNowPlaying) << "Go to currently playing position\n";
|
||||||
*w << DisplayKeys(Key.StartSearching) << "Toggle \"stop playing after current song\" option\n";
|
|
||||||
*w << DisplayKeys(Key.ToggleAutoCenter) << "Toggle auto center mode\n\n\n";
|
*w << DisplayKeys(Key.ToggleAutoCenter) << "Toggle auto center mode\n\n\n";
|
||||||
|
|
||||||
*w << " " << fmtBold << "Keys - Browse screen\n -----------------------------------------\n" << fmtBoldEnd;
|
*w << " " << fmtBold << "Keys - Browse screen\n -----------------------------------------\n" << fmtBoldEnd;
|
||||||
@@ -218,7 +217,7 @@ void Help::GetKeybindings()
|
|||||||
*w << " " << fmtBold << "Keys - Search engine\n -----------------------------------------\n" << fmtBoldEnd;
|
*w << " " << fmtBold << "Keys - Search engine\n -----------------------------------------\n" << fmtBoldEnd;
|
||||||
*w << DisplayKeys(Key.Enter) << "Add item to playlist and play/change option\n";
|
*w << DisplayKeys(Key.Enter) << "Add item to playlist and play/change option\n";
|
||||||
*w << DisplayKeys(Key.Space) << "Add item to playlist\n";
|
*w << DisplayKeys(Key.Space) << "Add item to playlist\n";
|
||||||
*w << DisplayKeys(Key.StartSearching) << "Start searching immediately\n\n\n";
|
*w << DisplayKeys(Key.ToggleSingle) << "Start searching immediately\n\n\n";
|
||||||
|
|
||||||
|
|
||||||
*w << " " << fmtBold << "Keys - Media library\n -----------------------------------------\n" << fmtBoldEnd;
|
*w << " " << fmtBold << "Keys - Media library\n -----------------------------------------\n" << fmtBoldEnd;
|
||||||
|
|||||||
@@ -739,6 +739,7 @@ mpd_Status * mpd_getStatus(mpd_Connection * connection) {
|
|||||||
status->volume = -1;
|
status->volume = -1;
|
||||||
status->repeat = 0;
|
status->repeat = 0;
|
||||||
status->random = 0;
|
status->random = 0;
|
||||||
|
status->single = 0;
|
||||||
status->playlist = -1;
|
status->playlist = -1;
|
||||||
status->playlistLength = -1;
|
status->playlistLength = -1;
|
||||||
status->state = -1;
|
status->state = -1;
|
||||||
@@ -769,6 +770,9 @@ mpd_Status * mpd_getStatus(mpd_Connection * connection) {
|
|||||||
else if(strcmp(re->name,"random")==0) {
|
else if(strcmp(re->name,"random")==0) {
|
||||||
status->random = atoi(re->value);
|
status->random = atoi(re->value);
|
||||||
}
|
}
|
||||||
|
else if(strcmp(re->name,"single")==0) {
|
||||||
|
status->single = 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);
|
||||||
}
|
}
|
||||||
@@ -1692,6 +1696,14 @@ void mpd_sendRandomCommand(mpd_Connection * connection, int randomMode) {
|
|||||||
free(string);
|
free(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mpd_sendSingleCommand(mpd_Connection * connection, int singleMode) {
|
||||||
|
int len = strlen("single")+2+INTLEN+3;
|
||||||
|
char *string = malloc(len);
|
||||||
|
snprintf(string, len, "single \"%i\"\n", singleMode);
|
||||||
|
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);
|
||||||
|
|||||||
@@ -173,6 +173,8 @@ typedef struct mpd_Status {
|
|||||||
int repeat;
|
int repeat;
|
||||||
/* 1 if random is on, 0 otherwise */
|
/* 1 if random is on, 0 otherwise */
|
||||||
int random;
|
int random;
|
||||||
|
/* 1 if single mode is on, 0 otherwise */
|
||||||
|
int single;
|
||||||
/* 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 */
|
||||||
@@ -520,6 +522,8 @@ void mpd_sendRepeatCommand(mpd_Connection * connection, int repeatMode);
|
|||||||
|
|
||||||
void mpd_sendRandomCommand(mpd_Connection * connection, int randomMode);
|
void mpd_sendRandomCommand(mpd_Connection * connection, int randomMode);
|
||||||
|
|
||||||
|
void mpd_sendSingleCommand(mpd_Connection * connection, int singleMode);
|
||||||
|
|
||||||
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 */
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ void Connection::UpdateStatus()
|
|||||||
itsChanges.Crossfade = 1;
|
itsChanges.Crossfade = 1;
|
||||||
itsChanges.Random = 1;
|
itsChanges.Random = 1;
|
||||||
itsChanges.Repeat = 1;
|
itsChanges.Repeat = 1;
|
||||||
|
itsChanges.Single = 1;
|
||||||
itsChanges.PlayerState = 1;
|
itsChanges.PlayerState = 1;
|
||||||
itsChanges.StatusFlags = 1;
|
itsChanges.StatusFlags = 1;
|
||||||
}
|
}
|
||||||
@@ -178,8 +179,9 @@ void Connection::UpdateStatus()
|
|||||||
itsChanges.Crossfade = itsOldStatus->crossfade != itsCurrentStatus->crossfade;
|
itsChanges.Crossfade = itsOldStatus->crossfade != itsCurrentStatus->crossfade;
|
||||||
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.PlayerState = itsOldStatus->state != itsCurrentStatus->state;
|
itsChanges.PlayerState = itsOldStatus->state != itsCurrentStatus->state;
|
||||||
itsChanges.StatusFlags = itsChanges.Repeat || itsChanges.Random || itsChanges.Crossfade || itsChanges.DBUpdating;
|
itsChanges.StatusFlags = itsChanges.Repeat || itsChanges.Random || itsChanges.Single || itsChanges.Crossfade || itsChanges.DBUpdating;
|
||||||
}
|
}
|
||||||
itsUpdater(this, itsChanges, itsErrorHandlerUserdata);
|
itsUpdater(this, itsChanges, itsErrorHandlerUserdata);
|
||||||
}
|
}
|
||||||
@@ -482,6 +484,16 @@ void Connection::SetRandom(bool mode) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Connection::SetSingle(bool mode) const
|
||||||
|
{
|
||||||
|
if (isConnected)
|
||||||
|
{
|
||||||
|
mpd_sendSingleCommand(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), 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), PlayerState(0), StatusFlags(0) { }
|
||||||
bool Playlist:1;
|
bool Playlist:1;
|
||||||
bool SongID:1;
|
bool SongID:1;
|
||||||
bool Database:1;
|
bool Database:1;
|
||||||
@@ -58,6 +58,7 @@ namespace MPD
|
|||||||
bool Crossfade:1;
|
bool Crossfade:1;
|
||||||
bool Random:1;
|
bool Random:1;
|
||||||
bool Repeat:1;
|
bool Repeat:1;
|
||||||
|
bool Single:1;
|
||||||
bool PlayerState:1;
|
bool PlayerState:1;
|
||||||
bool StatusFlags:1;
|
bool StatusFlags:1;
|
||||||
};
|
};
|
||||||
@@ -116,6 +117,7 @@ namespace MPD
|
|||||||
PlayerState GetState() const { return isConnected && itsCurrentStatus ? (PlayerState)itsCurrentStatus->state : psUnknown; }
|
PlayerState GetState() const { return isConnected && itsCurrentStatus ? (PlayerState)itsCurrentStatus->state : psUnknown; }
|
||||||
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 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; }
|
||||||
@@ -137,6 +139,7 @@ namespace MPD
|
|||||||
|
|
||||||
void SetRepeat(bool) const;
|
void SetRepeat(bool) const;
|
||||||
void SetRandom(bool) const;
|
void SetRandom(bool) const;
|
||||||
|
void SetSingle(bool) const;
|
||||||
void SetCrossfade(int) const;
|
void SetCrossfade(int) const;
|
||||||
void SetVolume(int);
|
void SetVolume(int);
|
||||||
|
|
||||||
|
|||||||
@@ -1080,11 +1080,6 @@ int main(int argc, char *argv[])
|
|||||||
Mpd->SetRepeat(!Mpd->GetRepeat());
|
Mpd->SetRepeat(!Mpd->GetRepeat());
|
||||||
Mpd->UpdateStatus();
|
Mpd->UpdateStatus();
|
||||||
}
|
}
|
||||||
else if (Keypressed(input, Key.ToggleRepeatOne))
|
|
||||||
{
|
|
||||||
Config.repeat_one_mode = !Config.repeat_one_mode;
|
|
||||||
ShowMessage("'Repeat one' mode: %s", Config.repeat_one_mode ? "On" : "Off");
|
|
||||||
}
|
|
||||||
else if (Keypressed(input, Key.Shuffle))
|
else if (Keypressed(input, Key.Shuffle))
|
||||||
{
|
{
|
||||||
Mpd->Shuffle();
|
Mpd->Shuffle();
|
||||||
@@ -1095,6 +1090,22 @@ int main(int argc, char *argv[])
|
|||||||
Mpd->SetRandom(!Mpd->GetRandom());
|
Mpd->SetRandom(!Mpd->GetRandom());
|
||||||
Mpd->UpdateStatus();
|
Mpd->UpdateStatus();
|
||||||
}
|
}
|
||||||
|
else if (Keypressed(input, Key.ToggleSingle))
|
||||||
|
{
|
||||||
|
if (myScreen == mySearcher && !mySearcher->Main()->isStatic(0))
|
||||||
|
{
|
||||||
|
mySearcher->Main()->Highlight(SearchEngine::SearchButton);
|
||||||
|
mySearcher->Main()->Highlighting(0);
|
||||||
|
mySearcher->Main()->Refresh();
|
||||||
|
mySearcher->Main()->Highlighting(1);
|
||||||
|
mySearcher->EnterPressed();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Mpd->SetSingle(!Mpd->GetSingle());
|
||||||
|
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);
|
||||||
@@ -1276,22 +1287,6 @@ int main(int argc, char *argv[])
|
|||||||
if (s)
|
if (s)
|
||||||
myBrowser->LocateSong(*s);
|
myBrowser->LocateSong(*s);
|
||||||
}
|
}
|
||||||
else if (Keypressed(input, Key.StartSearching))
|
|
||||||
{
|
|
||||||
if (myScreen == myPlaylist && myPlaylist->isPlaying())
|
|
||||||
{
|
|
||||||
Config.stop_after_current_song = !Config.stop_after_current_song;
|
|
||||||
ShowMessage("Stop playing after current song: %s", Config.stop_after_current_song ? "on" : "off");
|
|
||||||
}
|
|
||||||
else if (myScreen == mySearcher && !mySearcher->Main()->isStatic(0))
|
|
||||||
{
|
|
||||||
mySearcher->Main()->Highlight(SearchEngine::SearchButton);
|
|
||||||
mySearcher->Main()->Highlighting(0);
|
|
||||||
mySearcher->Main()->Refresh();
|
|
||||||
mySearcher->Main()->Highlighting(1);
|
|
||||||
mySearcher->EnterPressed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (Keypressed(input, Key.GoToPosition))
|
else if (Keypressed(input, Key.GoToPosition))
|
||||||
{
|
{
|
||||||
const Song *s = myPlaylist->NowPlayingSong();
|
const Song *s = myPlaylist->NowPlayingSong();
|
||||||
|
|||||||
@@ -117,8 +117,8 @@ void DefaultKeys(ncmpcpp_keys &keys)
|
|||||||
keys.SeekForward[0] = 'f';
|
keys.SeekForward[0] = 'f';
|
||||||
keys.SeekBackward[0] = 'b';
|
keys.SeekBackward[0] = 'b';
|
||||||
keys.ToggleRepeat[0] = 'r';
|
keys.ToggleRepeat[0] = 'r';
|
||||||
keys.ToggleRepeatOne[0] = 'R';
|
|
||||||
keys.ToggleRandom[0] = 'z';
|
keys.ToggleRandom[0] = 'z';
|
||||||
|
keys.ToggleSingle[0] = 'y';
|
||||||
keys.ToggleSpaceMode[0] = 't';
|
keys.ToggleSpaceMode[0] = 't';
|
||||||
keys.ToggleAddMode[0] = 'T';
|
keys.ToggleAddMode[0] = 'T';
|
||||||
keys.Shuffle[0] = 'Z';
|
keys.Shuffle[0] = 'Z';
|
||||||
@@ -149,7 +149,6 @@ void DefaultKeys(ncmpcpp_keys &keys)
|
|||||||
keys.SavePlaylist[0] = 'S';
|
keys.SavePlaylist[0] = 'S';
|
||||||
keys.GoToNowPlaying[0] = 'o';
|
keys.GoToNowPlaying[0] = 'o';
|
||||||
keys.GoToContainingDir[0] = 'G';
|
keys.GoToContainingDir[0] = 'G';
|
||||||
keys.StartSearching[0] = 'y';
|
|
||||||
keys.ToggleAutoCenter[0] = 'U';
|
keys.ToggleAutoCenter[0] = 'U';
|
||||||
keys.ToggleDisplayMode[0] = 'p';
|
keys.ToggleDisplayMode[0] = 'p';
|
||||||
keys.ToggleLyricsDB[0] = 'L';
|
keys.ToggleLyricsDB[0] = 'L';
|
||||||
@@ -184,8 +183,8 @@ void DefaultKeys(ncmpcpp_keys &keys)
|
|||||||
keys.SeekForward[1] = null_key;
|
keys.SeekForward[1] = null_key;
|
||||||
keys.SeekBackward[1] = null_key;
|
keys.SeekBackward[1] = null_key;
|
||||||
keys.ToggleRepeat[1] = null_key;
|
keys.ToggleRepeat[1] = null_key;
|
||||||
keys.ToggleRepeatOne[1] = null_key;
|
|
||||||
keys.ToggleRandom[1] = null_key;
|
keys.ToggleRandom[1] = null_key;
|
||||||
|
keys.ToggleSingle[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;
|
||||||
@@ -216,7 +215,6 @@ void DefaultKeys(ncmpcpp_keys &keys)
|
|||||||
keys.SavePlaylist[1] = null_key;
|
keys.SavePlaylist[1] = null_key;
|
||||||
keys.GoToNowPlaying[1] = null_key;
|
keys.GoToNowPlaying[1] = null_key;
|
||||||
keys.GoToContainingDir[1] = null_key;
|
keys.GoToContainingDir[1] = null_key;
|
||||||
keys.StartSearching[1] = null_key;
|
|
||||||
keys.ToggleAutoCenter[1] = null_key;
|
keys.ToggleAutoCenter[1] = null_key;
|
||||||
keys.ToggleDisplayMode[1] = null_key;
|
keys.ToggleDisplayMode[1] = null_key;
|
||||||
keys.ToggleLyricsDB[1] = null_key;
|
keys.ToggleLyricsDB[1] = null_key;
|
||||||
@@ -263,7 +261,6 @@ void DefaultConfiguration(ncmpcpp_config &conf)
|
|||||||
conf.header_visibility = true;
|
conf.header_visibility = true;
|
||||||
conf.statusbar_visibility = true;
|
conf.statusbar_visibility = true;
|
||||||
conf.autocenter_mode = false;
|
conf.autocenter_mode = false;
|
||||||
conf.repeat_one_mode = false;
|
|
||||||
conf.wrapped_search = true;
|
conf.wrapped_search = true;
|
||||||
conf.space_selects = false;
|
conf.space_selects = false;
|
||||||
conf.ncmpc_like_songs_adding = false;
|
conf.ncmpc_like_songs_adding = false;
|
||||||
@@ -275,7 +272,6 @@ void DefaultConfiguration(ncmpcpp_config &conf)
|
|||||||
conf.display_screens_numbers_on_start = true;
|
conf.display_screens_numbers_on_start = true;
|
||||||
conf.clock_display_seconds = false;
|
conf.clock_display_seconds = false;
|
||||||
conf.ignore_leading_the = false;
|
conf.ignore_leading_the = false;
|
||||||
conf.stop_after_current_song = false;
|
|
||||||
conf.block_search_constraints_change = true;
|
conf.block_search_constraints_change = true;
|
||||||
conf.use_console_editor = false;
|
conf.use_console_editor = false;
|
||||||
conf.set_window_title = true;
|
conf.set_window_title = true;
|
||||||
@@ -356,10 +352,10 @@ void ReadKeys(ncmpcpp_keys &keys)
|
|||||||
GetKeys(key, keys.SeekBackward);
|
GetKeys(key, keys.SeekBackward);
|
||||||
else if (key.find("key_toggle_repeat ") != string::npos)
|
else if (key.find("key_toggle_repeat ") != string::npos)
|
||||||
GetKeys(key, keys.ToggleRepeat);
|
GetKeys(key, keys.ToggleRepeat);
|
||||||
else if (key.find("key_toggle_repeat_one ") != string::npos)
|
|
||||||
GetKeys(key, keys.ToggleRepeatOne);
|
|
||||||
else if (key.find("key_toggle_random ") != string::npos)
|
else if (key.find("key_toggle_random ") != string::npos)
|
||||||
GetKeys(key, keys.ToggleRandom);
|
GetKeys(key, keys.ToggleRandom);
|
||||||
|
else if (key.find("key_toggle_single ") != string::npos)
|
||||||
|
GetKeys(key, keys.ToggleSingle);
|
||||||
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)
|
||||||
@@ -426,8 +422,6 @@ void ReadKeys(ncmpcpp_keys &keys)
|
|||||||
GetKeys(key, keys.ToggleLyricsDB);
|
GetKeys(key, keys.ToggleLyricsDB);
|
||||||
else if (key.find("key_go_to_containing_directory ") != string::npos)
|
else if (key.find("key_go_to_containing_directory ") != string::npos)
|
||||||
GetKeys(key, keys.GoToContainingDir);
|
GetKeys(key, keys.GoToContainingDir);
|
||||||
else if (key.find("key_start_searching ") != string::npos)
|
|
||||||
GetKeys(key, keys.StartSearching);
|
|
||||||
else if (key.find("key_go_to_parent_dir ") != string::npos)
|
else if (key.find("key_go_to_parent_dir ") != string::npos)
|
||||||
GetKeys(key, keys.GoToParentDir);
|
GetKeys(key, keys.GoToParentDir);
|
||||||
else if (key.find("key_switch_tag_type_list ") != string::npos)
|
else if (key.find("key_switch_tag_type_list ") != string::npos)
|
||||||
@@ -608,10 +602,6 @@ void ReadConfiguration(ncmpcpp_config &conf)
|
|||||||
{
|
{
|
||||||
conf.autocenter_mode = v == "yes";
|
conf.autocenter_mode = v == "yes";
|
||||||
}
|
}
|
||||||
else if (cl.find("repeat_one_mode") != string::npos)
|
|
||||||
{
|
|
||||||
conf.repeat_one_mode = v == "yes";
|
|
||||||
}
|
|
||||||
else if (cl.find("default_find_mode") != string::npos)
|
else if (cl.find("default_find_mode") != string::npos)
|
||||||
{
|
{
|
||||||
conf.wrapped_search = v == "wrapped";
|
conf.wrapped_search = v == "wrapped";
|
||||||
|
|||||||
@@ -64,8 +64,8 @@ struct ncmpcpp_keys
|
|||||||
int SeekForward[2];
|
int SeekForward[2];
|
||||||
int SeekBackward[2];
|
int SeekBackward[2];
|
||||||
int ToggleRepeat[2];
|
int ToggleRepeat[2];
|
||||||
int ToggleRepeatOne[2];
|
|
||||||
int ToggleRandom[2];
|
int ToggleRandom[2];
|
||||||
|
int ToggleSingle[2];
|
||||||
int ToggleSpaceMode[2];
|
int ToggleSpaceMode[2];
|
||||||
int ToggleAddMode[2];
|
int ToggleAddMode[2];
|
||||||
int Shuffle[2];
|
int Shuffle[2];
|
||||||
@@ -96,7 +96,6 @@ struct ncmpcpp_keys
|
|||||||
int SavePlaylist[2];
|
int SavePlaylist[2];
|
||||||
int GoToNowPlaying[2];
|
int GoToNowPlaying[2];
|
||||||
int GoToContainingDir[2];
|
int GoToContainingDir[2];
|
||||||
int StartSearching[2];
|
|
||||||
int ToggleAutoCenter[2];
|
int ToggleAutoCenter[2];
|
||||||
int ToggleDisplayMode[2];
|
int ToggleDisplayMode[2];
|
||||||
int ToggleLyricsDB[2];
|
int ToggleLyricsDB[2];
|
||||||
@@ -153,7 +152,6 @@ struct ncmpcpp_config
|
|||||||
bool header_visibility;
|
bool header_visibility;
|
||||||
bool statusbar_visibility;
|
bool statusbar_visibility;
|
||||||
bool autocenter_mode;
|
bool autocenter_mode;
|
||||||
bool repeat_one_mode;
|
|
||||||
bool wrapped_search;
|
bool wrapped_search;
|
||||||
bool space_selects;
|
bool space_selects;
|
||||||
bool ncmpc_like_songs_adding;
|
bool ncmpc_like_songs_adding;
|
||||||
@@ -165,7 +163,6 @@ struct ncmpcpp_config
|
|||||||
bool display_screens_numbers_on_start;
|
bool display_screens_numbers_on_start;
|
||||||
bool clock_display_seconds;
|
bool clock_display_seconds;
|
||||||
bool ignore_leading_the;
|
bool ignore_leading_the;
|
||||||
bool stop_after_current_song;
|
|
||||||
bool block_search_constraints_change;
|
bool block_search_constraints_change;
|
||||||
bool use_console_editor;
|
bool use_console_editor;
|
||||||
|
|
||||||
|
|||||||
@@ -175,7 +175,6 @@ void NcmpcppErrorCallback(Connection *Mpd, int errorid, const char *msg, void *)
|
|||||||
void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
|
void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
|
||||||
{
|
{
|
||||||
static size_t playing_song_scroll_begin = 0;
|
static size_t playing_song_scroll_begin = 0;
|
||||||
static bool repeat_one_allowed = 0;
|
|
||||||
static string player_state;
|
static string player_state;
|
||||||
static MPD::Song np;
|
static MPD::Song np;
|
||||||
|
|
||||||
@@ -324,7 +323,6 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
|
|||||||
wFooter->SetColor(Config.statusbar_color);
|
wFooter->SetColor(Config.statusbar_color);
|
||||||
Playlist::ReloadRemaining = 1;
|
Playlist::ReloadRemaining = 1;
|
||||||
myPlaylist->NowPlaying = -1;
|
myPlaylist->NowPlaying = -1;
|
||||||
Config.stop_after_current_song = 0;
|
|
||||||
player_state.clear();
|
player_state.clear();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -342,30 +340,21 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
|
|||||||
{
|
{
|
||||||
if (myPlaylist->isPlaying())
|
if (myPlaylist->isPlaying())
|
||||||
{
|
{
|
||||||
if (Config.repeat_one_mode && repeat_one_allowed)
|
|
||||||
Mpd->Play(myPlaylist->OldPlaying);
|
|
||||||
np = Mpd->GetCurrentSong();
|
np = Mpd->GetCurrentSong();
|
||||||
WindowTitle(utf_to_locale_cpy(np.toString(Config.song_window_title_format)));
|
WindowTitle(utf_to_locale_cpy(np.toString(Config.song_window_title_format)));
|
||||||
if (Config.autocenter_mode && !myPlaylist->Main()->isFiltered())
|
if (Config.autocenter_mode && !myPlaylist->Main()->isFiltered())
|
||||||
myPlaylist->Main()->Highlight(myPlaylist->NowPlaying);
|
myPlaylist->Main()->Highlight(myPlaylist->NowPlaying);
|
||||||
repeat_one_allowed = 0;
|
|
||||||
|
|
||||||
if (!Mpd->GetElapsedTime())
|
if (!Mpd->GetElapsedTime())
|
||||||
mvwhline(wFooter->Raw(), 0, 0, 0, wFooter->GetWidth());
|
mvwhline(wFooter->Raw(), 0, 0, 0, wFooter->GetWidth());
|
||||||
|
|
||||||
if (Config.now_playing_lyrics && !Config.repeat_one_mode && myScreen == myLyrics && myOldScreen == myPlaylist)
|
if (Config.now_playing_lyrics && !Mpd->GetSingle() && myScreen == myLyrics && myOldScreen == myPlaylist)
|
||||||
Lyrics::Reload = 1;
|
Lyrics::Reload = 1;
|
||||||
}
|
}
|
||||||
Playlist::ReloadRemaining = 1;
|
Playlist::ReloadRemaining = 1;
|
||||||
|
|
||||||
playing_song_scroll_begin = 0;
|
playing_song_scroll_begin = 0;
|
||||||
|
|
||||||
if (Config.stop_after_current_song)
|
|
||||||
{
|
|
||||||
Mpd->Stop();
|
|
||||||
Config.stop_after_current_song = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Mpd->GetState() == psPlay)
|
if (Mpd->GetState() == psPlay)
|
||||||
{
|
{
|
||||||
changed.ElapsedTime = 1;
|
changed.ElapsedTime = 1;
|
||||||
@@ -377,10 +366,6 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
|
|||||||
{
|
{
|
||||||
int elapsed = Mpd->GetElapsedTime();
|
int elapsed = Mpd->GetElapsedTime();
|
||||||
|
|
||||||
// 'repeat one' mode check - be sure that we deal with item with known length
|
|
||||||
if (np.GetTotalLength() && elapsed == np.GetTotalLength()-1)
|
|
||||||
repeat_one_allowed = 1;
|
|
||||||
|
|
||||||
if (!block_statusbar_update && Config.statusbar_visibility)
|
if (!block_statusbar_update && Config.statusbar_visibility)
|
||||||
{
|
{
|
||||||
string tracklength;
|
string tracklength;
|
||||||
@@ -427,6 +412,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_crossfade;
|
static char mpd_crossfade;
|
||||||
static char mpd_db_updating;
|
static char mpd_db_updating;
|
||||||
|
|
||||||
@@ -440,6 +426,11 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
|
|||||||
mpd_random = Mpd->GetRandom() ? 'z' : 0;
|
mpd_random = Mpd->GetRandom() ? 'z' : 0;
|
||||||
ShowMessage("Random is %s", !mpd_random ? "off" : "on");
|
ShowMessage("Random is %s", !mpd_random ? "off" : "on");
|
||||||
}
|
}
|
||||||
|
if (changed.Single)
|
||||||
|
{
|
||||||
|
mpd_single = Mpd->GetSingle() ? 's' : 0;
|
||||||
|
ShowMessage("Single is %s", !mpd_single ? "off" : "on");
|
||||||
|
}
|
||||||
if (changed.Crossfade)
|
if (changed.Crossfade)
|
||||||
{
|
{
|
||||||
int crossfade = Mpd->GetCrossfade();
|
int crossfade = Mpd->GetCrossfade();
|
||||||
@@ -460,6 +451,8 @@ void NcmpcppStatusChanged(Connection *Mpd, StatusChanges changed, void *)
|
|||||||
switch_state += mpd_repeat;
|
switch_state += mpd_repeat;
|
||||||
if (mpd_random)
|
if (mpd_random)
|
||||||
switch_state += mpd_random;
|
switch_state += mpd_random;
|
||||||
|
if (mpd_single)
|
||||||
|
switch_state += mpd_single;
|
||||||
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