1 // TortoiseSVN - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2008 - TortoiseSVN
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "TortoiseProc.h"
22 #include "PathUtils.h"
24 #include "DirFileEnum.h"
25 #include "SetSavedDataPage.h"
26 #include "MessageBox.h"
28 IMPLEMENT_DYNAMIC(CSetSavedDataPage
, ISettingsPropPage
)
30 CSetSavedDataPage::CSetSavedDataPage()
31 : ISettingsPropPage(CSetSavedDataPage::IDD
)
34 m_regMaxLines
= CRegDWORD(_T("Software\\TortoiseGit\\MaxLinesInLogfile"), 4000);
35 m_maxLines
= m_regMaxLines
;
38 CSetSavedDataPage::~CSetSavedDataPage()
42 void CSetSavedDataPage::DoDataExchange(CDataExchange
* pDX
)
44 ISettingsPropPage::DoDataExchange(pDX
);
45 DDX_Control(pDX
, IDC_URLHISTCLEAR
, m_btnUrlHistClear
);
46 DDX_Control(pDX
, IDC_LOGHISTCLEAR
, m_btnLogHistClear
);
47 DDX_Control(pDX
, IDC_RESIZABLEHISTCLEAR
, m_btnResizableHistClear
);
48 DDX_Control(pDX
, IDC_AUTHHISTCLEAR
, m_btnAuthHistClear
);
49 DDX_Control(pDX
, IDC_REPOLOGCLEAR
, m_btnRepoLogClear
);
50 DDX_Text(pDX
, IDC_MAXLINES
, m_maxLines
);
51 DDX_Control(pDX
, IDC_ACTIONLOGSHOW
, m_btnActionLogShow
);
52 DDX_Control(pDX
, IDC_ACTIONLOGCLEAR
, m_btnActionLogClear
);
55 BOOL
CSetSavedDataPage::OnInitDialog()
57 ISettingsPropPage::OnInitDialog();
59 // find out how many log messages and URLs we've stored
61 INT_PTR nLogHistMsg
= 0;
63 INT_PTR nUrlHistItems
= 0;
65 CRegistryKey
regloghist(_T("Software\\TortoiseGit\\History"));
66 CStringList loghistlist
;
67 regloghist
.getSubKeys(loghistlist
);
68 for (POSITION pos
= loghistlist
.GetHeadPosition(); pos
!= NULL
; )
70 CString sHistName
= loghistlist
.GetNext(pos
);
71 if (sHistName
.Left(6).CompareNoCase(_T("commit"))==0)
74 CRegistryKey
regloghistwc(_T("Software\\TortoiseGit\\History\\")+sHistName
);
75 CStringList loghistlistwc
;
76 regloghistwc
.getValues(loghistlistwc
);
77 nLogHistMsg
+= loghistlistwc
.GetCount();
82 CStringList urlhistlistmain
;
83 CStringList urlhistlistmainvalues
;
84 CRegistryKey
regurlhistlist(_T("Software\\TortoiseGit\\History\\repoURLS"));
85 regurlhistlist
.getSubKeys(urlhistlistmain
);
86 regurlhistlist
.getValues(urlhistlistmainvalues
);
87 nUrlHistItems
+= urlhistlistmainvalues
.GetCount();
88 for (POSITION urlpos
= urlhistlistmain
.GetHeadPosition(); urlpos
!= NULL
; )
90 CString sWCUID
= urlhistlistmain
.GetNext(urlpos
);
92 CStringList urlhistlistwc
;
93 CRegistryKey
regurlhistlistwc(_T("Software\\TortoiseGit\\History\\repoURLS\\")+sWCUID
);
94 regurlhistlistwc
.getValues(urlhistlistwc
);
95 nUrlHistItems
+= urlhistlistwc
.GetCount();
100 // find out how many dialog sizes / positions we've stored
101 INT_PTR nResizableDialogs
= 0;
102 CRegistryKey
regResizable(_T("Software\\TortoiseGit\\TortoiseProc\\ResizableState"));
103 CStringList resizablelist
;
104 regResizable
.getValues(resizablelist
);
105 nResizableDialogs
+= resizablelist
.GetCount();
107 // find out how many auth data we've stored
115 TCHAR pathbuf
[MAX_PATH
] = {0};
116 if (SHGetFolderPath(NULL
, CSIDL_APPDATA
, NULL
, SHGFP_TYPE_CURRENT
, pathbuf
)==S_OK
)
118 _tcscat_s(pathbuf
, MAX_PATH
, _T("\\Subversion\\auth\\"));
119 CString sSimple
= CString(pathbuf
) + _T("svn.simple");
120 CString sSSL
= CString(pathbuf
) + _T("svn.ssl.server");
121 CString sUsername
= CString(pathbuf
) + _T("svn.username");
122 CDirFileEnum
simpleenum(sSimple
);
123 while (simpleenum
.NextFile(sFile
, &bIsDir
))
125 CDirFileEnum
sslenum(sSSL
);
126 while (sslenum
.NextFile(sFile
, &bIsDir
))
128 CDirFileEnum
userenum(sUsername
);
129 while (userenum
.NextFile(sFile
, &bIsDir
))
133 CDirFileEnum
logenum(CPathUtils::GetAppDataDirectory()+_T("logcache"));
134 while (logenum
.NextFile(sFile
, &bIsDir
))
136 // the "Repositories.dat" is not a cache file
139 BOOL bActionLog
= PathFileExists(CPathUtils::GetAppDataDirectory() + _T("logfile.txt"));
141 m_btnLogHistClear
.EnableWindow(nLogHistMsg
|| nLogHistWC
);
142 m_btnUrlHistClear
.EnableWindow(nUrlHistItems
|| nUrlHistWC
);
143 m_btnResizableHistClear
.EnableWindow(nResizableDialogs
> 0);
144 m_btnAuthHistClear
.EnableWindow(nSimple
|| nSSL
|| nUsername
);
145 m_btnRepoLogClear
.EnableWindow(nLogHistRepo
>= 0);
146 m_btnActionLogClear
.EnableWindow(bActionLog
);
147 m_btnActionLogShow
.EnableWindow(bActionLog
);
151 m_tooltips
.Create(this);
153 sTT
.Format(IDS_SETTINGS_SAVEDDATA_LOGHIST_TT
, nLogHistMsg
, nLogHistWC
);
154 m_tooltips
.AddTool(IDC_LOGHISTORY
, sTT
);
155 m_tooltips
.AddTool(IDC_LOGHISTCLEAR
, sTT
);
156 sTT
.Format(IDS_SETTINGS_SAVEDDATA_URLHIST_TT
, nUrlHistItems
, nUrlHistWC
);
157 m_tooltips
.AddTool(IDC_URLHISTORY
, sTT
);
158 m_tooltips
.AddTool(IDC_URLHISTCLEAR
, sTT
);
159 sTT
.Format(IDS_SETTINGS_SAVEDDATA_RESIZABLE_TT
, nResizableDialogs
);
160 m_tooltips
.AddTool(IDC_RESIZABLEHISTORY
, sTT
);
161 m_tooltips
.AddTool(IDC_RESIZABLEHISTCLEAR
, sTT
);
162 sTT
.Format(IDS_SETTINGS_SAVEDDATA_AUTH_TT
, nSimple
, nSSL
, nUsername
);
163 m_tooltips
.AddTool(IDC_AUTHHISTORY
, sTT
);
164 m_tooltips
.AddTool(IDC_AUTHHISTCLEAR
, sTT
);
165 sTT
.Format(IDS_SETTINGS_SAVEDDATA_REPOLOGHIST_TT
, nLogHistRepo
);
166 m_tooltips
.AddTool(IDC_REPOLOG
, sTT
);
167 m_tooltips
.AddTool(IDC_REPOLOGCLEAR
, sTT
);
168 sTT
.LoadString(IDS_SETTINGS_SHOWACTIONLOG_TT
);
169 m_tooltips
.AddTool(IDC_ACTIONLOGSHOW
, sTT
);
170 sTT
.LoadString(IDS_SETTINGS_MAXACTIONLOGLINES_TT
);
171 m_tooltips
.AddTool(IDC_MAXLINES
, sTT
);
172 sTT
.LoadString(IDS_SETTINGS_CLEARACTIONLOG_TT
);
173 m_tooltips
.AddTool(IDC_ACTIONLOGCLEAR
, sTT
);
178 BOOL
CSetSavedDataPage::PreTranslateMessage(MSG
* pMsg
)
180 m_tooltips
.RelayEvent(pMsg
);
181 return ISettingsPropPage::PreTranslateMessage(pMsg
);
184 BEGIN_MESSAGE_MAP(CSetSavedDataPage
, ISettingsPropPage
)
185 ON_BN_CLICKED(IDC_URLHISTCLEAR
, &CSetSavedDataPage::OnBnClickedUrlhistclear
)
186 ON_BN_CLICKED(IDC_LOGHISTCLEAR
, &CSetSavedDataPage::OnBnClickedLoghistclear
)
187 ON_BN_CLICKED(IDC_RESIZABLEHISTCLEAR
, &CSetSavedDataPage::OnBnClickedResizablehistclear
)
188 ON_BN_CLICKED(IDC_AUTHHISTCLEAR
, &CSetSavedDataPage::OnBnClickedAuthhistclear
)
189 ON_BN_CLICKED(IDC_REPOLOGCLEAR
, &CSetSavedDataPage::OnBnClickedRepologclear
)
190 ON_BN_CLICKED(IDC_ACTIONLOGSHOW
, &CSetSavedDataPage::OnBnClickedActionlogshow
)
191 ON_BN_CLICKED(IDC_ACTIONLOGCLEAR
, &CSetSavedDataPage::OnBnClickedActionlogclear
)
192 ON_EN_CHANGE(IDC_MAXLINES
, OnModified
)
195 void CSetSavedDataPage::OnBnClickedUrlhistclear()
197 CRegistryKey
reg(_T("Software\\TortoiseGit\\History\\repoURLS"));
199 m_btnUrlHistClear
.EnableWindow(FALSE
);
200 m_tooltips
.DelTool(GetDlgItem(IDC_URLHISTCLEAR
));
201 m_tooltips
.DelTool(GetDlgItem(IDC_URLHISTORY
));
204 void CSetSavedDataPage::OnBnClickedLoghistclear()
206 CRegistryKey
reg(_T("Software\\TortoiseGit\\History"));
207 CStringList histlist
;
208 reg
.getSubKeys(histlist
);
209 for (POSITION pos
= histlist
.GetHeadPosition(); pos
!= NULL
; )
211 CString sHist
= histlist
.GetNext(pos
);
212 if (sHist
.Left(6).CompareNoCase(_T("commit"))==0)
214 CRegistryKey
regkey(_T("Software\\TortoiseGit\\History\\")+sHist
);
219 m_btnLogHistClear
.EnableWindow(FALSE
);
220 m_tooltips
.DelTool(GetDlgItem(IDC_RESIZABLEHISTCLEAR
));
221 m_tooltips
.DelTool(GetDlgItem(IDC_RESIZABLEHISTORY
));
224 void CSetSavedDataPage::OnBnClickedResizablehistclear()
226 CRegistryKey
reg(_T("Software\\TortoiseGit\\TortoiseProc\\ResizableState"));
228 m_btnResizableHistClear
.EnableWindow(FALSE
);
229 m_tooltips
.DelTool(GetDlgItem(IDC_RESIZABLEHISTCLEAR
));
230 m_tooltips
.DelTool(GetDlgItem(IDC_RESIZABLEHISTORY
));
233 void CSetSavedDataPage::OnBnClickedAuthhistclear()
235 CRegStdString auth
= CRegStdString(_T("Software\\TortoiseGit\\Auth\\"));
237 TCHAR pathbuf
[MAX_PATH
] = {0};
238 if (SHGetFolderPath(NULL
, CSIDL_APPDATA
, NULL
, SHGFP_TYPE_CURRENT
, pathbuf
)==S_OK
)
240 _tcscat_s(pathbuf
, MAX_PATH
, _T("\\Subversion\\auth"));
241 pathbuf
[_tcslen(pathbuf
)+1] = 0;
242 SHFILEOPSTRUCT fileop
;
243 fileop
.hwnd
= this->m_hWnd
;
244 fileop
.wFunc
= FO_DELETE
;
245 fileop
.pFrom
= pathbuf
;
247 fileop
.fFlags
= FOF_NO_CONNECTED_ELEMENTS
| FOF_NOCONFIRMATION
;// | FOF_NOERRORUI | FOF_SILENT;
248 fileop
.lpszProgressTitle
= _T("deleting file");
249 SHFileOperation(&fileop
);
251 m_btnAuthHistClear
.EnableWindow(FALSE
);
252 m_tooltips
.DelTool(GetDlgItem(IDC_AUTHHISTCLEAR
));
253 m_tooltips
.DelTool(GetDlgItem(IDC_AUTHHISTORY
));
256 void CSetSavedDataPage::OnBnClickedRepologclear()
258 CString path
= CPathUtils::GetAppDataDirectory()+_T("logcache");
259 TCHAR pathbuf
[MAX_PATH
] = {0};
260 _tcscpy_s(pathbuf
, MAX_PATH
, (LPCTSTR
)path
);
261 pathbuf
[_tcslen(pathbuf
)+1] = 0;
263 SHFILEOPSTRUCT fileop
= {0};
264 fileop
.hwnd
= this->m_hWnd
;
265 fileop
.wFunc
= FO_DELETE
;
266 fileop
.pFrom
= pathbuf
;
268 fileop
.fFlags
= FOF_NO_CONNECTED_ELEMENTS
| FOF_NOCONFIRMATION
;
269 fileop
.lpszProgressTitle
= _T("deleting cached data");
270 SHFileOperation(&fileop
);
272 m_btnRepoLogClear
.EnableWindow(FALSE
);
273 m_tooltips
.DelTool(GetDlgItem(IDC_REPOLOG
));
274 m_tooltips
.DelTool(GetDlgItem(IDC_REPOLOGCLEAR
));
277 void CSetSavedDataPage::OnBnClickedActionlogshow()
279 CString logfile
= CPathUtils::GetAppDataDirectory() + _T("logfile.txt");
280 CAppUtils::StartTextViewer(logfile
);
283 void CSetSavedDataPage::OnBnClickedActionlogclear()
285 CString logfile
= CPathUtils::GetAppDataDirectory() + _T("logfile.txt");
287 m_btnActionLogClear
.EnableWindow(FALSE
);
288 m_btnActionLogShow
.EnableWindow(FALSE
);
291 void CSetSavedDataPage::OnModified()
296 BOOL
CSetSavedDataPage::OnApply()
298 Store (m_maxLines
, m_regMaxLines
);
299 return ISettingsPropPage::OnApply();