From 89226d1fb63445390d113a403ac0057a5ecd824c Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Sat, 28 Mar 2015 14:54:46 +0100 Subject: [PATCH] Parse time in BrowseRefsDlg ourselves This allows us to translate the relative time and to display absolute time depending on user settings. Signed-off-by: Sven Strickroth --- src/TortoiseProc/BrowseRefsDlg.cpp | 22 +++++++++++++++------- src/TortoiseProc/BrowseRefsDlg.h | 6 ++++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/TortoiseProc/BrowseRefsDlg.cpp b/src/TortoiseProc/BrowseRefsDlg.cpp index 8a50fc31e..35c774eaf 100644 --- a/src/TortoiseProc/BrowseRefsDlg.cpp +++ b/src/TortoiseProc/BrowseRefsDlg.cpp @@ -35,6 +35,7 @@ #include "UnicodeUtils.h" #include "InputDlg.h" #include "SysProgressDlg.h" +#include "LoglistUtils.h" static int SplitRemoteBranchName(CString ref, CString &remote, CString &branch) { @@ -124,7 +125,7 @@ public: { case CBrowseRefsDlg::eCol_Name: return SortStrCmp(pLeft->GetRefName(), pRight->GetRefName()); case CBrowseRefsDlg::eCol_Upstream: return SortStrCmp(pLeft->m_csUpstream, pRight->m_csUpstream); - case CBrowseRefsDlg::eCol_Date: return pLeft->m_csDate_Iso8601.CompareNoCase(pRight->m_csDate_Iso8601); + case CBrowseRefsDlg::eCol_Date: return ((pLeft->m_csDate == pRight->m_csDate) ? 0 : ((pLeft->m_csDate > pRight->m_csDate) ? 1 : -1)); case CBrowseRefsDlg::eCol_Msg: return SortStrCmp(pLeft->m_csSubject, pRight->m_csSubject); case CBrowseRefsDlg::eCol_LastAuthor: return SortStrCmp(pLeft->m_csAuthor, pRight->m_csAuthor); case CBrowseRefsDlg::eCol_Hash: return pLeft->m_csRefHash.CompareNoCase(pRight->m_csRefHash); @@ -163,7 +164,15 @@ CBrowseRefsDlg::CBrowseRefsDlg(CString cmdPath, CWnd* pParent /*=NULL*/) m_bPickOne(false), m_bPickedRefSet(false) { - + // get short/long datetime setting from registry + DWORD RegUseShortDateFormat = CRegDWORD(_T("Software\\TortoiseGit\\LogDateFormat"), TRUE); + if (RegUseShortDateFormat) + m_DateFormat = DATE_SHORTDATE; + else + m_DateFormat = DATE_LONGDATE; + // get relative time display setting from registry + DWORD regRelativeTimes = CRegDWORD(_T("Software\\TortoiseGit\\RelativeTimes"), FALSE); + m_bRelativeTimes = (regRelativeTimes != 0); } CBrowseRefsDlg::~CBrowseRefsDlg() @@ -442,10 +451,9 @@ void CBrowseRefsDlg::Refresh(CString selectRef) L"%(refname)%04" L"%(objectname)%04" L"%(upstream)%04" - L"%(authordate:relative)%04" L"%(subject)%04" L"%(authorname)%04" - L"%(authordate:iso8601)%03", + L"%(authordate:raw)%03", &allRefs, &error, CP_UTF8)) { CMessageBox::Show(NULL, CString(_T("Get refs failed\n")) + error, _T("TortoiseGit"), MB_OK | MB_ICONERROR); @@ -491,10 +499,10 @@ void CBrowseRefsDlg::Refresh(CString selectRef) treeLeaf.m_csRefHash= values.Tokenize(L"\04",valuePos); if(valuePos < 0) continue; treeLeaf.m_csUpstream = values.Tokenize(L"\04", valuePos); if (valuePos < 0) continue; CGit::GetShortName(treeLeaf.m_csUpstream, treeLeaf.m_csUpstream, L"refs/remotes/"); - treeLeaf.m_csDate= values.Tokenize(L"\04",valuePos); if(valuePos < 0) continue; treeLeaf.m_csSubject= values.Tokenize(L"\04",valuePos); if(valuePos < 0) continue; treeLeaf.m_csAuthor= values.Tokenize(L"\04",valuePos); if(valuePos < 0) continue; - treeLeaf.m_csDate_Iso8601= values.Tokenize(L"\04",valuePos); + CString date = values.Tokenize(L"\04", valuePos); + treeLeaf.m_csDate = StrToInt(date); if (wcsncmp(iterRefMap->first, L"refs/heads/", 11) == 0) treeLeaf.m_csDescription = descriptions[treeLeaf.m_csRefName]; @@ -622,7 +630,7 @@ void CBrowseRefsDlg::FillListCtrlForShadowTree(CShadowTree* pTree, CString refNa m_ListRefLeafs.SetItemData(indexItem,(DWORD_PTR)pTree); m_ListRefLeafs.SetItemText(indexItem,eCol_Name, ref); m_ListRefLeafs.SetItemText(indexItem, eCol_Upstream, pTree->m_csUpstream); - m_ListRefLeafs.SetItemText(indexItem,eCol_Date, pTree->m_csDate); + m_ListRefLeafs.SetItemText(indexItem, eCol_Date, pTree->m_csDate != 0 ? CLoglistUtils::FormatDateAndTime(pTree->m_csDate, m_DateFormat, true, m_bRelativeTimes) : _T("")); m_ListRefLeafs.SetItemText(indexItem,eCol_Msg, pTree->m_csSubject); m_ListRefLeafs.SetItemText(indexItem,eCol_LastAuthor, pTree->m_csAuthor); m_ListRefLeafs.SetItemText(indexItem,eCol_Hash, pTree->m_csRefHash); diff --git a/src/TortoiseProc/BrowseRefsDlg.h b/src/TortoiseProc/BrowseRefsDlg.h index 388571ec5..6028433a2 100644 --- a/src/TortoiseProc/BrowseRefsDlg.h +++ b/src/TortoiseProc/BrowseRefsDlg.h @@ -56,8 +56,7 @@ public: CString m_csRefName; CString m_csUpstream; CString m_csRefHash; - CString m_csDate; - CString m_csDate_Iso8601; + CTime m_csDate; CString m_csAuthor; CString m_csSubject; CString m_csDescription; @@ -194,6 +193,9 @@ private: bool m_bPickOne; bool m_bPickedRefSet; + DWORD m_DateFormat; // DATE_SHORTDATE or DATE_LONGDATE + bool m_bRelativeTimes; // Show relative times + public: static CString PickRef(bool returnAsHash = false, CString initialRef = CString(), int pickRef_Kind = gPickRef_All, bool pickMultipleRefsOrRange = false); static bool PickRefForCombo(CComboBoxEx* pComboBox, int pickRef_Kind = gPickRef_All); -- 2.11.4.GIT