[NEW_FEATURE] Add the ability to not launch Auto-updater during a period (15 days by default).

git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@520 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
Don Ho 2009-08-12 01:13:29 +00:00
parent e8f584c764
commit ff1d754ad7
4 changed files with 161 additions and 8 deletions

View File

@ -3244,7 +3244,20 @@ void NppParameters::feedGUIParameters(TiXmlNode *node)
val = n->Value(); val = n->Value();
if (val) if (val)
{ {
_nppGUI._neverUpdate = (!lstrcmp(val, TEXT("yes")))?true:false; _nppGUI._autoUpdateOpt._doAutoUpdate = (!lstrcmp(val, TEXT("yes")))?false:true;
}
int i;
val = element->Attribute(TEXT("intervalDays"), &i);
if (val)
{
_nppGUI._autoUpdateOpt._intervalDays = i;
}
val = element->Attribute(TEXT("nextUpdateDate"));
if (val)
{
_nppGUI._autoUpdateOpt._nextUpdateDate = Date(val);
} }
} }
} }
@ -3900,7 +3913,10 @@ bool NppParameters::writeGUIParams()
else if (!lstrcmp(nm, TEXT("noUpdate"))) else if (!lstrcmp(nm, TEXT("noUpdate")))
{ {
noUpdateExist = true; noUpdateExist = true;
const TCHAR *pStr = _nppGUI._neverUpdate?TEXT("yes"):TEXT("no"); const TCHAR *pStr = _nppGUI._autoUpdateOpt._doAutoUpdate?TEXT("no"):TEXT("yes");
element->SetAttribute(TEXT("intervalDays"), _nppGUI._autoUpdateOpt._intervalDays);
element->SetAttribute(TEXT("nextUpdateDate"), _nppGUI._autoUpdateOpt._nextUpdateDate.toString().c_str());
TiXmlNode *n = childNode->FirstChild(); TiXmlNode *n = childNode->FirstChild();
if (n) if (n)
@ -3932,7 +3948,7 @@ bool NppParameters::writeGUIParams()
if (!noUpdateExist) if (!noUpdateExist)
{ {
insertGUIConfigBoolNode(GUIRoot, TEXT("noUpdate"), _nppGUI._neverUpdate); insertGUIConfigBoolNode(GUIRoot, TEXT("noUpdate"), _nppGUI._autoUpdateOpt._doAutoUpdate);
} }
if (!autoDetectionExist) if (!autoDetectionExist)

View File

@ -509,6 +509,121 @@ struct PrintSettings {
}; };
}; };
class Date {
public:
Date() : _year(2008), _month(4), _day(26){};
Date(unsigned long year, unsigned long month, unsigned long day) {
assert(year > 0 && year <= 9999); // I don't think Notepad++ will last till AD 10000 :)
assert(month > 0 && month <= 12);
assert(day > 0 && day <= 31);
assert(!(month == 2 && day > 29) &&
!(month == 4 && day > 30) &&
!(month == 6 && day > 30) &&
!(month == 9 && day > 30) &&
!(month == 11 && day > 30));
_year = year;
_month = month;
_day = day;
};
Date(const TCHAR *dateStr) { // timeStr should be Notepad++ date format : YYYYMMDD
assert(dateStr);
if (lstrlen(dateStr) == 8)
{
generic_string ds(dateStr);
generic_string yyyy(ds, 0, 4);
generic_string mm(ds, 4, 2);
generic_string dd(ds, 6, 2);
int y = generic_atoi(yyyy.c_str());
int m = generic_atoi(mm.c_str());
int d = generic_atoi(dd.c_str());
if ((y > 0 && y <= 9999) && (m > 0 && m <= 12) && (d > 0 && d <= 31))
{
_year = y;
_month = m;
_day = d;
return;
}
}
now();
};
// The constructor which makes the date of number of days from now
// nbDaysFromNow could be negative if user want to make a date in the past
// if the value of nbDaysFromNow is 0 then the date will be now
Date(int nbDaysFromNow)
{
const time_t oneDay = (60 * 60 * 24);
time_t rawtime;
tm* timeinfo;
time(&rawtime);
rawtime += (nbDaysFromNow * oneDay);
timeinfo = localtime(&rawtime);
_year = timeinfo->tm_year+1900;
_month = timeinfo->tm_mon+1;
_day = timeinfo->tm_mday;
}
void now() {
time_t rawtime;
tm* timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
_year = timeinfo->tm_year+1900;
_month = timeinfo->tm_mon+1;
_day = timeinfo->tm_mday;
}
generic_string toString() { // Return Notepad++ date format : YYYYMMDD
TCHAR dateStr[8+1];
wsprintf(dateStr, TEXT("%04d%02d%02d"), _year, _month, _day);
return dateStr;
};
bool operator<(const Date & compare) const {
if (this->_year != compare._year)
return (this->_year < compare._year);
if (this->_month != compare._month)
return (this->_month < compare._month);
return (this->_day < compare._day);
};
bool operator>(const Date & compare) const {
if (this->_year != compare._year)
return (this->_year > compare._year);
if (this->_month != compare._month)
return (this->_month > compare._month);
return (this->_day > compare._day);
};
bool operator==(const Date & compare) const {
if (this->_year != compare._year)
return false;
if (this->_month != compare._month)
return false;
return (this->_day == compare._day);
};
bool operator!=(const Date & compare) const {
if (this->_year != compare._year)
return true;
if (this->_month != compare._month)
return true;
return (this->_day != compare._day);
};
private:
unsigned long _year;
unsigned long _month;
unsigned long _day;
};
struct NppGUI struct NppGUI
{ {
NppGUI() : _toolBarStatus(TB_LARGE), _toolbarShow(true), _statusBarShow(true), _menuBarShow(true),\ NppGUI() : _toolBarStatus(TB_LARGE), _toolbarShow(true), _statusBarShow(true), _menuBarShow(true),\
@ -517,7 +632,7 @@ struct NppGUI
_checkHistoryFiles(true) ,_enableSmartHilite(true), _enableTagsMatchHilite(true), _enableTagAttrsHilite(true), _enableHiliteNonHTMLZone(false),\ _checkHistoryFiles(true) ,_enableSmartHilite(true), _enableTagsMatchHilite(true), _enableTagAttrsHilite(true), _enableHiliteNonHTMLZone(false),\
_isMaximized(false), _isMinimizedToTray(false), _rememberLastSession(true), _backup(bak_none), _useDir(false), _backupDir(TEXT("")),\ _isMaximized(false), _isMinimizedToTray(false), _rememberLastSession(true), _backup(bak_none), _useDir(false), _backupDir(TEXT("")),\
_doTaskList(true), _maitainIndent(true), _openSaveDir(dir_followCurrent), _styleMRU(true), _styleURL(0),\ _doTaskList(true), _maitainIndent(true), _openSaveDir(dir_followCurrent), _styleMRU(true), _styleURL(0),\
_autocStatus(autoc_none), _autocFromLen(1), _funcParams(false), _definedSessionExt(TEXT("")), _neverUpdate(false),\ _autocStatus(autoc_none), _autocFromLen(1), _funcParams(false), _definedSessionExt(TEXT("")),\
_doesExistUpdater(false), _caretBlinkRate(250), _caretWidth(1), _shortTitlebar(false), _themeName(TEXT("")), _isLangMenuCompact(false) { _doesExistUpdater(false), _caretBlinkRate(250), _caretWidth(1), _shortTitlebar(false), _themeName(TEXT("")), _isLangMenuCompact(false) {
_appPos.left = 0; _appPos.left = 0;
_appPos.top = 0; _appPos.top = 0;
@ -588,7 +703,16 @@ struct NppGUI
bool _funcParams; bool _funcParams;
generic_string _definedSessionExt; generic_string _definedSessionExt;
bool _neverUpdate;
struct AutoUpdateOptions {
bool _doAutoUpdate;
int _intervalDays;
Date _nextUpdateDate;
AutoUpdateOptions(): _doAutoUpdate(true), _intervalDays(15), _nextUpdateDate(Date()) {};
} _autoUpdateOpt;
bool _doesExistUpdater; bool _doesExistUpdater;
int _caretBlinkRate; int _caretBlinkRate;
int _caretWidth; int _caretWidth;

View File

@ -607,7 +607,7 @@ BOOL CALLBACK SettingsDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM)
::SendDlgItemMessage(_hSelf, IDC_CHECK_MIN2SYSTRAY, BM_SETCHECK, nppGUI._isMinimizedToTray, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_MIN2SYSTRAY, BM_SETCHECK, nppGUI._isMinimizedToTray, 0);
::SendDlgItemMessage(_hSelf, IDC_CHECK_REMEMBERSESSION, BM_SETCHECK, nppGUI._rememberLastSession, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_REMEMBERSESSION, BM_SETCHECK, nppGUI._rememberLastSession, 0);
::SendDlgItemMessage(_hSelf, IDC_CHECK_AUTOUPDATE, BM_SETCHECK, !nppGUI._neverUpdate, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_AUTOUPDATE, BM_SETCHECK, nppGUI._autoUpdateOpt._doAutoUpdate, 0);
bool isVistaAndAfter = (pNppParam->getWinVersion() >= WV_VISTA); bool isVistaAndAfter = (pNppParam->getWinVersion() >= WV_VISTA);
if (isVistaAndAfter) if (isVistaAndAfter)
@ -738,7 +738,7 @@ BOOL CALLBACK SettingsDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM)
return TRUE; return TRUE;
case IDC_CHECK_AUTOUPDATE: case IDC_CHECK_AUTOUPDATE:
nppGUI._neverUpdate = !isCheckedOrNot(wParam); nppGUI._autoUpdateOpt._doAutoUpdate = isCheckedOrNot(wParam);
return TRUE; return TRUE;
case IDC_CHECK_MIN2SYSTRAY: case IDC_CHECK_MIN2SYSTRAY:

View File

@ -288,8 +288,16 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
winVer curWinVer = notepad_plus_plus.getWinVersion(); winVer curWinVer = notepad_plus_plus.getWinVersion();
bool isUpExist = nppGui._doesExistUpdater = (::PathFileExists(updaterFullPath.c_str()) == TRUE); bool isUpExist = nppGui._doesExistUpdater = (::PathFileExists(updaterFullPath.c_str()) == TRUE);
bool doUpdate = !nppGui._neverUpdate;
bool winSupported = (curWinVer >= WV_W2K); bool winSupported = (curWinVer >= WV_W2K);
bool doUpdate = nppGui._autoUpdateOpt._doAutoUpdate;
if (doUpdate) // check more detail
{
Date today(0);
if (today < nppGui._autoUpdateOpt._nextUpdateDate)
doUpdate = false;
}
// Vista/Win7 UAC de mes couilles!!! // Vista/Win7 UAC de mes couilles!!!
bool isVista = (curWinVer >= WV_VISTA); bool isVista = (curWinVer >= WV_VISTA);
@ -301,6 +309,11 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{ {
Process updater(updaterFullPath.c_str(), version.c_str(), updaterDir.c_str()); Process updater(updaterFullPath.c_str(), version.c_str(), updaterDir.c_str());
updater.run(); updater.run();
// Update next update date
if (nppGui._autoUpdateOpt._intervalDays < 0) // Make sure interval days value is positive
nppGui._autoUpdateOpt._intervalDays = 0 - nppGui._autoUpdateOpt._intervalDays;
nppGui._autoUpdateOpt._nextUpdateDate = Date(nppGui._autoUpdateOpt._intervalDays);
} }
MSG msg; MSG msg;