const TCHAR LicenceUrl[] = _T("http://www.gnu.org/licenses/gpl-2.0.html");
/** @brief WinMerge download page URL. */
- const TCHAR DownloadUrl[] = _T("http://winmerge.org/downloads/");
+ const TCHAR DownloadUrl[] = _T("http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html#downloads");
+
+ const TCHAR CurrentVersionURL[] = _T("http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge-jp_current_version.txt");
/** @brief Relative (to WinMerge executable ) path to local help file. */
-const TCHAR DocsPath[] = _T("\\Docs\\WinMerge.chm");
-const TCHAR DocsPath_ja[] = _T("\\Docs\\WinMerge_ja.chm");
+const TCHAR DocsPath[] = _T("Docs/WinMerge.chm");
+const TCHAR DocsPath_ja[] = _T("Docs/WinMerge_ja.chm");
/** @brief Contributors list. */
-const TCHAR ContributorsPath[] = _T("\\contributors.txt");
+const TCHAR ContributorsPath[] = _T("contributors.txt");
/** @brief Release notes in HTML format. */
-const TCHAR RelNotes[] = _T("\\Docs\\ReleaseNotes.html");
+const TCHAR RelNotes[] = _T("Docs/ReleaseNotes.html");
/** @brief GPL Licence local file name. */
-const TCHAR LicenseFile[] = _T("\\Copying");
+const TCHAR LicenseFile[] = _T("Copying");
/** @brief WinMerge folder in My Folders-folder. */
const TCHAR WinMergeDocumentsFolder[] = _T("WinMerge");
#include "StdAfx.h"
#include "MainFrm.h"
#include <vector>
+#include <Poco/Exception.h>
#include <shlwapi.h>
#include <Poco/Exception.h>
+ #include <afxinet.h>
#include "Constants.h"
#include "Merge.h"
#include "FileFilterHelper.h"
return (ret == IDYES);
}
- String msg = theApp.LoadString(IDS_CHECKFORUPDATES_FAILED);
+ void CMainFrame::OnHelpCheckForUpdates()
+ {
+ CVersionInfo version(AfxGetResourceHandle());
+ CInternetSession session;
+ try
+ {
+ CHttpFile *file = (CHttpFile *)session.OpenURL(CurrentVersionURL);
+ if (!file)
+ return;
+ char buf[256] = { 0 };
+ file->Read(buf, sizeof(buf));
+ file->Close();
+ String current_version = ucr::toTString(buf);
+ string_replace(current_version, _T("\r\n"), _T(""));
+ delete file;
+
+ int exe_vers[4] = { 0 }, cur_vers[4] = { 0 };
+ _stscanf(version.GetProductVersion().c_str(), _T("%d.%d.%d.%d"), &exe_vers[0], &exe_vers[1], &exe_vers[2], &exe_vers[3]);
+ _stscanf(current_version.c_str(), _T("%d.%d.%d.%d"), &cur_vers[0], &cur_vers[1], &cur_vers[2], &cur_vers[3]);
+ String exe_version_hex = string_format(_T("%08x%08x%08x%08x"), exe_vers[0], exe_vers[1], exe_vers[2], exe_vers[3]);
+ String cur_version_hex = string_format(_T("%08x%08x%08x%08x"), cur_vers[0], cur_vers[1], cur_vers[2], cur_vers[3]);
+
+ switch (exe_version_hex.compare(cur_version_hex))
+ {
+ case 1:
+ if (cur_version_hex == _T("00000000000000000000000000000000"))
+ {
- String msg = theApp.LoadString(IDS_CHECKFORUPDATES_UPTODATE);
++ String msg = _("Failed to download latest version information");
+ AfxMessageBox(msg.c_str(), MB_ICONERROR);
+ break;
+ }
+ // pass through
+ case 0:
+ {
- String msg = LangFormatString2(IDS_CHECKFORUPDATES_NEWVERSION, current_version.c_str(), version.GetProductVersion().c_str());
++ String msg = _("Your software is up to date");
+ AfxMessageBox(msg.c_str(), MB_ICONINFORMATION);
+ break;
+ }
+ case -1:
+ {
++ String msg = string_format_string2(_("A new version of WinMerge is available.\n%1 is now available (you have %2). Would you like to download it now?"), current_version, version.GetProductVersion());
+ if (AfxMessageBox(msg.c_str(), MB_ICONINFORMATION | MB_YESNO) == IDYES)
+ ShellExecute(NULL, _T("open"), DownloadUrl, NULL, NULL, SW_SHOWNORMAL);
+ break;
+ }
+ }
+ }
+ catch (CException& e)
+ {
+ TCHAR msg[512];
+ e.GetErrorMessage(msg, sizeof(msg)/sizeof(msg[0]));
+ AfxMessageBox(msg, MB_ICONERROR);
+ }
+ }
+
/**
* @brief Shows the release notes for user.
* This function opens release notes HTML document into browser.