From 8b7f6ef64c2df38bf6e84fa1a00e0b84fb25088c Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Thu, 30 Nov 2017 15:38:00 +0100 Subject: [PATCH] feat(MainDb): deal with conference terminated event --- include/linphone/enums/event-log-enums.h | 2 +- src/c-wrapper/api/c-event-log.cpp | 2 +- src/chat/chat-room/client-group-chat-room.cpp | 5 +++++ src/db/main-db.cpp | 19 ++++++++++++------- src/event-log/conference/conference-event.cpp | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/include/linphone/enums/event-log-enums.h b/include/linphone/enums/event-log-enums.h index b6465b7fb..3a6416d69 100644 --- a/include/linphone/enums/event-log-enums.h +++ b/include/linphone/enums/event-log-enums.h @@ -25,7 +25,7 @@ #define L_ENUM_VALUES_EVENT_LOG_TYPE(F) \ F(None) \ F(ConferenceCreated) \ - F(ConferenceDestroyed) \ + F(ConferenceTerminated) \ F(ConferenceCallStart) \ F(ConferenceCallEnd) \ F(ConferenceChatMessage) \ diff --git a/src/c-wrapper/api/c-event-log.cpp b/src/c-wrapper/api/c-event-log.cpp index 9e8e6aa36..a9337d5e4 100644 --- a/src/c-wrapper/api/c-event-log.cpp +++ b/src/c-wrapper/api/c-event-log.cpp @@ -65,7 +65,7 @@ static bool isConferenceType (LinphoneEventLogType type) { case LinphoneEventLogTypeConferenceCallStart: case LinphoneEventLogTypeConferenceChatMessage: case LinphoneEventLogTypeConferenceCreated: - case LinphoneEventLogTypeConferenceDestroyed: + case LinphoneEventLogTypeConferenceTerminated: case LinphoneEventLogTypeConferenceParticipantAdded: case LinphoneEventLogTypeConferenceParticipantDeviceAdded: case LinphoneEventLogTypeConferenceParticipantDeviceRemoved: diff --git a/src/chat/chat-room/client-group-chat-room.cpp b/src/chat/chat-room/client-group-chat-room.cpp index 77700210b..541da2aa9 100644 --- a/src/chat/chat-room/client-group-chat-room.cpp +++ b/src/chat/chat-room/client-group-chat-room.cpp @@ -310,6 +310,11 @@ void ClientGroupChatRoom::onConferenceTerminated (const IdentityAddress &addr) { L_D_T(RemoteConference, dConference); dConference->eventHandler->resetLastNotify(); d->setState(ChatRoom::State::Terminated); + getCore()->getPrivate()->mainDb->addEvent(make_shared( + EventLog::Type::ConferenceTerminated, + time(nullptr), + d->chatRoomId + )); } void ClientGroupChatRoom::onFirstNotifyReceived (const IdentityAddress &addr) { diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index f1a765f0c..1e3002711 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -351,7 +351,7 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), return nullptr; case EventLog::Type::ConferenceCreated: - case EventLog::Type::ConferenceDestroyed: + case EventLog::Type::ConferenceTerminated: eventLog = selectConferenceEvent(eventId, type, creationTime, chatRoomId); break; @@ -454,13 +454,15 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), chatRoom, static_cast(direction) )); - chatMessage->getPrivate()->setState(static_cast(state), true); chatMessage->setIsSecured(static_cast(isSecured)); - chatMessage->getPrivate()->forceFromAddress(IdentityAddress(fromSipAddress)); - chatMessage->getPrivate()->forceToAddress(IdentityAddress(toSipAddress)); + ChatMessagePrivate *dChatMessage = chatMessage->getPrivate(); + dChatMessage->setState(static_cast(state), true); - chatMessage->getPrivate()->setTime(Utils::getTmAsTimeT(messageTime)); + dChatMessage->forceFromAddress(IdentityAddress(fromSipAddress)); + dChatMessage->forceToAddress(IdentityAddress(toSipAddress)); + + dChatMessage->setTime(Utils::getTmAsTimeT(messageTime)); } // 2 - Fetch contents. @@ -629,6 +631,9 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), *session << "UPDATE chat_room SET last_update_time = :lastUpdateTime" " WHERE id = :chatRoomId", soci::use(lastUpdateTime), soci::use(curChatRoomId); + + if (eventLog->getType() == EventLog::Type::ConferenceTerminated) + *session << "UPDATE chat_room SET flags = 0 WHERE id = :chatRoomId", soci::use(curChatRoomId); } if (chatRoomId) @@ -1160,7 +1165,7 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), return false; case EventLog::Type::ConferenceCreated: - case EventLog::Type::ConferenceDestroyed: + case EventLog::Type::ConferenceTerminated: storageId = d->insertConferenceEvent(eventLog); break; @@ -1232,7 +1237,7 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), break; case EventLog::Type::ConferenceCreated: - case EventLog::Type::ConferenceDestroyed: + case EventLog::Type::ConferenceTerminated: case EventLog::Type::ConferenceCallStart: case EventLog::Type::ConferenceCallEnd: case EventLog::Type::ConferenceParticipantAdded: diff --git a/src/event-log/conference/conference-event.cpp b/src/event-log/conference/conference-event.cpp index 5f6d88bb8..e6f9e9cd8 100644 --- a/src/event-log/conference/conference-event.cpp +++ b/src/event-log/conference/conference-event.cpp @@ -30,7 +30,7 @@ LINPHONE_BEGIN_NAMESPACE ConferenceEvent::ConferenceEvent (Type type, time_t creationTime, const ChatRoomId &chatRoomId) : EventLog(*new ConferenceEventPrivate, type, creationTime) { L_D(); - L_ASSERT(type == Type::ConferenceCreated || type == Type::ConferenceDestroyed); + L_ASSERT(type == Type::ConferenceCreated || type == Type::ConferenceTerminated); d->chatRoomId = chatRoomId; }