| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- #include "StdAfx.h"
- #include "Convert.h"
- #include "AccessToSqlite.h"
- #include "DataTable.h"
- #include "TypesTable.h"
- CConvert::CConvert(void)
- {
- }
- CConvert::~CConvert(void)
- {
- }
- bool CConvert::ConvertNonGroups()
- {
- try
- {
- CMainTable recset;
- recset.m_pDatabase = &theApp.m_AccessDatabase;
- recset.m_strFilter.Format(_T("bIsGroup = FALSE"));
- recset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T(""), 0);
- if(recset.IsEOF() == FALSE)
- {
- while(!recset.IsEOF())
- {
- ConvertEntry(recset);
- recset.MoveNext();
- m_Progress.StepIt();
- m_Progress.PeekAndPump(FALSE);
- }
- }
- }
- catch(CDaoException* e)
- {
- TCHAR cError[100];
- e->GetErrorMessage(cError, 100);
- Log(StrF(_T("CDaoException - %s"), cError));
- ASSERT(FALSE);
- e->Delete();
- return false;
- }
- return true;
- }
- bool CConvert::ConvertGroups(long lParentID)
- {
- try
- {
- CMainTable recset;
- recset.m_pDatabase = &theApp.m_AccessDatabase;
- recset.m_strFilter.Format(_T("bIsGroup = TRUE AND lParentID = %d"), lParentID);
- recset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T(""), 0);
- while(!recset.IsEOF())
- {
- ConvertEntry(recset);
-
- ConvertGroups(recset.m_lID);
- recset.MoveNext();
- m_Progress.StepIt();
- m_Progress.PeekAndPump(FALSE);
- }
- }
- catch(CDaoException* e)
- {
- TCHAR cError[100];
- e->GetErrorMessage(cError, 100);
- Log(StrF(_T("CDaoException - %s"), cError));
- ASSERT(FALSE);
- e->Delete();
- return false;
- }
- return true;
- }
- bool CConvert::ConvertEntry(CMainTable &recset)
- {
- bool bRet = false;
- try
- {
- CClip Clip;
- Clip.m_Desc = recset.m_strText;
- Clip.m_Time = recset.m_lDate;
- Clip.m_lShortCut = recset.m_lShortCut;
- Clip.m_lDontAutoDelete = recset.m_lDontAutoDelete;
- Clip.m_bIsGroup = recset.m_bIsGroup;
- long lParent;
- if(m_ParentMap.Lookup(recset.m_lParentID, lParent))
- {
- Clip.m_lParent = lParent;
- }
- if(Clip.m_bIsGroup || LoadFormats(recset.m_lID, Clip.m_Formats))
- {
- Clip.AddToDB(false);
- if(Clip.m_bIsGroup)
- {
- m_ParentMap.SetAt(recset.m_lID, Clip.m_ID);
- }
- bRet = true;
- }
- else
- {
- Log(StrF(_T("Error loading formats id = %d"), recset.m_lID));
- }
- }
- catch (CppSQLite3Exception& e)
- {
- Log(StrF(_T("SQLITE Exception %d - %s"), e.errorCode(), e.errorMessage()));
- ASSERT(FALSE);
- bRet = false;
- }
- return bRet;
- }
- bool CConvert::LoadFormats(long lID, CClipFormats& formats)
- {
- CClipFormat cf;
- HGLOBAL hGlobal = 0;
- formats.RemoveAll();
- try
- {
- CDataTable recset;
- recset.m_pDatabase = &theApp.m_AccessDatabase;
- //Open the data table for all that have the parent id
- CString csSQL;
- csSQL.Format(
- _T("SELECT Data.* FROM Data ")
- _T("INNER JOIN Main ON Main.lDataID = Data.lDataID ")
- _T("WHERE Main.lID = %d"), lID);
- recset.Open(csSQL);
- while( !recset.IsEOF() )
- {
- cf.m_cfType = GetFormatID(recset.m_strClipBoardFormat);
- // create a new HGLOBAL duplicate
- hGlobal = NewGlobalH(recset.m_ooData.m_hData, recset.m_ooData.m_dwDataLength);
- if(hGlobal)
- {
- cf.m_hgData = hGlobal;
- formats.Add( cf );
- }
- recset.MoveNext();
- }
- cf.m_hgData = 0; // formats owns all the data
- recset.Close();
- }
- catch(CDaoException* e)
- {
- TCHAR cError[100];
- e->GetErrorMessage(cError, 100);
- Log(StrF(_T("CDaoException - %s"), cError));
- ASSERT(FALSE);
- e->Delete();
- return false;
- }
- return formats.GetSize() > 0;
- }
- bool CConvert::ConvertTypes()
- {
- try
- {
- CTypesTable recset;
- recset.m_pDatabase = &theApp.m_AccessDatabase;
- recset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T("SELECT * FROM Types"), NULL);
- bool bFoundCF_UNICODETEXT = false;
- bool bAddedOne = false;
- while(!recset.IsEOF())
- {
- theApp.m_db.execDMLEx(_T("INSERT INTO Types VALUES(NULL, '%s');"), recset.m_TypeText);
- bAddedOne = true;
- if(recset.m_TypeText == "CF_UNICODETEXT")
- bFoundCF_UNICODETEXT = true;
- recset.MoveNext();
- }
- if(bAddedOne && bFoundCF_UNICODETEXT == false)
- {
- theApp.m_db.execDML(_T("INSERT INTO Types VALUES(NULL, 'CF_UNICODETEXT');"));
- }
- }
- catch(CDaoException* e)
- {
- TCHAR cError[100];
- e->GetErrorMessage(cError, 100);
- Log(StrF(_T("CDaoException - %s"), cError));
- ASSERT(FALSE);
- e->Delete();
- return false;
- }
- catch (CppSQLite3Exception& e)
- {
- Log(StrF(_T("SQLITE Exception %d - %s"), e.errorCode(), e.errorMessage()));
- ASSERT(FALSE);
- return false;
- }
- return true;
- }
- void CConvert::SetupProgressWnd()
- {
- CMainTable recset;
- recset.m_pDatabase = &theApp.m_AccessDatabase;
- recset.Open(AFX_DAO_USE_DEFAULT_TYPE, _T(""), 0);
- recset.MoveLast();
- m_Progress.Create(NULL, _T("Ditto Conversion"), TRUE);
- m_Progress.SetRange(0, recset.GetRecordCount());
- m_Progress.HideCancel();
- m_Progress.SetText(_T("Converting version 2 database to version 3 database.\n")
- _T(" Version 3 now uses sqlite (sqlite.org) as it's database\n")
- _T(" Version 3 now support Unicode, display international characters"));
- ::SetWindowPos(m_Progress.GetSafeHwnd(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_SHOWWINDOW);
- }
|