浏览代码

support saving time as 64bit to support dates past 2038 (#806)

sabrogden 7 月之前
父节点
当前提交
0581ceff83
共有 7 个文件被更改,包括 39 次插入17 次删除
  1. 6 6
      src/Clip.cpp
  2. 2 2
      src/DeleteClipData.cpp
  3. 2 2
      src/QListCtrl.cpp
  4. 5 5
      src/QPasteWnd.cpp
  5. 2 2
      src/QPasteWnd.h
  6. 19 0
      src/sqlite/CppSQLite3.cpp
  7. 3 0
      src/sqlite/CppSQLite3.h

+ 6 - 6
src/Clip.cpp

@@ -522,7 +522,7 @@ int CClip::LoadFromClipboard(CClipTypes* pClipTypes, bool checkClipboardIgnore,
 	Log(StrF(_T("End enumerating over supported types, Count: %d"), numTypes));
 	Log(StrF(_T("End enumerating over supported types, Count: %d"), numTypes));
 	
 	
 	m_Time = CTime::GetCurrentTime();
 	m_Time = CTime::GetCurrentTime();
-	
+			
 	if(!bIsDescSet)
 	if(!bIsDescSet)
 	{
 	{
 		SetDescFromType();
 		SetDescFromType();
@@ -920,8 +920,8 @@ bool CClip::AddToMainTable()
 
 
 		CString cs;
 		CString cs;
 		cs.Format(_T("INSERT into Main (lDate, mText, lShortCut, lDontAutoDelete, CRC, bIsGroup, lParentID, QuickPasteText, clipOrder, clipGroupOrder, globalShortCut, lastPasteDate, stickyClipOrder, stickyClipGroupOrder, MoveToGroupShortCut, GlobalMoveToGroupShortCut) ")
 		cs.Format(_T("INSERT into Main (lDate, mText, lShortCut, lDontAutoDelete, CRC, bIsGroup, lParentID, QuickPasteText, clipOrder, clipGroupOrder, globalShortCut, lastPasteDate, stickyClipOrder, stickyClipGroupOrder, MoveToGroupShortCut, GlobalMoveToGroupShortCut) ")
-						_T("values(%d, '%s', %d, %d, %d, %d, %d, '%s', %f, %f, %d, %d, %f, %f, %d, %d);"),
-							(int)m_Time.GetTime(),
+						_T("values(%lld, '%s', %d, %d, %d, %d, %d, '%s', %f, %f, %d, %lld, %f, %f, %d, %d);"),
+							m_Time.GetTime(),
 							m_Desc,
 							m_Desc,
 							m_shortCut,
 							m_shortCut,
 							m_dontAutoDelete,
 							m_dontAutoDelete,
@@ -932,7 +932,7 @@ bool CClip::AddToMainTable()
 							m_clipOrder,
 							m_clipOrder,
 							m_clipGroupOrder,
 							m_clipGroupOrder,
 							m_globalShortCut,
 							m_globalShortCut,
-							(int)CTime::GetCurrentTime().GetTime(),
+							CTime::GetCurrentTime().GetTime(),
 							m_stickyClipOrder,
 							m_stickyClipOrder,
 							m_stickyClipGroupOrder,
 							m_stickyClipGroupOrder,
 							m_moveToGroupShortCut,
 							m_moveToGroupShortCut,
@@ -1527,7 +1527,7 @@ BOOL CClip::LoadMainTable(int id)
 
 
 		if(q.eof() == false)
 		if(q.eof() == false)
 		{
 		{
-			m_Time = q.getIntField(_T("lDate"));
+			m_Time = q.getInt64Field(_T("lDate"));
 			m_Desc = q.getStringField(_T("mText"));
 			m_Desc = q.getStringField(_T("mText"));
 			m_CRC = q.getIntField(_T("CRC"));
 			m_CRC = q.getIntField(_T("CRC"));
 			m_parentId = q.getIntField(_T("lParentID"));
 			m_parentId = q.getIntField(_T("lParentID"));
@@ -1538,7 +1538,7 @@ BOOL CClip::LoadMainTable(int id)
 			m_clipOrder = q.getFloatField(_T("clipOrder"));
 			m_clipOrder = q.getFloatField(_T("clipOrder"));
 			m_clipGroupOrder = q.getFloatField(_T("clipGroupOrder"));
 			m_clipGroupOrder = q.getFloatField(_T("clipGroupOrder"));
 			m_globalShortCut = q.getIntField(_T("globalShortCut"));
 			m_globalShortCut = q.getIntField(_T("globalShortCut"));
-			m_lastPasteDate = q.getIntField(_T("lastPasteDate"));
+			m_lastPasteDate = q.getInt64Field(_T("lastPasteDate"));
 			m_stickyClipOrder = q.getFloatField(_T("stickyClipOrder"));
 			m_stickyClipOrder = q.getFloatField(_T("stickyClipOrder"));
 			m_stickyClipGroupOrder = q.getFloatField(_T("stickyClipGroupOrder"));
 			m_stickyClipGroupOrder = q.getFloatField(_T("stickyClipGroupOrder"));
 			m_moveToGroupShortCut = q.getIntField(_T("MoveToGroupShortCut"));
 			m_moveToGroupShortCut = q.getIntField(_T("MoveToGroupShortCut"));

+ 2 - 2
src/DeleteClipData.cpp

@@ -167,8 +167,8 @@ void CDeleteClipData::LoadItems()
 		CDeleteData data;
 		CDeleteData data;
 		data.m_lID = q.getIntField(_T("lID"));
 		data.m_lID = q.getIntField(_T("lID"));
 		data.m_Desc = q.getStringField(_T("mText"));
 		data.m_Desc = q.getStringField(_T("mText"));
-		data.m_createdDateTime = q.getIntField(_T("lDate"));
-		data.m_lastUsedDateTime = q.getIntField(_T("lastPasteDate"));
+		data.m_createdDateTime = q.getInt64Field(_T("lDate"));
+		data.m_lastUsedDateTime = q.getInt64Field(_T("lastPasteDate"));
 		data.m_clipboardFormat = q.getStringField(_T("strClipBoardFormat"));
 		data.m_clipboardFormat = q.getStringField(_T("strClipBoardFormat"));
 		data.m_dataSize = q.getIntField(_T("DataLength"));
 		data.m_dataSize = q.getIntField(_T("DataLength"));
 		data.m_DatalID = q.getIntField(_T("DataID"));
 		data.m_DatalID = q.getIntField(_T("DataID"));

+ 2 - 2
src/QListCtrl.cpp

@@ -1027,10 +1027,10 @@ bool CQListCtrl::ShowFullDescription(bool bFromAuto, bool fromNextPrev)
 			if (q.eof() == false)
 			if (q.eof() == false)
 			{
 			{
 				CString clipData;
 				CString clipData;
-				COleDateTime time((time_t)q.getIntField(_T("lDate")));
+				COleDateTime time((time_t)q.getInt64Field(_T("lDate")));
 				clipData += "Added: " + time.Format();
 				clipData += "Added: " + time.Format();
 
 
-				COleDateTime modified((time_t)q.getIntField(_T("lastPasteDate")));
+				COleDateTime modified((time_t)q.getInt64Field(_T("lastPasteDate")));
 				clipData += _T(" | Last Used: ") + modified.Format();
 				clipData += _T(" | Last Used: ") + modified.Format();
 
 
 				if (q.getIntField(_T("lDontAutoDelete")) > 0)
 				if (q.getIntField(_T("lDontAutoDelete")) > 0)

+ 5 - 5
src/QPasteWnd.cpp

@@ -1200,7 +1200,7 @@ LRESULT CQPasteWnd::OnReloadClipInUI(WPARAM wParam, LPARAM lParam)
 	{
 	{
 		double order = q.getFloatField(_T("clipOrder"));
 		double order = q.getFloatField(_T("clipOrder"));
 		double orderGroup = q.getFloatField(_T("clipGroupOrder"));
 		double orderGroup = q.getFloatField(_T("clipGroupOrder"));
-		int lastPasted = q.getIntField(_T("lastPasteDate"));
+		int lastPasted = q.getInt64Field(_T("lastPasteDate"));
 		CString description = q.getStringField(_T("mText"));
 		CString description = q.getStringField(_T("mText"));
 
 
 		std::vector<CMainTable>::iterator iter = m_listItems.begin();
 		std::vector<CMainTable>::iterator iter = m_listItems.begin();
@@ -5656,10 +5656,10 @@ void CQPasteWnd::OnGetToolTipText(NMHDR* pNMHDR, LRESULT* pResult)
 
 
 			clipData += StrF(_T("\r\nDatabase ID: %d"), q.getIntField(_T("lID")));
 			clipData += StrF(_T("\r\nDatabase ID: %d"), q.getIntField(_T("lID")));
 
 
-			COleDateTime time((time_t)q.getIntField(_T("lDate")));
+			COleDateTime time((time_t)q.getInt64Field(_T("lDate")));
 			clipData += "\r\nAdded: " + time.Format();
 			clipData += "\r\nAdded: " + time.Format();
 
 
-			COleDateTime modified((time_t)q.getIntField(_T("lastPasteDate")));
+			COleDateTime modified((time_t)q.getInt64Field(_T("lastPasteDate")));
 			clipData += "\r\nLast Used: " + modified.Format();
 			clipData += "\r\nLast Used: " + modified.Format();
 
 
 			if (q.getIntField(_T("lDontAutoDelete")) > 0)
 			if (q.getIntField(_T("lDontAutoDelete")) > 0)
@@ -6181,8 +6181,8 @@ void CQPasteWnd::FillMainTable(CMainTable& table, CppSQLite3Query& q)
 	table.m_clipGroupOrder = q.getFloatField(_T("clipGroupOrder"));
 	table.m_clipGroupOrder = q.getFloatField(_T("clipGroupOrder"));
 	table.m_stickyClipOrder = q.getFloatField(_T("stickyClipOrder"));
 	table.m_stickyClipOrder = q.getFloatField(_T("stickyClipOrder"));
 	table.m_stickyClipGroupOrder = q.getFloatField(_T("stickyClipGroupOrder"));
 	table.m_stickyClipGroupOrder = q.getFloatField(_T("stickyClipGroupOrder"));
-	table.m_dateCopied = q.getIntField(_T("lDate"));
-	table.m_datePasted = q.getIntField(_T("lastPasteDate"));
+	table.m_dateCopied = q.getInt64Field(_T("lDate"));
+	table.m_datePasted = q.getInt64Field(_T("lastPasteDate"));
 }
 }
 
 
 void CQPasteWnd::OnDestroy()
 void CQPasteWnd::OnDestroy()

+ 2 - 2
src/QPasteWnd.h

@@ -52,8 +52,8 @@ public:
 	double m_clipGroupOrder;
 	double m_clipGroupOrder;
 	double m_stickyClipOrder;
 	double m_stickyClipOrder;
 	double m_stickyClipGroupOrder;
 	double m_stickyClipGroupOrder;
-	int m_dateCopied;
-	int m_datePasted;
+	__int64 m_dateCopied;
+	__int64 m_datePasted;
 
 
 	static bool SortDesc(const CMainTable& d1, const CMainTable& d2)
 	static bool SortDesc(const CMainTable& d1, const CMainTable& d2)
 	{
 	{

+ 19 - 0
src/sqlite/CppSQLite3.cpp

@@ -253,6 +253,25 @@ int CppSQLite3Query::getIntField(const TCHAR* szField, int nNullValue/*=0*/)
 	return getIntField(nField, nNullValue);
 	return getIntField(nField, nNullValue);
 }
 }
 
 
+__int64 CppSQLite3Query::getInt64Field(int nField, __int64 nNullValue/*=0*/)
+{
+	if (fieldDataType(nField) == SQLITE_NULL)
+	{
+		return nNullValue;
+	}
+	else
+	{
+		return sqlite3_column_int64(mpVM, nField);
+	}
+}
+
+
+__int64 CppSQLite3Query::getInt64Field(const TCHAR* szField, __int64 nNullValue/*=0*/)
+{
+	int nField = fieldIndex(szField);
+	return getInt64Field(nField, nNullValue);
+}
+
 
 
 double CppSQLite3Query::getFloatField(int nField, double fNullValue/*=0.0*/)
 double CppSQLite3Query::getFloatField(int nField, double fNullValue/*=0.0*/)
 {
 {

+ 3 - 0
src/sqlite/CppSQLite3.h

@@ -99,6 +99,9 @@ public:
     int getIntField(int nField, int nNullValue=0);
     int getIntField(int nField, int nNullValue=0);
     int getIntField(const TCHAR* szField, int nNullValue=0);
     int getIntField(const TCHAR* szField, int nNullValue=0);
 
 
+    __int64 getInt64Field(int nField, __int64 nNullValue=0);
+    __int64 getInt64Field(const TCHAR* szField, __int64 nNullValue=0);
+
     double getFloatField(int nField, double fNullValue=0.0);
     double getFloatField(int nField, double fNullValue=0.0);
     double getFloatField(const TCHAR* szField, double fNullValue=0.0);
     double getFloatField(const TCHAR* szField, double fNullValue=0.0);