Gijs Vermeulen : wmp: Implement IWMPPlaylist::get_count.

Alexandre Julliard julliard at winehq.org
Mon Aug 5 14:58:35 CDT 2019


Module: wine
Branch: master
Commit: 188992a1d263afb83fb442547f34b465d3eeac33
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=188992a1d263afb83fb442547f34b465d3eeac33

Author: Gijs Vermeulen <gijsvrm at codeweavers.com>
Date:   Sat Aug  3 17:45:55 2019 +0200

wmp: Implement IWMPPlaylist::get_count.

Signed-off-by: Gijs Vermeulen <gijsvrm at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wmp/player.c      | 19 +++++++++++++------
 dlls/wmp/wmp_private.h |  3 ++-
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/dlls/wmp/player.c b/dlls/wmp/player.c
index 9437124..cd729cb 100644
--- a/dlls/wmp/player.c
+++ b/dlls/wmp/player.c
@@ -297,7 +297,7 @@ static HRESULT WINAPI WMPPlayer4_get_currentPlaylist(IWMPPlayer4 *iface, IWMPPla
     if (This->playlist == NULL)
         return S_FALSE;
 
-    return create_playlist(This->playlist->name, This->playlist->url, playlist);
+    return create_playlist(This->playlist->name, This->playlist->url, This->playlist->count, playlist);
 }
 
 static HRESULT WINAPI WMPPlayer4_put_currentPlaylist(IWMPPlayer4 *iface, IWMPPlaylist *pPL)
@@ -355,7 +355,8 @@ static HRESULT WINAPI WMPPlayer4_newPlaylist(IWMPPlayer4 *iface, BSTR name, BSTR
 
     TRACE("(%p)->(%s %s %p)\n", This, debugstr_w(name), debugstr_w(url), playlist);
 
-    return create_playlist(name, url, playlist);
+    /* FIXME: count should be the number of items in the playlist */
+    return create_playlist(name, url, 0, playlist);
 }
 
 static HRESULT WINAPI WMPPlayer4_newMedia(IWMPPlayer4 *iface, BSTR url, IWMPMedia **media)
@@ -2036,8 +2037,13 @@ static HRESULT WINAPI WMPPlaylist_Invoke(IWMPPlaylist *iface, DISPID dispIdMembe
 static HRESULT WINAPI WMPPlaylist_get_count(IWMPPlaylist *iface, LONG *count)
 {
     WMPPlaylist *This = impl_from_IWMPPlaylist(iface);
-    FIXME("(%p)->(%p)\n", This, count);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, count);
+
+    if (!count) return E_POINTER;
+    *count = This->count;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI WMPPlaylist_get_name(IWMPPlaylist *iface, BSTR *name)
@@ -2226,7 +2232,7 @@ BOOL init_player(WindowsMediaPlayer *wmp)
     wmp->IWMPNetwork_iface.lpVtbl = &WMPNetworkVtbl;
 
     name = SysAllocString(nameW);
-    if (SUCCEEDED(create_playlist(name, NULL, &playlist)))
+    if (SUCCEEDED(create_playlist(name, NULL, 0, &playlist)))
         wmp->playlist = unsafe_impl_from_IWMPPlaylist(playlist);
     else
         wmp->playlist = NULL;
@@ -2325,7 +2331,7 @@ HRESULT create_media_from_url(BSTR url, double duration, IWMPMedia **ppMedia)
     return E_OUTOFMEMORY;
 }
 
-HRESULT create_playlist(BSTR name, BSTR url, IWMPPlaylist **ppPlaylist)
+HRESULT create_playlist(BSTR name, BSTR url, LONG count, IWMPPlaylist **ppPlaylist)
 {
     WMPPlaylist *playlist;
 
@@ -2337,6 +2343,7 @@ HRESULT create_playlist(BSTR name, BSTR url, IWMPPlaylist **ppPlaylist)
     playlist->url = url ? heap_strdupW(url) : heap_strdupW(emptyW);
     playlist->name = name ? heap_strdupW(name) : heap_strdupW(emptyW);
     playlist->ref = 1;
+    playlist->count = count;
 
     if (playlist->url)
     {
diff --git a/dlls/wmp/wmp_private.h b/dlls/wmp/wmp_private.h
index 32b4e1f..e1a1e03 100644
--- a/dlls/wmp/wmp_private.h
+++ b/dlls/wmp/wmp_private.h
@@ -65,6 +65,7 @@ typedef struct {
     IWMPPlaylist IWMPPlaylist_iface;
 
     LONG ref;
+    LONG count;
 
     WCHAR *url;
     WCHAR *name;
@@ -116,7 +117,7 @@ void destroy_player(WindowsMediaPlayer*) DECLSPEC_HIDDEN;
 WMPMedia *unsafe_impl_from_IWMPMedia(IWMPMedia *iface) DECLSPEC_HIDDEN;
 WMPPlaylist *unsafe_impl_from_IWMPPlaylist(IWMPPlaylist *iface) DECLSPEC_HIDDEN;
 HRESULT create_media_from_url(BSTR url, double duration, IWMPMedia **ppMedia) DECLSPEC_HIDDEN;
-HRESULT create_playlist(BSTR name, BSTR url, IWMPPlaylist **ppPlaylist) DECLSPEC_HIDDEN;
+HRESULT create_playlist(BSTR name, BSTR url, LONG count, IWMPPlaylist **ppPlaylist) DECLSPEC_HIDDEN;
 void ConnectionPointContainer_Init(WindowsMediaPlayer *wmp) DECLSPEC_HIDDEN;
 void ConnectionPointContainer_Destroy(WindowsMediaPlayer *wmp) DECLSPEC_HIDDEN;
 void call_sink(ConnectionPoint *This, DISPID dispid, DISPPARAMS *dispparams) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list