Tri des playlists par priorité de synchronisation

[La fonctionnalité associée à cette page, Lecteur multimédia Windows SDK, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer. MediaPlayer a été optimisé pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer au lieu de Lecteur multimédia Windows SDK, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Le code suivant effectue un type simple de playlists. Vous pouvez voir comment cette fonction est utilisée dans l’exemple de code dans Énumération des playlists de synchronisation. La fonction prend les paramètres suivants :

  • pPlaylist. Pointeur vers la playlist Lecteur multimédia Windows à trier. Les éléments multimédias de la playlist doivent pointer vers d’autres playlists, et non vers des fichiers multimédias numériques individuels.
  • bstrSyncAttribute. BSTR contenant le nom de l’attribut de partenariat de synchronisation pour l’appareil actuel (« Sync01 », « Sync02 », etc.).
  • plSelected. Pointeur vers une variable longue qui reçoit le nombre de playlists de synchronisation.

La fonction inspecte l’attribut de partenariat de synchronisation pour chaque élément multimédia (représentant une playlist) dans la playlist spécifiée par pPlaylist. Si l’attribut a une valeur différente de zéro, le code déplace l’élément multimédia au début de la playlist et l’insère dans l’ordre de priorité.

Lorsque vous avez terminé, la fonction retourne le nombre d’éléments multimédias (playlists de synchronisation) qui avaient une valeur différente de zéro pour l’attribut de partenariat de synchronisation.

STDMETHODIMP CSyncSettings::SortPlaylist(IWMPPlaylist *pPlaylist, BSTR bstrSyncAttribute, long *plSelected)
{
    HRESULT hr = S_OK;
    long lSyncItemCount = 0;

    ATLASSERT (pPlaylist);
    ATLASSERT (plSelected);

    // Local copies of the parameters.
    CComPtr<IWMPPlaylist> spPlaylist(pPlaylist);
    CComBSTR bstrAttribute(bstrSyncAttribute);

    ATLASSERT (bstrAttribute.Length());

    // Get the count of playlist media items.
    long lCount = 0;
    spPlaylist->get_count(&lCount);

    // Walk the playlist.
    for(long i = 0; i < lCount; i++)
    {
        CComPtr<IWMPMedia> spMedia;                 
        CComBSTR bstrVal;            
        long lPriority = 0;
        
        hr = spPlaylist->get_item(i, &spMedia);

        if(SUCCEEDED(hr) && spMedia)
        {      
            // Get the sync priority value as a string.
            hr = spMedia->getItemInfo(bstrAttribute, &bstrVal);
        }

        if(SUCCEEDED(hr) && spMedia)
        {
            // Convert sync priority to a long number.
            lPriority = _wtol(bstrVal);
        }

        // Sort the playlist.
        // Only move the current item if it has a
        // sync priority value.
        if(lPriority > 0)
        {
            lSyncItemCount++;

            // Walk down the list and insert the item
            // in ascending order.
            for(long j = 0; j < lCount; j++)
            {
                CComPtr<IWMPMedia> spMediaCompare;
                CComBSTR bstrValCompare;
                long lPriorityTest = 0;

                hr = spPlaylist->get_item(j, &spMediaCompare);

                if(SUCCEEDED(hr) && spMediaCompare.p)
                {
                    hr = spMediaCompare->getItemInfo(bstrAttribute, &bstrValCompare);
                }
                if(SUCCEEDED(hr) && spMediaCompare.p)
                {
                    lPriorityTest = _wtol(bstrValCompare);
                    
                    if(lPriority <= lPriorityTest || 
                        0 == lPriorityTest)
                    {
                        hr = spPlaylist->moveItem(i, j);
                        break;                            
                    }                        
                } 
            } // for j                       
        } // if(lPriority > 0)          
    } // for i  
  
    // Return the sync item count.
    *plSelected = lSyncItemCount;

    return hr;
}

IWMPMedia::getItemInfo

IWMPPlaylist::get_item

IWMPPlaylist::moveItem

Gestion des playlists de synchronisation

Attributs de synchronisation