Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
72
Src/Plugins/Library/ml_plg/pass2.cpp
Normal file
72
Src/Plugins/Library/ml_plg/pass2.cpp
Normal file
|
@ -0,0 +1,72 @@
|
|||
#include "IDScanner.h"
|
||||
#include "playlist.h"
|
||||
#include <atlbase.h>
|
||||
#include "main.h"
|
||||
#include "api__ml_plg.h"
|
||||
|
||||
static ICddbFileInfoList *CreateScanList(volatile int *killswitch)
|
||||
{
|
||||
// benski> this function REALLY SUCKS but there's not much we can do about it unfortunately.
|
||||
// because Gracenote's Playlist SDK doesn't give us a good way to run queries like this
|
||||
ICddbPL2FindDataPtr pFindData;
|
||||
ICddbDisc2Ptr pDisc;
|
||||
|
||||
if (FAILED(pFindData.CreateInstance(CLSID_CddbPL2FindData)))
|
||||
return 0;
|
||||
|
||||
if (FAILED(playlistMgr->FindOpen(pFindData)))
|
||||
return 0;
|
||||
|
||||
ICddbFileInfoListPtr infoList;
|
||||
infoList.CreateInstance(CLSID_CddbFileInfoList);
|
||||
|
||||
while (SUCCEEDED(playlistMgr->FindNext(pFindData, &pDisc)))
|
||||
{
|
||||
if (*killswitch)
|
||||
return 0;
|
||||
CComBSTR path,filespec;
|
||||
wchar_t file[MAX_PATH] = {0};
|
||||
CComBSTR phase;
|
||||
|
||||
pDisc->GetProperty(PROP_Default, PLM_Filename, &filespec);
|
||||
pDisc->GetProperty(PROP_Default, PLM_Pathname, &path);
|
||||
PathCombineW(file, path, filespec);
|
||||
playlistMgr->FileGetFieldVal(file, gnpl_crit_field_xdev1, &phase);
|
||||
if (!phase || !phase[0] || phase[0]!='2')
|
||||
continue;
|
||||
|
||||
ICddbFileInfoPtr info;
|
||||
info.CreateInstance(CLSID_CddbFileInfo);
|
||||
info->put_Filename(file);
|
||||
infoList->AddFileInfo(info);
|
||||
}
|
||||
|
||||
playlistMgr->FindClose(pFindData);
|
||||
infoList->AddRef();
|
||||
return infoList;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Pass 2 Algorithm
|
||||
Find all files with gnpl_crit_field_xdev1 == "2" and run them through MusicID
|
||||
*/
|
||||
void IDScanner::Pass2()
|
||||
{
|
||||
if (SetupMusicID())
|
||||
{
|
||||
ICddbFileInfoList *infoList = CreateScanList(&killswitch);
|
||||
if (infoList)
|
||||
{
|
||||
musicID->LibraryID(infoList, MUSICID_RETURN_EXACT_ONLY | MUSICID_GET_FP_FROM_APP | MUSICID_GET_TAG_FROM_APP | MUSICID_PREFER_WF_MATCHES);
|
||||
infoList->Release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int IDScanner::Pass2OnThread(HANDLE handle, void *user_data, intptr_t id)
|
||||
{
|
||||
IDScanner *scanner = (IDScanner *)id;
|
||||
scanner->Pass2();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue