[RAPPS]
[reactos.git] / reactos / base / applications / rapps / rapps.h
index 15c152e..0ded9a3 100644 (file)
@@ -1,3 +1,5 @@
+#pragma once
+
 #ifndef _RAPPS_H
 #define _RAPPS_H
 
@@ -23,7 +25,9 @@
 #include <stdio.h>
 #include <strsafe.h>
 #include <ndk/rtlfuncs.h>
-
+#include <atlcoll.h>
+#include <atlsimpcoll.h>
+#include <atlstr.h> 
 #include <rappsmsg.h>
 
 #include "resource.h"
@@ -37,7 +41,6 @@
 
 #define SPLIT_WIDTH 4
 #define MAX_STR_LEN 256
-
 #define LISTVIEW_ICON_SIZE 24
 #define TREEVIEW_ICON_SIZE 24
 
 #define IS_INSTALLED_ENUM(a) (a >= ENUM_INSTALLED_MIN && a <= ENUM_INSTALLED_MAX)
 #define IS_AVAILABLE_ENUM(a) (a >= ENUM_AVAILABLE_MIN && a <= ENUM_AVAILABLE_MAX)
 
-/* aboutdlg.c */
+typedef enum
+{
+    None,
+    OpenSource,
+    Freeware,
+    Trial,
+    Max = Trial,
+    Min = None
+} LICENSE_TYPE, *PLICENSE_TYPE;
+
+/* aboutdlg.cpp */
 VOID ShowAboutDialog(VOID);
 
-/* available.c */
+/* available.cpp */
 typedef struct
 {
     INT Category;
-    WCHAR szName[MAX_PATH];
-    WCHAR szRegName[MAX_PATH];
-    WCHAR szVersion[MAX_PATH];
-    WCHAR szLicense[MAX_PATH];
-    WCHAR szDesc[MAX_PATH];
-    WCHAR szSize[MAX_PATH];
-    WCHAR szUrlSite[MAX_PATH];
-    WCHAR szUrlDownload[MAX_PATH];
-    WCHAR szCDPath[MAX_PATH];
+    LICENSE_TYPE LicenseType;
+    ATL::CStringW szName;
+    ATL::CStringW szRegName;
+    ATL::CStringW szVersion;
+    ATL::CStringW szLicense;
+    ATL::CStringW szDesc;
+    ATL::CStringW szSize;
+    ATL::CStringW szUrlSite;
+    ATL::CStringW szUrlDownload;
+    ATL::CStringW szCDPath;
+    ATL::CSimpleArray<LCID> Languages;
 
     /* caching mechanism related entries */
-    WCHAR cFileName[MAX_PATH];
+    ATL::CStringW sFileName;
     FILETIME ftCacheStamp;
-    LIST_ENTRY List;
 
     /* optional integrity checks (SHA-1 digests are 160 bit = 40 characters in hex string form) */
-    WCHAR szSHA1[40 + 1];
+    ATL::CStringW szSHA1;
 
 } APPLICATION_INFO, *PAPPLICATION_INFO;
 
+extern ATL::CAtlList<PAPPLICATION_INFO> InfoList;
+
 typedef struct
 {
     HKEY hRootKey;
     HKEY hSubKey;
-    WCHAR szKeyName[MAX_PATH];
+    ATL::CStringW szKeyName;
 
 } INSTALLED_INFO, *PINSTALLED_INFO;
 
@@ -126,26 +142,105 @@ typedef struct
 
 } SETTINGS_INFO, *PSETTINGS_INFO;
 
-/* available.c */
-typedef BOOL (CALLBACK *AVAILENUMPROC)(PAPPLICATION_INFO Info);
-BOOL EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc);
-BOOL ShowAvailableAppInfo(INT Index);
-BOOL UpdateAppsDB(VOID);
-VOID FreeCachedAvailableEntries(VOID);
+/* available.cpp */
+class CConfigParser
+{
+    // Loacale names cache
+    static ATL::CStringW m_szLocaleID;
+    const static INT m_cchLocaleSize = 5;
+    static ATL::CStringW m_szCachedINISectionLocale;
+    static ATL::CStringW m_szCachedINISectionLocaleNeutral;
+
+    const LPCWSTR STR_VERSION_CURRENT = L"CURRENT";
+    const ATL::CStringW szConfigPath;
+
+    static ATL::CStringW GetINIFullPath(const ATL::CStringW& FileName);
+    static VOID CacheINILocaleLazy();
+
+public:
+    static const ATL::CStringW& GetLocale();
+    static INT CConfigParser::GetLocaleSize();
 
-/* installdlg.c */
-BOOL InstallApplication(INT Index);
+    CConfigParser(const ATL::CStringW& FileName);
 
-/* installed.c */
-typedef BOOL (CALLBACK *APPENUMPROC)(INT ItemIndex, LPWSTR lpName, PINSTALLED_INFO Info);
+    UINT GetString(const ATL::CStringW& KeyName, ATL::CStringW& ResultString);
+    UINT GetInt(const ATL::CStringW& KeyName);
+};
+
+typedef BOOL (CALLBACK *AVAILENUMPROC)(PAPPLICATION_INFO Info, LPCWSTR szFolderPath);
+struct CAvailableApplicationInfo : public APPLICATION_INFO
+{
+    ATL::CStringW szInstalledVersion;
+    CAvailableApplicationInfo(const ATL::CStringW& sFileNameParam);
+
+    // Load all info from the file
+    VOID RefreshAppInfo();
+    BOOL HasLanguageInfo() const;
+    BOOL HasNativeLanguage() const;
+    BOOL HasEnglishLanguage() const;
+    BOOL IsInstalled() const;
+    BOOL HasInstalledVersion() const;
+    BOOL HasUpdate() const;
+
+    // Set a timestamp
+    VOID SetLastWriteTime(FILETIME* ftTime);
+
+private:
+    BOOL m_IsInstalled = FALSE;
+    BOOL m_HasLanguageInfo = FALSE;
+    BOOL m_HasInstalledVersion = FALSE;
+    CConfigParser m_Parser;
+
+    inline BOOL GetString(LPCWSTR lpKeyName, 
+                          ATL::CStringW& ReturnedString);
+
+    // Lazily load general info from the file
+    VOID RetrieveGeneralInfo();
+    VOID RetrieveInstalledStatus();
+    VOID RetrieveInstalledVersion();
+    VOID RetrieveLanguages();
+    VOID RetrieveLicenseType();
+    inline BOOL FindInLanguages(LCID what) const;
+};
+
+class CAvailableApps
+{
+    ATL::CAtlList<CAvailableApplicationInfo*> m_InfoList;
+    ATL::CStringW m_szPath;
+    ATL::CStringW m_szCabPath;
+    ATL::CStringW m_szAppsPath;
+    ATL::CStringW m_szSearchPath;
+
+public:
+    CAvailableApps();
+    VOID FreeCachedEntries();
+    BOOL DeleteCurrentAppsDB();
+    BOOL UpdateAppsDB();
+    BOOL EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc);
+    const ATL::CStringW& GetFolderPath();
+    const ATL::CStringW& GetAppPath();
+    const ATL::CStringW& GetCabPath();
+    const LPCWSTR GetFolderPathString();
+    const LPCWSTR GetAppPathString();
+    const LPCWSTR GetCabPathString();
+};
+
+/* installdlg.cpp */
+//BOOL InstallApplication(INT Index);
+
+/* installed.cpp */
+typedef BOOL (CALLBACK *APPENUMPROC)(INT ItemIndex, ATL::CStringW &lpName, PINSTALLED_INFO Info);
 BOOL EnumInstalledApplications(INT EnumType, BOOL IsUserKey, APPENUMPROC lpEnumProc);
-BOOL GetApplicationString(HKEY hKey, LPCWSTR lpKeyName, LPWSTR lpString);
+BOOL GetApplicationString(HKEY hKey, LPCWSTR lpKeyName, LPWSTR szString);
+BOOL GetApplicationString(HKEY hKey, LPCWSTR RegName, ATL::CStringW& String);
+
 BOOL ShowInstalledAppInfo(INT Index);
 BOOL UninstallApplication(INT Index, BOOL bModify);
-BOOL IsInstalledApplicationEx(LPWSTR lpRegName, BOOL IsUserKey, REGSAM keyWow);
 VOID RemoveAppFromRegistry(INT Index);
 
-/* winmain.c */
+BOOL GetInstalledVersion(ATL::CStringW* pszVersion, const ATL::CStringW& szRegName);
+
+/* winmain.cpp */
 extern HWND hMainWnd;
 extern HINSTANCE hInst;
 extern INT SelectedEnumType;
@@ -153,11 +248,29 @@ extern SETTINGS_INFO SettingsInfo;
 VOID SaveSettings(HWND hwnd);
 VOID FillDefaultSettings(PSETTINGS_INFO pSettingsInfo);
 
-/* loaddlg.c */
-BOOL DownloadApplication(INT Index);
-VOID DownloadApplicationsDB(LPCWSTR lpUrl);
+/* loaddlg.cpp */
 
-/* misc.c */
+class DownloadManager
+{
+    static PAPPLICATION_INFO AppInfo;
+public:
+
+    static INT_PTR CALLBACK DownloadDlgProc(HWND Dlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
+    static LRESULT CALLBACK DownloadProgressProc(HWND hWnd, 
+                                                 UINT uMsg, 
+                                                 WPARAM wParam, 
+                                                 LPARAM lParam, 
+                                                 UINT_PTR uIdSubclass, 
+                                                 DWORD_PTR dwRefData);
+
+    static DWORD WINAPI ThreadFunc(LPVOID Context);
+    static BOOL DownloadListOfApplications(const ATL::CSimpleArray<PAPPLICATION_INFO>& AppsList);
+    static BOOL DownloadApplication(PAPPLICATION_INFO pAppInfo);
+    static VOID DownloadApplicationsDB(LPCWSTR lpUrl);
+    static VOID LaunchDownloadDialog();
+};
+
+/* misc.cpp */
 INT GetSystemColorDepth(VOID);
 int GetWindowWidth(HWND hwnd);
 int GetWindowHeight(HWND hwnd);
@@ -166,28 +279,32 @@ int GetClientWindowHeight(HWND hwnd);
 VOID CopyTextToClipboard(LPCWSTR lpszText);
 VOID SetWelcomeText(VOID);
 VOID ShowPopupMenu(HWND hwnd, UINT MenuID, UINT DefaultItem);
+BOOL StartProcess(ATL::CStringW & Path, BOOL Wait);
 BOOL StartProcess(LPWSTR lpPath, BOOL Wait);
-BOOL GetStorageDirectory(PWCHAR lpDirectory, DWORD cch);
-BOOL ExtractFilesFromCab(LPWSTR lpCabName, LPWSTR lpOutputPath);
+BOOL GetStorageDirectory(ATL::CStringW &lpDirectory);
+BOOL ExtractFilesFromCab(LPCWSTR lpCabName, LPCWSTR lpOutputPath);
 VOID InitLogs(VOID);
 VOID FreeLogs(VOID);
-BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPWSTR lpMsg);
+BOOL WriteLogMessage(WORD wType, DWORD dwEventID, LPCWSTR lpMsg);
 
-UINT ParserGetString(LPCWSTR lpKeyName, LPWSTR lpReturnedString, UINT nSize, LPCWSTR lpFileName);
-UINT ParserGetInt(LPCWSTR lpKeyName, LPCWSTR lpFileName);
-
-/* settingsdlg.c */
+/* settingsdlg.cpp */
 VOID CreateSettingsDlg(HWND hwnd);
 
 /* gui.cpp */
 HWND CreateMainWindow();
 DWORD_PTR ListViewGetlParam(INT item);
-INT ListViewAddItem(INT ItemIndex, INT IconIndex, PWSTR lpName, LPARAM lParam);
-VOID SetStatusBarText(PCWSTR szText);
-VOID NewRichEditText(PCWSTR szText, DWORD flags);
-VOID InsertRichEditText(PCWSTR szText, DWORD flags);
+INT ListViewAddItem(INT ItemIndex, INT IconIndex, LPWSTR lpName, LPARAM lParam);
+VOID SetStatusBarText(LPCWSTR szText);
+VOID NewRichEditText(LPCWSTR szText, DWORD flags);
+VOID InsertRichEditText(LPCWSTR szText, DWORD flags);
+
+VOID SetStatusBarText(const ATL::CStringW& szText);
+INT ListViewAddItem(INT ItemIndex, INT IconIndex, ATL::CStringW & Name, LPARAM lParam);
+VOID NewRichEditText(const ATL::CStringW& szText, DWORD flags);
+VOID InsertRichEditText(const ATL::CStringW& szText, DWORD flags);
+CAvailableApps * GetAvailableApps();
 extern HWND hListView;
-extern WCHAR szSearchPattern[MAX_STR_LEN];
+extern ATL::CStringW szSearchPattern;
 
 /* integrity.cpp */
 BOOL VerifyInteg(LPCWSTR lpSHA1Hash, LPCWSTR lpFileName);
@@ -196,5 +313,4 @@ BOOL VerifyInteg(LPCWSTR lpSHA1Hash, LPCWSTR lpFileName);
 //BOOL CreateTreeView(HWND hwnd);
 //HTREEITEM TreeViewAddItem(HTREEITEM hParent, LPWSTR lpText, INT Image, INT SelectedImage, LPARAM lParam);
 
-
 #endif /* _RAPPS_H */