Windows Media Player 11 SDK Determining Playlist Synchronization StateĀ
Previous | Next |
Determining Playlist Synchronization State
Windows Media Player 10 or later uses the SyncState attribute to contain information about whether a particular digital media file has been copied to a portable device and, in the case of a failure, whether copying failed because the device did not have enough memory.
The following example code creates a function that retrieves this information from a digital media file. The function takes the following parameters:
- pMedia. Pointer to an IWMPMedia interface that represents the digital media file to inspect.
- lPsIndex. Partnership index of the current device.
- pulOnDevice. Pointer to a long variable that receives the value indicating whether the digital media file has been copied to the device.
- pulDidNotFit. Pointer to a long variable that receives the value indicating whether the copy operation failed because the device did not have enough memory.
The information contained in the SyncState attribute is encoded in a bitwise fashion. You can see how this function is used in the example code in Enumerating the Media Items.
STDMETHODIMP CSyncSettings::GetPartnershipSyncState(IWMPMedia* pMedia, long lPsIndex, ULONG *pulOnDevice, ULONG *pulDidNotFit) { ATLASSERT(pMedia); ATLASSERT(lPsIndex > 0 && lPsIndex < 17); ATLASSERT(pulOnDevice); ATLASSERT(pulDidNotFit); CComVariant varSyncStateVal; CComPtr<IWMPMedia> spMedia(pMedia); CComPtr<IWMPMedia3> spMedia3; HRESULT hr = spMedia.QueryInterface(&spMedia3); ULONG ulSyncState = 0; // Stores the ulVal member of varSyncStateVal. ULONG lLSB = 0; // Represents least significant bit: Did the media fail to copy because it would not fit? ULONG lMSB = 0; // Represents most significant bit: Is the media on the device? // Calculate the bit shift required to isolate the partnership bit // pair from the SyncState attribute. const int iRshift = (lPsIndex - 1) * 2; if(SUCCEEDED(hr) && spMedia3) { hr = spMedia3->getItemInfoByType(CComBSTR("SyncState"), CComBSTR(""), 0, &varSyncStateVal); } if(SUCCEEDED(hr) && varSyncStateVal.vt == VT_UI4) { // Get the value. ulSyncState = varSyncStateVal.ulVal; // Shift the bit pair to the rightmost position. ulSyncState >>= iRshift; // Mask the rightmost bit pair. ulSyncState &= 3; // Get the LSB lLSB = ulSyncState & ~2; // Sets the 2E1 bit to zero. // Get the MSB ulSyncState >>= 1; lMSB = ulSyncState; } // Return the bits. *pulOnDevice = lMSB; *pulDidNotFit = lLSB; return hr; }
See Also
- IWMPMedia Interface
- IWMPMedia3::getItemInfoByType
- Managing Synchronization Playlists
- SyncState Attribute
Previous | Next |