Author: ashaposhnikov Date: Sat Aug 26 22:43:05 2017 New Revision: 75684
URL: http://svn.reactos.org/svn/reactos?rev=75684&view=rev Log: [RAPPS] - Fixed crash when trying to double-click in the "Installed" category - Replaced APPLICATION_INFO with CAvailableApplicationInfo - Added DownloadInfo struct as a replacement of APPLICATION_INFO in CDownloadManager - Minor fixes
Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/available.h branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/dialogs.h branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/misc.h branches/GSoC_2017/rapps/reactos/base/applications/rapps/installdlg.cpp branches/GSoC_2017/rapps/reactos/base/applications/rapps/loaddlg.cpp branches/GSoC_2017/rapps/reactos/base/applications/rapps/unattended.cpp
Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/app... ============================================================================== --- branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp [iso-8859-1] (original) +++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/available.cpp [iso-8859-1] Sat Aug 26 22:43:05 2017 @@ -22,6 +22,7 @@ : m_Parser(sFileNameParam) { LicenseType = LICENSE_TYPE::None; + sFileName = sFileNameParam;
RetrieveGeneralInfo(); @@ -73,8 +74,10 @@
VOID CAvailableApplicationInfo::RetrieveInstalledVersion() { + ATL::CStringW szNameVersion = szName + L" " + szVersion; m_HasInstalledVersion = ::GetInstalledVersion(&szInstalledVersion, szRegName) - || ::GetInstalledVersion(&szInstalledVersion, szName); + || ::GetInstalledVersion(&szInstalledVersion, szName) + || ::GetInstalledVersion(&szInstalledVersion, szNameVersion); }
VOID CAvailableApplicationInfo::RetrieveLanguages() @@ -377,7 +380,7 @@ Info->RefreshAppInfo();
if (lpEnumProc) - lpEnumProc(static_cast<PAPPLICATION_INFO>(Info), m_szAppsPath.GetString()); + lpEnumProc(static_cast<CAvailableApplicationInfo*>(Info), m_szAppsPath.GetString());
} while (FindNextFileW(hFind, &FindFileData) != 0);
@@ -385,7 +388,7 @@ return TRUE; }
-const PAPPLICATION_INFO CAvailableApps::FindInfo(const ATL::CStringW& szAppName) +CAvailableApplicationInfo* CAvailableApps::FindInfo(const ATL::CStringW& szAppName) { if (m_InfoList.IsEmpty()) { @@ -394,7 +397,7 @@
// linear search POSITION CurrentListPosition = m_InfoList.GetHeadPosition(); - PAPPLICATION_INFO info; + CAvailableApplicationInfo* info; while (CurrentListPosition != NULL) { info = m_InfoList.GetNext(CurrentListPosition); @@ -406,12 +409,12 @@ return NULL; }
-ATL::CSimpleArray<PAPPLICATION_INFO> CAvailableApps::FindInfoList(const ATL::CSimpleArrayATL::CStringW &arrAppsNames) -{ - ATL::CSimpleArray<PAPPLICATION_INFO> result; +ATL::CSimpleArray<CAvailableApplicationInfo*> CAvailableApps::FindInfoList(const ATL::CSimpleArrayATL::CStringW &arrAppsNames) +{ + ATL::CSimpleArray<CAvailableApplicationInfo*> result; for (INT i = 0; i < arrAppsNames.GetSize(); ++i) { - PAPPLICATION_INFO Info = FindInfo(arrAppsNames[i]); + CAvailableApplicationInfo* Info = FindInfo(arrAppsNames[i]); if (Info) { result.Add(Info);
Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/app... ============================================================================== --- branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp [iso-8859-1] (original) +++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/gui.cpp [iso-8859-1] Sat Aug 26 22:43:05 2017 @@ -504,24 +504,24 @@ SetCheckState(-1, bHasAllChecked); }
- ATL::CSimpleArray<PAPPLICATION_INFO> GetCheckedItems() - { - ATL::CSimpleArray<PAPPLICATION_INFO> list; + ATL::CSimpleArray<CAvailableApplicationInfo*> GetCheckedItems() + { + ATL::CSimpleArray<CAvailableApplicationInfo*> list; for (INT i = 0; i >= 0; i = GetNextItem(i, LVNI_ALL)) { if (GetCheckState(i) != FALSE) { - PAPPLICATION_INFO pAppInfo = (PAPPLICATION_INFO) GetItemData(i); + CAvailableApplicationInfo* pAppInfo = (CAvailableApplicationInfo*) GetItemData(i); list.Add(pAppInfo); } } return list; }
- PAPPLICATION_INFO GetSelectedData() + CAvailableApplicationInfo* GetSelectedData() { INT item = GetSelectionMark(); - return (PAPPLICATION_INFO) GetItemData(item); + return (CAvailableApplicationInfo*) GetItemData(item); } };
@@ -1062,7 +1062,7 @@ { if (IS_INSTALLED_ENUM(SelectedEnumType)) ShowInstalledAppInfo(ItemIndex); - if (isAvailableEnum(SelectedEnumType)) + if (IsAvailableEnum(SelectedEnumType)) CAvailableAppView::ShowAvailableAppInfo(ItemIndex); } /* Check if the item is checked */ @@ -1100,7 +1100,7 @@ { if (IS_INSTALLED_ENUM(SelectedEnumType)) ShowInstalledAppInfo(-1); - if (isAvailableEnum(SelectedEnumType)) + if (IsAvailableEnum(SelectedEnumType)) CAvailableAppView::ShowAvailableAppInfo(-1); } } @@ -1310,16 +1310,19 @@ break;
case ID_INSTALL: - if (nSelectedApps > 0) - { - CDownloadManager::DownloadListOfApplications(m_ListView->GetCheckedItems()); - UpdateApplicationsList(-1); - } - else if (CDownloadManager::DownloadApplication(m_ListView->GetSelectedData())) - { - UpdateApplicationsList(-1); - } - + if (IsAvailableEnum(SelectedEnumType)) + { + if (nSelectedApps > 0) + { + CDownloadManager::DownloadListOfApplications(m_ListView->GetCheckedItems()); + UpdateApplicationsList(-1); + } + else if (CDownloadManager::DownloadApplication(m_ListView->GetSelectedData())) + { + UpdateApplicationsList(-1); + } + + } break;
case ID_UNINSTALL: @@ -1416,7 +1419,7 @@ return TRUE; }
- static BOOL CALLBACK s_EnumAvailableAppProc(PAPPLICATION_INFO Info, LPCWSTR szFolderPath) + static BOOL CALLBACK s_EnumAvailableAppProc(CAvailableApplicationInfo* Info, LPCWSTR szFolderPath) { INT Index; HICON hIcon = NULL; @@ -1506,7 +1509,7 @@ EnumInstalledApplications(EnumType, TRUE, s_EnumInstalledAppProc); EnumInstalledApplications(EnumType, FALSE, s_EnumInstalledAppProc); } - else if (isAvailableEnum(EnumType)) + else if (IsAvailableEnum(EnumType)) { /* Enum available applications */ m_AvailableApps.EnumAvailableApplications(EnumType, s_EnumAvailableAppProc);
Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/available.h URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/app... ============================================================================== --- branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/available.h [iso-8859-1] (original) +++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/available.h [iso-8859-1] Sat Aug 26 22:43:05 2017 @@ -29,7 +29,7 @@ ENUM_AVAILABLE_MAX = ENUM_CAT_OTHER };
-inline BOOL isAvailableEnum(INT x) +inline BOOL IsAvailableEnum(INT x) { return (x >= ENUM_AVAILABLE_MIN && x <= ENUM_AVAILABLE_MAX); } @@ -44,7 +44,7 @@ Min = None } *PLICENSE_TYPE;
-typedef struct APPLICATION_INFO +struct CAvailableApplicationInfo { INT Category; LICENSE_TYPE LicenseType; @@ -65,14 +65,8 @@
// Optional integrity checks (SHA-1 digests are 160 bit = 40 characters in hex string form) ATL::CStringW szSHA1; + ATL::CStringW szInstalledVersion;
-} *PAPPLICATION_INFO; - -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 @@ -104,6 +98,8 @@ inline BOOL FindInLanguages(LCID what) const; };
+typedef BOOL(CALLBACK *AVAILENUMPROC)(CAvailableApplicationInfo *Info, LPCWSTR szFolderPath); + class CAvailableApps { ATL::CAtlList<CAvailableApplicationInfo*> m_InfoList; @@ -123,8 +119,8 @@ VOID FreeCachedEntries(); static VOID DeleteCurrentAppsDB(); BOOL EnumAvailableApplications(INT EnumType, AVAILENUMPROC lpEnumProc); - const PAPPLICATION_INFO FindInfo(const ATL::CStringW& szAppName); - ATL::CSimpleArray<PAPPLICATION_INFO> FindInfoList(const ATL::CSimpleArrayATL::CStringW &arrAppsNames); + CAvailableApplicationInfo* FindInfo(const ATL::CStringW& szAppName); + ATL::CSimpleArray<CAvailableApplicationInfo*> FindInfoList(const ATL::CSimpleArrayATL::CStringW &arrAppsNames); const ATL::CStringW& GetFolderPath(); const ATL::CStringW& GetAppPath(); const ATL::CStringW& GetCabPath();
Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/dialogs.h URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/app... ============================================================================== --- branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/dialogs.h [iso-8859-1] (original) +++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/dialogs.h [iso-8859-1] Sat Aug 26 22:43:05 2017 @@ -7,13 +7,15 @@
// Download dialog (loaddlg.cpp) class CDowloadingAppsListView; +struct DownloadInfo;
class CDownloadManager { - static ATL::CSimpleArray<PAPPLICATION_INFO> AppsToInstallList; + static ATL::CSimpleArray<DownloadInfo> AppsToInstallList; static CDowloadingAppsListView DownloadsListView; static INT iCurrentApp;
+ static VOID Download(const DownloadInfo& DLInfo, BOOL bIsModal = FALSE); public: static INT_PTR CALLBACK DownloadDlgProc(HWND Dlg, UINT uMsg, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK DownloadProgressProc(HWND hWnd, @@ -24,8 +26,8 @@ DWORD_PTR dwRefData);
static DWORD WINAPI ThreadFunc(LPVOID Context); - static BOOL DownloadListOfApplications(const ATL::CSimpleArray<PAPPLICATION_INFO>& AppsList, BOOL bIsModal = FALSE); - static BOOL DownloadApplication(PAPPLICATION_INFO pAppInfo, BOOL modal = FALSE); + static BOOL DownloadListOfApplications(const ATL::CSimpleArray<CAvailableApplicationInfo*>& AppsList, BOOL bIsModal = FALSE); + static BOOL DownloadApplication(CAvailableApplicationInfo* pAppInfo, BOOL bIsModal = FALSE); static VOID DownloadApplicationsDB(LPCWSTR lpUrl); static VOID LaunchDownloadDialog(BOOL); };
Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/misc.h URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/app... ============================================================================== --- branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/misc.h [iso-8859-1] (original) +++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/include/misc.h [iso-8859-1] Sat Aug 26 22:43:05 2017 @@ -38,7 +38,7 @@ static const ATL::CStringW& GetLocale(); static INT CConfigParser::GetLocaleSize();
- CConfigParser(const ATL::CStringW& FileName); + CConfigParser(const ATL::CStringW& FileName = "");
UINT GetString(const ATL::CStringW& KeyName, ATL::CStringW& ResultString); UINT GetInt(const ATL::CStringW& KeyName);
Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/installdlg.cpp URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/app... ============================================================================== --- branches/GSoC_2017/rapps/reactos/base/applications/rapps/installdlg.cpp [iso-8859-1] (original) +++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/installdlg.cpp [iso-8859-1] Sat Aug 26 22:43:05 2017 @@ -10,7 +10,7 @@ #include "dialogs.h" #include "available.h"
-static PAPPLICATION_INFO AppInfo; +static CAvailableApplicationInfo* AppInfo;
static INT_PTR CALLBACK @@ -42,10 +42,10 @@ BOOL InstallApplication(INT Index) { - if (!isAvailableEnum(SelectedEnumType)) + if (!IsAvailableEnum(SelectedEnumType)) return FALSE;
- AppInfo = (PAPPLICATION_INFO) ListViewGetlParam(Index); + AppInfo = (CAvailableApplicationInfo*) ListViewGetlParam(Index); if (!AppInfo) return FALSE;
DialogBoxW(hInst,
Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/loaddlg.cpp URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/app... ============================================================================== --- branches/GSoC_2017/rapps/reactos/base/applications/rapps/loaddlg.cpp [iso-8859-1] (original) +++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/loaddlg.cpp [iso-8859-1] Sat Aug 26 22:43:05 2017 @@ -67,6 +67,34 @@ return szString; }
+ +struct DownloadInfo +{ + DownloadInfo() {} + DownloadInfo(const CAvailableApplicationInfo& AppInfo) + :szUrl(AppInfo.szUrlDownload), szName(AppInfo.szName), szSHA1(AppInfo.szSHA1) + { + } + + ATL::CStringW szUrl; + ATL::CStringW szName; + ATL::CStringW szSHA1; +}; + +struct DownloadParam +{ + DownloadParam() : Dialog(NULL), AppInfo(), szCaption(NULL) {} + DownloadParam(HWND dlg, const ATL::CSimpleArray<DownloadInfo> &info, LPCWSTR caption) + : Dialog(dlg), AppInfo(info), szCaption(caption) + { + } + + HWND Dialog; + ATL::CSimpleArray<DownloadInfo> AppInfo; + LPCWSTR szCaption; +}; + + class CDownloadDialog : public CComObjectRootEx<CComMultiThreadModelNoCS>, public IBindStatusCallback @@ -227,12 +255,11 @@ return hwnd; }
- VOID LoadList(ATL::CSimpleArray<PAPPLICATION_INFO> arrInfo) + VOID LoadList(ATL::CSimpleArray<DownloadInfo> arrInfo) { for (INT i = 0; i < arrInfo.GetSize(); ++i) { - PAPPLICATION_INFO AppInfo = arrInfo[i]; - AddRow(i, AppInfo->szName.GetString(), DOWNLOAD_STATUS::DLWaiting); + AddRow(i, arrInfo[i].szName.GetString(), DOWNLOAD_STATUS::DLWaiting); } }
@@ -346,23 +373,17 @@ } }
-struct DownloadParam -{ - DownloadParam() : Dialog(NULL), AppInfo(), szCaption(NULL) {} - DownloadParam(HWND dlg, const ATL::CSimpleArray<PAPPLICATION_INFO> &info, LPCWSTR caption) - : Dialog(dlg), AppInfo(info), szCaption(caption) - { - } - - HWND Dialog; - ATL::CSimpleArray<PAPPLICATION_INFO> AppInfo; - LPCWSTR szCaption; -}; - // CDownloadManager -ATL::CSimpleArray<PAPPLICATION_INFO> CDownloadManager::AppsToInstallList; +ATL::CSimpleArray<DownloadInfo> CDownloadManager::AppsToInstallList; CDowloadingAppsListView CDownloadManager::DownloadsListView; INT CDownloadManager::iCurrentApp; + +VOID CDownloadManager::Download(const DownloadInfo &DLInfo, BOOL bIsModal) +{ + AppsToInstallList.RemoveAll(); + AppsToInstallList.Add(DLInfo); + LaunchDownloadDialog(bIsModal); +}
INT_PTR CALLBACK CDownloadManager::DownloadDlgProc(HWND Dlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -419,6 +440,7 @@ }
CloseHandle(Thread); + AppsToInstallList.RemoveAll(); return TRUE; }
@@ -546,11 +568,11 @@ size_t urlLength, filenameLength;
const INT iAppId = iCurrentApp; - const ATL::CSimpleArray<PAPPLICATION_INFO> InfoArray = static_cast<DownloadParam*>(param)->AppInfo; + const ATL::CSimpleArray<DownloadInfo> &InfoArray = static_cast<DownloadParam*>(param)->AppInfo; LPCWSTR szCaption = static_cast<DownloadParam*>(param)->szCaption; ATL::CStringW szNewCaption;
- delete param; + if (InfoArray.GetSize() <= 0) { MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD); @@ -559,16 +581,11 @@
for (INT iAppId = 0; iAppId < InfoArray.GetSize(); ++iAppId) { - PAPPLICATION_INFO pCurrentInfo = AppsToInstallList[iAppId]; - if (!pCurrentInfo) - { - MessageBox_LoadString(hMainWnd, IDS_UNABLE_TO_DOWNLOAD); - continue; - } + const DownloadInfo &CurrentInfo = InfoArray[iAppId];
// build the path for the download - p = wcsrchr(pCurrentInfo->szUrlDownload.GetString(), L'/'); - q = wcsrchr(pCurrentInfo->szUrlDownload.GetString(), L'?'); + p = wcsrchr(CurrentInfo.szUrl.GetString(), L'/'); + q = wcsrchr(CurrentInfo.szUrl.GetString(), L'?');
// do we have a final slash separator? if (!p) @@ -583,7 +600,7 @@ filenameLength -= wcslen(q - 1) * sizeof(WCHAR);
// is this URL an update package for RAPPS? if so store it in a different place - if (pCurrentInfo->szUrlDownload == APPLICATION_DATABASE_URL) + if (CurrentInfo.szUrl == APPLICATION_DATABASE_URL) { bCab = TRUE; if (!GetStorageDirectory(Path)) @@ -605,10 +622,10 @@ Path += L"\"; Path += (LPWSTR) (p + 1);
- if (!bCab && pCurrentInfo->szSHA1[0] && GetFileAttributesW(Path.GetString()) != INVALID_FILE_ATTRIBUTES) + if (!bCab && CurrentInfo.szSHA1[0] && GetFileAttributesW(Path.GetString()) != INVALID_FILE_ATTRIBUTES) { // only open it in case of total correctness - if (VerifyInteg(pCurrentInfo->szSHA1, Path)) + if (VerifyInteg(CurrentInfo.szSHA1.GetString(), Path)) goto run; }
@@ -622,7 +639,7 @@ // Change caption to show the currently downloaded app if (!bCab) { - szNewCaption.Format(szCaption, pCurrentInfo->szName.GetString()); + szNewCaption.Format(szCaption, CurrentInfo.szName.GetString()); } else { @@ -632,7 +649,7 @@ SetWindowTextW(hDlg, szNewCaption.GetString());
// Add the download URL - SetDlgItemTextW(hDlg, IDC_DOWNLOAD_STATUS, pCurrentInfo->szUrlDownload.GetString()); + SetDlgItemTextW(hDlg, IDC_DOWNLOAD_STATUS, CurrentInfo.szUrl.GetString());
DownloadsListView.SetDownloadStatus(iAppId, DOWNLOAD_STATUS::DLDownloading);
@@ -663,7 +680,7 @@ if (!hOpen) goto end;
- hFile = InternetOpenUrlW(hOpen, pCurrentInfo->szUrlDownload.GetString(), NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION, 0); + hFile = InternetOpenUrlW(hOpen, CurrentInfo.szUrl.GetString(), NULL, 0, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_KEEP_CONNECTION, 0);
if (!hFile) { @@ -685,13 +702,13 @@ memset(&urlComponents, 0, sizeof(urlComponents)); urlComponents.dwStructSize = sizeof(urlComponents);
- urlLength = pCurrentInfo->szUrlDownload.GetLength(); + urlLength = CurrentInfo.szUrl.GetLength(); urlComponents.dwSchemeLength = urlLength + 1; urlComponents.lpszScheme = (LPWSTR) malloc(urlComponents.dwSchemeLength * sizeof(WCHAR)); urlComponents.dwHostNameLength = urlLength + 1; urlComponents.lpszHostName = (LPWSTR) malloc(urlComponents.dwHostNameLength * sizeof(WCHAR));
- if (!InternetCrackUrlW(pCurrentInfo->szUrlDownload, urlLength + 1, ICU_DECODE | ICU_ESCAPE, &urlComponents)) + if (!InternetCrackUrlW(CurrentInfo.szUrl, urlLength + 1, ICU_DECODE | ICU_ESCAPE, &urlComponents)) goto end;
if (urlComponents.nScheme == INTERNET_SCHEME_HTTP || urlComponents.nScheme == INTERNET_SCHEME_HTTPS) @@ -703,7 +720,7 @@ #ifdef USE_CERT_PINNING // are we using HTTPS to download the RAPPS update package? check if the certificate is original if ((urlComponents.nScheme == INTERNET_SCHEME_HTTPS) && - (wcscmp(pCurrentInfo->szUrlDownload, APPLICATION_DATABASE_URL) == 0) && + (wcscmp(CurrentInfo.szUrl, APPLICATION_DATABASE_URL) == 0) && (!CertIsValid(hOpen, urlComponents.lpszHostName))) { MessageBox_LoadString(hMainWnd, IDS_CERT_DOES_NOT_MATCH); @@ -735,7 +752,7 @@ }
dwCurrentBytesRead += dwBytesRead; - dl->OnProgress(dwCurrentBytesRead, dwContentLen, 0, pCurrentInfo->szUrlDownload.GetString()); + dl->OnProgress(dwCurrentBytesRead, dwContentLen, 0, CurrentInfo.szUrl.GetString()); } while (dwBytesRead && !bCancelled);
CloseHandle(hOut); @@ -746,7 +763,7 @@
/* if this thing isn't a RAPPS update and it has a SHA-1 checksum verify its integrity by using the native advapi32.A_SHA1 functions */ - if (!bCab && pCurrentInfo->szSHA1[0] != 0) + if (!bCab && CurrentInfo.szSHA1[0] != 0) { ATL::CStringW szMsgText;
@@ -758,7 +775,7 @@ SendMessageW(GetDlgItem(hDlg, IDC_DOWNLOAD_STATUS), WM_SETTEXT, 0, (LPARAM) Path.GetString());
// this may take a while, depending on the file size - if (!VerifyInteg(pCurrentInfo->szSHA1, Path.GetString())) + if (!VerifyInteg(CurrentInfo.szSHA1.GetString(), Path.GetString())) { if (!szMsgText.LoadStringW(IDS_INTEG_CHECK_FAIL)) goto end; @@ -811,11 +828,12 @@ DownloadsListView.SetDownloadStatus(iAppId, DOWNLOAD_STATUS::DLFinished); }
+ delete param; SendMessageW(hDlg, WM_CLOSE, 0, 0); return 0; }
-BOOL CDownloadManager::DownloadListOfApplications(const ATL::CSimpleArray<PAPPLICATION_INFO>& AppsList, BOOL bIsModal) +BOOL CDownloadManager::DownloadListOfApplications(const ATL::CSimpleArray<CAvailableApplicationInfo*>& AppsList, BOOL bIsModal) { if (AppsList.GetSize() == 0) { @@ -823,7 +841,13 @@ }
// Initialize shared variables - AppsToInstallList = AppsList; + for (INT i = 0; i < AppsList.GetSize(); ++i) + { + if (AppsList[i]) + { + AppsToInstallList.Add(*(AppsList[i])); + } + }
// Create a dialog and issue a download process LaunchDownloadDialog(bIsModal); @@ -831,26 +855,21 @@ return TRUE; }
-BOOL CDownloadManager::DownloadApplication(PAPPLICATION_INFO pAppInfo, BOOL bIsModal) +BOOL CDownloadManager::DownloadApplication(CAvailableApplicationInfo* pAppInfo, BOOL bIsModal) { if (!pAppInfo) - { return FALSE; - } - - AppsToInstallList.RemoveAll(); - AppsToInstallList.Add(pAppInfo); - LaunchDownloadDialog(bIsModal); - + + Download(*pAppInfo, bIsModal); return TRUE; }
VOID CDownloadManager::DownloadApplicationsDB(LPCWSTR lpUrl) { - static APPLICATION_INFO IntInfo; - IntInfo.szUrlDownload = lpUrl; - IntInfo.szName.LoadStringW(IDS_DL_DIALOG_DB_DISP); - DownloadApplication(&IntInfo, TRUE); + static DownloadInfo DatabaseDLInfo; + DatabaseDLInfo.szUrl = lpUrl; + DatabaseDLInfo.szName.LoadStringW(IDS_DL_DIALOG_DB_DISP); + Download(DatabaseDLInfo, TRUE); }
//TODO: Reuse the dialog
Modified: branches/GSoC_2017/rapps/reactos/base/applications/rapps/unattended.cpp URL: http://svn.reactos.org/svn/reactos/branches/GSoC_2017/rapps/reactos/base/app... ============================================================================== --- branches/GSoC_2017/rapps/reactos/base/applications/rapps/unattended.cpp [iso-8859-1] (original) +++ branches/GSoC_2017/rapps/reactos/base/applications/rapps/unattended.cpp [iso-8859-1] Sat Aug 26 22:43:05 2017 @@ -58,7 +58,7 @@ CAvailableApps apps; CAvailableApps::UpdateAppsDB(); apps.EnumAvailableApplications(ENUM_ALL_AVAILABLE, NULL); - ATL::CSimpleArray<PAPPLICATION_INFO> arrAppInfo = apps.FindInfoList(arrNames); + ATL::CSimpleArray<CAvailableApplicationInfo*> arrAppInfo = apps.FindInfoList(arrNames); if (arrAppInfo.GetSize() > 0) { CDownloadManager::DownloadListOfApplications(arrAppInfo, TRUE);