1 /***************************************************************************
2 * Copyright (C) 2008-2014 by Andrzej Rybczak *
3 * electricityispower@gmail.com *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
19 ***************************************************************************/
22 #include "comparators.h"
23 #include "utility/string.h"
27 bool hasTheWord(const std::string
&s
)
29 return s
.length() >= 4
30 && (s
[0] == 't' || s
[0] == 'T')
31 && (s
[1] == 'h' || s
[1] == 'H')
32 && (s
[2] == 'e' || s
[2] == 'E')
38 int LocaleStringComparison::operator()(const std::string
&a
, const std::string
&b
) const
40 const char *ac
= a
.c_str();
41 const char *bc
= b
.c_str();
42 size_t ac_off
= 0, bc_off
= 0;
50 return std::use_facet
<std::collate
<char>>(m_locale
).compare(
51 ac
+ac_off
, ac
+a
.length(), bc
+bc_off
, bc
+b
.length()
55 bool LocaleBasedItemSorting::operator()(const MPD::Item
&a
, const MPD::Item
&b
) const
62 case MPD::itDirectory
:
63 result
= m_cmp(getBasename(a
.name
), getBasename(b
.name
));
66 result
= m_cmp(a
.name
, b
.name
);
72 result
= m_cmp(*a
.song
, *b
.song
);
74 case SortMode::ModificationTime
:
75 result
= a
.song
->getMTime() > b
.song
->getMTime();
77 case SortMode::CustomFormat
:
78 result
= m_cmp(a
.song
->toString(Config
.browser_sort_format
, Config
.tags_separator
),
79 b
.song
->toString(Config
.browser_sort_format
, Config
.tags_separator
));
82 throw std::logic_error("can't sort with NoOp sorting mode");
88 result
= a
.type
< b
.type
;