diff options
author | George Hazan <george.hazan@gmail.com> | 2016-09-14 18:01:49 +0000 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2016-09-14 18:01:49 +0000 |
commit | 7bdb598e26e7e98788933af43090d34027166969 (patch) | |
tree | 65c215c0693c86134e471f0746e9726b645b51bb /include | |
parent | 9f285a935709f4dda1065d6450739476168c43af (diff) |
second major wipeout of database services & structures:
- DBCONTACTENUMSETTINGS removed;
- all helpers moved to mir_core.dll
git-svn-id: http://svn.miranda-ng.org/main/trunk@17296 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'include')
-rw-r--r-- | include/delphi/m_api.pas | 1 | ||||
-rw-r--r-- | include/delphi/m_database.inc | 225 | ||||
-rw-r--r-- | include/delphi/m_db_int.inc | 264 | ||||
-rw-r--r-- | include/m_database.h | 198 | ||||
-rw-r--r-- | include/m_db_int.h | 6 |
5 files changed, 141 insertions, 553 deletions
diff --git a/include/delphi/m_api.pas b/include/delphi/m_api.pas index e7a5a82b91..c20865c82c 100644 --- a/include/delphi/m_api.pas +++ b/include/delphi/m_api.pas @@ -201,7 +201,6 @@ var {$include m_contacts.inc}
{$include m_crypto.inc}
{$include m_database.inc}
- {$include m_db_int.inc}
{$include m_descbutton.inc}
{$include m_email.inc}
{$include m_extraicons.inc}
diff --git a/include/delphi/m_database.inc b/include/delphi/m_database.inc index b11c097a1e..8dd608b9c4 100644 --- a/include/delphi/m_database.inc +++ b/include/delphi/m_database.inc @@ -67,8 +67,7 @@ modules are free to define their own, beginning at 2000 DBEVENTINFO.timestamp is in GMT, as returned by time(). There are services
db/time/x below with useful stuff for dealing with it.
}
-function db_event_add(hContact:TMCONTACT; dbei:PDBEVENTINFO):TMEVENT; stdcall;
- external CoreDLL name 'db_event_add';
+function db_event_add(hContact:TMCONTACT; dbei:PDBEVENTINFO):TMEVENT; stdcall; external CoreDLL;
{
Gets the number of events in the chain belonging to a contact in the database.
@@ -76,8 +75,7 @@ Returns the number of events in the chain owned by hContact or -1 if hContact is invalid. They can be retrieved using the db_event_first/last() services.
Returns 0 for Subcontacts (use db_event_last to recognize empty history)
}
-function db_event_count(hContact:TMCONTACT):int; stdcall;
- external CoreDLL name 'db_event_count';
+function db_event_count(hContact:TMCONTACT):int; stdcall; external CoreDLL;
{
Removes a single event from the database
@@ -85,16 +83,14 @@ hDbEvent should have been returned by db_event_add/first/last/next/prev() Returns 0 on success, or nonzero if hDbEvent was invalid
Triggers a db/event/deleted event just *before* the event is deleted
}
-function db_event_delete(hContact:TMCONTACT; hDbEvent:TMEVENT):int; stdcall;
- external CoreDLL name 'db_event_delete';
+function db_event_delete(hContact:TMCONTACT; hDbEvent:TMEVENT):int; stdcall; external CoreDLL;
{
Retrieves a handle to the first event in the chain for hContact
Returns the handle, or NULL if hContact is invalid or has no events
Events in a chain are sorted chronologically automatically
}
-function db_event_first(hContact:TMCONTACT):TMEVENT; stdcall;
- external CoreDLL name 'db_event_first';
+function db_event_first(hContact:TMCONTACT):TMEVENT; stdcall; external CoreDLL;
{
Retrieves a handle to the first unread event in the chain for hContact
@@ -107,8 +103,7 @@ should be checked individually with db_event_next() and db_event_get() This service is designed for startup, reloading all the events that remained
unread from last time
}
-function db_event_firstUnread(hContact:TMCONTACT):TMEVENT; stdcall;
- external CoreDLL name 'db_event_firstUnread';
+function db_event_firstUnread(hContact:TMCONTACT):TMEVENT; stdcall; external CoreDLL;
{
Retrieves all the information stored in hDbEvent
@@ -124,16 +119,14 @@ and then dbe.cbBlob is set to the required size of data to go in dbe.pBlob On return, dbe.szModule is a pointer to the database module's own internal list
of modules. Look but don't touch.
}
-function db_event_get(hDbEvent:TMEVENT; dbei:PDBEVENTINFO):int; stdcall;
- external CoreDLL name 'db_event_get';
+function db_event_get(hDbEvent:TMEVENT; dbei:PDBEVENTINFO):int; stdcall; external CoreDLL;
{
Retrieves the space in bytes required to store the blob in hDbEvent
hDbEvent should have been returned by db_event_add/first/last/next/prev()
Returns the space required in bytes, or -1 if hDbEvent is invalid
}
-function db_event_getBlobSize(hDbEvent:TMEVENT):int; stdcall;
- external CoreDLL name 'db_event_getBlobSize';
+function db_event_getBlobSize(hDbEvent:TMEVENT):int; stdcall; external CoreDLL;
{
Retrieves a handle to the contact that owns hDbEvent.
@@ -144,16 +137,14 @@ success This service is exceptionally slow. Use only when you have no other choice at
all.
}
-function db_event_getContact(hDbEvent:TMEVENT):TMCONTACT; stdcall;
- external CoreDLL name 'db_event_getContact';
+function db_event_getContact(hDbEvent:TMEVENT):TMCONTACT; stdcall; external CoreDLL;
{
Retrieves a handle to the last event in the chain for hContact
Returns the handle, or NULL if hContact is invalid or has no events
Events in a chain are sorted chronologically automatically
}
-function db_event_last(hContact:TMCONTACT):TMEVENT; stdcall;
- external CoreDLL name 'db_event_last';
+function db_event_last(hContact:TMCONTACT):TMEVENT; stdcall; external CoreDLL;
{
Changes the flags for an event to mark it as read.
@@ -163,27 +154,23 @@ is invalid. This is the one database write operation that does not trigger an event.
Modules should not save flags states for any length of time.
}
-function db_event_markRead(hContact:TMCONTACT; hDbEvent:TMEVENT):int; stdcall;
- external CoreDLL name 'db_event_markRead';
+function db_event_markRead(hContact:TMCONTACT; hDbEvent:TMEVENT):int; stdcall; external CoreDLL;
{
Retrieves a handle to the next event in a chain after hDbEvent
Returns the handle, or NULL if hDbEvent is invalid or is the last event
Events in a chain are sorted chronologically automatically
}
-function db_event_next(hContact:TMCONTACT; hDbEvent:TMEVENT):THANDLE; stdcall;
- external CoreDLL name 'db_event_next';
+function db_event_next(hContact:TMCONTACT; hDbEvent:TMEVENT):THANDLE; stdcall; external CoreDLL;
{
Retrieves a handle to the previous event in a chain before hDbEvent
Returns the handle, or NULL if hDbEvent is invalid or is the first event
Events in a chain are sorted chronologically automatically
}
-function db_event_prev(hContact:TMCONTACT; hDbEvent:TMEVENT):THANDLE; stdcall;
- external CoreDLL name 'db_event_prev';
+function db_event_prev(hContact:TMCONTACT; hDbEvent:TMEVENT):THANDLE; stdcall; external CoreDLL;
-function db_free(dbv:PDBVARIANT):int_ptr; stdcall;
- external CoreDLL name 'db_free';
+function db_free(dbv:PDBVARIANT):int_ptr; stdcall; external CoreDLL;
(******************************************************************************
* DATABASE CONTACTS
@@ -196,8 +183,7 @@ You can specify szProto to find only its contacts Returns a handle to the first contact in the db on success, or NULL if there
are no contacts in the db.
}
-function db_find_first(const szModule:PAnsiChar=nil):TMCONTACT; stdcall;
- external CoreDLL name 'db_find_first';
+function db_find_first(const szModule:PAnsiChar=nil):TMCONTACT; stdcall; external CoreDLL;
{
Gets the handle of the next contact after hContact in the database. This handle
@@ -206,57 +192,45 @@ You can specify szProto to find only its contacts Returns a handle to the contact after hContact in the db on success or NULL if
hContact was the last contact in the db or hContact was invalid.
}
-function db_find_next(hContact:TMCONTACT; const szModule:PAnsiChar=nil):TMCONTACT; stdcall;
- external CoreDLL name 'db_find_next';
+function db_find_next(hContact:TMCONTACT; const szModule:PAnsiChar=nil):TMCONTACT; stdcall; external CoreDLL;
(******************************************************************************
* DATABASE SETTINGS
*)
-function db_get(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; dbv:PDBVARIANT):int_ptr; stdcall;
- external CoreDLL name 'db_get';
-function db_get_b(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; errorValue:int):int; stdcall;
- external CoreDLL name 'db_get_b';
-function db_get_w(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; errorValue:int):int; stdcall;
- external CoreDLL name 'db_get_w';
-function db_get_dw(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; errorValue:dword):dword; stdcall;
- external CoreDLL name 'db_get_dw';
-function db_get_s(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; dbv:PDBVARIANT; const nType:int=DBVT_ASCIIZ):int_ptr; stdcall;
- external CoreDLL name 'db_get_s';
-function db_get_sa(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar):PAnsiChar; stdcall;
- external CoreDLL name 'db_get_sa';
-function db_get_wsa(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar):PWideChar; stdcall;
- external CoreDLL name 'db_get_wsa';
-
-function db_get_static(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; szDest:PAnsiChar; destLen:int):int; stdcall;
- external CoreDLL name 'db_get_static';
-function db_get_static_utf(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; szDest:PAnsiChar; destLen:int):int; stdcall;
- external CoreDLL name 'db_get_static_utf';
-function db_get_wstatic(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; szDest:PWideChar; destLen:int):int; stdcall;
- external CoreDLL name 'db_get_wstatic';
-
-function db_set(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; dbv:PDBVARIANT):int_ptr; stdcall;
- external CoreDLL name 'db_set';
-function db_set_b(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; val:byte):int_ptr; stdcall;
- external CoreDLL name 'db_set_b';
-function db_set_w(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; val:word):int_ptr; stdcall;
- external CoreDLL name 'db_set_w';
-function db_set_dw(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; val:dword):int_ptr; stdcall;
- external CoreDLL name 'db_set_dw';
-function db_set_s(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; const val:PAnsiChar):int_ptr; stdcall;
- external CoreDLL name 'db_set_s';
-function db_set_ws(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; const val:PWideChar):int_ptr; stdcall;
- external CoreDLL name 'db_set_ws';
-function db_set_utf(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; const val:PAnsiChar):int_ptr; stdcall;
- external CoreDLL name 'db_set_utf';
-function db_set_blob(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; val:pointer; len:uint):int_ptr; stdcall;
- external CoreDLL name 'db_set_blob';
-
-function db_unset(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar):int_ptr; stdcall;
- external CoreDLL name 'db_unset';
-
-function db_set_resident(const szModule:PAnsiChar; const szSetting:PAnsiChar; bEnable:int):int; stdcall;
- external CoreDLL name 'db_set_resident';
+function db_get(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; dbv:PDBVARIANT):int_ptr; stdcall; external CoreDLL;
+function db_get_b(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; errorValue:int):int; stdcall; external CoreDLL;
+function db_get_w(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; errorValue:int):int; stdcall; external CoreDLL;
+function db_get_dw(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; errorValue:dword):dword; stdcall; external CoreDLL;
+function db_get_s(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; dbv:PDBVARIANT; const nType:int=DBVT_ASCIIZ):int_ptr; stdcall; external CoreDLL;
+function db_get_sa(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar):PAnsiChar; stdcall; external CoreDLL;
+function db_get_wsa(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar):PWideChar; stdcall; external CoreDLL;
+
+function db_get_static(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; szDest:PAnsiChar; destLen:int):int; stdcall; external CoreDLL;
+function db_get_static_utf(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; szDest:PAnsiChar; destLen:int):int; stdcall; external CoreDLL;
+function db_get_wstatic(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; szDest:PWideChar; destLen:int):int; stdcall; external CoreDLL;
+
+function db_set(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; dbv:PDBVARIANT):int_ptr; stdcall; external CoreDLL;
+function db_set_b(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; val:byte):int_ptr; stdcall; external CoreDLL;
+function db_set_w(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; val:word):int_ptr; stdcall; external CoreDLL;
+function db_set_dw(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; val:dword):int_ptr; stdcall; external CoreDLL;
+function db_set_s(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; const val:PAnsiChar):int_ptr; stdcall; external CoreDLL;
+function db_set_ws(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; const val:PWideChar):int_ptr; stdcall; external CoreDLL;
+function db_set_utf(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; const val:PAnsiChar):int_ptr; stdcall; external CoreDLL;
+function db_set_blob(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar; val:pointer; len:uint):int_ptr; stdcall; external CoreDLL;
+
+function db_unset(hContact:TMCONTACT; const szModule:PAnsiChar; const szSetting:PAnsiChar):int_ptr; stdcall; external CoreDLL;
+
+function db_set_resident(const szModule:PAnsiChar; const szSetting:PAnsiChar; bEnable:int):int; stdcall; external CoreDLL;
+
+///////////////////////////////////////////////////////////////////////////////
+
+function db_add_contact() : TMCONTACT; stdcall; external CoreDLL;
+function db_delete_contact(hContact:TMCONTACT) : int; stdcall; external CoreDLL;
+
+function db_is_contact(hContact:TMCONTACT) : int; stdcall; external CoreDLL;
+
+function db_get_contact_count() : int; stdcall; external CoreDLL;
///////////////////////////////////////////////////////////////////////////////
@@ -299,62 +273,7 @@ type type
TDBSETTINGENUMPROC = function(const szSetting: PAnsiChar; lParam: LPARAM): int; cdecl;
- PDBCONTACTENUMSETTINGS = ^TDBCONTACTENUMSETTINGS;
- TDBCONTACTENUMSETTINGS = record
- pfnEnumProc: TDBSETTINGENUMPROC; // function pointer to call to start the
- // enum via MS_DB_CONTACT_ENUMSETTINGS
- lParam : LPARAM; // passed to the above function
- szModule : PAnsiChar; // name of the module to get settings for
- ofsSettings: dword; // not used by us
- end;
-
-const
- MS_DB_CONTACT_ENUMSETTINGS:PAnsiChar = 'DB/Contact/EnumSettings';
-
- {
- wParam : 0
- lParam : 0
- affect : none
- returns: Returns the number of contacts in the database for the loaded profile
- not including the profile user, see notes.
- notes : the contacts in the database can be read with FindFirst/FindNext
- }
- MS_DB_CONTACT_GETCOUNT:PAnsiChar = 'DB/Contact/GetCount';
-
- {
- wParam : Handle of a contact to delete
- lParam : 0
- affect : the user by the given handle is deleted from the database, see notes
- returns: Returns 0 on success or nonzero if the handle was invalid
- notes : this triggers DB/Contact/Deleted BEFORE it actually deletes the contact
- all events are also deleted -- other modules may end up with invalid
- handles because of this, which they should be prepared for.
- }
- MS_DB_CONTACT_DELETE:PAnsiChar = 'DB/Contact/Delete';
-
- {
- wParam : 0
- lParam : 0
- affects: creates a new contact in the database, they have no settings,
- settings must be added with MS_DB_CONTACT_WRITESETTING or
- database helper functions for writing, see notes
- returns: A handle to a new contact or NULL(0) on failure.
- notes : triggers the ME_DB_CONTACT_ADDED event just before the service returns
- }
- MS_DB_CONTACT_ADD:PAnsiChar = 'DB/Contact/Add';
-
-
- {
- wParam : (HANDLE) hContact
- lParam : 0
- affects: Checks the given handle within the database for valid information, for
- a proper internal header.
- returns: Returns 1 if the contact handle is valid, 0 if it is not
- notes : Due to the nature of multiple threading a contact handle can be deleted
- soon after this service has returned a handle as valid, however it will never point
- to another contact.
- }
- MS_DB_CONTACT_IS:PAnsiChar = 'DB/Contact/Is';
+function db_enum_settings(hContact:TMCONTACT; pFunc:TDBSETTINGENUMPROC; szModule:PAnsiChar; param:pointer) : int; stdcall; external CoreDll;
//************************** Event *********************************
@@ -398,51 +317,13 @@ function DbEvent_GetTextW(dbei:PDBEVENTINFO; codepage:int) : PWideChar; stdcall; function DbEvent_GetIcon(dbei:PDBEVENTINFO; flags:int) : HICON; stdcall; external AppDll;
-//*************************** Random *******************************
-
- {
- wParam : newSetting (BOOLEAN)
- lParam : 0
- Affect : Miranda's database is normally protected against corruption by
- aggressively flushing data to the disk on writes, if you're doing
- alot of writes e.g. an import plugin, it can sometimes be desirable
- to switch this feature off to speed up the process, if you do switch
- it off, you must remember that crashes are far more likely to be
- catastrophic, so switch it back on at the earliest possible opportunity.
- if you're doing a lot of setting writes, the flush is already delayed
- so you need not use this service for that purpose, see notes.
- Returns: Always returns 0 (successful)
- notes : This is set to true initally
- }
-const
- MS_DB_SETSAFETYMODE:PAnsiChar = 'DB/SetSafetyMode';
-
//*************************** Modules ******************************
- {
- wParam : (caller defined data) will be passed to lParam of the call back
- lParam : function pointer to TDBMODULEENUMPROC
- Affects: Enumerates the names of all modules that have stored or
- requested information from the database,
- the modules are returned in no real order --
- Writing to the database while module names are being enumerated will cause
- unpredictable results in the enumeration, but the write will work.
-
- the enumeration will stop if the callback returns a non zero value.
-
- Returns: the last return value from the enumeration call back.
- Notes : This service is only useful for debugging or EnumSettings
- version: The service registered to enumerate all modules that have touched
- the database module uses wParam as the lParam cookie value and the lParam
- value given here is the function pointer -- this is not safe
- to use before v0.1.2.1 because I don't know if this was done in v0.1.2.1-
- }
-type
- TDBMODULEENUMPROC = function(const szModule: PAnsiChar; ofsModuleName: dword; lParam: LPARAM): int; cdecl;
-const
- MS_DB_MODULES_ENUM:PAnsiChar = 'DB/Modules/Enum';
+function db_delete_module(hContact:TMCONTACT; szModuleName:PAnsiChar) : int; stdcall; external CoreDll;
+
+//************************** RANDOM ********************************
-function DbModule_Delete(hContact:TMCONTACT; szModuleName:PAnsiChar) : int; stdcall; external AppDll;
+function db_set_safety_mode(bMode:int) : int; stdcall; external CoreDll;
//************************** EVENTS ********************************
diff --git a/include/delphi/m_db_int.inc b/include/delphi/m_db_int.inc deleted file mode 100644 index 9511534cae..0000000000 --- a/include/delphi/m_db_int.inc +++ /dev/null @@ -1,264 +0,0 @@ -{
-
-Miranda NG: the free IM client for Microsoft* Windows*
-
-Copyright 2012 Miranda NG project,
-all portions of this codebase are copyrighted to the people
-listed in contributors.txt.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-}
-
-{$IFNDEF M_DB_INT}
-{$DEFINE M_DB_INT}
-
-///////////////////////////////////////////////////////////////////////////////
-// basic database interface
-type
- TDBCachedGlobalValue = record
- name : PAnsiChar;
- value:TDBVARIANT;
- end;
-type
- PDBCachedContactValue = ^TDBCachedContactValue;
- TDBCachedContactValue = record
- name:PAnsiChar;
- value:TDBVARIANT;
- next: PDBCachedContactValue;
- end;
-
- PDBCachedContact = ^TDBCachedContact;
- TDBCachedContact = record
- contactID:TMCONTACT;
- szProto:PAnsiChar;
- first :PDBCachedContactValue;
- last :PDBCachedContactValue;
- // metacontacts
- nSubs:int; // == -1 -> not a metacontact
- pSubs:PMCONTACT;
- parentID:TMCONTACT; // == 0 -> not a subcontact
- nDefault:int // default sub number
- end;
-
- PMIDatabaseCache = ^MIDatabaseCache;
- MIDatabaseCache = interface
- function AddContactToCache(contactID:TMCONTACT):PDBCachedContact; stdcall;
- function GetCachedContact(contactID:TMCONTACT):PDBCachedContact; stdcall;
- function GetFirstContact():PDBCachedContact; stdcall;
- function GetNextContact(contactID:TMCONTACT):PDBCachedContact; stdcall;
- procedure FreeCachedContact(contactID:TMCONTACT); stdcall;
-
- function InsertCachedSetting(szName:PAnsiChar; param:int):PAnsiChar; stdcall;
- function GetCachedSetting(szModuleName:PAnsiChar; szSettingName:PAnsiChar; param1:int; param2:int):PAnsiChar; stdcall;
- procedure SetCachedVariant(s:PDBVARIANT; d:PDBVARIANT); stdcall;
- function GetCachedValuePtr(contactID:TMCONTACT; szSetting:PAnsiChar; bAllocate:int):PDBVARIANT; stdcall;
- end;
-
-type
- PMIDatabase = ^TMIDatabase;
- TMIDatabase = record
- m_cache: PMIDatabaseCache;
-
- IsRelational:function():long; stdcall;
- SetCacheSafetyMode:procedure(val:bool); stdcall;
-
- GetContactCount:function():long; stdcall;
- FindFirstContact:function(const szProto:PAnsiChar = NIL):TMCONTACT; stdcall;
- FindNextContact:function(contactID:TMCONTACT; const szProto:PAnsiChar = NIL):TMCONTACT; stdcall;
-
- DeleteContact:function(contactID:TMCONTACT):long; stdcall;
- AddContact:function():TMCONTACT; stdcall;
- IsDbContact:function(contactID:TMCONTACT):bool; stdcall;
- GetContactSize:function():long; stdcall;
-
- GetEventCount:function(contactID:TMCONTACT):long; stdcall;
- AddEvent:function(contactID:TMCONTACT; dbe:PDBEVENTINFO):TMEVENT; stdcall;
- DeleteEvent:function(contactID:TMCONTACT; hDbEvent:TMEVENT):bool; stdcall;
- GetBlobSize:function(hDbEvent:TMEVENT):long; stdcall;
- GetEvent:function(hDbEvent:TMEVENT; dbe:PDBEVENTINFO):bool; stdcall;
- MarkEventRead:function(contactID:TMCONTACT; hDbEvent:TMEVENT):bool; stdcall;
- GetEventContact:function(hDbEvent:TMEVENT):TMCONTACT; stdcall;
- FindFirstEvent:function(contactID:TMCONTACT):TMEVENT; stdcall;
- FindFirstUnreadEvent:function(contactID:TMCONTACT):TMEVENT; stdcall;
- FindLastEvent:function(contactID:TMCONTACT):TMEVENT; stdcall;
- FindNextEvent:function(contactID:TMCONTACT;hDbEvent:TMEVENT):TMEVENT; stdcall;
- FindPrevEvent:function(contactID:TMCONTACT;hDbEvent:TMEVENT):TMEVENT; stdcall;
-
- EnumModuleNames:function(pFunc:TDBMODULEENUMPROC; pParam:pointer):bool; stdcall;
-
- GetContactSetting:function(contactID:TMCONTACT; szModule, szSetting:PAnsiChar; dbv:PDBVARIANT):bool; stdcall;
- GetContactSettingStr:function(contactID:TMCONTACT; szModule, szSetting:PAnsiChar; dbv:PDBVARIANT):bool; stdcall;
- GetContactSettingStatic:function(contactID:TMCONTACT; szModule, szSetting:PAnsiChar; dbv:PDBVARIANT):bool; stdcall;
- FreeVariant:function(dbv:PDBVARIANT):bool; stdcall;
- WriteContactSetting:function(contactID:TMCONTACT; dbcws:PDBCONTACTWRITESETTING):bool; stdcall;
- DeleteContactSetting:function(contactID:TMCONTACT; szModule, szSetting:PAnsiChar):bool; stdcall;
- EnumContactSettings:function(contactID:TMCONTACT; dbces:PDBCONTACTENUMSETTINGS):bool; stdcall;
- SetSettingResident:function(bIsResident:bool; const pszSettingName:PAnsiChar):bool; stdcall;
- EnumResidentSettings:function(pFunc:TDBMODULEENUMPROC; pParam:pointer):bool; stdcall;
- IsSettingEncrypted:function(szModule:PAnsiChar; szSetting:PAnsiChar):bool; stdcall;
-
- MetaDetouchSub:function(contact:PDBCachedContact; nSub:int):bool; stdcall;
- MetaSetDefault:function(contact:PDBCachedContact):bool; stdcall;
- MetaMergeHistory:function(ccMeta:PDBCachedContact; ccSub:PDBCachedContact):bool; stdcall;
- MetaSplitHistory:function(ccMeta:PDBCachedContact; ccSub:PDBCachedContact):bool; stdcall;
- end;
-
-///////////////////////////////////////////////////////////////////////////////
-// basic database checker interface
-
-const
- STATUS_MESSAGE = 0;
- STATUS_WARNING = 1;
- STATUS_ERROR = 2;
- STATUS_FATAL = 3;
- STATUS_SUCCESS = 4;
-
-type
- pDBCHeckCallback = ^tDBCHeckCallback;
- tDBCHeckCallback = record
- cbSize:int;
- spaceProcessed,
- spaceUsed: dword;
- hOutFile:THANDLE;
- bCheckOnly,
- bBackup,
- bAggressive,
- bEraseHistory,
- bMarkRead,
- bConvertUtf:int;
- pfnAddLogMessage: procedure(_type:int; const szFormat:PWideChar{;...}); cdecl;
- end;
-
-type
- PMIDatabaseChecker = ^MIDatabaseChecker;
- MIDatabaseChecker = interface
- function Start(callback:PDBCHeckCallback):bool;stdcall;
- function CheckDb(phase:int; firstTime:int):bool; stdcall;
- procedure Destroy(); stdcall;
- end;
-
-///////////////////////////////////////////////////////////////////////////////
-// Each database plugin should register itself using this structure
-
-
-{
- Codes for DATABASELINK functions
-}
-const
-// grokHeader() error codes
- EGROKPRF_NOERROR = 0;
- EGROKPRF_CANTREAD = 1; // can't open the profile for reading
- EGROKPRF_UNKHEADER = 2; // header not supported, not a supported profile
- EGROKPRF_VERNEWER = 3; // header correct, version in profile newer than reader/writer
- EGROKPRF_DAMAGED = 4; // header/version fine, other internal data missing, damaged.
- EGROKPRF_OBSOLETE = 5; // obsolete database version detected, requiring conversion
-
-// makeDatabase() error codes
- EMKPRF_CREATEFAILED = 1; // for some reason CreateFile() didnt like something
-
-type
- PDATABASELINK = ^TDATABASELINK;
- TDATABASELINK = record
- cbSize : int;
- szShortName:PAnsiChar; // uniqie short database name
- szFullName:TChar; // in English, auto-translated by the core
- {
- profile: pointer to a string which contains full path + name
- Affect: The database plugin should create the profile, the filepath will not exist at
- the time of this call, profile will be C:\..\<name>.dat
- Returns: 0 on success, non zero on failure - error contains extended error information, see EMKPRF_
- }
- makeDatabase : function (const profile:TChar):int; cdecl;
- {
- profile: [in] a null terminated string to file path of selected profile
- error: [in/out] pointer to an int to set with error if any
- Affect: Ask the database plugin if it supports the given profile, if it does it will
- return 0, if it doesnt return 1, with the error set in error -- EGROKPRF_ can be valid error
- condition, most common error would be [EGROKPRF_UNKHEADER]
- Note: Just because 1 is returned, doesnt mean the profile is not supported, the profile might be damaged
- etc.
- Returns: 0 on success, non zero on failure
- }
- grokHeader : function (const profile:TChar):int; cdecl;
- {
- Affect: Tell the database to create all services/hooks that a 3.xx legacy database might support into link,
- which is a DATABASELINK structure
- Returns: 0 on success, nonzero on failure
- }
- Load : function (const profile:TChar; bReadOnly:bool):PMIDatabase; cdecl;
- {
- Affect: The database plugin should shutdown, unloading things from the core and freeing internal structures
- Returns: 0 on success, nonzero on failure
- Note: Unload() might be called even if Load() was never called, wasLoaded is set to 1 if Load() was ever called.
- }
- Unload : function (db:PMIDatabase):int; cdecl;
- {
- Returns a pointer to the database checker or NULL if a database doesn't support checking
- When you don't need this object aanymore, call its Destroy() method
- }
- CheckDB : function (const profile:PWideChar; error:pint):PMIDatabaseChecker;cdecl;
- end;
-
-///////////////////////////////////////////////////////////////////////////////
-// cache access functions
-
-function db_get_contact(hContact:TMCONTACT):PDBCachedContact; stdcall;
- external CoreDLL name 'db_get_contact';
-
-///////////////////////////////////////////////////////////////////////////////
-// Database list's services
-
-const
-{
- MS_DB_REGISTER_PLUGIN : registers a database plugin
- wParam : 0 (unused)
- lParam : DATABASELINK* = database link description
-}
- MS_DB_REGISTER_PLUGIN:PAnsiChar = 'DB/RegisterPlugin';
-
-{
- MS_DB_FIND_PLUGIN : looks for a database plugin suitable to open this file
- wParam : 0 (unused)
- lParam : const TCHAR* = name of the database file
- returns DATABASELINK* of the required plugin or NULL on error
-}
- MS_DB_FIND_PLUGIN:PAnsiChar = 'DB/FindPlugin';
-
-{
- MS_DB_GET_CURRENT : returns the database pointer for the current profile
- wParam : 0 (unused)
- lParam : 0 (unused)
- returns MIDatabase* of the current profile or NULL on error
-}
- MS_DB_GET_CURRENT:PAnsiChar = 'DB/GetCurrentDb';
-
-{
- MS_DB_INIT_INSTANCE : initializes a database instance
- wParam : 0 (unused)
- lParam : MIDatabase* = pointer to a database instance
- returns 0
-}
- MS_DB_INIT_INSTANCE:PAnsiChar = 'DB/InitDbInstance';
-
-
-{
- MS_DB_DESTROY_INSTANCE : destroys a database instance
- wParam : 0 (unused)
- lParam : MIDatabase* = pointer to a database instance
- returns 0
-}
- MS_DB_DESTROY_INSTANCE:PAnsiChar = 'DB/DestroyDbInstance';
-
-{$ENDIF}
diff --git a/include/m_database.h b/include/m_database.h index 999b451d54..5a2b678032 100644 --- a/include/m_database.h +++ b/include/m_database.h @@ -43,6 +43,91 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /////////////////////////////////////////////////////////////////////////////////////////
// database functions
+// Switches safety settings on or off
+// newSetting is TRUE initially.
+// Miranda's database is normally protected against corruption by agressively
+// flushing data to the disk on writes. If you're doing a lot of writes (eg in
+// an import plugin) it can sometimes be desirable to switch this feature off to
+// speed up the process. If you do switch it off, you must remember that crashes
+// are far more likely to be catastrophic, so switch it back on at the earliest
+// possible opportunity.
+// Note that if you're doing a lot of setting writes, the flush is already delayed
+// so you need not use this service for that purpose.
+
+EXTERN_C MIR_CORE_DLL(void) db_set_safety_mode(BOOL bNewMode);
+
+// Gets the number of contacts in the database, which does not count the user
+// Returns the number of contacts. They can be retrieved using contact/findfirst and contact/findnext
+
+EXTERN_C MIR_CORE_DLL(int) db_get_contact_count(void);
+
+// Removes all settings for the specified module.
+// hContact is 0 for global settings or matches the concrete contact
+
+EXTERN_C MIR_CORE_DLL(int) db_delete_module(MCONTACT hContact, const char *szModuleName);
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// contact functions
+
+// Adds a new contact to the database. New contacts initially have no settings
+// whatsoever, they must all be added with db/contacts/writesetting.
+// Returns a handle to the newly created contact on success, or NULL otherwise.
+// Triggers a db/contact/added event just before it returns.
+
+EXTERN_C MIR_CORE_DLL(MCONTACT) db_add_contact(void);
+
+// Deletes the contact hContact from the database and all events and settings associated with it.
+// Returns 0 on success or nonzero if hContact was invalid
+// Please don't try to delete the user contact (hContact = NULL)
+// Triggers a db/contact/deleted event just *before* it removes anything
+// Because all events are deleted, lots of people may end up with invalid event
+// handles from this operation, which they should be prepared for.
+
+EXTERN_C MIR_CORE_DLL(int) db_delete_contact(MCONTACT hContact);
+
+// Checks if a given value is a valid contact handle, note that due
+// to the nature of multiple threading, a valid contact can still become
+// invalid after a call to this service.
+// Returns 1 if the contact is a contact, or 0 if the contact is not valid.
+
+EXTERN_C MIR_CORE_DLL(int) db_is_contact(MCONTACT hContact);
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// enumerators
+
+// Enumerates the names of all modules that have stored or requested information from the database.
+// Returns the value returned by the last call to dbmep
+// This service is only really useful for debugging, in conjunction with db/contact/enumsettings
+// dbmep should return 0 to continue enumeration, or nonzero to stop.
+// ofsModuleName is the offset of the module name from the start of the profile
+// database, and is only useful for really heavyweight debugging
+// Modules names will be enumerated in no particular order
+// Writing to the database while module names are being enumerated will cause
+// unpredictable results in the enumeration, but the write will work.
+// szModuleName is only guaranteed to be valid for the duration of the callback.
+// If you want to keep it for longer you must allocation your own storage.
+
+typedef int(*DBMODULEENUMPROC)(const char *szModuleName, DWORD ofsModuleName, LPARAM lParam);
+
+EXTERN_C MIR_CORE_DLL(int) db_enum_modules(DBMODULEENUMPROC dbmep, const void *param = NULL);
+
+// Lists all resident settings
+
+EXTERN_C MIR_CORE_DLL(int) db_enum_residents(DBMODULEENUMPROC pFunc, const void *param = NULL);
+
+// Lists all the settings a specific modules has stored in the database for a specific contact.
+// Returns the return value of the last call to pfnEnumProc, or -1 if there are
+// no settings for that module/contact pair
+// Writing to or deleting from the database while enumerating will have
+// unpredictable results for the enumeration, but the write will succeed.
+// Use db/modules/enum to get a complete list of module names
+// szSetting is only guaranteed to be valid for the duration of the callback. If
+// you want to keep it for longer you must allocation your own storage.
+
+typedef int (*DBSETTINGENUMPROC)(const char *szSetting, LPARAM lParam);
+
+EXTERN_C MIR_CORE_DLL(int) db_enum_settings(MCONTACT hContact, DBSETTINGENUMPROC pfnEnumProc, const char *szModule, const void *param = NULL);
+
/////////////////////////////////////////////////////////////////////////////////////////
// DBVARIANT: used by db/contact/getsetting and db/contact/writesetting
@@ -362,69 +447,6 @@ typedef struct { DBVARIANT value; // variant containing the value to set
} DBCONTACTWRITESETTING;
-/* db/contact/enumsettings v0.1.0.1+
-Lists all the settings a specific modules has stored in the database for a
-specific contact.
-wParam = (MCONTACT)hContact
-lParam = (LPARAM)(DBCONTACTENUMSETTINGS*)&dbces
-Returns the return value of the last call to pfnEnumProc, or -1 if there are
-no settings for that module/contact pair
-Writing to or deleting from the database while enumerating will have
-unpredictable results for the enumeration, but the write will succeed.
-Use db/modules/enum to get a complete list of module names
-szSetting is only guaranteed to be valid for the duration of the callback. If
-you want to keep it for longer you must allocation your own storage.
-*/
-typedef int (*DBSETTINGENUMPROC)(const char *szSetting, LPARAM lParam);
-typedef struct {
- DBSETTINGENUMPROC pfnEnumProc;
- LPARAM lParam; // passed direct to pfnEnumProc
- const char *szModule; // name of the module to get settings for
- DWORD ofsSettings; // filled by the function to contain the offset from
- // the start of the database of the requested settings group.
-} DBCONTACTENUMSETTINGS;
-#define MS_DB_CONTACT_ENUMSETTINGS "DB/Contact/EnumSettings"
-
-/* DB/Contact/GetCount service
-Gets the number of contacts in the database, which does not count the user
- wParam = lParam = 0
-Returns the number of contacts. They can be retrieved using contact/findfirst
-and contact/findnext
-*/
-#define MS_DB_CONTACT_GETCOUNT "DB/Contact/GetCount"
-
-/* DB/Contact/Delete
-Deletes the contact hContact from the database and all events and settings
-associated with it.
- wParam = (MCONTACT)hContact
- lParam = 0
-Returns 0 on success or nonzero if hContact was invalid
-Please don't try to delete the user contact (hContact = NULL)
-Triggers a db/contact/deleted event just *before* it removes anything
-Because all events are deleted, lots of people may end up with invalid event
-handles from this operation, which they should be prepared for.
-*/
-#define MS_DB_CONTACT_DELETE "DB/Contact/Delete"
-
-/* DB/Contact/Add
-Adds a new contact to the database. New contacts initially have no settings
-whatsoever, they must all be added with db/contacts/writesetting.
- wParam = lParam = 0
-Returns a handle to the newly created contact on success, or NULL otherwise.
-Triggers a db/contact/added event just before it returns.
-*/
-#define MS_DB_CONTACT_ADD "DB/Contact/Add"
-
-/* DB/Contact/Is
-Checks if a given value is a valid contact handle, note that due
-to the nature of multiple threading, a valid contact can still become
-invalid after a call to this service.
- wParam = (WPARAM)hContact
- lParam = 0
-Returns 1 if the contact is a contact, or 0 if the contact is not valid.
-*/
-#define MS_DB_CONTACT_IS "DB/Contact/Is"
-
/////////////////////////////////////////////////////////////////////////////////////////
// Event services
@@ -505,56 +527,6 @@ EXTERN_C MIR_APP_DLL(HICON) DbEvent_GetIcon(DBEVENTINFO *dbei, int flags); EXTERN_C MIR_APP_DLL(wchar_t*) DbEvent_GetString(DBEVENTINFO *dbei, const char *str);
/////////////////////////////////////////////////////////////////////////////////////////
-// Random services
-
-/*
-Switches safety settings on or off
-wParam = (WPARAM)(BOOL)newSetting
-lParam = 0
-returns 0 always
-newSetting is TRUE initially.
-Miranda's database is normally protected against corruption by agressively
-flushing data to the disk on writes. If you're doing a lot of writes (eg in
-an import plugin) it can sometimes be desirable to switch this feature off to
-speed up the process. If you do switch it off, you must remember that crashes
-are far more likely to be catastrophic, so switch it back on at the earliest
-possible opportunity.
-Note that if you're doing a lot of setting writes, the flush is already delayed
-so you need not use this service for that purpose.
-*/
-#define MS_DB_SETSAFETYMODE "DB/SetSafetyMode"
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Module services
-
-/* db/modules/enum v0.1.0.1+
-Enumerates the names of all modules that have stored or requested information
-from the database.
-wParam = lParam
-lParam = (WPARAM)(DBMODULEENUMPROC)dbmep
-Returns the value returned by the last call to dbmep
-This service is only really useful for debugging, in conjunction with
-db/contact/enumsettings
-lParam is passed directly to dbmep
-dbmep should return 0 to continue enumeration, or nonzero to stop.
-ofsModuleName is the offset of the module name from the start of the profile
-database, and is only useful for really heavyweight debugging
-Modules names will be enumerated in no particular order
-Writing to the database while module names are being enumerated will cause
-unpredictable results in the enumeration, but the write will work.
-szModuleName is only guaranteed to be valid for the duration of the callback.
-If you want to keep it for longer you must allocation your own storage.
-*/
-typedef int (*DBMODULEENUMPROC)(const char *szModuleName, DWORD ofsModuleName, LPARAM lParam);
-#define MS_DB_MODULES_ENUM "DB/Modules/Enum"
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Removes all settings for the specified module.
-// hContact is 0 for global settings or matches the concrete contact
-
-EXTERN_C MIR_APP_DLL(int) DbModule_Delete(MCONTACT hContact, const char *szModuleName);
-
-/////////////////////////////////////////////////////////////////////////////////////////
// Database events
/* DB/Event/Added event
diff --git a/include/m_db_int.h b/include/m_db_int.h index d33b465ccb..81ce096276 100644 --- a/include/m_db_int.h +++ b/include/m_db_int.h @@ -109,7 +109,7 @@ interface MIDatabase STDMETHOD_(MEVENT, FindNextEvent)(MCONTACT contactID, MEVENT hDbEvent) PURE;
STDMETHOD_(MEVENT, FindPrevEvent)(MCONTACT contactID, MEVENT hDbEvent) PURE;
- STDMETHOD_(BOOL, EnumModuleNames)(DBMODULEENUMPROC pFunc, void *pParam) PURE;
+ STDMETHOD_(BOOL, EnumModuleNames)(DBMODULEENUMPROC pFunc, const void *pParam) PURE;
STDMETHOD_(BOOL, GetContactSetting)(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting, DBVARIANT *dbv) PURE;
STDMETHOD_(BOOL, GetContactSettingStr)(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting, DBVARIANT *dbv) PURE;
@@ -117,9 +117,9 @@ interface MIDatabase STDMETHOD_(BOOL, FreeVariant)(DBVARIANT *dbv) PURE;
STDMETHOD_(BOOL, WriteContactSetting)(MCONTACT contactID, DBCONTACTWRITESETTING *dbcws) PURE;
STDMETHOD_(BOOL, DeleteContactSetting)(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting) PURE;
- STDMETHOD_(BOOL, EnumContactSettings)(MCONTACT contactID, DBCONTACTENUMSETTINGS* dbces) PURE;
+ STDMETHOD_(BOOL, EnumContactSettings)(MCONTACT contactID, DBSETTINGENUMPROC pfnEnumProc, const char *szModule, const void *param) PURE;
STDMETHOD_(BOOL, SetSettingResident)(BOOL bIsResident, const char *pszSettingName) PURE;
- STDMETHOD_(BOOL, EnumResidentSettings)(DBMODULEENUMPROC pFunc, void *pParam) PURE;
+ STDMETHOD_(BOOL, EnumResidentSettings)(DBMODULEENUMPROC pFunc, const void *pParam) PURE;
STDMETHOD_(BOOL, IsSettingEncrypted)(LPCSTR szModule, LPCSTR szSetting) PURE;
STDMETHOD_(BOOL, MetaDetouchSub)(DBCachedContact*, int nSub) PURE;
|