diff options
author | George Hazan <ghazan@miranda.im> | 2023-01-05 15:24:07 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2023-01-05 15:24:07 +0300 |
commit | ee8c388aef77da6d8a7ea900cfba8661faefb30b (patch) | |
tree | 34c11efd99230c499efb4ee5b98b1a89c2186714 | |
parent | a9617074481ebc9a35eb241d64997256931c1045 (diff) |
new database functions for Telegram
-rw-r--r-- | include/m_database.h | 11 | ||||
-rw-r--r-- | include/m_db_int.h | 2 | ||||
-rw-r--r-- | libs/win32/mir_app.lib | bin | 231450 -> 231796 bytes | |||
-rw-r--r-- | libs/win32/mir_core.lib | bin | 490112 -> 490342 bytes | |||
-rw-r--r-- | libs/win64/mir_app.lib | bin | 227734 -> 228090 bytes | |||
-rw-r--r-- | libs/win64/mir_core.lib | bin | 495312 -> 495524 bytes | |||
-rw-r--r-- | plugins/Dbx_sqlite/src/dbevents.cpp | 17 | ||||
-rw-r--r-- | plugins/Dbx_sqlite/src/dbintf.h | 4 | ||||
-rw-r--r-- | plugins/Scriver/src/msgs.cpp | 1 | ||||
-rw-r--r-- | src/mir_app/src/MDatabaseReadonly.cpp | 5 | ||||
-rw-r--r-- | src/mir_app/src/mir_app.def | 1 | ||||
-rw-r--r-- | src/mir_app/src/mir_app64.def | 1 | ||||
-rw-r--r-- | src/mir_core/src/db.cpp | 7 | ||||
-rw-r--r-- | src/mir_core/src/mir_core.def | 1 | ||||
-rw-r--r-- | src/mir_core/src/mir_core64.def | 1 |
15 files changed, 42 insertions, 9 deletions
diff --git a/include/m_database.h b/include/m_database.h index d0bc296bd9..fda99b4b2f 100644 --- a/include/m_database.h +++ b/include/m_database.h @@ -308,12 +308,6 @@ EXTERN_C MIR_CORE_DLL(MEVENT) db_event_first(MCONTACT hContact); // Retrieves a handle to the first unread event in the chain for hContact // Returns the handle, or NULL if hContact is invalid or all its events have been read -// -// Events in a chain are sorted chronologically automatically, but this does not -// necessarily mean that all events after the first unread are unread too. They -// 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 EXTERN_C MIR_CORE_DLL(MEVENT) db_event_firstUnread(MCONTACT hContact); @@ -374,6 +368,11 @@ EXTERN_C MIR_CORE_DLL(MEVENT) db_event_prev(MCONTACT hContact, MEVENT hDbEvent); EXTERN_C MIR_CORE_DLL(MEVENT) db_event_getById(const char *szModule, const char *szId); +// Updates the server ID associated with an event +// Returns 0 on success or a failure otherwise + +EXTERN_C MIR_CORE_DLL(int) db_event_updateId(MEVENT hDbEvent, const char *szId); + ///////////////////////////////////////////////////////////////////////////////////////// // Database settings diff --git a/include/m_db_int.h b/include/m_db_int.h index 74a1cfc955..2516208764 100644 --- a/include/m_db_int.h +++ b/include/m_db_int.h @@ -161,6 +161,7 @@ interface MIR_APP_EXPORT MIDatabase STDMETHOD_(DATABASELINK*, GetDriver)(void) PURE; STDMETHOD_(MEVENT, GetEventById)(LPCSTR szModule, LPCSTR szId) PURE; + STDMETHOD_(int, UpdateEventId)(MEVENT hDbEvent, const char *szId) PURE; STDMETHOD_(DB::EventCursor*, EventCursor)(MCONTACT hContact, MEVENT hDbEvent) PURE; STDMETHOD_(DB::EventCursor*, EventCursorRev)(MCONTACT hContact, MEVENT hDbEvent) PURE; @@ -302,6 +303,7 @@ public: //////////////////////////////////////////////////////////////////////////////////////// STDMETHODIMP_(MEVENT) GetEventById(LPCSTR szModule, LPCSTR szId) override; + STDMETHODIMP_(int) UpdateEventId(MEVENT hDbEvent, const char *szId) override; }; ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/libs/win32/mir_app.lib b/libs/win32/mir_app.lib Binary files differindex 2cf2e63174..e31522a34f 100644 --- a/libs/win32/mir_app.lib +++ b/libs/win32/mir_app.lib diff --git a/libs/win32/mir_core.lib b/libs/win32/mir_core.lib Binary files differindex 1b0ef9e871..3e367a7735 100644 --- a/libs/win32/mir_core.lib +++ b/libs/win32/mir_core.lib diff --git a/libs/win64/mir_app.lib b/libs/win64/mir_app.lib Binary files differindex 8d2866d05f..7956729fc1 100644 --- a/libs/win64/mir_app.lib +++ b/libs/win64/mir_app.lib diff --git a/libs/win64/mir_core.lib b/libs/win64/mir_core.lib Binary files differindex 1d6e1d9f2f..df12506f0d 100644 --- a/libs/win64/mir_core.lib +++ b/libs/win64/mir_core.lib diff --git a/plugins/Dbx_sqlite/src/dbevents.cpp b/plugins/Dbx_sqlite/src/dbevents.cpp index 433cae1852..fa3691a47e 100644 --- a/plugins/Dbx_sqlite/src/dbevents.cpp +++ b/plugins/Dbx_sqlite/src/dbevents.cpp @@ -410,7 +410,6 @@ MEVENT CDbxSQLite::FindFirstUnreadEvent(MCONTACT hContact) sqlite3_stmt *stmt = InitQuery("SELECT id FROM events WHERE contact_id = ? AND is_read = 0 ORDER BY timestamp LIMIT 1;", qEvFindUnread); sqlite3_bind_int64(stmt, 1, hContact); - sqlite3_bind_int(stmt, 2, DBEF_READ | DBEF_SENT); int rc = sqlite3_step(stmt); logError(rc, __FILE__, __LINE__); if (rc != SQLITE_ROW) { @@ -601,6 +600,22 @@ MEVENT CDbxSQLite::GetEventById(LPCSTR szModule, LPCSTR szId) return hDbEvent; } +int CDbxSQLite::UpdateEventId(MEVENT hDbEvent, LPCSTR szId) +{ + if (hDbEvent == 0 || mir_strlen(szId) == 0) + return 1; + + mir_cslock lock(m_csDbAccess); + sqlite3_stmt *stmt = InitQuery("UPDATE events SET server_id = ? WHERE id = ?;", qEvUpdateId); + sqlite3_bind_text(stmt, 1, szId, (int)mir_strlen(szId), nullptr); + sqlite3_bind_int64(stmt, 2, hDbEvent); + int rc = sqlite3_step(stmt); + logError(rc, __FILE__, __LINE__); + int rows = sqlite3_changes(m_db); + sqlite3_reset(stmt); + return (rows == 0) ? 2 : 0; +} + ///////////////////////////////////////////////////////////////////////////////////////// // Event cursors diff --git a/plugins/Dbx_sqlite/src/dbintf.h b/plugins/Dbx_sqlite/src/dbintf.h index fbeb18b493..e4c274fb3a 100644 --- a/plugins/Dbx_sqlite/src/dbintf.h +++ b/plugins/Dbx_sqlite/src/dbintf.h @@ -88,7 +88,8 @@ class CDbxSQLite : public MDatabaseCommon, public MIDatabaseChecker, public MZer void InitEvents(); void UninitEvents(); CQuery qEvCount, qEvAdd, qEvDel, qEvEdit, qEvBlobSize, qEvGet, qEvGetFlags, qEvSetFlags, qEvGetContact; - CQuery qEvFindFirst, qEvFindNext, qEvFindLast, qEvFindPrev, qEvFindUnread, qEvGetById, qEvAddSrt, qEvDelSrt, qEvMetaSplit, qEvMetaMerge; + CQuery qEvFindFirst, qEvFindNext, qEvFindLast, qEvFindPrev, qEvFindUnread, qEvAddSrt, qEvDelSrt, qEvMetaSplit, qEvMetaMerge; + CQuery qEvGetById, qEvUpdateId; int DeleteEventMain(MEVENT); int DeleteEventSrt(MEVENT); @@ -132,6 +133,7 @@ public: STDMETHODIMP_(MEVENT) FindPrevEvent(MCONTACT contactID, MEVENT hDbEvent) override; STDMETHODIMP_(MEVENT) GetEventById(LPCSTR szModule, LPCSTR szId) override; + STDMETHODIMP_(int) UpdateEventId(MEVENT hDbEvent, LPCSTR szId) override; STDMETHODIMP_(BOOL) EnumModuleNames(DBMODULEENUMPROC pFunc, void *pParam) override; diff --git a/plugins/Scriver/src/msgs.cpp b/plugins/Scriver/src/msgs.cpp index 1bba4511be..ffb08f4e3c 100644 --- a/plugins/Scriver/src/msgs.cpp +++ b/plugins/Scriver/src/msgs.cpp @@ -248,7 +248,6 @@ static void RestoreUnreadMessageAlerts(void) for (auto &hContact : Contacts()) {
for (MEVENT hDbEvent = db_event_firstUnread(hContact); hDbEvent; hDbEvent = db_event_next(hContact, hDbEvent)) {
DBEVENTINFO dbei = {};
- dbei.cbBlob = 0;
if (db_event_get(hDbEvent, &dbei))
continue;
if (dbei.markedRead() || !DbEventIsMessageOrCustom(&dbei) || !Proto_GetBaseAccountName(hContact))
diff --git a/src/mir_app/src/MDatabaseReadonly.cpp b/src/mir_app/src/MDatabaseReadonly.cpp index f022d5e5fb..c386c4d6f4 100644 --- a/src/mir_app/src/MDatabaseReadonly.cpp +++ b/src/mir_app/src/MDatabaseReadonly.cpp @@ -178,3 +178,8 @@ MEVENT MDatabaseReadonly::GetEventById(LPCSTR, LPCSTR) {
return 0;
}
+
+int MDatabaseReadonly::UpdateEventId(MEVENT, LPCSTR)
+{
+ return 1;
+}
diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index 37f37cec9d..726bcbc22b 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -809,3 +809,4 @@ Srmm_CreateHotkey @886 NONAME ?bTopicOnClist@Chat@@3V?$CMOption@_N@@A @910 NONAME
?getBlob@PROTO_INTERFACE@@QAE?AVMBinBuffer@@IPBD@Z @911 NONAME
?getBlob@PROTO_INTERFACE@@QAE?AVMBinBuffer@@PBD@Z @912 NONAME
+?UpdateEventId@MDatabaseReadonly@@UAGHIPBD@Z @913 NONAME
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 9f94234c59..5271b8f291 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -809,3 +809,4 @@ Srmm_CreateHotkey @886 NONAME ?bTopicOnClist@Chat@@3V?$CMOption@_N@@A @910 NONAME
?getBlob@PROTO_INTERFACE@@QEAA?AVMBinBuffer@@IPEBD@Z @911 NONAME
?getBlob@PROTO_INTERFACE@@QEAA?AVMBinBuffer@@PEBD@Z @912 NONAME
+?UpdateEventId@MDatabaseReadonly@@UEAAHIPEBD@Z @913 NONAME
diff --git a/src/mir_core/src/db.cpp b/src/mir_core/src/db.cpp index 362d359f17..5414dac6cb 100644 --- a/src/mir_core/src/db.cpp +++ b/src/mir_core/src/db.cpp @@ -458,6 +458,8 @@ MIR_CORE_DLL(MEVENT) db_event_replace(MCONTACT hContact, const DBEVENTINFO *dbei ret = db_event_getById(dbei->szModule, dbei->szId); if (!ret) ret = db_event_add(hContact, dbei); + else + db_event_edit(hContact, ret, dbei); return ret; } @@ -466,6 +468,11 @@ MIR_CORE_DLL(MEVENT) db_event_getById(const char *szModule, const char *szId) return (g_pCurrDb == nullptr) ? 0 : g_pCurrDb->GetEventById(szModule, szId); } +MIR_CORE_DLL(int) db_event_updateId(MEVENT hDbEvent, const char *szId) +{ + return (g_pCurrDb == nullptr) ? 0 : g_pCurrDb->UpdateEventId(hDbEvent, szId); +} + ///////////////////////////////////////////////////////////////////////////////////////// // event cursors diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def index 09e1804cc4..a2b489708e 100644 --- a/src/mir_core/src/mir_core.def +++ b/src/mir_core/src/mir_core.def @@ -1548,3 +1548,4 @@ _Utils_CorrectFontSize@4 @1762 NONAME ?append@MBinBuffer@@QAEXABV1@@Z @1769 NONAME
?appendBefore@MBinBuffer@@QAEXABV1@@Z @1770 NONAME
db_event_replace @1771
+db_event_updateId @1772
diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def index 9862559f69..07b98136f8 100644 --- a/src/mir_core/src/mir_core64.def +++ b/src/mir_core/src/mir_core64.def @@ -1548,3 +1548,4 @@ Utils_CorrectFontSize @1762 NONAME ?append@MBinBuffer@@QEAAXAEBV1@@Z @1769 NONAME
?appendBefore@MBinBuffer@@QEAAXAEBV1@@Z @1770 NONAME
db_event_replace @1771
+db_event_updateId @1772
|