123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447 |
- #include "main.h"
- #include "cddb.h"
- #include "../nu/ListView.h"
- #include "cddbinterface.h"
- #include "../Agave/Language/api_language.h"
- #include "../Winamp/wa_ipc.h"
- #include <atlbase.h>
- #include <strsafe.h>
- int _g_disable_cddb;
- #if 0
- static DINFO *p;
- static char dialogDevice;
- W_ListView trackList;
- static void Populate(HWND hDlg)
- {
- int x;
- trackList.Clear();
- SetDlgItemTextW(hDlg, IDC_TITLE, p->title);
- SetDlgItemTextW(hDlg, IDC_PUBLISHER, p->label);
- SetDlgItemTextW(hDlg, IDC_ARTIST, p->artist);
- SetDlgItemTextW(hDlg, IDC_GENRE, p->genre);
- SetDlgItemTextW(hDlg, IDC_YEAR, p->year);
- CheckDlgButton(hDlg, IDC_COMPILATION, p->compilation?BST_CHECKED:BST_UNCHECKED);
- for (x = 0; x < p->ntracks; x ++)
- {
- trackList.InsertItem(x, p->tracks[x].artist, 0);
- trackList.SetItemText(x, 1, p->tracks[x].title);
- }
- }
- static HRESULT CALLBACK Cddb_ResultCallback(DWORD cddbId, HRESULT result, ICddbDisc *pDisc, ULONG_PTR user)
- {
- CBDATA *pData = (CBDATA*)user;
- DefaultValues(pData->p);
- if(S_OK == result)
- {
-
- }
- else if (S_FALSE == result)
- {
-
- }
- else if (S_MULTIPLE == result)
- {
-
- }
- Populate(pData->hwnd);
- return S_OK;
- }
- static LRESULT CALLBACK EditProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch (message)
- {
- case WM_NOTIFYFORMAT:
- return NFR_UNICODE;
- case WM_INITDIALOG:
- trackList.setwnd(GetDlgItem(hDlg, IDC_TRACKS));
- RECT rect1, rect2;
- GetWindowRect(GetDlgItem(hDlg, IDC_EDITARTIST), &rect1);
- GetWindowRect(GetDlgItem(hDlg, IDC_EDITTEXT), &rect2);
- trackList.AddCol(WASABI_API_LNGSTRINGW(plugin.hDllInstance,IDS_ARTIST), rect2.left-rect1.left-3);
- trackList.AddCol(WASABI_API_LNGSTRINGW(plugin.hDllInstance,IDS_TITLE), (rect2.right-rect2.left)-18);
- if (_g_disable_cddb) EnableWindow(GetDlgItem(hDlg, IDC_GETCDDB), 0);
- SendDlgItemMessage(hDlg, IDC_TITLE, EM_LIMITTEXT, 512, 0);
- SendDlgItemMessage(hDlg, IDC_PUBLISHER, EM_LIMITTEXT, 512, 0);
- SendDlgItemMessage(hDlg, IDC_ARTIST, EM_LIMITTEXT, 512, 0);
- SendDlgItemMessage(hDlg, IDC_YEAR, EM_LIMITTEXT, 8, 0);
- SendDlgItemMessage(hDlg, IDC_GENRE, EM_LIMITTEXT, 64, 0);
- SendDlgItemMessage(hDlg, IDC_EDITTEXT, EM_LIMITTEXT, 512, 0);
- SendDlgItemMessage(hDlg, IDC_EDITARTIST, EM_LIMITTEXT, 512, 0);
- if (GetCDDBInfo(p, dialogDevice))
- {
- int x;
- SetDlgItemText(hDlg, IDC_TITLE, WASABI_API_LNGSTRINGW(line.hDllInstance,IDS_TITLE));
- SetDlgItemText(hDlg, IDC_ARTIST, WASABI_API_LNGSTRINGW(line.hDllInstance,IDS_ALBUM_ARTIST));
- for (x = 0; x < p->ntracks; x ++)
- {
- wchar_t buf[128] = {0};
- StringCchPrintfW(buf, 128, L"Track %d", x + 1);
- trackList.InsertItem(x, "Artist", 0);
- trackList.SetItemText(x, 1, buf);
- }
- }
- else
- {
- Populate(hDlg);
- }
- return 1;
- case WM_NOTIFY:
- {
- LPNMHDR l = (LPNMHDR)lParam;
- switch (l->code)
- {
- case LVN_ITEMCHANGED:
- {
- LPNMLISTVIEW lvNotif = (LPNMLISTVIEW)l;
- if (lvNotif->uNewState & LVIS_SELECTED)
- {
- wchar_t buf[512] = {0};
- trackList.GetText(trackList.GetNextSelected(-1), 0, buf, 512);
- SetDlgItemTextW(hDlg, IDC_EDITARTIST, buf);
- trackList.GetText(trackList.GetNextSelected(-1), 1, buf, 512);
- SetDlgItemTextW(hDlg, IDC_EDITTEXT, buf);
- }
- }
- break;
- }
- }
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_GETCDDB:
- {
- wchar_t szTOC[2048] = {0};
- if (Cddb_CalculateTOC(p, szTOC, sizeof(szTOC)/sizeof(wchar_t)))
- {
- CBDATA data = { p, hDlg };
- HRESULT hr = Cddb_DoLookup(p->CDDBID, szTOC, hDlg, Cddb_ResultCallback,
- CDDB_NOCACHE | CDDB_MODAL | CDDB_UI_MULTIPLE, (ULONG_PTR)&data);
- }
- else hr = CDDB_E_BADTOC;
- }
- break;
- case IDC_CDTEXT:
- if (DoCDText(p, dialogDevice))
- {
- Populate(hDlg);
- }
- break;
- case IDCANCEL: EndDialog(hDlg, 1); break;
- case IDOK:
- {
- int x;
- GetDlgItemTextW(hDlg, IDC_TITLE, p->title, TITLE_SIZE);
- GetDlgItemTextW(hDlg, IDC_PUBLISHER, p->label, 511); p->label[511] = 0;
- GetDlgItemTextW(hDlg, IDC_ARTIST, p->artist, ARTIST_SIZE);
- GetDlgItemTextW(hDlg, IDC_GENRE, p->genre, 63); p->genre[63] = 0;
- GetDlgItemTextW(hDlg, IDC_YEAR, p->year, 8);
- p->compilation = !!IsDlgButtonChecked(hDlg, IDC_COMPILATION);
- for (x = 0; x < p->ntracks; x ++)
- {
- trackList.GetText(x, 0, p->tracks[x].artist, ARTIST_SIZE);
- trackList.GetText(x, 1, p->tracks[x].title, TITLE_SIZE);
- }
- AddToDatabase(p);
- }
- EndDialog(hDlg, 0);
- break;
- case IDC_REMOVE:
- RemoveFromDatabase(p);
- EndDialog(hDlg, 1); break;
- case IDC_EDITTEXT:
- if (HIWORD(wParam) == EN_CHANGE)
- {
- wchar_t buf[512] = {0};
- int p = trackList.GetNextSelected(-1);
- if (p != LB_ERR)
- {
- GetDlgItemTextW(hDlg, IDC_EDITTEXT, buf, 512);
- trackList.SetItemText(p, 1, buf);
- }
- }
- break;
- case IDC_EDITARTIST:
- if (HIWORD(wParam) == EN_CHANGE)
- {
- wchar_t buf[512] = {0};
- int p = trackList.GetNextSelected(-1);
- if (p != LB_ERR)
- {
- GetDlgItemTextW(hDlg, IDC_EDITARTIST, buf, 512);
- trackList.SetItemText(p, 0, buf);
- if (!IsDlgButtonChecked(hDlg, IDC_COMPILATION))
- {
- wchar_t buf2[512] = {0};
- GetDlgItemTextW(hDlg, IDC_ARTIST, buf2, 512);
- if (lstrcmp(buf, buf2))
- CheckDlgButton(hDlg, IDC_COMPILATION, BST_CHECKED);
- }
- }
- }
- break;
- case IDC_ARTIST:
- if (HIWORD(wParam) == EN_CHANGE && !IsDlgButtonChecked(hDlg, IDC_COMPILATION))
- {
- wchar_t buf[512] = {0};
- GetDlgItemTextW(hDlg, IDC_ARTIST, buf, 512);
- for (int x = 0; x < p->ntracks; x ++)
- {
- trackList.SetItemText(x, 0, buf);
- }
- if (trackList.GetNextSelected(-1) != LB_ERR)
- {
- SetDlgItemTextW(hDlg, IDC_EDITARTIST, buf);
- }
- }
- break;
- }
- return 0;
- }
- return 0;
- }
- void DBEdit(DINFO *ps, HWND hwnd, int l, char device)
- {
- static int i = 0;
- if (i) return ;
- i = 1;
- p = ps;
- dialogDevice = device;
- _g_disable_cddb = l;
- if (!WASABI_API_DIALOGBOX(IDD_EDIT, hwnd, (DLGPROC)EditProc))
- {
- PostMessage(line.hMainWindow, WM_USER, (WPARAM)L"cda://", 247 /*IPC_REFRESHPLCACHE*/);
- }
- i = 0;
- }
- #endif
- #if 0
- typedef struct _EDITDATA
- {
- DINFO *p;
- INT modified;
- CHAR cDevice;
- } EDITDATA;
- #define GET_DATA(__hwnd) (EDITDATA*)(LONG_PTR)GetWindowLongPtrW((__hwnd), GWLP_USERDATA);
- #define SET_IF(hwndDlg, id, data) if (data) SetDlgItemText(hwndDlg, id, data); else SetDlgItemText(hwndDlg, id, L"");
- static void Fill(HWND hwndDlg, const DINFO *info)
- {
- SET_IF(hwndDlg, IDC_TITLE, info->title);
- SET_IF(hwndDlg, IDC_ARTIST, info->artist);
- if (info->discnum)
- SetDlgItemInt(hwndDlg, IDC_DISC, info->discnum, FALSE);
- else
- SetDlgItemText(hwndDlg, IDC_DISCS, L"");
- if (info->numdiscs)
- SetDlgItemInt(hwndDlg, IDC_DISCS, info->numdiscs, FALSE);
- else
- SetDlgItemText(hwndDlg, IDC_DISCS, L"");
- SET_IF(hwndDlg, IDC_YEAR, info->year);
- SET_IF(hwndDlg, IDC_LABEL, info->label);
- SET_IF(hwndDlg, IDC_NOTES, info->notes);
- SET_IF(hwndDlg, IDC_GENRE, info->genre);
- CheckDlgButton(hwndDlg, IDC_COMPILATION, (info->compilation)?BST_CHECKED:BST_UNCHECKED);
- SendDlgItemMessage(hwndDlg, IDC_TRACKLIST, LB_RESETCONTENT, 0, 0);
- for (int x = 0; x < info->ntracks; x ++)
- {
- wchar_t buf[1100] = {0};
- if (!info->tracks[x].title)
- StringCchPrintfW(buf, 1100, L"%d.", x+1);
- else if (info->tracks[x].artist && info->tracks[x].artist[0] && wcscmp(info->tracks[x].artist, info->artist))
- StringCchPrintfW(buf, 1100, L"%d. %s - %s", x+1, info->tracks[x].artist, info->tracks[x].title);
- else
- StringCchPrintfW(buf, 1100, L"%d. %s", x+1, info->tracks[x].title);
- SendDlgItemMessageW(hwndDlg, IDC_TRACKLIST, LB_ADDSTRING, 0, (LPARAM)buf);
- }
- }
- static HRESULT CALLBACK Cddb_LookupCallback(HRESULT result, ICddbDisc *pDisc, DWORD *pdwAutoCloseDelay, ULONG_PTR user)
- {
- HWND hwnd = (HWND)user;
- EDITDATA *pData = GET_DATA(hwnd);
- if (!pData) return E_INVALIDARG;
- if(S_OK == result)
- {
- pData->modified = 1;
- DefaultValues(pData->p);
- GetDiscInfo(pDisc, pData->p);
- StoreDisc(pData->p->CDDBID, pDisc);
- ICddbCacheManager* pCache;
- HRESULT hr = Cddb_GetICacheManger((void**)&pCache);
- if (SUCCEEDED(hr))
- {
- CComBSTR toc;
- pDisc->get_Toc(&toc);
- hr = pCache->StoreDiscByToc(toc, pDisc);
- pCache->Release();
- }
- Fill(hwnd, pData->p);
- }
- else
- {
- *pdwAutoCloseDelay = AUTOCLOSE_NEVER;
- }
- CddbCache_SetDisc(pData->p, result);
- return S_OK;
- }
- static HRESULT CALLBACK Cddb_EditCallback(HRESULT result, ICddbDisc *pDisc, DWORD *pdwAutoCloseDelay, ULONG_PTR user)
- {
- HWND hwnd = (HWND)user;
- EDITDATA *pData = GET_DATA(hwnd);
- if (!pData) return E_INVALIDARG;
-
- if (FAILED(result))
- {
- *pdwAutoCloseDelay = AUTOCLOSE_NEVER;
- return S_OK;
- }
-
- if (SUCCEEDED(result))
- {
- HRESULT hr(S_OK);
- wchar_t szTOC[2048] = {0};
- ICDDBControl *pControl;
- CDDBUIFlags uiFlags = UI_EDITMODE;
-
- if (!Cddb_CalculateTOC(pData->p, szTOC, sizeof(szTOC)/sizeof(wchar_t))) hr = CDDB_E_BADTOC;
- if (SUCCEEDED(hr)) hr = Cddb_GetIControl((void**)&pControl);
- if (SUCCEEDED(hr))
- {
- if (!pDisc)
- {
- uiFlags = UI_SUBMITNEW;
- hr = pControl->GetSubmitDisc(szTOC, 0, 0, &pDisc);
- if (FAILED(hr)) pDisc = NULL;
- }
- else pDisc->AddRef();
-
- if (pDisc)
- {
- Cddb_DisplayDiscInfo(pDisc, &uiFlags, hwnd);
- if (uiFlags & UI_DATA_CHANGED)
- {
- ICddbCacheManager* pCache;
- hr = Cddb_GetICacheManger((void**)&pCache);
- if (SUCCEEDED(hr))
- {
- hr = pCache->StoreDiscByToc(szTOC, pDisc);
- pCache->Release();
- }
-
- pData->modified = 1;
- DefaultValues(pData->p);
- GetDiscInfo(pDisc, pData->p);
- StoreDisc(pData->p->CDDBID, pDisc);
- Fill(hwnd, pData->p);
- CddbCache_SetDisc(pData->p, S_OK);
- }
- pDisc->Release();
- }
- pControl->Release();
- }
-
- }
- return S_OK;
- }
- static LRESULT CALLBACK EditProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
- {
- EDITDATA *pData;
- switch (message)
- {
- case WM_INITDIALOG:
- {
- pData = (EDITDATA*)lParam;
- if (!pData) { EndDialog(hwndDlg, 0); return 0; }
- SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)lParam);
- pData->modified = 0;
- Fill(hwndDlg, pData->p);
- }
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDC_CDDB:
- {
- wchar_t szTOC[2048] = {0};
- pData = GET_DATA(hwndDlg);
-
- if (pData && Cddb_CalculateTOC(pData->p, szTOC, sizeof(szTOC)/sizeof(wchar_t)))
- {
- UINT flags = CDDB_NOCACHE | CDDB_UI_MODAL | CDDB_UI_MULTIPLE | CDDB_UI_RESULT_MODAL;
- HRESULT hr = Cddb_DoLookup(szTOC, hwndDlg, Cddb_LookupCallback, flags, (ULONG_PTR)hwndDlg);
- if (FAILED(hr)) Cddb_DisplayResultDlg(hwndDlg, hr, AUTOCLOSE_NEVER, flags);
- }
- }
- break;
- case IDC_EDIT:
- {
- wchar_t szTOC[2048] = {0};
- pData = GET_DATA(hwndDlg);
- if (pData && Cddb_CalculateTOC(pData->p, szTOC, sizeof(szTOC)/sizeof(wchar_t)))
- {
- UINT flags = CDDB_UI_MODAL | CDDB_UI_MULTIPLE | CDDB_UI_RESULT_MODAL;
- HRESULT hr = Cddb_DoLookup(szTOC, hwndDlg, Cddb_EditCallback, flags, (ULONG_PTR)hwndDlg);
- if (FAILED(hr)) Cddb_DisplayResultDlg(hwndDlg, hr, AUTOCLOSE_NEVER, flags);
- }
- }
- break;
- case IDCANCEL:
- pData = (EDITDATA*)(LONG_PTR)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
- EndDialog(hwndDlg, (pData) ? pData->modified : 0);
- break;
- }
- break;
- }
- return 0;
- }
- bool CDEdit(CHAR cDevice, DINFO *ps, HWND hwnd)
- {
- EDITDATA data;
- ZeroMemory(&data, sizeof(EDITDATA));
- data.cDevice = cDevice;
- data.p = ps;
- if (WASABI_API_DIALOGBOXPARAM(IDD_EDIT, hwnd, (DLGPROC)EditProc, (LPARAM)&data))
- {
- PostMessageW(line.hMainWindow, WM_USER, (WPARAM)L"cda://", IPC_REFRESHPLCACHE);
- }
- return ( 0 != data.modified);
- }
- #endif
|