diff options
Diffstat (limited to 'plugins/PluginUpdater/src')
| -rw-r--r-- | plugins/PluginUpdater/src/Common.h | 6 | ||||
| -rw-r--r-- | plugins/PluginUpdater/src/DlgListNew.cpp | 45 | ||||
| -rw-r--r-- | plugins/PluginUpdater/src/DlgUpdate.cpp | 24 | ||||
| -rw-r--r-- | plugins/PluginUpdater/src/Events.cpp | 43 | ||||
| -rw-r--r-- | plugins/PluginUpdater/src/Notifications.cpp | 75 | ||||
| -rw-r--r-- | plugins/PluginUpdater/src/Notifications.h | 4 | ||||
| -rw-r--r-- | plugins/PluginUpdater/src/Options.cpp | 108 | ||||
| -rw-r--r-- | plugins/PluginUpdater/src/Utils.cpp | 94 | ||||
| -rw-r--r-- | plugins/PluginUpdater/src/resource.h | 1 | ||||
| -rw-r--r-- | plugins/PluginUpdater/src/unzipfile.cpp | 8 | 
10 files changed, 180 insertions, 228 deletions
diff --git a/plugins/PluginUpdater/src/Common.h b/plugins/PluginUpdater/src/Common.h index 0daf395231..e45e885fdd 100644 --- a/plugins/PluginUpdater/src/Common.h +++ b/plugins/PluginUpdater/src/Common.h @@ -121,10 +121,6 @@ struct PlugOptions  #define UPDATE_MODE_TRUNK_SYMBOLS	3
  #define UPDATE_MODE_MAX_VALUE		3 // when adding new mode, increment this number
 -#define POPUP_TYPE_MSG  0
 -#define POPUP_TYPE_ERROR 1
 -#define POPUP_TYPE_INFO 2
 -#define POPUP_TYPE_PROGRESS 2
  #define MAX_RETRIES			3
 @@ -143,7 +139,7 @@ extern POPUP_OPTIONS PopupOptions;  extern aPopups PopupsList[POPUPS];
  extern HANDLE Timer, hPipe, hNetlibUser;
 -void DoCheck();
 +void DoCheck(bool bSilent);
  void UninitCheck(void);
  void UninitListNew(void);
 diff --git a/plugins/PluginUpdater/src/DlgListNew.cpp b/plugins/PluginUpdater/src/DlgListNew.cpp index d860edb694..7cc8a900a4 100644 --- a/plugins/PluginUpdater/src/DlgListNew.cpp +++ b/plugins/PluginUpdater/src/DlgListNew.cpp @@ -28,8 +28,7 @@ static void SelectAll(HWND hDlg, bool bEnable)  	HWND hwndList = GetDlgItem(hDlg, IDC_LIST_UPDATES);
  	for (int i=0; i < todo.getCount(); i++) {
 -		ListView_SetCheckState(hwndList, i, bEnable);
 -		todo[i].bEnabled = bEnable;
 +		ListView_SetCheckState(hwndList, i, todo[i].bEnabled = bEnable);
  	}
  }
 @@ -59,25 +58,25 @@ static void ApplyDownloads(void *param)  	mir_sntprintf(tszFileTemp, SIZEOF(tszFileTemp), _T("%s\\Temp"), tszRoot);
  	SafeCreateDirectory(tszFileTemp);
 -	TCHAR *tszMirandaPath = Utils_ReplaceVarsT(_T("%miranda_path%"));
 +	VARST tszMirandaPath(_T("%miranda_path%"));
  	HANDLE nlc = NULL;
  	for (int i=0; i < todo.getCount(); ++i) {
  		ListView_EnsureVisible(hwndList, i, FALSE);
  		if (todo[i].bEnabled) {
  			// download update
 -			ListView_SetItemText(hwndList, i, 2, TranslateT("Downloading..."));
 +			ListView_SetItemText(hwndList, i, 1, TranslateT("Downloading..."));
  			if (DownloadFile(&todo[i].File, nlc)) {
 -				ListView_SetItemText(hwndList, i, 2, TranslateT("Succeeded."));
 +				ListView_SetItemText(hwndList, i, 1, TranslateT("Succeeded."));
  				if (unzip(todo[i].File.tszDiskPath, tszMirandaPath, tszFileBack,false))
  					SafeDeleteFile(todo[i].File.tszDiskPath);  // remove .zip after successful update
  			}
  			else
 -				ListView_SetItemText(hwndList, i, 2, TranslateT("Failed!"));
 +				ListView_SetItemText(hwndList, i, 1, TranslateT("Failed!"));
  		}
  		else
 -			ListView_SetItemText(hwndList, i, 2, TranslateT("Skipped."));
 +			ListView_SetItemText(hwndList, i, 1, TranslateT("Skipped."));
  	}
  	Netlib_CloseHandle(nlc);
 @@ -100,7 +99,7 @@ static LRESULT CALLBACK PluginListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LP  		LVHITTESTINFO hi;
  		hi.pt.x = LOWORD(lParam); hi.pt.y = HIWORD(lParam);
  		ListView_SubItemHitTest(hwnd, &hi);
 -		if (hi.iSubItem == 1) {
 +		if ((hi.iSubItem == 0) && (hi.flags & LVHT_ONITEMICON)) {
  			LVITEM lvi = {0};
  			lvi.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_GROUPID;
  			lvi.stateMask = -1;
 @@ -180,13 +179,9 @@ INT_PTR CALLBACK DlgList(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)  			lvc.cx = 220; // width of column in pixels
  			ListView_InsertColumn(hwndList, 0, &lvc);
 -			lvc.pszText = L"";
 -			lvc.cx = 32 - GetSystemMetrics(SM_CXVSCROLL); // width of column in pixels
 -			ListView_InsertColumn(hwndList, 1, &lvc);
 -
  			lvc.pszText = TranslateT("State");
 -			lvc.cx = 100 - GetSystemMetrics(SM_CXVSCROLL); // width of column in pixels
 -			ListView_InsertColumn(hwndList, 2, &lvc);
 +			lvc.cx = 100; // width of column in pixels
 +			ListView_InsertColumn(hwndList, 1, &lvc);
  			///
  			LVGROUP lvg;
 @@ -228,19 +223,9 @@ INT_PTR CALLBACK DlgList(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)  				lvi.iItem = i;
  				lvi.lParam = (LPARAM)&todo[i];
  				lvi.iGroupId = groupId;
 -				lvi.iImage = -1;
 +				lvi.iImage = ((groupId ==1) ? 0 : -1);
  				lvi.pszText = todo[i].tszOldName;
 -				int iRow = ListView_InsertItem(hwndList, &lvi);
 -
 -				if (iRow != -1) {
 -					lvi.iItem = iRow;
 -					if (groupId == 1) {
 -						lvi.mask = LVIF_IMAGE;
 -						lvi.iSubItem = 1;
 -						lvi.iImage = 0;
 -						ListView_SetItem(hwndList, &lvi);
 -					}
 -				}
 +				ListView_InsertItem(hwndList, &lvi);
  			}
  		}
 @@ -366,7 +351,7 @@ static void GetList(void *)  	}
  	FILELIST *UpdateFiles = new FILELIST(20);
 -	TCHAR *dirname = Utils_ReplaceVarsT(_T("%miranda_path%"));
 +	VARST dirname(_T("%miranda_path%"));
  	for (int i=0; i < hashes.getCount(); i++) {
  		ServListEntry &hash = hashes[i];
 @@ -402,12 +387,9 @@ static void GetList(void *)  		}
  	}
 -	mir_free(dirname);
 -
  	// Show dialog
  	if (UpdateFiles->getCount() == 0) {
 -		if (!opts.bSilent)
 -			ShowPopup(TranslateT("Plugin Updater"), TranslateT("List is empty."), POPUP_TYPE_INFO);
 +		ShowPopup(TranslateT("Plugin Updater"), TranslateT("List is empty."), POPUP_TYPE_INFO);
  		delete UpdateFiles;
  	}
  	else CallFunctionAsync(LaunchListDialog, UpdateFiles);
 @@ -436,7 +418,6 @@ void UninitListNew()  INT_PTR ShowListCommand(WPARAM,LPARAM)
  {
 -	opts.bSilent = false;
  	DoGetList();
  	return 0;
  }
 diff --git a/plugins/PluginUpdater/src/DlgUpdate.cpp b/plugins/PluginUpdater/src/DlgUpdate.cpp index 8edb1431e8..7b46083131 100644 --- a/plugins/PluginUpdater/src/DlgUpdate.cpp +++ b/plugins/PluginUpdater/src/DlgUpdate.cpp @@ -95,7 +95,7 @@ static void ApplyUpdates(void *param)  	Netlib_CloseHandle(nlc);
  	// 3) Unpack all zips
 -	TCHAR *tszMirandaPath = Utils_ReplaceVarsT(_T("%miranda_path%"));
 +	VARST tszMirandaPath(_T("%miranda_path%"));
  	for (int i = 0; i < todo.getCount(); i++) {
  		FILEINFO& p = todo[i];
  		if (p.bEnabled) {
 @@ -340,13 +340,12 @@ static INT_PTR CALLBACK DlgUpdate(HWND hDlg, UINT message, WPARAM wParam, LPARAM  		Skin_ReleaseIcon((HICON)SendMessage(hDlg, WM_SETICON, ICON_SMALL, 0));
  		Utils_SaveWindowPosition(hDlg, NULL, MODNAME, "ConfirmWindow");
  		hwndDialog = NULL;
 -		opts.bSilent = true;
  		delete (OBJLIST<FILEINFO> *)GetWindowLongPtr(hDlg, GWLP_USERDATA);
  		SetWindowLongPtr(hDlg, GWLP_USERDATA, 0);
  #if MIRANDA_VER >= 0x0A00
  		db_set_dw(NULL, MODNAME, "LastUpdate", time(NULL));
  #endif
 -		mir_forkthread(InitTimer, (void*)0);
 +		mir_forkthread(InitTimer, 0);
  		break;
  	}
 @@ -404,7 +403,7 @@ static void DlgUpdateSilent(void *lParam)  	}
  	// 3) Unpack all zips
 -	TCHAR *tszMirandaPath = Utils_ReplaceVarsT(_T("%miranda_path%"));
 +	VARST tszMirandaPath(_T("%miranda_path%"));
  	for (int i = 0; i < UpdateFiles.getCount(); i++) {
  		FILEINFO& p = UpdateFiles[i];
  		if (p.bEnabled) {
 @@ -618,8 +617,9 @@ static int ScanFolder(const TCHAR *tszFolder, size_t cbBaseLen, int level, const  			int MyCRC = 0;
  			mir_sntprintf(tszBuf, SIZEOF(tszBuf), _T("%s\\%s"), tszFolder, ffd.cFileName);
 +			BOOL bDeleteOnly = (tszNewName[0] == 0);
  			// this file is not marked for deletion
 -			if (tszNewName[0]) {
 +			if (!bDeleteOnly) {
  				TCHAR *pName = tszNewName;
  				ServListEntry *item = hashes.find((ServListEntry*)&pName);
  				if (item == NULL) {
 @@ -663,7 +663,7 @@ static int ScanFolder(const TCHAR *tszFolder, size_t cbBaseLen, int level, const  				FILEINFO *FileInfo = new FILEINFO;
  				// copy the relative old name
  				_tcsncpy(FileInfo->tszOldName, tszBuf+cbBaseLen, SIZEOF(FileInfo->tszOldName));
 -				FileInfo->bDeleteOnly = (tszNewName[0] == 0);
 +				FileInfo->bDeleteOnly = bDeleteOnly;
  				if (FileInfo->bDeleteOnly) {
  					// save the full old name for deletion
  					_tcsncpy(FileInfo->tszNewName, tszBuf, SIZEOF(FileInfo->tszNewName));
 @@ -723,19 +723,17 @@ static void CheckUpdates(void *)  			if (!opts.bSilent)
  				ShowPopup(TranslateT("Plugin Updater"), TranslateT("No updates found."), POPUP_TYPE_INFO);
  			delete UpdateFiles;
 -			opts.bSilent = true;
  		}
  		else CallFunctionAsync(LaunchDialog, UpdateFiles);
  	}
 -	else opts.bSilent = true;
 -	mir_forkthread(InitTimer, (void*)(success ? 0 : 2));
 +	mir_forkthread(InitTimer, (success ? 0 :(void*) 2));
  	hashes.destroy();
  	hCheckThread = NULL;
  }
 -void DoCheck()
 +void DoCheck(bool bSilent)
  {
  	if (hCheckThread)
  		ShowPopup(TranslateT("Plugin Updater"), TranslateT("Update checking already started!"), POPUP_TYPE_INFO);
 @@ -744,6 +742,7 @@ void DoCheck()  		SetForegroundWindow(hwndDialog);
  		SetFocus(hwndDialog);
  	} else {
 +		opts.bSilent = bSilent;
  #if MIRANDA_VER >= 0x0A00
  		db_set_dw(NULL, MODNAME, "LastUpdate", time(NULL));
  #endif
 @@ -760,8 +759,7 @@ void UninitCheck()  INT_PTR MenuCommand(WPARAM,LPARAM)
  {
  	Netlib_LogfT(hNetlibUser,_T("Update started manually!"));
 -	opts.bSilent = false;
 -	DoCheck();
 +	DoCheck(false);
  	return 0;
  }
 @@ -789,6 +787,6 @@ void CheckUpdateOnStartup()  				return;
  		}
  		Netlib_LogfT(hNetlibUser,_T("Update on startup started!"));
 -		DoCheck();
 +		DoCheck(true);
  	}
  }
\ No newline at end of file diff --git a/plugins/PluginUpdater/src/Events.cpp b/plugins/PluginUpdater/src/Events.cpp index 90ad62e3fb..6afabbe2a7 100644 --- a/plugins/PluginUpdater/src/Events.cpp +++ b/plugins/PluginUpdater/src/Events.cpp @@ -30,23 +30,34 @@ int OnFoldersChanged(WPARAM, LPARAM)  	return 0;
  }
 -int ModulesLoaded(WPARAM, LPARAM)
 +void EmptyFolder()
  {
 -	HookEvent(ME_FOLDERS_PATH_CHANGED, OnFoldersChanged);
 +	SHFILEOPSTRUCT file_op = {
 +		NULL,
 +		FO_DELETE,
 +		tszRoot,
 +		_T(""),
 +		FOF_NOERRORUI | FOF_SILENT | FOF_NOCONFIRMATION,
 +		false,
 +		0,
 +		_T("") };
 +	SHFileOperation(&file_op);
 +}
 -	hPluginUpdaterFolder = FoldersRegisterCustomPathT(MODULEA, LPGEN("Plugin Updater"), MIRANDA_PATHT _T("\\")DEFAULT_UPDATES_FOLDER);
 -	if (hPluginUpdaterFolder)
 +int ModulesLoaded(WPARAM, LPARAM)
 +{
 +	if (hPluginUpdaterFolder = FoldersRegisterCustomPathT(MODULEA, LPGEN("Plugin Updater"), MIRANDA_PATHT _T("\\")DEFAULT_UPDATES_FOLDER)) {
 +		HookEvent(ME_FOLDERS_PATH_CHANGED, OnFoldersChanged);
  		OnFoldersChanged(0, 0);
 +	}
  	else
  		lstrcpyn(tszRoot, VARST( _T("%miranda_path%\\"DEFAULT_UPDATES_FOLDER)), SIZEOF(tszRoot));
 -	opts.bSilent = true;
 -
  	int iRestartCount = db_get_b(NULL, MODNAME, "RestartCount", 2);
  	if (iRestartCount > 0)
  		db_set_b(NULL, MODNAME, "RestartCount", iRestartCount-1);
  	else
 -		EmptyFolder(0, TRUE); // silently
 +		EmptyFolder(); // silently
  	CheckUpdateOnStartup();
 @@ -56,24 +67,6 @@ int ModulesLoaded(WPARAM, LPARAM)  	return 0;
  }
 -INT_PTR EmptyFolder(WPARAM,LPARAM lParam)
 -{
 -	SHFILEOPSTRUCT file_op = {
 -		NULL,
 -		FO_DELETE,
 -		tszRoot,
 -		_T(""),
 -		FOF_NOERRORUI |
 -		FOF_SILENT,
 -		false,
 -		0,
 -		_T("") };
 -	if (lParam)
 -		file_op.fFlags |= FOF_NOCONFIRMATION;
 -	SHFileOperation(&file_op);
 -	return 0;
 -}
 -
  int OnPreShutdown(WPARAM, LPARAM)
  {
  	CancelWaitableTimer(Timer);
 diff --git a/plugins/PluginUpdater/src/Notifications.cpp b/plugins/PluginUpdater/src/Notifications.cpp index 634ad80dae..489baf750d 100644 --- a/plugins/PluginUpdater/src/Notifications.cpp +++ b/plugins/PluginUpdater/src/Notifications.cpp @@ -94,51 +94,44 @@ static LRESULT CALLBACK PopupDlgProcRestart(HWND hPopup, UINT uMsg, WPARAM wPara  void ShowPopup(LPCTSTR ptszTitle, LPCTSTR ptszText, int Number)
  {
 -	if(Number != POPUP_TYPE_MSG) {
 +	if (ServiceExists(MS_POPUP_ADDPOPUPT) && db_get_b(NULL, "Popup", "ModuleIsEnabled", 1)) {
  		char setting[100];
  		mir_snprintf(setting, SIZEOF(setting), "Popups%d", Number);
 -		if(!db_get_b(NULL, MODNAME, setting, DEFAULT_POPUP_ENABLED))
 +		if(db_get_b(NULL, MODNAME, setting, DEFAULT_POPUP_ENABLED)) {
 +			POPUPDATAT pd = { 0 };
 +			pd.lchContact = NULL;
 +			pd.lchIcon = Skin_GetIcon("check_update");
 +			if(Number == POPUP_TYPE_MSG) {
 +				pd.PluginWindowProc = PopupDlgProcRestart;
 +				pd.iSeconds = -1;
 +			}
 +			else {
 +				pd.PluginWindowProc = PopupDlgProc;
 +				pd.iSeconds = PopupOptions.Timeout;
 +			}
 +
 +			lstrcpyn(pd.lptzText, ptszText, MAX_SECONDLINE);
 +			lstrcpyn(pd.lptzContactName, ptszTitle, MAX_CONTACTNAME);
 +
 +			switch (PopupOptions.DefColors) {
 +			case byCOLOR_WINDOWS:
 +				pd.colorBack = GetSysColor(COLOR_BTNFACE);
 +				pd.colorText = GetSysColor(COLOR_WINDOWTEXT);
 +				break;
 +			case byCOLOR_OWN:
 +				pd.colorBack = PopupsList[Number].colorBack;
 +				pd.colorText = PopupsList[Number].colorText;
 +				break;
 +			case byCOLOR_POPUP:
 +				pd.colorBack = pd.colorText = 0;
 +				break;
 +			}
 +			PUAddPopupT(&pd);
  			return;
 -	}
 -
 -	if (ServiceExists(MS_POPUP_ADDPOPUPT) && db_get_b(NULL, "Popup", "ModuleIsEnabled", 1)) {
 -		POPUPDATAT pd = { 0 };
 -		pd.lchContact = NULL;
 -		pd.lchIcon = Skin_GetIcon("check_update");
 -		if(Number == POPUP_TYPE_MSG) {
 -			pd.PluginWindowProc = PopupDlgProcRestart;
 -			pd.iSeconds = -1;
 -		}
 -		else {
 -			pd.PluginWindowProc = PopupDlgProc;
 -			pd.iSeconds = PopupOptions.Timeout;
 -		}
 -
 -		lstrcpyn(pd.lptzText, ptszText, MAX_SECONDLINE);
 -		lstrcpyn(pd.lptzContactName, ptszTitle, MAX_CONTACTNAME);
 -
 -		switch (PopupOptions.DefColors) {
 -		case byCOLOR_WINDOWS:
 -			pd.colorBack = GetSysColor(COLOR_BTNFACE);
 -			pd.colorText = GetSysColor(COLOR_WINDOWTEXT);
 -			break;
 -		case byCOLOR_OWN:
 -			pd.colorBack = PopupsList[Number].colorBack;
 -			pd.colorText = PopupsList[Number].colorText;
 -			break;
 -		case byCOLOR_POPUP:
 -			pd.colorBack = pd.colorText = 0;
 -			break;
 -		}
 -
 -		PUAddPopupT(&pd);
 -	} else  {
 -		if(Number != POPUP_TYPE_MSG) {
 -			char setting[100];
 -			mir_snprintf(setting, SIZEOF(setting), "Popups%dM", Number);
 -			if (!db_get_b(NULL, MODNAME, setting, DEFAULT_MESSAGE_ENABLED))
 -				return;
  		}
 +	}
 +	
 +	if(Number == POPUP_TYPE_ERROR) {
  		int iMsgType;
  		switch( Number ) {
  			case POPUP_TYPE_MSG: iMsgType = MB_ICONSTOP; break;
 diff --git a/plugins/PluginUpdater/src/Notifications.h b/plugins/PluginUpdater/src/Notifications.h index 91c57a6c67..f21581221a 100644 --- a/plugins/PluginUpdater/src/Notifications.h +++ b/plugins/PluginUpdater/src/Notifications.h @@ -43,6 +43,10 @@ typedef struct  #define byCOLOR_POPUP	0x3
  #define DEFAULT_COLORS	byCOLOR_POPUP
 +#define POPUP_TYPE_MSG  0
 +#define POPUP_TYPE_ERROR 1
 +#define POPUP_TYPE_INFO 2
 +
  // Actions on popup click
  #define PCA_CLOSEPOPUP		0	// close popup
  #define PCA_DONOTHING		1   // do nothing
 diff --git a/plugins/PluginUpdater/src/Options.cpp b/plugins/PluginUpdater/src/Options.cpp index cd199df741..3a51c9ac90 100644 --- a/plugins/PluginUpdater/src/Options.cpp +++ b/plugins/PluginUpdater/src/Options.cpp @@ -45,25 +45,25 @@ INT_PTR CALLBACK UpdateNotifyOptsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPA  		ComboBox_InsertString(GetDlgItem(hwndDlg, IDC_PERIODMEASURE), 1, TranslateT("days"));
  		ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_PERIODMEASURE), opts.bPeriodMeasure);
 -		int UpdateMode = GetUpdateMode();
 -		if (UpdateMode == UPDATE_MODE_STABLE) {
 -			SetDlgItemText(hwndDlg, IDC_CUSTOMURL, _T(DEFAULT_UPDATE_URL));
 -			CheckDlgButton(hwndDlg, IDC_STABLE, TRUE);
 -		}
 -		else if (UpdateMode == UPDATE_MODE_TRUNK) {
 -			SetDlgItemText(hwndDlg, IDC_CUSTOMURL, _T(DEFAULT_UPDATE_URL_TRUNK));
 -			CheckDlgButton(hwndDlg, IDC_TRUNK, TRUE);
 -		}
 -		else if (UpdateMode == UPDATE_MODE_TRUNK_SYMBOLS) {
 -			SetDlgItemText(hwndDlg, IDC_CUSTOMURL, _T(DEFAULT_UPDATE_URL_TRUNK_SYMBOLS));
 -			CheckDlgButton(hwndDlg, IDC_TRUNK_SYMBOLS, TRUE);
 -		}
 -		else {
 -			CheckDlgButton(hwndDlg, IDC_CUSTOM, TRUE);
 -			EnableWindow(GetDlgItem(hwndDlg, IDC_CUSTOMURL), TRUE);
 +		switch(GetUpdateMode()) {
 +			case UPDATE_MODE_STABLE:
 +				SetDlgItemText(hwndDlg, IDC_CUSTOMURL, _T(DEFAULT_UPDATE_URL));
 +				CheckDlgButton(hwndDlg, IDC_STABLE, TRUE);
 +				break;
 +			case UPDATE_MODE_TRUNK:
 +				SetDlgItemText(hwndDlg, IDC_CUSTOMURL, _T(DEFAULT_UPDATE_URL_TRUNK));
 +				CheckDlgButton(hwndDlg, IDC_TRUNK, TRUE);
 +				break;
 +			case UPDATE_MODE_TRUNK_SYMBOLS:
 +				SetDlgItemText(hwndDlg, IDC_CUSTOMURL, _T(DEFAULT_UPDATE_URL_TRUNK_SYMBOLS));
 +				CheckDlgButton(hwndDlg, IDC_TRUNK_SYMBOLS, TRUE);
 +				break;
 +			default:
 +				CheckDlgButton(hwndDlg, IDC_CUSTOM, TRUE);
 +				EnableWindow(GetDlgItem(hwndDlg, IDC_CUSTOMURL), TRUE);
 -			ptrT url(db_get_tsa(NULL, MODNAME, "UpdateURL"));
 -			SetDlgItemText(hwndDlg, IDC_CUSTOMURL, (url == NULL) ? ptrT(GetDefaultUrl()) : url);
 +				ptrT url(db_get_tsa(NULL, MODNAME, "UpdateURL"));
 +				SetDlgItemText(hwndDlg, IDC_CUSTOMURL, (url == NULL) ? ptrT(GetDefaultUrl()) : url);
  		}
  	}
  		return TRUE;
 @@ -142,48 +142,42 @@ INT_PTR CALLBACK UpdateNotifyOptsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPA  				SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
  			if (hdr && hdr->code == PSN_APPLY) {
 -				opts.bUpdateOnStartup = IsDlgButtonChecked(hwndDlg, IDC_UPDATEONSTARTUP);
 -				opts.bOnlyOnceADay = IsDlgButtonChecked(hwndDlg, IDC_ONLYONCEADAY);
 -
 -				opts.bUpdateOnPeriod = IsDlgButtonChecked(hwndDlg, IDC_UPDATEONPERIOD);
 -				opts.bSilentMode = IsDlgButtonChecked(hwndDlg, IDC_SILENTMODE);
 -
 +				db_set_b(NULL, MODNAME, "UpdateOnStartup", opts.bUpdateOnStartup = IsDlgButtonChecked(hwndDlg, IDC_UPDATEONSTARTUP));
 +				db_set_b(NULL, MODNAME, "OnlyOnceADay", opts.bOnlyOnceADay = IsDlgButtonChecked(hwndDlg, IDC_ONLYONCEADAY));
 +				db_set_b(NULL, MODNAME, "UpdateOnPeriod", opts.bUpdateOnPeriod = IsDlgButtonChecked(hwndDlg, IDC_UPDATEONPERIOD));
 +				db_set_b(NULL, MODNAME, "PeriodMeasure", opts.bPeriodMeasure = ComboBox_GetCurSel(GetDlgItem(hwndDlg, IDC_PERIODMEASURE)));
 +				db_set_b(NULL, MODNAME, "SilentMode", opts.bSilentMode = IsDlgButtonChecked(hwndDlg, IDC_SILENTMODE));
  				TCHAR buffer[3] = {0};
  				Edit_GetText(GetDlgItem(hwndDlg, IDC_PERIOD), buffer, SIZEOF(buffer));
 -				opts.Period = _ttoi(buffer);
 -
 -				opts.bPeriodMeasure = ComboBox_GetCurSel(GetDlgItem(hwndDlg, IDC_PERIODMEASURE));
 -
 -				db_set_b(NULL, MODNAME, "UpdateOnStartup", opts.bUpdateOnStartup);
 -				db_set_b(NULL, MODNAME, "OnlyOnceADay", opts.bOnlyOnceADay);
 -				db_set_b(NULL, MODNAME, "UpdateOnPeriod", opts.bUpdateOnPeriod);
 -				db_set_b(NULL, MODNAME, "PeriodMeasure", opts.bPeriodMeasure);
 -				db_set_b(NULL, MODNAME, "SilentMode", opts.bSilentMode);
 -				db_set_dw(NULL, MODNAME, "Period", opts.Period);
 +				db_set_dw(NULL, MODNAME, "Period", opts.Period = _ttoi(buffer));
  				mir_forkthread(InitTimer, (void*)1);
 -				if (!IsDlgButtonChecked(hwndDlg, IDC_TRUNK_SYMBOLS)) {
 -					opts.bForceRedownload = false;
 +				if ( IsDlgButtonChecked(hwndDlg, IDC_STABLE)) {
 +					db_set_b(NULL, MODNAME, "UpdateMode", UPDATE_MODE_STABLE);
 +					opts.bForceRedownload = 0;
  					db_unset(NULL, MODNAME, "ForceRedownload");
  				}
 -				if ( IsDlgButtonChecked(hwndDlg, IDC_STABLE))
 -					db_set_b(NULL, MODNAME, "UpdateMode", UPDATE_MODE_STABLE);
 -				else if ( IsDlgButtonChecked(hwndDlg, IDC_TRUNK))
 +				else if ( IsDlgButtonChecked(hwndDlg, IDC_TRUNK)) {
  					db_set_b(NULL, MODNAME, "UpdateMode", UPDATE_MODE_TRUNK);
 +					opts.bForceRedownload = 0;
 +					db_unset(NULL, MODNAME, "ForceRedownload");
 +				}
  				else if ( IsDlgButtonChecked(hwndDlg, IDC_TRUNK_SYMBOLS)) {
 -					int oldMode = GetUpdateMode();
 -					 if(oldMode != UPDATE_MODE_TRUNK_SYMBOLS) {
 -						opts.bForceRedownload = true;
 -						db_set_b(NULL, MODNAME, "ForceRedownload", 1);
 +					// Only set ForceRedownload if the previous UpdateMode was different
 +					// to redownload all plugin with pdb files
 +					if(db_get_b(NULL, MODNAME, "UpdateMode", UPDATE_MODE_STABLE) != UPDATE_MODE_TRUNK_SYMBOLS) {
 +						db_set_b(NULL, MODNAME, "ForceRedownload", opts.bForceRedownload = 1);
 +						db_set_b(NULL, MODNAME, "UpdateMode", UPDATE_MODE_TRUNK_SYMBOLS);
  					}
 -
 -					db_set_b(NULL, MODNAME, "UpdateMode", UPDATE_MODE_TRUNK_SYMBOLS);
 -				} else {
 +				}
 +				else {
  					char szUrl[100];
  					GetDlgItemTextA(hwndDlg, IDC_CUSTOMURL, szUrl, SIZEOF(szUrl));
  					db_set_s(NULL, MODNAME, "UpdateURL", szUrl);
  					db_set_b(NULL, MODNAME, "UpdateMode", UPDATE_MODE_CUSTOM);
 +					opts.bForceRedownload = 0;
 +					db_unset(NULL, MODNAME, "ForceRedownload");
  				}
  			}
  			break;
 @@ -226,17 +220,11 @@ INT_PTR CALLBACK DlgPopupOpts(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)  		SendDlgItemMessage(hdlg, IDC_LC, CB_SETCURSEL, PopupOptions.LeftClickAction, 0);
  		SendDlgItemMessage(hdlg, IDC_RC, CB_SETCURSEL, PopupOptions.RightClickAction, 0);
 -		//Popups nitified
 +		//Popups notified
  		for (int i = 0; i < POPUPS; i++) {
 -			char str[20] = {0}, str2[20] = {0};
 +			char str[20] = {0};
  			mir_snprintf(str, SIZEOF(str), "Popups%d", i);
 -			mir_snprintf(str2, SIZEOF(str2), "Popups%dM", i);
  			CheckDlgButton(hdlg, (i+40071), (db_get_b(NULL, MODNAME, str, DEFAULT_POPUP_ENABLED)) ? BST_CHECKED: BST_UNCHECKED);
 -			CheckDlgButton(hdlg, (i+1024), (db_get_b(NULL, MODNAME, str2, DEFAULT_MESSAGE_ENABLED)) ? BST_CHECKED: BST_UNCHECKED);
 -			if (IsDlgButtonChecked(hdlg, (i+40071)))
 -				EnableWindow(GetDlgItem(hdlg, (i+1024)), FALSE);
 -			else if (i > 0)
 -				EnableWindow(GetDlgItem(hdlg, (i+1024)), TRUE);
  		}
  		return TRUE;
 @@ -256,8 +244,7 @@ INT_PTR CALLBACK DlgPopupOpts(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)  					return TRUE;
  				}
  			}
 -
 -			if (wNotifyCode == CBN_SELCHANGE) {
 +			else if (wNotifyCode == CBN_SELCHANGE) {
  				if (idCtrl == IDC_LC)
  					PopupOptions.LeftClickAction = (BYTE)SendDlgItemMessage(hdlg, IDC_LC, CB_GETCURSEL, 0, 0);
  				else if (idCtrl == IDC_RC)
 @@ -311,9 +298,8 @@ INT_PTR CALLBACK DlgPopupOpts(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)  					LPCTSTR Title = TranslateT("Plugin Updater");
  					LPCTSTR Text = TranslateT("Test");
  					for (int i = 0; i < POPUPS; i++) {
 -						if ((!IsDlgButtonChecked(hdlg, (i+40071))) || (!IsWindowEnabled(GetDlgItem(hdlg, (i+40071)))))
 -							continue;
 -						ShowPopup(Title, Text, i);
 +						if (IsDlgButtonChecked(hdlg, i+40071))
 +							ShowPopup(Title, Text, i);
  					}
  				}
  				break;
 @@ -383,11 +369,9 @@ INT_PTR CALLBACK DlgPopupOpts(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)  				db_set_b(NULL, MODNAME, "RightClickAction", PopupOptions.RightClickAction);
  				//Notified popups
  				for (int i = 0; i < POPUPS; i++) {
 -					char str[20] = {0}, str2[20] = {0};
 +					char str[20] = {0};
  					mir_snprintf(str, SIZEOF(str), "Popups%d", i);
  					db_set_b(NULL, MODNAME, str, (BYTE)(IsDlgButtonChecked(hdlg, (i+40071))));
 -					mir_snprintf(str2, SIZEOF(str2), "Popups%dM", i);
 -					db_set_b(NULL, MODNAME, str2, (BYTE)(IsDlgButtonChecked(hdlg, (i+1024))));
  				}
  				return TRUE;
  			} //case PSN_APPLY
 diff --git a/plugins/PluginUpdater/src/Utils.cpp b/plugins/PluginUpdater/src/Utils.cpp index f17e9500aa..4154420bc5 100644 --- a/plugins/PluginUpdater/src/Utils.cpp +++ b/plugins/PluginUpdater/src/Utils.cpp @@ -189,7 +189,7 @@ int CompareHashes(const ServListEntry *p1, const ServListEntry *p2)  	return _tcsicmp(p1->m_name, p2->m_name);
  }
 -bool ParseHashes(const TCHAR *ptszUrl, ptrT& baseUrl, SERVLIST& arHashes)
 +bool ParseHashes(const TCHAR *ptszUrl, ptrT &baseUrl, SERVLIST &arHashes)
  {
  	REPLACEVARSARRAY vars[2];
  	vars[0].lptzKey = _T("platform");
 @@ -219,41 +219,49 @@ bool ParseHashes(const TCHAR *ptszUrl, ptrT& baseUrl, SERVLIST& arHashes)  	Netlib_CloseHandle(nlc);
  	if (!ret) {
 -		if(!opts.bSilent)
 -			ShowPopup(TranslateT("Plugin Updater"), TranslateT("An error occurred while checking new updates."), POPUP_TYPE_ERROR);
 +		Netlib_LogfT(hNetlibUser,_T("Downloading list of available updates from %s failed"),baseUrl);
 +		ShowPopup(TranslateT("Plugin Updater"), TranslateT("An error occurred while checking new updates."), POPUP_TYPE_ERROR);
 +		SkinPlaySound("updatefailed");
  		return false;
  	}
 -	if(!unzip(pFileUrl.tszDiskPath, tszTempPath, NULL,true))
 +	if(!unzip(pFileUrl.tszDiskPath, tszTempPath, NULL,true)) {
 +		Netlib_LogfT(hNetlibUser,_T("Unzipping list of available updates from %s failed"),baseUrl);
 +		ShowPopup(TranslateT("Plugin Updater"), TranslateT("An error occurred while checking new updates."), POPUP_TYPE_ERROR);
 +		SkinPlaySound("updatefailed");
  		return false;
 +	}
  	DeleteFile(pFileUrl.tszDiskPath);
  	TCHAR tszTmpIni[MAX_PATH] = {0};
  	mir_sntprintf(tszTmpIni, SIZEOF(tszTmpIni), _T("%s\\hashes.txt"), tszTempPath);
  	FILE *fp = _tfopen(tszTmpIni, _T("r"));
 -	if (!fp)
 +	if (!fp) {
 +		Netlib_LogfT(hNetlibUser,_T("Opening %s failed"), tszTempPath);
 +		ShowPopup(TranslateT("Plugin Updater"), TranslateT("An error occurred while checking new updates."), POPUP_TYPE_ERROR);
  		return false;
 +	}
  	char str[200];
  	while(fgets(str, SIZEOF(str), fp) != NULL) {
  		rtrim(str);
 +		Netlib_Logf(hNetlibUser,"Update: %s", str);
  		char *p = strchr(str, ' ');
 -		if (p == NULL)
 -			continue;
 -
 -		*p++ = 0;
 -		_strlwr(p);
 -
 -		int dwCrc32;
 -		char *p1 = strchr(p, ' ');
 -		if (p1 == NULL)
 -			dwCrc32 = 0;
 -		else {
 -			*p1++ = 0;
 -			sscanf(p1, "%08x", &dwCrc32);
 +		if (p != NULL) {
 +			*p++ = 0;
 +			_strlwr(p);
 +
 +			int dwCrc32;
 +			char *p1 = strchr(p, ' ');
 +			if (p1 == NULL)
 +				dwCrc32 = 0;
 +			else {
 +				*p1++ = 0;
 +				sscanf(p1, "%08x", &dwCrc32);
 +			}
 +			arHashes.insert(new ServListEntry(str, p, dwCrc32));
  		}
 -		arHashes.insert(new ServListEntry(str, p, dwCrc32));
  	}
  	fclose(fp);
  	DeleteFile(tszTmpIni);
 @@ -263,8 +271,6 @@ bool ParseHashes(const TCHAR *ptszUrl, ptrT& baseUrl, SERVLIST& arHashes)  bool DownloadFile(FILEURL *pFileURL, HANDLE &nlc)
  {
 -	DWORD dwBytes;
 -
  	NETLIBHTTPREQUEST nlhr = {0};
  #if MIRANDA_VER < 0x0A00
  	nlhr.cbSize = NETLIBHTTPREQUEST_V1_SIZE;
 @@ -296,21 +302,24 @@ bool DownloadFile(FILEURL *pFileURL, HANDLE &nlc)  		if (pReply) {
  			nlc = pReply->nlc;
  			if ((200 == pReply->resultCode) && (pReply->dataLength > 0)) {
 +				// Check CRC sum
 +				if (pFileURL->CRCsum) {
 +					InitCrcTable();
 +					int crc = Get_CRC((unsigned char*)pReply->pData, pReply->dataLength);
 +					if (crc != pFileURL->CRCsum) {
 +						// crc check failed, try again
 +						Netlib_LogfT(hNetlibUser,_T("crc check failed for file %s"),pFileURL->tszDiskPath);
 +						CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)pReply);
 +						continue;
 +					}
 +				}
 +
  				HANDLE hFile = CreateFile(pFileURL->tszDiskPath, GENERIC_READ | GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  				if (hFile != INVALID_HANDLE_VALUE) {
 +					DWORD dwBytes;
  					// write the downloaded file directly
  					WriteFile(hFile, pReply->pData, (DWORD)pReply->dataLength, &dwBytes, NULL);
  					CloseHandle(hFile);
 -					if (pFileURL->CRCsum) {
 -						InitCrcTable();
 -						int crc = Get_CRC((unsigned char*)pReply->pData, (long)dwBytes);
 -						if (crc == pFileURL->CRCsum)
 -							ret = true;
 -						else
 -							Netlib_LogfT(hNetlibUser,_T("crc check failed for %s"),pFileURL->tszDownloadURL);
 -					}
 -					else
 -						ret = true;
  				}
  				else {
  					// try to write it via PU stub
 @@ -318,27 +327,20 @@ bool DownloadFile(FILEURL *pFileURL, HANDLE &nlc)  					mir_sntprintf(tszTempFile, SIZEOF(tszTempFile), _T("%s\\pulocal.tmp"), tszTempPath);
  					hFile = CreateFile(tszTempFile, GENERIC_READ | GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  					if (hFile != INVALID_HANDLE_VALUE) {
 +						DWORD dwBytes;
  						WriteFile(hFile, pReply->pData, (DWORD)pReply->dataLength, &dwBytes, NULL);
  						CloseHandle(hFile);
  						SafeMoveFile(tszTempFile, pFileURL->tszDiskPath);
 -						if (pFileURL->CRCsum) {
 -							InitCrcTable();
 -							int crc = Get_CRC((unsigned char*)pReply->pData, (long)dwBytes);
 -							if (crc == pFileURL->CRCsum)
 -								ret = true;
 -							else
 -								Netlib_LogfT(hNetlibUser,_T("crc check failed for %s"),pFileURL->tszDownloadURL);
 -						}
 -						else
 -							ret = true;
  					}
  				}
 +				ret = true;
  			}
  			else
  				Netlib_LogfT(hNetlibUser,_T("Downloading file %s failed with error %d"),pFileURL->tszDownloadURL,pReply->resultCode);
  			CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)pReply);
  		}
  		else {
 +			Netlib_LogfT(hNetlibUser,_T("Downloading file %s failed, host is propably temporary down."),pFileURL->tszDownloadURL);
  			nlc = NULL;
  		}
  	}
 @@ -353,7 +355,7 @@ bool DownloadFile(FILEURL *pFileURL, HANDLE &nlc)  /////////////////////////////////////////////////////////////////////////////////////////
 -LONG PeriodToMilliseconds(const int period, BYTE periodMeasure)
 +LONG PeriodToMilliseconds(const int period, BYTE &periodMeasure)
  {
  	LONG result = period * 1000;
  	switch(periodMeasure) {
 @@ -374,7 +376,7 @@ LONG PeriodToMilliseconds(const int period, BYTE periodMeasure)  void CALLBACK TimerAPCProc(void *, DWORD, DWORD)
  {
 -	DoCheck();
 +	DoCheck(true);
  }
  void InitTimer(void *type)
 @@ -723,6 +725,12 @@ int SafeCreateFilePath(TCHAR *pFolder)  	return TransactPipe(5, pFolder, NULL);
  }
 +void BackupFile(TCHAR *ptszSrcFileName, TCHAR *ptszBackFileName)
 +{
 +	SafeCreateFilePath(ptszBackFileName);
 +	SafeMoveFile(ptszSrcFileName, ptszBackFileName);
 +}
 +
  /////////////////////////////////////////////////////////////////////////////////////////
  char *StrToLower(char *str)
 diff --git a/plugins/PluginUpdater/src/resource.h b/plugins/PluginUpdater/src/resource.h index 283c963197..6a8dbd2979 100644 --- a/plugins/PluginUpdater/src/resource.h +++ b/plugins/PluginUpdater/src/resource.h @@ -5,7 +5,6 @@  #define IDD_UPDATE                      101
  #define IDD_OPT_UPDATENOTIFY            102
  #define IDD_POPUP                       103
 -#define IDD_POPUPDUMMI                  104
  #define IDD_LIST                        105
  #define IDI_MENU                        201
  #define IDI_OK                          202
 diff --git a/plugins/PluginUpdater/src/unzipfile.cpp b/plugins/PluginUpdater/src/unzipfile.cpp index c0d0592e07..2b4ed8bf2f 100644 --- a/plugins/PluginUpdater/src/unzipfile.cpp +++ b/plugins/PluginUpdater/src/unzipfile.cpp @@ -39,12 +39,6 @@ static void PrepareFileName(TCHAR *dest, size_t destSize, const TCHAR *ptszPath,  			*p = '\\'; 
  }
 -void BackupFile(TCHAR *ptszSrcFileName, TCHAR *ptszBackFileName)
 -{
 -	SafeCreateFilePath(ptszBackFileName);
 -	SafeMoveFile(ptszSrcFileName, ptszBackFileName);
 -}
 -
  bool extractCurrentFile(unzFile uf, TCHAR *ptszDestPath, TCHAR *ptszBackPath, bool ch)
  {
  	unz_file_info64 file_info;
 @@ -57,6 +51,8 @@ bool extractCurrentFile(unzFile uf, TCHAR *ptszDestPath, TCHAR *ptszBackPath, bo  	for (char *p = strchr(filename, '/'); p; p = strchr(p+1, '/'))
  		*p = '\\';
 +	// This is because there may be more then one file in a single zip
 +	// So we need to check each file
  	if (ch && !db_get_b(NULL, MODNAME "Files", StrToLower(ptrA(mir_strdup(filename))), 1))
  		return true;
  | 
