diff --git a/dlls/dmband/bandtrack.c b/dlls/dmband/bandtrack.c index b808faaf567..845345a9fa2 100644 --- a/dlls/dmband/bandtrack.c +++ b/dlls/dmband/bandtrack.c @@ -193,7 +193,32 @@ static HRESULT WINAPI band_track_SetParam(IDirectMusicTrack8 *iface, REFGUID typ else if (IsEqualGUID(type, &GUID_Download)) FIXME("GUID_Download not handled yet\n"); else if (IsEqualGUID(type, &GUID_DownloadToAudioPath)) - FIXME("GUID_DownloadToAudioPath not handled yet\n"); + { + IDirectMusicPerformance *performance; + IDirectMusicAudioPath *audio_path; + IUnknown *object = param; + struct band_entry *entry; + HRESULT hr; + + if (FAILED(hr = IDirectMusicAudioPath_QueryInterface(object, &IID_IDirectMusicPerformance8, (void **)&performance)) + && SUCCEEDED(hr = IDirectMusicAudioPath_QueryInterface(object, &IID_IDirectMusicAudioPath, (void **)&audio_path))) + { + hr = IDirectMusicAudioPath_GetObjectInPath(audio_path, DMUS_PCHANNEL_ALL, DMUS_PATH_PERFORMANCE, 0, + &GUID_All_Objects, 0, &IID_IDirectMusicPerformance8, (void **)&performance); + IDirectMusicAudioPath_Release(audio_path); + } + + if (FAILED(hr)) + { + WARN("Failed to get IDirectMusicPerformance from param %p\n", param); + return hr; + } + + LIST_FOR_EACH_ENTRY(entry, &This->bands, struct band_entry, entry) + if (FAILED(hr = IDirectMusicBand_Download(entry->band, performance))) break; + + IDirectMusicPerformance_Release(performance); + } else if (IsEqualGUID(type, &GUID_Enable_Auto_Download)) FIXME("GUID_Enable_Auto_Download not handled yet\n"); else if (IsEqualGUID(type, &GUID_IDirectMusicBand))