compare hashes instead of filenames
This commit is contained in:
@@ -37,6 +37,7 @@ extern Window *wFooter;
|
||||
extern vector<Song> vPlaylist;
|
||||
extern vector<MpdDataType> vFileType;
|
||||
extern vector<string> vNameList;
|
||||
extern vector<long long> vHashList;
|
||||
|
||||
extern CurrScreen current_screen;
|
||||
|
||||
@@ -63,33 +64,6 @@ extern string UNKNOWN_ARTIST;
|
||||
extern string UNKNOWN_TITLE;
|
||||
extern string UNKNOWN_ALBUM;
|
||||
|
||||
void * BoldSongsFromPlaylist(void *t)
|
||||
{
|
||||
if (!vNameList.empty())
|
||||
{
|
||||
bool bold = 0;
|
||||
for (int i = 0; i < vFileType.size(); i++)
|
||||
{
|
||||
if (vFileType[i] == MPD_DATA_TYPE_SONG)
|
||||
{
|
||||
for (vector<Song>::const_iterator it = vPlaylist.begin(); it != vPlaylist.end(); it++)
|
||||
{
|
||||
if (it->GetFile() == vNameList[i])
|
||||
{
|
||||
bold = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
mBrowser->BoldOption(i+1, bold);
|
||||
bold = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (current_screen == csBrowser)
|
||||
mBrowser->Refresh();
|
||||
pthread_exit(NULL);
|
||||
}
|
||||
|
||||
bool SortSongsByTrack(const Song &a, const Song &b)
|
||||
{
|
||||
return StrToInt(a.GetTrack()) < StrToInt(b.GetTrack());
|
||||
@@ -539,12 +513,14 @@ void GetDirectory(string dir)
|
||||
browsed_dir = dir;
|
||||
vFileType.clear();
|
||||
vNameList.clear();
|
||||
mBrowser->Clear(current_screen != csLibrary);
|
||||
vHashList.clear();
|
||||
mBrowser->Clear(0);
|
||||
if (dir != "/")
|
||||
{
|
||||
mBrowser->AddOption("[..]");
|
||||
vFileType.push_back(MPD_DATA_TYPE_DIRECTORY);
|
||||
vNameList.push_back("");
|
||||
vHashList.push_back(0);
|
||||
}
|
||||
browser = mpd_database_get_directory(conn, (char *)dir.c_str());
|
||||
FOR_EACH_MPD_DATA(browser)
|
||||
@@ -555,6 +531,7 @@ void GetDirectory(string dir)
|
||||
{
|
||||
vFileType.push_back(MPD_DATA_TYPE_PLAYLIST);
|
||||
vNameList.push_back(browser->playlist);
|
||||
vHashList.push_back(0);
|
||||
mBrowser->AddOption("[red](playlist)[/red] " + string(browser->playlist));
|
||||
break;
|
||||
}
|
||||
@@ -562,6 +539,7 @@ void GetDirectory(string dir)
|
||||
{
|
||||
string subdir = browser->directory;
|
||||
vFileType.push_back(MPD_DATA_TYPE_DIRECTORY);
|
||||
vHashList.push_back(0);
|
||||
if (dir == "/")
|
||||
vNameList.push_back(subdir.substr(browsed_dir.size()-1,subdir.size()-browsed_dir.size()+1));
|
||||
else
|
||||
@@ -577,15 +555,25 @@ void GetDirectory(string dir)
|
||||
vFileType.push_back(MPD_DATA_TYPE_SONG);
|
||||
Song s = browser->song;
|
||||
vNameList.push_back(s.GetFile());
|
||||
mBrowser->AddOption(DisplaySong(s));
|
||||
vHashList.push_back(s.GetHash());
|
||||
bool bold = 0;
|
||||
for (vector<Song>::const_iterator it = vPlaylist.begin(); it != vPlaylist.end(); it++)
|
||||
{
|
||||
if (it->GetHash() == s.GetHash())
|
||||
{
|
||||
bold = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
bold ? mBrowser->AddBoldOption(DisplaySong(s)) : mBrowser->AddOption(DisplaySong(s));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pthread_create(&bolder, NULL, BoldSongsFromPlaylist, NULL);
|
||||
|
||||
mpd_data_free(browser);
|
||||
browsed_subdir.clear();
|
||||
|
||||
if (current_screen != csLibrary && current_screen == csBrowser)
|
||||
mBrowser->Hide();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user