corrections for previous commit

This commit is contained in:
Andrzej Rybczak
2012-07-15 21:58:24 +02:00
parent 6c73c3cecf
commit 27a0dc958f
7 changed files with 74 additions and 42 deletions

View File

@@ -100,6 +100,9 @@ void Browser::SwitchTo()
if (hasToBeResized || myLockedScreen)
Resize();
if (isLocal() && Config.browser_sort_mode == smMTime) // local browser doesn't support sorting by mtime
Config.browser_sort_mode = smName;
w->Empty() ? myBrowser->GetDirectory(itsBrowsedDir) : myBrowser->UpdateItemList();
if (myScreen != this && myScreen->isTabbable())

View File

@@ -298,30 +298,36 @@ int CaseInsensitiveStringComparison::operator()(const std::string &a, const std:
bool CaseInsensitiveSorting::operator()(const MPD::Item &a, const MPD::Item &b)
{
bool result;
if (a.type == b.type)
{
switch (a.type)
{
case MPD::itDirectory:
return cmp(ExtractTopName(a.name), ExtractTopName(b.name)) < 0;
result = cmp(ExtractTopName(a.name), ExtractTopName(b.name)) < 0;
break;
case MPD::itPlaylist:
return cmp(a.name, b.name) < 0;
case MPD::itSong: {
unsigned mode = Config.sort_mode;
if (myBrowser->isLocal() && mode == 1) mode = 0; // local browser doesn't support sorting by mtime.
switch (mode) {
case 0: return operator()(a.song, b.song);
case 1: return a.song->GetMTime() > b.song->GetMTime();
case 2: return cmp(a.song->toString(Config.sort_format), b.song->toString(Config.sort_format)) < 0;
default: return 0; // no other mode.
result = cmp(a.name, b.name) < 0;
break;
case MPD::itSong:
switch (Config.browser_sort_mode)
{
case smName:
result = operator()(a.song, b.song);
break;
case smMTime:
result = a.song->GetMTime() > b.song->GetMTime();
break;
case smCustomFormat:
result = cmp(a.song->toString(Config.browser_sort_format), b.song->toString(Config.browser_sort_format)) < 0;
break;
}
}
default: // there's no other type, just silence compiler.
return 0;
break;
}
}
else
return a.type < b.type;
result = a.type < b.type;
return result;
}
std::string Timestamp(time_t t)

View File

@@ -2175,15 +2175,28 @@ int main(int argc, char **argv)
if (number && (answer == 's' ? Mpd.AddRandomSongs(number) : Mpd.AddRandomTag(tag_type, number)))
ShowMessage("%zu random %s%s added to playlist!", number, tag_type_str.c_str(), number == 1 ? "" : "s");
}
else if (myScreen == myBrowser && !myBrowser->isLocal())
else if (myScreen == myBrowser)
{
Config.sort_mode = (Config.sort_mode + 1) % 3;
myBrowser->Main()->Sort<CaseInsensitiveSorting>(myBrowser->CurrentDir() != "/");
switch (Config.sort_mode) {
case 0: ShowMessage("Sort songs by: Name"); break;
case 1: ShowMessage("Sort songs by: Modification time"); break;
case 2: ShowMessage("Sort songs by: Custom format"); break;
switch (Config.browser_sort_mode)
{
case smName:
if (!myBrowser->isLocal())
{
Config.browser_sort_mode = smMTime;
ShowMessage("Sort songs by: Modification time");
break;
}
// local browser doesn't support sorting by mtime, so we just skip it.
case smMTime:
Config.browser_sort_mode = smCustomFormat;
ShowMessage("Sort songs by: Custom format");
break;
case smCustomFormat:
Config.browser_sort_mode = smName;
ShowMessage("Sort songs by: Name");
break;
}
myBrowser->Main()->Sort<CaseInsensitiveSorting>(myBrowser->CurrentDir() != "/");
}
else if (myScreen->ActiveWindow() == myLibrary->Artists
|| (myLibrary->Columns() == 2 && myScreen->ActiveWindow() == myLibrary->Albums))

View File

@@ -372,7 +372,7 @@ void NcmpcppConfig::SetDefaults()
song_status_format_no_colors = song_status_format;
song_window_title_format = "{{%a - }{%t}|{%f}}";
song_library_format = "{{%n - }{%t}|{%f}}";
sort_format = "{%b~%n}|{~%n}|{~~%t}|{~~%f}";
browser_sort_format = "{{%a - }{%t}|{%f} {(%l)}}";
tag_editor_album_format = "{{(%y) }%b}";
new_header_first_line = "{$b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b}";
new_header_second_line = "{{{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}}";
@@ -464,7 +464,6 @@ void NcmpcppConfig::SetDefaults()
lines_scrolled = 2;
search_engine_default_search_mode = 0;
visualizer_sync_interval = 30;
sort_mode = 0;
locked_screen_width_part = 0.5;
selected_item_suffix_length = 0;
now_playing_suffix_length = 0;
@@ -474,6 +473,7 @@ void NcmpcppConfig::SetDefaults()
system_encoding.clear();
# endif // HAVE_LANGINFO_H
startup_screen = myPlaylist;
browser_sort_mode = smName;
// default screens sequence
screens_seq.push_back(myPlaylist);
screens_seq.push_back(myBrowser);
@@ -854,10 +854,14 @@ void NcmpcppConfig::Read()
tag_editor_album_format += '}';
}
}
else if (name == "sort_format")
else if (name == "browser_sort_format")
{
if (!v.empty())
sort_format = v;
if (!v.empty() && MPD::Song::isFormatOk("browser_sort_format", v))
{
browser_sort_format = '{';
browser_sort_format += v;
browser_sort_format += '}';
}
}
else if (name == "external_editor")
{
@@ -1240,9 +1244,12 @@ void NcmpcppConfig::Read()
}
else if (name == "sort_mode")
{
if (v == "mtime") sort_mode = 1;
else if (v == "format") sort_mode = 2;
else sort_mode = 0; // "name" or invalid
if (v == "mtime")
browser_sort_mode = smMTime;
else if (v == "format")
browser_sort_mode = smCustomFormat;
else
browser_sort_mode = smName; // "name" or invalid
}
else if (name == "locked_screen_width_part")
{

View File

@@ -29,6 +29,8 @@
class BasicScreen; // forward declaration for screens sequence
enum SortMode { smName, smMTime, smCustomFormat };
struct Column
{
Column() : right_alignment(0), display_empty_tag(1) { }
@@ -168,7 +170,7 @@ struct NcmpcppConfig
std::string song_library_format;
std::string tag_editor_album_format;
std::string song_in_columns_to_string_format;
std::string sort_format;
std::string browser_sort_format;
std::string external_editor;
std::string system_encoding;
std::string execute_on_song_change;
@@ -273,7 +275,6 @@ struct NcmpcppConfig
unsigned lines_scrolled;
unsigned search_engine_default_search_mode;
unsigned visualizer_sync_interval;
unsigned sort_mode;
double locked_screen_width_part;
@@ -283,6 +284,8 @@ struct NcmpcppConfig
BasicScreen *startup_screen;
std::list<BasicScreen *> screens_seq;
SortMode browser_sort_mode;
private:
void MakeProperPath(std::string &dir);