From 08840edfd4acce464d32244b5ccc3648588ce33d Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 12 Apr 2023 18:18:57 +0300 Subject: first attempt to make offline transfers visible --- plugins/Dbx_sqlite/src/dbevents.cpp | 35 +++++++++++++++++++++++++++++++++++ plugins/Dbx_sqlite/src/dbintf.h | 3 ++- 2 files changed, 37 insertions(+), 1 deletion(-) (limited to 'plugins/Dbx_sqlite/src') diff --git a/plugins/Dbx_sqlite/src/dbevents.cpp b/plugins/Dbx_sqlite/src/dbevents.cpp index bc8ab23c78..6e91e33f98 100644 --- a/plugins/Dbx_sqlite/src/dbevents.cpp +++ b/plugins/Dbx_sqlite/src/dbevents.cpp @@ -295,6 +295,41 @@ BOOL CDbxSQLite::EditEvent(MEVENT hDbEvent, const DBEVENTINFO *dbei) return 0; } +int CDbxSQLite::SetEventJson(MEVENT hDbEvent, const char *szSetting, DBVARIANT *dbv) +{ + if (hDbEvent == 0) + return 1; + + { mir_cslock lock(m_csDbAccess); + sqlite3_stmt *stmt = InitQuery("UPDATE events SET body=json_set(body, '$.?', ?) WHERE id = ?;", qEvEdit); + sqlite3_bind_text(stmt, 1, szSetting, (int)mir_strlen(szSetting), nullptr); + switch (dbv->type) { + case DBVT_BYTE: + sqlite3_bind_int(stmt, 2, dbv->bVal); + break; + case DBVT_WORD: + sqlite3_bind_int(stmt, 2, dbv->wVal); + break; + case DBVT_DWORD: + sqlite3_bind_int(stmt, 2, dbv->dVal); + break; + case DBVT_ASCIIZ: + case DBVT_UTF8: + sqlite3_bind_text(stmt, 2, dbv->pszVal, (int)mir_strlen(dbv->pszVal), nullptr); + break; + default: + return 2; + } + sqlite3_bind_int64(stmt, 3, hDbEvent); + int rc = sqlite3_step(stmt); + logError(rc, __FILE__, __LINE__); + sqlite3_reset(stmt); + } + + DBFlush(); + return 0; +} + int CDbxSQLite::GetBlobSize(MEVENT hDbEvent) { if (hDbEvent == 0) diff --git a/plugins/Dbx_sqlite/src/dbintf.h b/plugins/Dbx_sqlite/src/dbintf.h index 6712570cf9..83071ae90c 100644 --- a/plugins/Dbx_sqlite/src/dbintf.h +++ b/plugins/Dbx_sqlite/src/dbintf.h @@ -94,7 +94,7 @@ class CDbxSQLite : public MDatabaseCommon, public MIDatabaseChecker, public MZer void UninitEvents(); CQuery qEvCount, qEvAdd, qEvDel, qEvEdit, qEvBlobSize, qEvGet, qEvGetFlags, qEvSetFlags, qEvGetContact, qEvGetContact2; CQuery qEvFindFirst, qEvFindNext, qEvFindLast, qEvFindPrev, qEvFindUnread, qEvAddSrt, qEvDelSrt, qEvMetaSplit, qEvMetaMerge; - CQuery qEvGetById, qEvUpdateId; + CQuery qEvGetById, qEvUpdateId, qEvSetJson; int DeleteEventMain(MEVENT); int DeleteEventSrt(MEVENT, MCONTACT, uint32_t); @@ -127,6 +127,7 @@ public: STDMETHODIMP_(MEVENT) AddEvent(MCONTACT contactID, const DBEVENTINFO *dbe) override; STDMETHODIMP_(BOOL) DeleteEvent(MEVENT hDbEvent) override; STDMETHODIMP_(BOOL) EditEvent(MEVENT hDbEvent, const DBEVENTINFO *dbe) override; + STDMETHODIMP_(int) SetEventJson(MEVENT hDbEvent, const char *szSetting, DBVARIANT *dbv) override; STDMETHODIMP_(int) GetBlobSize(MEVENT hDbEvent) override; STDMETHODIMP_(BOOL) GetEvent(MEVENT hDbEvent, DBEVENTINFO *dbe) override; STDMETHODIMP_(BOOL) MarkEventRead(MCONTACT contactID, MEVENT hDbEvent) override; -- cgit v1.2.3