search engine: add "Album Artist" search constraint.
This commit is contained in:
committed by
Andrzej Rybczak
parent
a14b77338d
commit
7b90daa690
@@ -37,6 +37,7 @@ const char *SearchEngine::ConstraintsNames[] =
|
||||
{
|
||||
"Any:",
|
||||
"Artist:",
|
||||
"Album Artist:",
|
||||
"Title:",
|
||||
"Album:",
|
||||
"Filename:",
|
||||
@@ -55,9 +56,9 @@ const char *SearchEngine::SearchModes[] =
|
||||
0
|
||||
};
|
||||
|
||||
size_t SearchEngine::StaticOptions = 19;
|
||||
size_t SearchEngine::ResetButton = 15;
|
||||
size_t SearchEngine::SearchButton = 14;
|
||||
size_t SearchEngine::StaticOptions = 20;
|
||||
size_t SearchEngine::ResetButton = 16;
|
||||
size_t SearchEngine::SearchButton = 15;
|
||||
|
||||
void SearchEngine::Init()
|
||||
{
|
||||
@@ -139,7 +140,7 @@ void SearchEngine::EnterPressed()
|
||||
Statusbar() << fmtBold << ConstraintsNames[option] << fmtBoldEnd << ' ';
|
||||
itsConstraints[option] = Global::wFooter->GetString(itsConstraints[option]);
|
||||
w->Current().first->Clear();
|
||||
*w->Current().first << fmtBold << std::setw(10) << std::left << ConstraintsNames[option] << fmtBoldEnd << ' ';
|
||||
*w->Current().first << fmtBold << std::setw(13) << std::left << ConstraintsNames[option] << fmtBoldEnd << ' ';
|
||||
ShowTag(*w->Current().first, itsConstraints[option]);
|
||||
}
|
||||
else if (option == ConstraintsNumber+1)
|
||||
@@ -403,7 +404,7 @@ void SearchEngine::Prepare()
|
||||
|
||||
for (size_t i = 0; i < ConstraintsNumber; ++i)
|
||||
{
|
||||
*(*w)[i].first << fmtBold << std::setw(10) << std::left << ConstraintsNames[i] << fmtBoldEnd << ' ';
|
||||
*(*w)[i].first << fmtBold << std::setw(13) << std::left << ConstraintsNames[i] << fmtBoldEnd << ' ';
|
||||
ShowTag(*(*w)[i].first, itsConstraints[i]);
|
||||
}
|
||||
|
||||
@@ -445,21 +446,23 @@ void SearchEngine::Search()
|
||||
if (!itsConstraints[1].empty())
|
||||
Mpd.AddSearch(MPD_TAG_ARTIST, itsConstraints[1]);
|
||||
if (!itsConstraints[2].empty())
|
||||
Mpd.AddSearch(MPD_TAG_TITLE, itsConstraints[2]);
|
||||
Mpd.AddSearch(MPD_TAG_ALBUM_ARTIST, itsConstraints[2]);
|
||||
if (!itsConstraints[3].empty())
|
||||
Mpd.AddSearch(MPD_TAG_ALBUM, itsConstraints[3]);
|
||||
Mpd.AddSearch(MPD_TAG_TITLE, itsConstraints[3]);
|
||||
if (!itsConstraints[4].empty())
|
||||
Mpd.AddSearchURI(itsConstraints[4]);
|
||||
Mpd.AddSearch(MPD_TAG_ALBUM, itsConstraints[4]);
|
||||
if (!itsConstraints[5].empty())
|
||||
Mpd.AddSearch(MPD_TAG_COMPOSER, itsConstraints[5]);
|
||||
Mpd.AddSearchURI(itsConstraints[5]);
|
||||
if (!itsConstraints[6].empty())
|
||||
Mpd.AddSearch(MPD_TAG_PERFORMER, itsConstraints[6]);
|
||||
Mpd.AddSearch(MPD_TAG_COMPOSER, itsConstraints[6]);
|
||||
if (!itsConstraints[7].empty())
|
||||
Mpd.AddSearch(MPD_TAG_GENRE, itsConstraints[7]);
|
||||
Mpd.AddSearch(MPD_TAG_PERFORMER, itsConstraints[7]);
|
||||
if (!itsConstraints[8].empty())
|
||||
Mpd.AddSearch(MPD_TAG_DATE, itsConstraints[8]);
|
||||
Mpd.AddSearch(MPD_TAG_GENRE, itsConstraints[8]);
|
||||
if (!itsConstraints[9].empty())
|
||||
Mpd.AddSearch(MPD_TAG_COMMENT, itsConstraints[9]);
|
||||
Mpd.AddSearch(MPD_TAG_DATE, itsConstraints[9]);
|
||||
if (!itsConstraints[10].empty())
|
||||
Mpd.AddSearch(MPD_TAG_COMMENT, itsConstraints[10]);
|
||||
MPD::SongList results;
|
||||
Mpd.CommitSearch(results);
|
||||
for (MPD::SongList::const_iterator it = results.begin(); it != results.end(); ++it)
|
||||
@@ -491,6 +494,7 @@ void SearchEngine::Search()
|
||||
{
|
||||
any_found =
|
||||
!regexec(&rx, (*it)->GetArtist().c_str(), 0, 0, 0)
|
||||
|| !regexec(&rx, (*it)->GetAlbumArtist().c_str(), 0, 0, 0)
|
||||
|| !regexec(&rx, (*it)->GetTitle().c_str(), 0, 0, 0)
|
||||
|| !regexec(&rx, (*it)->GetAlbum().c_str(), 0, 0, 0)
|
||||
|| !regexec(&rx, (*it)->GetName().c_str(), 0, 0, 0)
|
||||
@@ -512,48 +516,54 @@ void SearchEngine::Search()
|
||||
if (found && !itsConstraints[2].empty())
|
||||
{
|
||||
if (!regcomp(&rx, itsConstraints[2].c_str(), REG_ICASE | Config.regex_type))
|
||||
found = !regexec(&rx, (*it)->GetTitle().c_str(), 0, 0, 0);
|
||||
found = !regexec(&rx, (*it)->GetAlbumArtist().c_str(), 0, 0, 0);
|
||||
regfree(&rx);
|
||||
}
|
||||
if (found && !itsConstraints[3].empty())
|
||||
{
|
||||
if (!regcomp(&rx, itsConstraints[3].c_str(), REG_ICASE | Config.regex_type))
|
||||
found = !regexec(&rx, (*it)->GetAlbum().c_str(), 0, 0, 0);
|
||||
if(!regcomp(&rx, itsConstraints[3].c_str(), REG_ICASE | Config.regex_type))
|
||||
found = !regexec(&rx, (*it)->GetTitle().c_str(), 0, 0, 0);
|
||||
regfree(&rx);
|
||||
}
|
||||
if (found && !itsConstraints[4].empty())
|
||||
{
|
||||
if (!regcomp(&rx, itsConstraints[4].c_str(), REG_ICASE | Config.regex_type))
|
||||
found = !regexec(&rx, (*it)->GetName().c_str(), 0, 0, 0);
|
||||
found = !regexec(&rx, (*it)->GetAlbum().c_str(), 0, 0, 0);
|
||||
regfree(&rx);
|
||||
}
|
||||
if (found && !itsConstraints[5].empty())
|
||||
{
|
||||
if (!regcomp(&rx, itsConstraints[5].c_str(), REG_ICASE | Config.regex_type))
|
||||
found = !regexec(&rx, (*it)->GetComposer().c_str(), 0, 0, 0);
|
||||
found = !regexec(&rx, (*it)->GetName().c_str(), 0, 0, 0);
|
||||
regfree(&rx);
|
||||
}
|
||||
if (found && !itsConstraints[6].empty())
|
||||
{
|
||||
if (!regcomp(&rx, itsConstraints[6].c_str(), REG_ICASE | Config.regex_type))
|
||||
found = !regexec(&rx, (*it)->GetPerformer().c_str(), 0, 0, 0);
|
||||
found = !regexec(&rx, (*it)->GetComposer().c_str(), 0, 0, 0);
|
||||
regfree(&rx);
|
||||
}
|
||||
if (found && !itsConstraints[7].empty())
|
||||
{
|
||||
if (!regcomp(&rx, itsConstraints[7].c_str(), REG_ICASE | Config.regex_type))
|
||||
found = !regexec(&rx, (*it)->GetGenre().c_str(), 0, 0, 0);
|
||||
found = !regexec(&rx, (*it)->GetPerformer().c_str(), 0, 0, 0);
|
||||
regfree(&rx);
|
||||
}
|
||||
if (found && !itsConstraints[8].empty())
|
||||
{
|
||||
if (!regcomp(&rx, itsConstraints[8].c_str(), REG_ICASE | Config.regex_type))
|
||||
found = !regexec(&rx, (*it)->GetDate().c_str(), 0, 0, 0);
|
||||
found = !regexec(&rx, (*it)->GetGenre().c_str(), 0, 0, 0);
|
||||
regfree(&rx);
|
||||
}
|
||||
if (found && !itsConstraints[9].empty())
|
||||
{
|
||||
if (!regcomp(&rx, itsConstraints[9].c_str(), REG_ICASE | Config.regex_type))
|
||||
found = !regexec(&rx, (*it)->GetDate().c_str(), 0, 0, 0);
|
||||
regfree(&rx);
|
||||
}
|
||||
if (found && !itsConstraints[10].empty())
|
||||
{
|
||||
if (!regcomp(&rx, itsConstraints[10].c_str(), REG_ICASE | Config.regex_type))
|
||||
found = !regexec(&rx, (*it)->GetComment().c_str(), 0, 0, 0);
|
||||
regfree(&rx);
|
||||
}
|
||||
@@ -565,6 +575,7 @@ void SearchEngine::Search()
|
||||
if (!itsConstraints[0].empty())
|
||||
any_found =
|
||||
!cmp((*it)->GetArtist(), itsConstraints[0])
|
||||
|| !cmp((*it)->GetAlbumArtist(), itsConstraints[0])
|
||||
|| !cmp((*it)->GetTitle(), itsConstraints[0])
|
||||
|| !cmp((*it)->GetAlbum(), itsConstraints[0])
|
||||
|| !cmp((*it)->GetName(), itsConstraints[0])
|
||||
@@ -577,21 +588,23 @@ void SearchEngine::Search()
|
||||
if (found && !itsConstraints[1].empty())
|
||||
found = !cmp((*it)->GetArtist(), itsConstraints[1]);
|
||||
if (found && !itsConstraints[2].empty())
|
||||
found = !cmp((*it)->GetTitle(), itsConstraints[2]);
|
||||
found = !cmp((*it)->GetAlbumArtist(), itsConstraints[2]);
|
||||
if (found && !itsConstraints[3].empty())
|
||||
found = !cmp((*it)->GetAlbum(), itsConstraints[3]);
|
||||
found = !cmp((*it)->GetTitle(), itsConstraints[3]);
|
||||
if (found && !itsConstraints[4].empty())
|
||||
found = !cmp((*it)->GetName(), itsConstraints[4]);
|
||||
found = !cmp((*it)->GetAlbum(), itsConstraints[4]);
|
||||
if (found && !itsConstraints[5].empty())
|
||||
found = !cmp((*it)->GetComposer(), itsConstraints[5]);
|
||||
found = !cmp((*it)->GetName(), itsConstraints[5]);
|
||||
if (found && !itsConstraints[6].empty())
|
||||
found = !cmp((*it)->GetPerformer(), itsConstraints[6]);
|
||||
found = !cmp((*it)->GetComposer(), itsConstraints[6]);
|
||||
if (found && !itsConstraints[7].empty())
|
||||
found = !cmp((*it)->GetGenre(), itsConstraints[7]);
|
||||
found = !cmp((*it)->GetPerformer(), itsConstraints[7]);
|
||||
if (found && !itsConstraints[8].empty())
|
||||
found = !cmp((*it)->GetDate(), itsConstraints[8]);
|
||||
found = !cmp((*it)->GetGenre(), itsConstraints[8]);
|
||||
if (found && !itsConstraints[9].empty())
|
||||
found = !cmp((*it)->GetComment(), itsConstraints[9]);
|
||||
found = !cmp((*it)->GetDate(), itsConstraints[9]);
|
||||
if (found && !itsConstraints[10].empty())
|
||||
found = !cmp((*it)->GetComment(), itsConstraints[10]);
|
||||
}
|
||||
|
||||
if (found && any_found)
|
||||
|
||||
@@ -73,7 +73,7 @@ class SearchEngine : public Screen< Menu< std::pair<Buffer *, MPD::Song *> > >
|
||||
|
||||
static const char *SearchModes[];
|
||||
|
||||
static const size_t ConstraintsNumber = 10;
|
||||
static const size_t ConstraintsNumber = 11;
|
||||
static const char *ConstraintsNames[];
|
||||
std::string itsConstraints[ConstraintsNumber];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user