+#pragma once
+
+#ifndef _RAPPS_H
+#define _RAPPS_H
+
+#include <tchar.h>
#include <stdarg.h>
#define WIN32_NO_STATUS
#include <winuser.h>
#include <wincon.h>
#include <richedit.h>
+#include <shellapi.h>
#include <shlobj.h>
+#include <shlwapi.h>
#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"
-#define APPLICATION_DATEBASE_URL L"http://svn.reactos.org/packages/rappmgr.cab"
+#ifdef USE_CERT_PINNING
+ #define CERT_ISSUER_INFO "BE\r\nGlobalSign nv-sa\r\nGlobalSign Domain Validation CA - SHA256 - G2"
+ #define CERT_SUBJECT_INFO "Domain Control Validated\r\n*.reactos.org"
+#endif
+
+#define APPLICATION_DATABASE_URL L"https://svn.reactos.org/packages/rappmgr.cab"
#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 szLicence[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 */
+ ATL::CStringW sFileName;
+ FILETIME ftCacheStamp;
+
+ /* optional integrity checks (SHA-1 digests are 160 bit = 40 characters in hex string form) */
+ 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;
BOOL Maximized;
INT Left;
INT Top;
- INT Right;
- INT Bottom;
+ INT Width;
+ INT Height;
+ /* Proxy settings */
+ INT Proxy;
+ WCHAR szProxyServer[MAX_PATH];
+ WCHAR szNoProxyFor[MAX_PATH];
} SETTINGS_INFO, *PSETTINGS_INFO;
-/* available.c */
-typedef BOOL (CALLBACK *AVAILENUMPROC)(APPLICATION_INFO Info);
-BOOL EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc);
-BOOL ShowAvailableAppInfo(INT Index);
-BOOL UpdateAppsDB(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();
+
+ CConfigParser(const ATL::CStringW& FileName);
+
+ 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);
-/* installdlg.c */
-BOOL InstallApplication(INT Index);
+private:
+ BOOL m_IsInstalled = FALSE;
+ BOOL m_HasLanguageInfo = FALSE;
+ BOOL m_HasInstalledVersion = FALSE;
+ CConfigParser m_Parser;
-/* installed.c */
-typedef BOOL (CALLBACK *APPENUMPROC)(INT ItemIndex, LPWSTR lpName, INSTALLED_INFO Info);
+ 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, LPWSTR 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 IsInstalledApplication(LPWSTR lpRegName, BOOL IsUserKey);
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;
VOID SaveSettings(HWND hwnd);
VOID FillDefaultSettings(PSETTINGS_INFO pSettingsInfo);
-/* listview.c */
-extern HWND hListView;
-extern BOOL bAscending;
-BOOL CreateListView(HWND hwnd);
-BOOL ListViewAddColumn(INT Index, LPWSTR lpText, INT Width, INT Format);
-INT ListViewAddItem(INT ItemIndex, INT IconIndex, LPWSTR lpText, LPARAM lParam);
-INT CALLBACK ListViewCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
-PVOID ListViewGetlParam(INT Index);
-
-/* loaddlg.c */
-BOOL DownloadApplication(INT Index);
-VOID DownloadApplicationsDB(LPWSTR lpUrl);
-
-/* misc.c */
+/* loaddlg.cpp */
+
+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);
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);
-/* parser.c */
-INT ParserGetString(LPCWSTR section, LPCWSTR entry, LPWSTR buffer, UINT len, LPCWSTR filename);
-UINT ParserGetInt(LPCWSTR section, LPCWSTR entry, LPCWSTR filename);
+/* settingsdlg.cpp */
+VOID CreateSettingsDlg(HWND hwnd);
-/* richedit.c */
-extern HWND hRichEdit;
-extern PWSTR pLink;
-BOOL CreateRichEdit(HWND hwnd);
-VOID RichEditOnLink(HWND hwnd, ENLINK *Link);
-VOID InsertRichEditText(LPCWSTR lpszText, DWORD dwEffects);
-VOID NewRichEditText(LPCWSTR lpszText, DWORD dwEffects);
+/* gui.cpp */
+HWND CreateMainWindow();
+DWORD_PTR ListViewGetlParam(INT item);
+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);
-/* settingsdlg.c */
-VOID CreateSettingsDlg(HWND hwnd);
+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 ATL::CStringW szSearchPattern;
+
+/* integrity.cpp */
+BOOL VerifyInteg(LPCWSTR lpSHA1Hash, LPCWSTR lpFileName);
+
+//extern HWND hTreeView;
+//BOOL CreateTreeView(HWND hwnd);
+//HTREEITEM TreeViewAddItem(HTREEITEM hParent, LPWSTR lpText, INT Image, INT SelectedImage, LPARAM lParam);
-/* splitter.c */
-extern HWND hVSplitter;
-extern HWND hHSplitter;
-BOOL CreateVSplitBar(HWND hwnd);
-BOOL CreateHSplitBar(HWND hwnd);
-int GetHSplitterPos(VOID);
-VOID SetHSplitterPos(int Pos);
-
-/* statusbar.c */
-extern HWND hStatusBar;
-BOOL CreateStatusBar(HWND hwnd);
-VOID SetStatusBarText(LPCWSTR lpszText);
-
-/* toolbar.c */
-extern HWND hToolBar;
-extern HWND hSearchBar;
-BOOL CreateToolBar(HWND hwnd);
-VOID ToolBarOnGetDispInfo(LPTOOLTIPTEXT lpttt);
-
-/* treeview.c */
-extern HWND hTreeView;
-BOOL CreateTreeView(HWND hwnd);
-HTREEITEM TreeViewAddItem(HTREEITEM hParent, LPWSTR lpText, INT Image, INT SelectedImage, LPARAM lParam);
+#endif /* _RAPPS_H */