feat(draft): add /history export|import for SQLite<->flatfile migration
All checks were successful
CI Code / Check spelling (pull_request) Successful in 18s
CI Code / Check coding style (pull_request) Successful in 31s
CI Code / Code Coverage (pull_request) Successful in 4m48s
CI Code / Linux (debian) (pull_request) Successful in 6m11s
CI Code / Linux (ubuntu) (pull_request) Successful in 6m16s
CI Code / Linux (arch) (pull_request) Successful in 6m28s
All checks were successful
CI Code / Check spelling (pull_request) Successful in 18s
CI Code / Check coding style (pull_request) Successful in 31s
CI Code / Code Coverage (pull_request) Successful in 4m48s
CI Code / Linux (debian) (pull_request) Successful in 6m11s
CI Code / Linux (ubuntu) (pull_request) Successful in 6m16s
CI Code / Linux (arch) (pull_request) Successful in 6m28s
DRAFT — not yet tested end-to-end with a live XMPP session. New commands: /history export [<jid>] — copy messages from SQLite to flat-file /history import [<jid>] — copy messages from flat-file to SQLite Both merge with existing data; duplicates are skipped using stanza-id or a SHA-256 fallback key (timestamp + sender + body prefix). Implementation (src/database_export.c): - Export: paginate SQLite via get_previous_chat, read existing flatfile for dedup, write merged result via ff_write_line + atomic rename - Import: parse flatfile lines via ff_parse_line, build dedup set from SQLite, insert new messages via add_incoming (preserves original timestamps for both directions) - List all contacts: db_sqlite_list_contacts() queries UNION of DISTINCT from_jid/to_jid; flatfile enumerates flatlog directories Wiring: - database.h: declare export/import functions + db_sqlite_list_contacts - database_sqlite.c: add db_sqlite_list_contacts() - cmd_defs.c: add export/import to /history synopsis and args - cmd_funcs.c: add export/import handlers in cmd_history() - cmd_ac.c: add 'export' and 'import' to history_ac - Makefile.am: add database_export.c to core_sources - stub_database.c: add stubs for test linking - profanity.1: document export/import in man page All code guarded with #ifdef HAVE_SQLITE — builds cleanly without it.
This commit is contained in:
@@ -6,6 +6,7 @@ core_sources = \
|
||||
src/database_flatfile.c src/database_flatfile.h \
|
||||
src/database_flatfile_parser.c \
|
||||
src/database_flatfile_verify.c \
|
||||
src/database_export.c \
|
||||
src/log.h src/profanity.c src/common.h \
|
||||
src/profanity.h src/xmpp/chat_session.c \
|
||||
src/xmpp/chat_session.h src/xmpp/muc.c src/xmpp/muc.h src/xmpp/jid.h src/xmpp/jid.c \
|
||||
|
||||
Reference in New Issue
Block a user