DittoCopyBuffer.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #include "stdafx.h"
  2. #include ".\dittocopybuffer.h"
  3. #include "CP_Main.h"
  4. CDittoCopyBuffer::CDittoCopyBuffer()
  5. {
  6. }
  7. CDittoCopyBuffer::~CDittoCopyBuffer(void)
  8. {
  9. }
  10. bool CDittoCopyBuffer::StartCopy(long lCopyBuffer)
  11. {
  12. m_lCurrentDittoBuffer = lCopyBuffer;
  13. m_SavedClipboard.Save();
  14. theApp.SendCopy();
  15. return true;
  16. }
  17. bool CDittoCopyBuffer::EndCopy(CClipList *pClips)
  18. {
  19. if(m_lCurrentDittoBuffer < 0 || m_lCurrentDittoBuffer >= 10)
  20. {
  21. Log(_T("tried to save copy buffer but copy buffer is empty"));
  22. return false;
  23. }
  24. m_SavedClipboard.Restore();
  25. bool bRet = false;
  26. if(pClips)
  27. {
  28. try
  29. {
  30. CClip *pClip = pClips->GetHead();
  31. if(pClip)
  32. {
  33. int nCount = pClips->AddToDB(true);
  34. if(nCount > 0)
  35. {
  36. long lID = pClips->GetTail()->m_ID;
  37. theApp.OnCopyCompleted(lID, nCount);
  38. //enclose in brackets so the query closes before we update below
  39. {
  40. CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT lID FROM CopyBuffers WHERE lCopyBuffer = %d"), m_lCurrentDittoBuffer);
  41. if(q.eof())
  42. {
  43. theApp.m_db.execDMLEx(_T("INSERT INTO CopyBuffers VALUES(NULL, -1, %d);"), m_lCurrentDittoBuffer);
  44. }
  45. }
  46. theApp.m_db.execDMLEx(_T("UPDATE CopyBuffers SET lClipID = %d WHERE lCopyBuffer = %d"), lID, m_lCurrentDittoBuffer);
  47. bRet = true;
  48. }
  49. else
  50. {
  51. Log(_T("Error saving Ditto Buffer to Database"));
  52. }
  53. }
  54. else
  55. {
  56. Log(_T("Error getting clip from cliplist"));
  57. }
  58. }
  59. catch (CppSQLite3Exception& e)
  60. {
  61. Log(StrF(_T("SQLITE Exception %d - %s"), e.errorCode(), e.errorMessage()));
  62. ASSERT(FALSE);
  63. }
  64. }
  65. else
  66. {
  67. Log(_T("Ditto Buffer Ditto did not receive a copy"));
  68. }
  69. return bRet;
  70. }
  71. bool CDittoCopyBuffer::PastCopyBuffer(long lCopyBuffer)
  72. {
  73. bool bRet = false;
  74. try
  75. {
  76. CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT Main.lID FROM Main ")
  77. _T("INNER JOIN CopyBuffers ON CopyBuffers.lClipID = Main.lID ")
  78. _T("WHERE CopyBuffers.lCopyBuffer = %d"), lCopyBuffer);
  79. if(q.eof() == false)
  80. {
  81. CClipboardSaveRestoreCopyBuffer *pClipboard = new CClipboardSaveRestoreCopyBuffer;
  82. if(pClipboard)
  83. {
  84. pClipboard->Save();
  85. CProcessPaste paste;
  86. paste.m_bSendPaste = true;
  87. paste.m_bActivateTarget = false;
  88. paste.GetClipIDs().Add(q.getIntField(_T("lID")));
  89. paste.DoPaste();
  90. pClipboard->m_lRestoreDelay = g_Opt.GetDittoRestoreClipboardDelay();
  91. AfxBeginThread(CDittoCopyBuffer::DelayRestoreClipboard, (LPVOID)pClipboard, THREAD_PRIORITY_LOWEST);
  92. bRet = true;
  93. }
  94. }
  95. }
  96. CATCH_SQLITE_EXCEPTION
  97. return bRet;
  98. }
  99. UINT CDittoCopyBuffer::DelayRestoreClipboard(LPVOID pParam)
  100. {
  101. CClipboardSaveRestoreCopyBuffer *pClipboard = (CClipboardSaveRestoreCopyBuffer*)pParam;
  102. if(pClipboard)
  103. {
  104. Sleep(pClipboard->m_lRestoreDelay);
  105. pClipboard->Restore();
  106. }
  107. return TRUE;
  108. }