Mariusz Pluciński : gameux: Add implementation of IGameStatisticsMgr::RemoveGameStatistics.

Alexandre Julliard julliard at winehq.org
Mon Sep 27 11:29:43 CDT 2010


Module: wine
Branch: master
Commit: 5cac9d2cb2c020802a56a5b1b28348316f1087ba
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5cac9d2cb2c020802a56a5b1b28348316f1087ba

Author: Mariusz Pluciński <vshader at gmail.com>
Date:   Sun Sep 26 15:04:04 2010 +0200

gameux: Add implementation of IGameStatisticsMgr::RemoveGameStatistics.

---

 dlls/gameux/gamestatistics.c       |  114 +++++++++++++++++++++++-------------
 dlls/gameux/tests/gamestatistics.c |    4 +-
 2 files changed, 76 insertions(+), 42 deletions(-)

diff --git a/dlls/gameux/gamestatistics.c b/dlls/gameux/gamestatistics.c
index 83ee5cd..a82f03a 100644
--- a/dlls/gameux/gamestatistics.c
+++ b/dlls/gameux/gamestatistics.c
@@ -183,6 +183,64 @@ static HRESULT GAMEUX_buildStatisticsFilePath(
 
     return hr;
 }
+/*******************************************************************************
+ * GAMEUX_getAppIdFromGDFPath
+ *
+ * Loads application identifier associated with given GDF binary.
+ * Routine reads identifier from registry, so will fail if game
+ * is not registered.
+ *
+ * Parameters:
+ *  GDFBinaryPath                       [I]     path to gdf binary
+ *  lpApplicationId                     [O]     place to store application id.
+ *                                              must be at least 49 characters
+ *                                              to store guid and termination 0
+ */
+static HRESULT GAMEUX_getAppIdFromGDFPath(
+        LPCWSTR GDFBinaryPath,
+        LPWSTR lpApplicationId)
+{
+    static const WCHAR sApplicationId[] =
+            {'A','p','p','l','i','c','a','t','i','o','n','I','d',0};
+
+    HRESULT hr;
+    GAME_INSTALL_SCOPE installScope;
+    GUID instanceId;
+    LPWSTR lpRegistryPath;
+    DWORD dwLength = 49*sizeof(WCHAR);/* place for GUID */
+
+    TRACE("(%s, %p)\n", debugstr_w(GDFBinaryPath), lpApplicationId);
+
+    if(!GDFBinaryPath)
+        return E_INVALIDARG;
+
+    installScope = GIS_CURRENT_USER;
+    hr = GAMEUX_FindGameInstanceId(GDFBinaryPath, installScope, &instanceId);
+
+    if(hr == S_FALSE)
+    {
+        installScope = GIS_ALL_USERS;
+        hr = GAMEUX_FindGameInstanceId(GDFBinaryPath, installScope, &instanceId);
+    }
+
+    if(hr == S_FALSE)
+        /* game not registered, so statistics cannot be used */
+        hr = E_FAIL;
+
+    if(SUCCEEDED(hr))
+        /* game is registered, let's read it's application id from registry */
+        hr = GAMEUX_buildGameRegistryPath(installScope, &instanceId, &lpRegistryPath);
+
+    if(SUCCEEDED(hr))
+        hr = HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE,
+                lpRegistryPath, sApplicationId, RRF_RT_REG_SZ,
+                NULL, lpApplicationId, &dwLength));
+
+    HeapFree(GetProcessHeap(), 0, lpRegistryPath);
+
+    TRACE("found app id: %s, return: %#x\n", debugstr_w(lpApplicationId), hr);
+    return hr;
+}
 /*******************************************************************
  * IGameStatistics implementation
  */
@@ -560,51 +618,16 @@ static HRESULT STDMETHODCALLTYPE GameStatisticsMgrImpl_GetGameStatistics(
         GAMESTATS_OPEN_RESULT *pOpenResult,
         IGameStatistics **ppiStats)
 {
-    static const WCHAR sApplicationId[] =
-            {'A','p','p','l','i','c','a','t','i','o','n','I','d',0};
-
     HRESULT hr;
-    GUID instanceId;
-    LPWSTR lpRegistryPath = NULL;
     WCHAR lpApplicationId[49];
-    DWORD dwLength = sizeof(lpApplicationId);
-    GAME_INSTALL_SCOPE installScope;
     GameStatisticsImpl *statisticsImpl;
 
     TRACE("(%p, %s, 0x%x, %p, %p)\n", iface, debugstr_w(GDFBinaryPath), openType, pOpenResult, ppiStats);
 
-    if(!GDFBinaryPath)
-        return E_INVALIDARG;
-
-    installScope = GIS_CURRENT_USER;
-    hr = GAMEUX_FindGameInstanceId(GDFBinaryPath, installScope, &instanceId);
-
-    if(hr == S_FALSE)
-    {
-        installScope = GIS_ALL_USERS;
-        hr = GAMEUX_FindGameInstanceId(GDFBinaryPath, installScope, &instanceId);
-    }
-
-    if(hr == S_FALSE)
-        /* game not registered, so statistics cannot be used */
-        hr = E_FAIL;
+    hr = GAMEUX_getAppIdFromGDFPath(GDFBinaryPath, lpApplicationId);
 
     if(SUCCEEDED(hr))
-        /* game is registered, let's read it's application id from registry */
-        hr = GAMEUX_buildGameRegistryPath(installScope, &instanceId, &lpRegistryPath);
-
-    if(SUCCEEDED(hr))
-    {
-        hr = HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE,
-                lpRegistryPath, sApplicationId, RRF_RT_REG_SZ,
-                NULL, lpApplicationId, &dwLength));
-    }
-
-    if(SUCCEEDED(hr))
-    {
-        TRACE("found app id: %s\n", debugstr_w(lpApplicationId));
         hr = create_IGameStatistics(&statisticsImpl);
-    }
 
     if(SUCCEEDED(hr))
     {
@@ -618,8 +641,6 @@ static HRESULT STDMETHODCALLTYPE GameStatisticsMgrImpl_GetGameStatistics(
         hr = E_NOTIMPL;
     }
 
-    HeapFree(GetProcessHeap(), 0, lpRegistryPath);
-
     return hr;
 }
 
@@ -627,8 +648,21 @@ static HRESULT STDMETHODCALLTYPE GameStatisticsMgrImpl_RemoveGameStatistics(
         IGameStatisticsMgr* iface,
         LPCWSTR GDFBinaryPath)
 {
-    FIXME("stub (%p, %s)\n", iface, debugstr_w(GDFBinaryPath));
-    return E_NOTIMPL;
+    HRESULT hr;
+    WCHAR lpApplicationId[49];
+    WCHAR sStatsFile[MAX_PATH];
+
+    TRACE("(%p, %s)\n", iface, debugstr_w(GDFBinaryPath));
+
+    hr = GAMEUX_getAppIdFromGDFPath(GDFBinaryPath, lpApplicationId);
+
+    if(SUCCEEDED(hr))
+        hr = GAMEUX_buildStatisticsFilePath(lpApplicationId, sStatsFile);
+
+    if(SUCCEEDED(hr))
+        hr = (DeleteFileW(sStatsFile)==TRUE ? S_OK : HRESULT_FROM_WIN32(GetLastError()));
+
+    return hr;
 }
 
 static const struct IGameStatisticsMgrVtbl GameStatisticsMgrImplVtbl =
diff --git a/dlls/gameux/tests/gamestatistics.c b/dlls/gameux/tests/gamestatistics.c
index 759f6d5..29bfcf3 100644
--- a/dlls/gameux/tests/gamestatistics.c
+++ b/dlls/gameux/tests/gamestatistics.c
@@ -414,8 +414,8 @@ static void test_gamestatisticsmgr( void )
         /* test of removing game statistics from underlying storage */
         ok(_isFileExists(lpStatisticsFile) == TRUE, "statistics file %s does not exists\n", wine_dbgstr_w(lpStatisticsFile));
         hr = IGameStatisticsMgr_RemoveGameStatistics(gsm, sExeName);
-        todo_wine ok(SUCCEEDED(hr), "cannot remove game statistics, error: 0x%x\n", hr);
-        todo_wine ok(_isFileExists(lpStatisticsFile) == FALSE, "statistics file %s still exists\n", wine_dbgstr_w(lpStatisticsFile));
+        ok(SUCCEEDED(hr), "cannot remove game statistics, error: 0x%x\n", hr);
+        ok(_isFileExists(lpStatisticsFile) == FALSE, "statistics file %s still exists\n", wine_dbgstr_w(lpStatisticsFile));
     }
 
     hr = IGameStatisticsMgr_Release(gsm);




More information about the wine-cvs mailing list