summaryrefslogtreecommitdiff
path: root/plugins/Dbx_sqlite/src
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2023-04-12 18:18:57 +0300
committerGeorge Hazan <ghazan@miranda.im>2023-04-12 18:18:57 +0300
commit08840edfd4acce464d32244b5ccc3648588ce33d (patch)
tree61c799d10e287bf8ae1e293edee75ea5615328b2 /plugins/Dbx_sqlite/src
parentd0516970abbb1c4ae87ae31e360214b5e7e7763f (diff)
first attempt to make offline transfers visible
Diffstat (limited to 'plugins/Dbx_sqlite/src')
-rw-r--r--plugins/Dbx_sqlite/src/dbevents.cpp35
-rw-r--r--plugins/Dbx_sqlite/src/dbintf.h3
2 files changed, 37 insertions, 1 deletions
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;