File indexing completed on 2025-03-16 13:27:30
0001 /* 0002 SPDX-FileCopyrightText: 2023-2024 Laurent Montel <montel.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "localdatabasemanager.h" 0008 #include "localaccountdatabase.h" 0009 #include "localmessagedatabase.h" 0010 #include "localmessagelogger.h" 0011 #include "localroomsdatabase.h" 0012 #include "room.h" 0013 #include "ruqolaglobalconfig.h" 0014 0015 LocalDatabaseManager::LocalDatabaseManager() 0016 : mMessageLogger(std::make_unique<LocalMessageLogger>()) 0017 , mMessagesDatabase(std::make_unique<LocalMessageDatabase>()) 0018 , mRoomsDatabase(std::make_unique<LocalRoomsDatabase>()) 0019 , mAccountDatabase(std::make_unique<LocalAccountDatabase>()) 0020 , mGlobalDatabase(std::make_unique<GlobalDatabase>()) 0021 { 0022 } 0023 0024 LocalDatabaseManager::~LocalDatabaseManager() = default; 0025 0026 void LocalDatabaseManager::addMessage(const QString &accountName, const QString &roomName, const Message &m) 0027 { 0028 mMessageLogger->addMessage(accountName, roomName, m); 0029 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0030 mMessagesDatabase->addMessage(accountName, roomName, m); 0031 // Update timestamp. 0032 mGlobalDatabase->insertOrReplaceTimeStamp(accountName, roomName, m.timeStamp(), GlobalDatabase::TimeStampType::MessageTimeStamp); 0033 } 0034 } 0035 0036 void LocalDatabaseManager::deleteMessage(const QString &accountName, const QString &roomName, const QString &messageId) 0037 { 0038 mMessageLogger->deleteMessage(accountName, roomName, messageId); 0039 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0040 mMessagesDatabase->deleteMessage(accountName, roomName, messageId); 0041 // TODO update timestamp ? 0042 } 0043 } 0044 0045 QVector<Message> LocalDatabaseManager::loadMessages(const QString &accountName, 0046 const QString &roomName, 0047 qint64 startId, 0048 qint64 endId, 0049 qint64 numberElements, 0050 EmojiManager *emojiManager) const 0051 { 0052 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0053 return mMessagesDatabase->loadMessages(accountName, roomName, startId, endId, numberElements, emojiManager); 0054 } 0055 return {}; 0056 } 0057 0058 void LocalDatabaseManager::updateAccount(const QString &accountName, const QByteArray &ba, qint64 timeStamp) 0059 { 0060 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0061 mAccountDatabase->updateAccount(accountName, ba); 0062 if (timeStamp > -1) { 0063 mGlobalDatabase->insertOrReplaceTimeStamp(accountName, QString(), timeStamp, GlobalDatabase::TimeStampType::AccountTimeStamp); 0064 } 0065 } 0066 } 0067 0068 void LocalDatabaseManager::deleteAccount(const QString &accountName) 0069 { 0070 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0071 mAccountDatabase->deleteAccount(accountName); 0072 mGlobalDatabase->removeTimeStamp(accountName, QString(), GlobalDatabase::TimeStampType::AccountTimeStamp); 0073 } 0074 } 0075 0076 QByteArray LocalDatabaseManager::jsonAccount(const QString &accountName) 0077 { 0078 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0079 return mAccountDatabase->jsonAccount(accountName); 0080 } 0081 return {}; 0082 } 0083 0084 void LocalDatabaseManager::addRoom(const QString &accountName, Room *room) 0085 { 0086 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0087 mRoomsDatabase->addRoom(accountName, room); 0088 // TODO verify it. 0089 mGlobalDatabase->insertOrReplaceTimeStamp(accountName, room->roomId(), room->lastMessageAt(), GlobalDatabase::TimeStampType::RoomTimeStamp); 0090 } 0091 } 0092 0093 void LocalDatabaseManager::deleteRoom(const QString &accountName, const QString &roomId) 0094 { 0095 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0096 mRoomsDatabase->deleteRoom(accountName, roomId); 0097 // Remove timestamp. 0098 mGlobalDatabase->removeTimeStamp(accountName, roomId, GlobalDatabase::TimeStampType::RoomTimeStamp); 0099 } 0100 } 0101 0102 void LocalDatabaseManager::updateTimeStamp(const QString &accountName, const QString &roomName, qint64 timestamp, GlobalDatabase::TimeStampType type) 0103 { 0104 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0105 mGlobalDatabase->insertOrReplaceTimeStamp(accountName, roomName, timestamp, type); 0106 } 0107 } 0108 0109 void LocalDatabaseManager::removeTimeStamp(const QString &accountName, const QString &roomName, GlobalDatabase::TimeStampType type) 0110 { 0111 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0112 mGlobalDatabase->removeTimeStamp(accountName, roomName, type); 0113 } 0114 } 0115 0116 qint64 LocalDatabaseManager::timeStamp(const QString &accountName, const QString &roomName, GlobalDatabase::TimeStampType type) 0117 { 0118 if (RuqolaGlobalConfig::self()->storeMessageInDataBase()) { 0119 return mGlobalDatabase->timeStamp(accountName, roomName, type); 0120 } 0121 return -1; 0122 }