Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
.gif)
| Previous | Next |
Enumerating the Media Items
The following code displays the media items contained in an individual playlist. This code runs when the user clicks a playlist in the ListView control identified by IDC_PLVIEW.
STDMETHODIMP CSyncSettings::ShowMedia(long lIndex)
{
ATLASSERT(m_pMainDlg != NULL);
ATLASSERT(m_spPlaylist.p);
HRESULT hr = S_OK;
long lCount = 0; // Count of items in the playlist.
LVITEM lvI;
ZeroMemory(&lvI, sizeof(LVITEM));
lvI.mask = LVIF_TEXT;
CComPtr<IWMPMedia> spPlaylist; // Playlist the user selected.
CComBSTR bstrSourceURL; // The URL of a digital media file.
CComPtr<IWMPPlaylist> spNewPlaylist; // Temporary playlist that contains media items.
ULONG ulOnDevice = 0;
ULONG ulDidNotFit = 0;
HCURSOR hCursor = LoadCursor(NULL, IDC_WAIT);
HCURSOR hCursorOld = SetCursor(hCursor);
ListView_DeleteAllItems(m_hMediaView);
// Retrieve the playlist the user selected.
hr = m_spPlaylist->get_item(lIndex, &spPlaylist);
if(SUCCEEDED(hr) && spPlaylist)
{
// Retrieve the source URL (the path).
hr = spPlaylist->get_sourceURL(&bstrSourceURL);
}
if(SUCCEEDED(hr) && bstrSourceURL.Length())
{
CComPtr<IWMPCore3> spCore3;
m_spPlayer.QueryInterface(&spCore3);
// Create a temporary IWMPPlaylist object from the IWMPMedia
// playlist object.
hr = spCore3->newPlaylist(CComBSTR("Temp"), bstrSourceURL, &spNewPlaylist);
}
if(SUCCEEDED(hr) && spNewPlaylist)
{
hr = spNewPlaylist->get_count(&lCount);
}
// Walk the playlist.
if(SUCCEEDED(hr) && lCount > 0)
{
for(long i = 0; i < lCount; i++)
{
CComPtr<IWMPMedia> spMedia;
CComBSTR bstrMediaName;
CComBSTR bstrOnDevice = "???";
CComBSTR bstrFit = "???";
hr = spNewPlaylist->get_item(i, &spMedia);
if(SUCCEEDED(hr) && spMedia)
{
// Get the name.
hr = spMedia->get_name(&bstrMediaName);
}
if(SUCCEEDED(hr) && bstrMediaName.Length())
{
// Show the media name.
lvI.iItem = ListView_GetItemCount(m_hMediaView);
lvI.iSubItem = 0;
lvI.pszText = COLE2T(bstrMediaName);
ListView_InsertItem(m_hMediaView, &lvI);
// Retrieve the synchronization state information for
// the digital media file.
hr = GetPartnershipSyncState(spMedia, m_lCurrentPSIndex, &ulOnDevice, &ulDidNotFit);
}
if(SUCCEEDED(hr))
{
// Test whether the media is on the device.
if(ulOnDevice == 1)
{
bstrOnDevice = "Yes";
bstrFit = "Yes";
}
else
{
bstrOnDevice = "No";
// 1 means media did not fit,
// 0 means other reason for failure.
bstrFit = ulDidNotFit ? "No" : "Yes";
}
}
ListView_SetItemText(m_hMediaView, lvI.iItem, 1, COLE2T(bstrOnDevice));
ListView_SetItemText(m_hMediaView, lvI.iItem, 2, COLE2T(bstrFit));
}
}
if(SUCCEEDED(hr) && lCount == 0)
{
// Empty playlist.
lvI.iItem = ListView_GetItemCount(m_hMediaView);
lvI.iSubItem = 0;
lvI.pszText = COLE2T(CComBSTR("No items to display."));
ListView_InsertItem(m_hMediaView, &lvI);
}
SetCursor(hCursorOld);
return hr;
}
For the implementation of the GetPartnershipSyncState function, see Determining Playlist Synchronization State.
See Also
| Previous | Next |