From 821b1204af5c3d318283f42d16ffd03d4fe74673 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Tue, 10 Oct 2017 13:56:54 +0200 Subject: [PATCH] feat(EventsDb): explicit columns on legacy import --- src/db/events-db.cpp | 55 ++++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/src/db/events-db.cpp b/src/db/events-db.cpp index 16af86e41..dec49f760 100644 --- a/src/db/events-db.cpp +++ b/src/db/events-db.cpp @@ -251,6 +251,19 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} // ----------------------------------------------------------------------------- + #define LEGACY_MESSAGE_COL_LOCAL_ADDRESS 1 + #define LEGACY_MESSAGE_COL_REMOTE_ADDRESS 2 + #define LEGACY_MESSAGE_COL_DIRECTION 3 + #define LEGACY_MESSAGE_COL_TEXT 4 + #define LEGACY_MESSAGE_COL_STATE 7 + #define LEGACY_MESSAGE_COL_URL 8 + #define LEGACY_MESSAGE_COL_DATE 9 + #define LEGACY_MESSAGE_COL_APP_DATA 10 + #define LEGACY_MESSAGE_COL_CONTENT_ID 11 + #define LEGACY_MESSAGE_COL_IMDN_MESSAGE_ID 12 + #define LEGACY_MESSAGE_COL_CONTENT_TYPE 13 + #define LEGACY_MESSAGE_COL_IS_SECURED 14 + template static T getValueFromLegacyMessage (const soci::row &message, int index, bool &isNull) { isNull = false; @@ -270,21 +283,23 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} soci::transaction tr(*session); for (const auto &message : messages) { - const int direction = message.get(3) + 1; + const int direction = message.get(LEGACY_MESSAGE_COL_DIRECTION) + 1; if (direction != 1 && direction != 2) { lWarning() << "Unable to import legacy message with invalid direction."; return; } - const int state = message.get(7, static_cast(ChatMessage::State::Displayed)); + const int state = message.get( + LEGACY_MESSAGE_COL_STATE, static_cast(ChatMessage::State::Displayed) + ); - const tm date = Utils::getLongAsTm(message.get(9, 0)); + const tm date = Utils::getLongAsTm(message.get(LEGACY_MESSAGE_COL_DATE, 0)); bool isNull; - const string url = getValueFromLegacyMessage(message, 8, isNull); + const string url = getValueFromLegacyMessage(message, LEGACY_MESSAGE_COL_URL, isNull); - const int contentId = message.get(11, -1); - ContentType contentType(message.get(13, "")); + const int contentId = message.get(LEGACY_MESSAGE_COL_CONTENT_ID, -1); + ContentType contentType(message.get(LEGACY_MESSAGE_COL_CONTENT_TYPE, "")); if (!contentType.isValid()) contentType = contentId != -1 ? ContentType::FileTransfer @@ -294,7 +309,7 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} continue; } - const string text = getValueFromLegacyMessage(message, 4, isNull); + const string text = getValueFromLegacyMessage(message, LEGACY_MESSAGE_COL_TEXT, isNull); Content content; content.setContentType(contentType); @@ -305,13 +320,24 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} } content.setBody(text); } else { - continue; + if (contentType != ContentType::FileTransfer) { + lWarning() << "Unable to import unsupported legacy content."; + continue; + } + + const string appData = getValueFromLegacyMessage(message, LEGACY_MESSAGE_COL_APP_DATA, isNull); + if (isNull) { + lWarning() << "Unable to import legacy file message without app data."; + continue; + } + + content.setAppData("legacy", appData); } struct MessageEventReferences references; references.eventId = insertEvent(EventLog::Type::ChatMessage, date); - references.localSipAddressId = insertSipAddress(message.get(1)); - references.remoteSipAddressId = insertSipAddress(message.get(2)); + references.localSipAddressId = insertSipAddress(message.get(LEGACY_MESSAGE_COL_LOCAL_ADDRESS)); + references.remoteSipAddressId = insertSipAddress(message.get(LEGACY_MESSAGE_COL_REMOTE_ADDRESS)); references.chatRoomId = insertChatRoom(references.remoteSipAddressId, date); insertChatRoomParticipant(references.chatRoomId, references.remoteSipAddressId, false); @@ -320,15 +346,10 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} references, static_cast(state), static_cast(direction), - message.get(12, ""), - !!message.get(14, 0), + message.get(LEGACY_MESSAGE_COL_IMDN_MESSAGE_ID, ""), + !!message.get(LEGACY_MESSAGE_COL_IS_SECURED, 0), { content } ); - - bool noAppData = false; - const string appData = getValueFromLegacyMessage(message, 10, noAppData); - if (!noAppData) - return; } tr.commit();