From fca3bbf3be0b78d32828cc8e79fe9c8d7543ff0f Mon Sep 17 00:00:00 2001 From: Frank Li Date: Sat, 18 Apr 2009 22:46:34 +0800 Subject: [PATCH] Add option "send mail after create patch" at formatpatch dialog Signed-off-by: Frank Li --- src/Resources/TortoiseProcENG.rc | Bin 422430 -> 422662 bytes src/TortoiseProc/AppUtils.cpp | 41 ++++++++++++++++ src/TortoiseProc/AppUtils.h | 2 + src/TortoiseProc/Commands/FormatPatchCommand.cpp | 26 ++++++++++ src/TortoiseProc/Commands/SendMailCommand.cpp | 58 ++++++----------------- src/TortoiseProc/FormatPatchDlg.cpp | 12 ++++- src/TortoiseProc/FormatPatchDlg.h | 3 ++ src/TortoiseProc/ProgressDlg.cpp | 8 ++++ src/TortoiseProc/ProgressDlg.h | 5 +- src/TortoiseProc/TortoiseProc.vcproj | 24 +++++----- src/TortoiseProc/resource.h | Bin 157526 -> 157618 bytes 11 files changed, 120 insertions(+), 59 deletions(-) rewrite src/TortoiseProc/Commands/SendMailCommand.cpp (86%) diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index 299d3d851422221b47593b9a90212437d0f5a9b8..098d40ce611b3877c32b8697f9fc131a71436e19 100644 GIT binary patch delta 135 zcwU?LM6&IfWJ3#M3)2?n6vpXq7BO*5elSgG@`MZ)#XN=-1_cIRhD3%;h8!R(ks*zt zgdvro2*^$blBv@VzF-uc{y>V6WBR5zHlgW9wlOMAe(=nQ+mOM8!IVLV!Gghj^877| i(*-)2xTgPVW>lE2@Q{h6eFY;k5QAve?JF4B$_fB^fGU3g delta 42 vcwTFJCOPkkWJ3#M3)2?n6voM2zr>~sbTVLY diff --git a/src/TortoiseProc/AppUtils.cpp b/src/TortoiseProc/AppUtils.cpp index 0f676e792..e826845db 100644 --- a/src/TortoiseProc/AppUtils.cpp +++ b/src/TortoiseProc/AppUtils.cpp @@ -43,6 +43,8 @@ #include "ResetDlg.h" #include "DeleteConflictDlg.h" #include "ChangedDlg.h" +#include "SendMailDlg.h" +#include "SVNProgressDlg.h" CAppUtils::CAppUtils(void) { @@ -1940,4 +1942,43 @@ CString CAppUtils::ChooseRepository(CString *path) return CString(); } +} + +bool CAppUtils::SendPatchMail(CTGitPathList &list,bool autoclose) +{ + CSendMailDlg dlg; + + dlg.m_PathList = list; + + if(dlg.DoModal()==IDOK) + { + if(dlg.m_PathList.GetCount() == 0) + return FALSE; + + CGitProgressDlg progDlg; + + theApp.m_pMainWnd = &progDlg; + progDlg.SetCommand(CGitProgressDlg::GitProgress_SendMail); + + progDlg.SetAutoClose(autoclose); + + progDlg.SetPathList(dlg.m_PathList); + //ProjectProperties props; + //props.ReadPropsPathList(dlg.m_pathList); + //progDlg.SetProjectProperties(props); + progDlg.SetItemCount(dlg.m_PathList.GetCount()); + + DWORD flags =0; + if(dlg.m_bAttachment) + flags |= SENDMAIL_ATTACHMENT; + if(dlg.m_bCombine) + flags |= SENDMAIL_COMBINED; + + progDlg.SetSendMailOption(dlg.m_To,dlg.m_CC,dlg.m_Subject,flags); + + progDlg.DoModal(); + + return true; + } + return false; } \ No newline at end of file diff --git a/src/TortoiseProc/AppUtils.h b/src/TortoiseProc/AppUtils.h index 9df5e58bd..dbac9b353 100644 --- a/src/TortoiseProc/AppUtils.h +++ b/src/TortoiseProc/AppUtils.h @@ -193,6 +193,8 @@ public: static CString GetClipboardLink(); static CString ChooseRepository(CString *path); + + static bool SendPatchMail(CTGitPathList &pathlist,bool autoclose=false); private: static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2); diff --git a/src/TortoiseProc/Commands/FormatPatchCommand.cpp b/src/TortoiseProc/Commands/FormatPatchCommand.cpp index cb1cf1eb9..f5e7cb270 100644 --- a/src/TortoiseProc/Commands/FormatPatchCommand.cpp +++ b/src/TortoiseProc/Commands/FormatPatchCommand.cpp @@ -27,6 +27,7 @@ #include "ShellUpdater.h" #include "ProgressDlg.h" +#include "AppUtils.h" bool FormatPatchCommand::Execute() { @@ -62,6 +63,31 @@ bool FormatPatchCommand::Execute() CShellUpdater::Instance().AddPathForUpdate(CTGitPath(dlg.m_Dir)); CShellUpdater::Instance().Flush(); + if(!progress.m_GitStatus) + { + if(dlg.m_bSendMail) + { + CTGitPathList list; + CString log=progress.m_LogText; + int start=log.Find(cmd); + if(start >=0) + CString one=log.Tokenize(_T("\n"),start); + + while(start>=0) + { + CString one=log.Tokenize(_T("\n"),start); + one=one.Trim(); + if(one.IsEmpty()) + continue; + one.Replace(_T('/'),_T('\\')); + CTGitPath path; + path.SetFromWin(one); + list.AddPath(path); + } + + CAppUtils::SendPatchMail(list); + } + } return !progress.m_GitStatus; } return FALSE; diff --git a/src/TortoiseProc/Commands/SendMailCommand.cpp b/src/TortoiseProc/Commands/SendMailCommand.cpp dissimilarity index 86% index e7d730042..3b538a2dc 100644 --- a/src/TortoiseProc/Commands/SendMailCommand.cpp +++ b/src/TortoiseProc/Commands/SendMailCommand.cpp @@ -1,44 +1,14 @@ -#include "StdAfx.h" -#include "SendMailCommand.h" -#include "SendMailDlg.h" -#include "SVNProgressDlg.h" - -bool SendMailCommand::Execute() -{ - CSendMailDlg dlg; - - dlg.m_PathList = orgPathList; - - if(dlg.DoModal()==IDOK) - { - if(dlg.m_PathList.GetCount() == 0) - return FALSE; - - CGitProgressDlg progDlg; - - theApp.m_pMainWnd = &progDlg; - progDlg.SetCommand(CGitProgressDlg::GitProgress_SendMail); - - if (parser.HasVal(_T("closeonend"))) - progDlg.SetAutoClose(parser.GetLongVal(_T("closeonend"))); - - progDlg.SetPathList(dlg.m_PathList); - //ProjectProperties props; - //props.ReadPropsPathList(dlg.m_pathList); - //progDlg.SetProjectProperties(props); - progDlg.SetItemCount(dlg.m_PathList.GetCount()); - - DWORD flags =0; - if(dlg.m_bAttachment) - flags |= SENDMAIL_ATTACHMENT; - if(dlg.m_bCombine) - flags |= SENDMAIL_COMBINED; - - progDlg.SetSendMailOption(dlg.m_To,dlg.m_CC,dlg.m_Subject,flags); - - progDlg.DoModal(); - - return true; - } - return false; -} \ No newline at end of file +#include "StdAfx.h" +#include "SendMailCommand.h" +#include "SendMailDlg.h" +#include "SVNProgressDlg.h" +#include "AppUtils.h" + +bool SendMailCommand::Execute() +{ + bool autoclose=false; + if (parser.HasVal(_T("closeonend"))) + autoclose=parser.GetLongVal(_T("closeonend")); + + return CAppUtils::SendPatchMail(this->orgPathList,autoclose); +} \ No newline at end of file diff --git a/src/TortoiseProc/FormatPatchDlg.cpp b/src/TortoiseProc/FormatPatchDlg.cpp index 50f417604..5b613fd93 100644 --- a/src/TortoiseProc/FormatPatchDlg.cpp +++ b/src/TortoiseProc/FormatPatchDlg.cpp @@ -11,9 +11,11 @@ IMPLEMENT_DYNAMIC(CFormatPatchDlg, CResizableStandAloneDialog) CFormatPatchDlg::CFormatPatchDlg(CWnd* pParent /*=NULL*/) - : CResizableStandAloneDialog(CFormatPatchDlg::IDD, pParent) + : CResizableStandAloneDialog(CFormatPatchDlg::IDD, pParent), + m_regSendMail(_T("Software\\TortoiseGit\\TortoiseProc\\FormatPatch\\SendMail"),0) { m_Num=1; + this->m_bSendMail = m_regSendMail; } CFormatPatchDlg::~CFormatPatchDlg() @@ -36,7 +38,7 @@ void CFormatPatchDlg::DoDataExchange(CDataExchange* pDX) DDX_Text(pDX, IDC_COMBOBOXEX_FROM, m_From); DDX_Text(pDX, IDC_COMBOBOXEX_TO, m_To); - + DDX_Check(pDX, IDC_CHECK_SENDMAIL, m_bSendMail); } @@ -68,6 +70,10 @@ BOOL CFormatPatchDlg::OnInitDialog() AddAnchor(IDC_BUTTON_FROM, TOP_RIGHT); AddAnchor(IDC_BUTTON_TO, TOP_RIGHT); + AddAnchor(IDC_CHECK_SENDMAIL,BOTTOM_LEFT); + AddAnchor(IDOK,BOTTOM_RIGHT); + AddAnchor(IDCANCEL,BOTTOM_RIGHT); + this->AddOthersToAnchor(); m_cDir.SetPathHistory(TRUE); @@ -127,6 +133,8 @@ void CFormatPatchDlg::OnBnClickedOk() m_cTo.SaveHistory(); this->UpdateData(TRUE); this->m_Radio=GetCheckedRadioButton(IDC_RADIO_SINCE,IDC_RADIO_RANGE); + + m_regSendMail=this->m_bSendMail; OnOK(); } diff --git a/src/TortoiseProc/FormatPatchDlg.h b/src/TortoiseProc/FormatPatchDlg.h index 8f12238ce..e00874920 100644 --- a/src/TortoiseProc/FormatPatchDlg.h +++ b/src/TortoiseProc/FormatPatchDlg.h @@ -2,6 +2,7 @@ #include "StandAloneDlg.h" #include "HistoryCombo.h" +#include "Registry.h" // CFormatPatchDlg dialog @@ -25,6 +26,7 @@ protected: CHistoryCombo m_cFrom; CHistoryCombo m_cTo; CEdit m_cNum; + CRegDWORD m_regSendMail; DECLARE_MESSAGE_MAP() public: @@ -34,6 +36,7 @@ public: CString m_To; CString m_Since; int m_Radio; + BOOL m_bSendMail; afx_msg void OnBnClickedButtonDir(); afx_msg void OnBnClickedButtonFrom(); diff --git a/src/TortoiseProc/ProgressDlg.cpp b/src/TortoiseProc/ProgressDlg.cpp index e1a86dd3b..a0c65f828 100644 --- a/src/TortoiseProc/ProgressDlg.cpp +++ b/src/TortoiseProc/ProgressDlg.cpp @@ -36,6 +36,7 @@ void CProgressDlg::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CProgressDlg, CResizableStandAloneDialog) ON_MESSAGE(MSG_PROGRESSDLG_UPDATE_UI, OnProgressUpdateUI) + ON_BN_CLICKED(IDOK, &CProgressDlg::OnBnClickedOk) END_MESSAGE_MAP() BOOL CProgressDlg::OnInitDialog() @@ -229,3 +230,10 @@ void CProgressDlg::RemoveLastLine(CString &str) return; } // CProgressDlg message handlers + +void CProgressDlg::OnBnClickedOk() +{ + // TODO: Add your control notification handler code here + m_Log.GetWindowText(this->m_LogText); + OnOK(); +} diff --git a/src/TortoiseProc/ProgressDlg.h b/src/TortoiseProc/ProgressDlg.h index ffedb50a6..4b89b7eab 100644 --- a/src/TortoiseProc/ProgressDlg.h +++ b/src/TortoiseProc/ProgressDlg.h @@ -34,6 +34,7 @@ public: DWORD m_GitStatus; BOOL m_bShowCommand; // whether to display the command in the log window (default true) CString m_PreText; // optional text to show in log window before running command + CString m_LogText; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support static UINT ProgressThreadEntry(LPVOID pVoid); @@ -45,6 +46,8 @@ protected: LRESULT CProgressDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam); - CString m_LogText; + DECLARE_MESSAGE_MAP() +public: + afx_msg void OnBnClickedOk(); }; diff --git a/src/TortoiseProc/TortoiseProc.vcproj b/src/TortoiseProc/TortoiseProc.vcproj index 5c94fe9c7..1e25935c6 100644 --- a/src/TortoiseProc/TortoiseProc.vcproj +++ b/src/TortoiseProc/TortoiseProc.vcproj @@ -564,11 +564,11 @@ > &Iz*534pW#EO3)BOAeP{QUL^)7HR Mmyl)x6qaWKRwRHD=Kufz delta 36 scwXCdp7Yu{&W0_FIt7y#2y$$nP{6q8+w{BwMzQIAX-p#1W73(z04Ey`ga7~l -- 2.11.4.GIT