summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/m_db_int.h26
-rw-r--r--plugins/DbChecker/dbchecker_10.vcxproj2
-rw-r--r--plugins/DbChecker/dbchecker_10.vcxproj.filters6
-rw-r--r--plugins/DbChecker/res/version.rc41
-rw-r--r--plugins/DbChecker/src/cleaning.cpp11
-rw-r--r--plugins/DbChecker/src/dbchecker.h19
-rw-r--r--plugins/DbChecker/src/fileaccess.cpp17
-rw-r--r--plugins/DbChecker/src/main.cpp65
-rw-r--r--plugins/DbChecker/src/openerror.cpp8
-rw-r--r--plugins/DbChecker/src/progress.cpp8
-rw-r--r--plugins/DbChecker/src/selectdb.cpp55
-rw-r--r--plugins/DbChecker/src/version.h9
-rw-r--r--plugins/DbChecker/src/wizard.cpp10
-rw-r--r--plugins/DbChecker/src/worker.cpp12
14 files changed, 178 insertions, 111 deletions
diff --git a/include/m_db_int.h b/include/m_db_int.h
index aadc882b84..9047736ea8 100644
--- a/include/m_db_int.h
+++ b/include/m_db_int.h
@@ -28,6 +28,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <m_core.h>
#endif
+///////////////////////////////////////////////////////////////////////////////
+// basic database interface
+
interface MIDatabase
{
STDMETHOD_(void,SetCacheSafetyMode)(BOOL) PURE;
@@ -67,17 +70,25 @@ interface MIDatabase
};
///////////////////////////////////////////////////////////////////////////////
-// Each database plugin should register itself using this structure
+// basic database checker interface
struct DBCHeckCallback
{
int cbSize;
- MIDatabase* db;
DWORD spaceProcessed, spaceUsed;
void (*pfnAddLogMessage)(int type, const TCHAR* ptszFormat, ...);
};
+interface MIDatabaseChecker
+{
+ STDMETHOD_(BOOL,CheckDb)(DBCHeckCallback *callback, int phase, int firstTime) PURE;
+ STDMETHOD_(VOID,Destroy)() PURE;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Each database plugin should register itself using this structure
+
struct DATABASELINK
{
int cbSize;
@@ -102,10 +113,10 @@ struct DATABASELINK
etc.
Returns: 0 on success, non zero on failure
*/
- int (*grokHeader)(const TCHAR *profile, int * error);
+ int (*grokHeader)(const TCHAR *profile, int *error);
/*
- Affect: Tell the database to create all services/hooks that a 3.xx legecy database might support into link,
+ Affect: Tell the database to create all services/hooks that a 3.xx legacy database might support into link,
which is a PLUGINLINK structure
Returns: 0 on success, nonzero on failure
*/
@@ -119,11 +130,10 @@ struct DATABASELINK
int (*Unload)(MIDatabase*);
/*
- Affect: performs one of the database check steps.
- Returns: If there're no more steps to execute, returns ERROR_NO_MORE_ITEMS, or ERROR_SUCCESS, or the error code.
- Warning: this code is never executed in the main thread.
+ Returns a pointer to the database checker or NULL if a database doesn't support checking
+ Note: Unload() might be called even if Load(void) was never called, wasLoaded is set to 1 if Load(void) was ever called.
*/
- int (*CheckDb)(DBCHeckCallback *callback, int phase, int firstTime);
+ MIDatabaseChecker* (*CheckDB) (const TCHAR *profile, int *error);
};
///////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/DbChecker/dbchecker_10.vcxproj b/plugins/DbChecker/dbchecker_10.vcxproj
index e81afbb368..c1b2d4fbf9 100644
--- a/plugins/DbChecker/dbchecker_10.vcxproj
+++ b/plugins/DbChecker/dbchecker_10.vcxproj
@@ -188,7 +188,6 @@
<ClCompile Include="src\main.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
- <ClCompile Include="src\utf.cpp" />
<ClCompile Include="src\wizard.cpp" />
<ClCompile Include="src\worker.cpp" />
<ClCompile Include="src\cleaning.cpp" />
@@ -201,6 +200,7 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\dbchecker.h" />
+ <ClInclude Include="src\version.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\resource.rc" />
diff --git a/plugins/DbChecker/dbchecker_10.vcxproj.filters b/plugins/DbChecker/dbchecker_10.vcxproj.filters
index 0bf3b22913..e421e1eff8 100644
--- a/plugins/DbChecker/dbchecker_10.vcxproj.filters
+++ b/plugins/DbChecker/dbchecker_10.vcxproj.filters
@@ -21,9 +21,6 @@
<ClCompile Include="src\main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="src\utf.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="src\worker.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -56,6 +53,9 @@
<ClInclude Include="src\dbchecker.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="src\version.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="res\resource.rc">
diff --git a/plugins/DbChecker/res/version.rc b/plugins/DbChecker/res/version.rc
index 93ddb70b68..c20e13c88f 100644
--- a/plugins/DbChecker/res/version.rc
+++ b/plugins/DbChecker/res/version.rc
@@ -4,56 +4,41 @@
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED
-#include "..\src\resource.h"
+#include "afxres.h"
#include "..\src\version.h"
-#include "winres.h"
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page( 1252)
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#endif //_WIN32
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
VS_VERSION_INFO VERSIONINFO
FILEVERSION __FILEVERSION_STRING
PRODUCTVERSION __FILEVERSION_STRING
- FILEFLAGSMASK 0x3fL
+ FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
- FILEOS 0x40004L
- FILETYPE 0x2L
+ FILEOS 0x4L
+ FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
- BLOCK "040904b0"
+ BLOCK "000004b0"
BEGIN
VALUE "CompanyName", "Miranda NG project"
- VALUE "FileDescription", "Miranda NG Database Checker"
+ VALUE "FileDescription", __DESCRIPTION
VALUE "FileVersion", __FILEVERSION_STRING
- VALUE "InternalName", "dbchecker"
- VALUE "LegalCopyright", "Copyright (C) 2012, George Hazan"
- VALUE "LegalTrademarks", "Licensed under the Gnu General Public License V2 or any later version"
- VALUE "OriginalFilename", "dbchecker.dll"
- VALUE "ProductName", "Miranda NG Database Checker"
- VALUE "ProductVersion", __FILEVERSION_STRING
- END
+ VALUE "InternalName", __PLUGIN_NAME
+ VALUE "LegalCopyright", __COPYRIGHT
+ VALUE "OriginalFilename", __FILENAME
+ VALUE "ProductName", __PLUGIN_NAME
+ END
END
BLOCK "VarFileInfo"
BEGIN
- VALUE "Translation", 0x409, 1200
+ VALUE "Translation", 0x0, 1200
END
END
-
-#endif // AFX_RESOURCE_DLL
diff --git a/plugins/DbChecker/src/cleaning.cpp b/plugins/DbChecker/src/cleaning.cpp
index 4ecd2772fb..bd8f296afb 100644
--- a/plugins/DbChecker/src/cleaning.cpp
+++ b/plugins/DbChecker/src/cleaning.cpp
@@ -49,16 +49,7 @@ INT_PTR CALLBACK CleaningDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM
break;
case IDOK:
- if (!opts.hFile) {
- opts.hFile = CreateFile(opts.filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
- if (opts.hFile == INVALID_HANDLE_VALUE) {
- opts.hFile = NULL;
- opts.error = GetLastError();
- SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_OPENERROR, (LPARAM)OpenErrorDlgProc);
- break;
- }
- }
- SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_PROGRESS, (LPARAM)ProgressDlgProc);
+ OpenDatabase(hdlg, IDD_PROGRESS);
break;
}
break;
diff --git a/plugins/DbChecker/src/dbchecker.h b/plugins/DbChecker/src/dbchecker.h
index 39d64cb089..d333f51b02 100644
--- a/plugins/DbChecker/src/dbchecker.h
+++ b/plugins/DbChecker/src/dbchecker.h
@@ -33,8 +33,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <commctrl.h>
#include <time.h>
+#include <m_system.h>
+#include <m_system_cpp.h>
+#include <newpluginapi.h>
#include <m_database.h>
#include <m_db_int.h>
+#include <m_langpack.h>
#include "resource.h"
@@ -45,15 +49,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define WZN_PAGECHANGING (WM_USER+1221)
#define WZN_CANCELCLICKED (WM_USER+1222)
-struct DbToolOptions {
+struct DbToolOptions
+{
TCHAR filename[MAX_PATH];
TCHAR workingFilename[MAX_PATH];
TCHAR outputFilename[MAX_PATH];
TCHAR backupFilename[MAX_PATH];
- HANDLE hFile;
+ DATABASELINK *dblink;
+ MIDatabaseChecker* dbChecker;
HANDLE hOutFile;
- HANDLE hMap;
- BYTE *pFile;
DWORD error;
int bCheckOnly, bBackup, bAggressive;
int bEraseHistory, bMarkRead, bConvertUtf;
@@ -63,6 +67,7 @@ extern HINSTANCE hInst;
extern DbToolOptions opts;
extern HANDLE hEventRun, hEventAbort;
extern int errorCount;
+extern bool bServiceMode;
int DoMyControlProcessing(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam, INT_PTR *bReturn);
@@ -75,11 +80,7 @@ INT_PTR CALLBACK FinishedDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM
INT_PTR CALLBACK WelcomeDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK OpenErrorDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam);
-struct DBSignature {
- char name[15];
- BYTE eof;
-};
-static struct DBSignature dbSignature = {"Miranda ICQ DB", 0x1A};
+void OpenDatabase(HWND hdlg, INT iNextPage);
#define SIZEOF(X) (sizeof(X)/sizeof(X[0]))
diff --git a/plugins/DbChecker/src/fileaccess.cpp b/plugins/DbChecker/src/fileaccess.cpp
index f9b6e2d656..ef19a1244f 100644
--- a/plugins/DbChecker/src/fileaccess.cpp
+++ b/plugins/DbChecker/src/fileaccess.cpp
@@ -47,19 +47,10 @@ INT_PTR CALLBACK FileAccessDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARA
break;
case IDOK:
- if (opts.bCheckOnly) {
- if (!opts.hFile) {
- opts.hFile = CreateFile(opts.filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
- if (opts.hFile == INVALID_HANDLE_VALUE) {
- opts.hFile = NULL;
- opts.error = GetLastError();
- SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_OPENERROR, (LPARAM)OpenErrorDlgProc);
- break;
- }
- }
- SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_PROGRESS, (LPARAM)ProgressDlgProc);
- }
- else SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_CLEANING, (LPARAM)CleaningDlgProc);
+ if (opts.bCheckOnly)
+ OpenDatabase(hdlg, IDD_PROGRESS);
+ else
+ SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_CLEANING, (LPARAM)CleaningDlgProc);
break;
case IDC_CHECKONLY:
diff --git a/plugins/DbChecker/src/main.cpp b/plugins/DbChecker/src/main.cpp
index f59f66a13a..209bef8a70 100644
--- a/plugins/DbChecker/src/main.cpp
+++ b/plugins/DbChecker/src/main.cpp
@@ -18,9 +18,74 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "dbchecker.h"
+#include "version.h"
HINSTANCE hInst;
int hLangpack = 0;
+bool bServiceMode = false;
+
+static HANDLE hLaunchFunc;
DbToolOptions opts = {0};
+PLUGININFOEX pluginInfoEx =
+{
+ sizeof(pluginInfoEx),
+ __PLUGIN_NAME,
+ __VERSION_DWORD,
+ __DESCRIPTION,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ UNICODE_AWARE,
+ // {A0138FC6-4C52-4501-AF93-7D3E20BCAE5B}
+ { 0xa0138fc6, 0x4c52, 0x4501, { 0xaf, 0x93, 0x7d, 0x3e, 0x20, 0xbc, 0xae, 0x5b}}
+};
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
+{
+ hInst=hinstDLL;
+ return TRUE;
+}
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ return &pluginInfoEx;
+}
+
+// we implement service mode interface
+extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = {MIID_SERVICEMODE, MIID_LAST};
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+static INT_PTR ServiceMode(WPARAM, LPARAM)
+{
+ bServiceMode = true;
+ return SERVICE_MONOPOLY; // unload db and open a wizard
+}
+
+static int OnModulesLoaded(WPARAM, LPARAM)
+{
+ if (bServiceMode)
+ DialogBox(hInst, MAKEINTRESOURCE(IDD_WIZARD), NULL, WizardDlgProc);
+ return 0;
+}
+
+extern "C" __declspec(dllexport) int Load(void)
+{
+ mir_getLP(&pluginInfoEx);
+
+ HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
+
+ hLaunchFunc = CreateServiceFunction(MS_SERVICEMODE_LAUNCH, ServiceMode);
+ return 0;
+}
+
+extern "C" __declspec(dllexport) int Unload(void)
+{
+ DestroyServiceFunction(hLaunchFunc);
+ return 0;
+}
diff --git a/plugins/DbChecker/src/openerror.cpp b/plugins/DbChecker/src/openerror.cpp
index f86ba163cb..0ae07ed2c4 100644
--- a/plugins/DbChecker/src/openerror.cpp
+++ b/plugins/DbChecker/src/openerror.cpp
@@ -43,13 +43,7 @@ INT_PTR CALLBACK OpenErrorDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM
break;
case IDOK:
- opts.hFile = CreateFile(opts.filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
- if (opts.hFile == INVALID_HANDLE_VALUE) {
- opts.hFile = NULL;
- opts.error = GetLastError();
- SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_OPENERROR, (LPARAM)OpenErrorDlgProc);
- }
- else SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_FILEACCESS, (LPARAM)FileAccessDlgProc);
+ OpenDatabase(hdlg, IDD_FILEACCESS);
break;
}
break;
diff --git a/plugins/DbChecker/src/progress.cpp b/plugins/DbChecker/src/progress.cpp
index 5465fee8fa..4fe976f61f 100644
--- a/plugins/DbChecker/src/progress.cpp
+++ b/plugins/DbChecker/src/progress.cpp
@@ -55,14 +55,6 @@ void SetProgressBar(int perThou)
void ProcessingDone(void)
{
- if (opts.pFile) {
- UnmapViewOfFile(opts.pFile);
- opts.pFile = NULL;
- }
- if (opts.hMap) {
- CloseHandle(opts.hMap);
- opts.hMap = NULL;
- }
SendMessage(hdlgProgress, WM_PROCESSINGDONE, 0, 0);
}
diff --git a/plugins/DbChecker/src/selectdb.cpp b/plugins/DbChecker/src/selectdb.cpp
index 0b61d5c5b6..c1a6e75e90 100644
--- a/plugins/DbChecker/src/selectdb.cpp
+++ b/plugins/DbChecker/src/selectdb.cpp
@@ -18,6 +18,43 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "dbchecker.h"
+void OpenDatabase(HWND hdlg, INT iNextPage)
+{
+ TCHAR tszMsg[1024];
+
+ if (opts.dbChecker == NULL) {
+ DATABASELINK* dblink = FindDatabasePlugin(opts.filename);
+ if (dblink == NULL) {
+ mir_sntprintf(tszMsg, SIZEOF(tszMsg),
+ TranslateT("Database Checker cannot find a suitable database plugin to open '%s'."),
+ opts.filename);
+LBL_Error:
+ MessageBox(hdlg, tszMsg, TranslateT("Error"), MB_OK | MB_ICONERROR);
+ return;
+ }
+
+ if (dblink->CheckDB == NULL) {
+ mir_sntprintf(tszMsg, SIZEOF(tszMsg),
+ TranslateT("Database driver '%s' doesn't support checking."),
+ TranslateTS(dblink->szFullName));
+ goto LBL_Error;
+ }
+
+ int error = 0;
+ opts.dbChecker = opts.dblink->CheckDB(opts.filename, &error);
+ if (opts.dbChecker == NULL) {
+ opts.error = error;
+ SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_OPENERROR, (LPARAM)OpenErrorDlgProc);
+ return;
+ }
+ }
+
+ if (iNextPage == IDD_FILEACCESS)
+ SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_FILEACCESS, (LPARAM)FileAccessDlgProc);
+ else
+ SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_PROGRESS, (LPARAM)ProgressDlgProc);
+}
+
void GetProfileDirectory(TCHAR* szMirandaDir, TCHAR* szPath, int cbPath)
{
TCHAR szProfileDir[MAX_PATH], szExpandedProfileDir[MAX_PATH], szMirandaBootIni[MAX_PATH];
@@ -175,7 +212,7 @@ INT_PTR CALLBACK SelectDbDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM
FindAdd(hdlg, szMirandaProfiles, _T("[prf]\\"));
// search in current dir (as DBTOOL)
- FindAdd(hdlg, szMirandaPath, _T("[ . ]\\"));
+ FindAdd(hdlg, szMirandaPath, _T("[.]\\"));
// search in profile dir (using registry path + ini file)
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\miranda32.exe"), 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) {
@@ -194,9 +231,10 @@ INT_PTR CALLBACK SelectDbDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM
i = 0;
ListView_SetItemState(GetDlgItem(hdlg, IDC_DBLIST), i, LVIS_SELECTED, LVIS_SELECTED);
}
- if (opts.hFile != NULL && opts.hFile != INVALID_HANDLE_VALUE) {
- CloseHandle(opts.hFile);
- opts.hFile = NULL;
+
+ if (opts.dbChecker != NULL) {
+ opts.dbChecker->Destroy();
+ opts.dbChecker = NULL;
}
return TRUE;
@@ -251,16 +289,11 @@ INT_PTR CALLBACK SelectDbDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM
break;
case IDOK:
- opts.hFile = CreateFile(opts.filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
- if (opts.hFile == INVALID_HANDLE_VALUE) {
- opts.hFile = NULL;
- opts.error = GetLastError();
- SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_OPENERROR, (LPARAM)OpenErrorDlgProc);
- }
- else SendMessage(GetParent(hdlg), WZM_GOTOPAGE, IDD_FILEACCESS, (LPARAM)FileAccessDlgProc);
+ OpenDatabase(hdlg, IDD_FILEACCESS);
break;
}
break;
+
case WM_NOTIFY:
switch(((LPNMHDR)lParam)->idFrom) {
case IDC_DBLIST:
diff --git a/plugins/DbChecker/src/version.h b/plugins/DbChecker/src/version.h
index 58f9cf348c..690140005a 100644
--- a/plugins/DbChecker/src/version.h
+++ b/plugins/DbChecker/src/version.h
@@ -3,3 +3,12 @@
#define __FILEVERSION_STRING MIRANDA_VERSION_FILEVERSION
#define __VERSION_STRING MIRANDA_VERSION_STRING
#define __VERSION_DWORD MIRANDA_VERSION_DWORD
+
+#define __PLUGIN_NAME "Database Checker"
+#define __INTERNAL_NAME "dbchecker"
+#define __FILENAME "dbchecker.dll"
+#define __DESCRIPTION "Miranda NG Database Checker"
+#define __AUTHOR "George Hazan"
+#define __AUTHOREMAIL "ghazan@miranda-ng.org"
+#define __AUTHORWEB "http://www.miranda-ng.org/"
+#define __COPYRIGHT "© 2012, George Hazan"
diff --git a/plugins/DbChecker/src/wizard.cpp b/plugins/DbChecker/src/wizard.cpp
index dd10b614ac..835bb9d563 100644
--- a/plugins/DbChecker/src/wizard.cpp
+++ b/plugins/DbChecker/src/wizard.cpp
@@ -128,13 +128,19 @@ INT_PTR CALLBACK WizardDlgProc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lP
break;
case WM_DESTROY:
- if (opts.hFile)
- CloseHandle(opts.hFile);
+ if (opts.dbChecker) {
+ opts.dbChecker->Destroy();
+ opts.dbChecker = NULL;
+ }
+
if (opts.hOutFile)
CloseHandle(opts.hOutFile);
+
DestroyWindow(hdlgPage);
if (hBoldFont != NULL) DeleteObject(hBoldFont);
if (hEmfHeaderLogo != NULL) DeleteEnhMetaFile(hEmfHeaderLogo);
+ if (bServiceMode)
+ PostQuitMessage(0);
break;
}
return FALSE;
diff --git a/plugins/DbChecker/src/worker.cpp b/plugins/DbChecker/src/worker.cpp
index 834a40f308..9fa3e7aa2b 100644
--- a/plugins/DbChecker/src/worker.cpp
+++ b/plugins/DbChecker/src/worker.cpp
@@ -20,14 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "dbchecker.h"
void ProcessingDone(void);
-int WorkInitialChecks(int firstTime);
-int WorkModuleChain(int firstTime);
-int WorkUser(int firstTime);
-int WorkContactChain(int firstTime);
-int WorkAggressive(int firstTime);
-int WorkFinalTasks(int firstTime);
-
-DATABASELINK* dblink;
void __cdecl WorkerThread(void *unused)
{
@@ -35,14 +27,12 @@ void __cdecl WorkerThread(void *unused)
time_t ts = time(NULL);
AddToStatus(STATUS_MESSAGE, TranslateT("Database worker thread activated"));
- SetFilePointer(opts.hFile, 0, NULL, FILE_BEGIN);
DWORD sp = 0;
firstTime = 0;
DBCHeckCallback callback;
callback.cbSize = sizeof(callback);
- callback.db = NULL;
callback.spaceUsed = 1;
callback.spaceProcessed = 0;
callback.pfnAddLogMessage = AddToStatus;
@@ -58,7 +48,7 @@ void __cdecl WorkerThread(void *unused)
break;
}
- int ret = dblink->CheckDb(&callback, task, firstTime);
+ int ret = opts.dbChecker->CheckDb(&callback, task, firstTime);
firstTime = 0;
if (ret == ERROR_NO_MORE_ITEMS) {
AddToStatus(STATUS_MESSAGE, TranslateT("Elapsed time: %d sec"), time(NULL)-ts);