diff --git a/Telegram/SourceFiles/ayu/ayu_worker.cpp b/Telegram/SourceFiles/ayu/ayu_worker.cpp index 9f2b70fdf..d74ef697d 100644 --- a/Telegram/SourceFiles/ayu/ayu_worker.cpp +++ b/Telegram/SourceFiles/ayu/ayu_worker.cpp @@ -34,7 +34,7 @@ void lateInit() { } void runOnce() { - if (!Core::App().domain().started()) { + if (!Core::IsAppLaunched() || !Core::App().domain().started()) { return; } diff --git a/Telegram/SourceFiles/ayu/data/ayu_database.cpp b/Telegram/SourceFiles/ayu/data/ayu_database.cpp index 5ebc4cd45..9657f1dd5 100644 --- a/Telegram/SourceFiles/ayu/data/ayu_database.cpp +++ b/Telegram/SourceFiles/ayu/data/ayu_database.cpp @@ -182,9 +182,13 @@ void initialize() { } void addEditedMessage(const EditedMessage &message) { - storage.begin_transaction(); - storage.insert(message); - storage.commit(); + try { + storage.begin_transaction(); + storage.insert(message); + storage.commit(); + } catch (std::exception& ex) { + LOG(("Failed to save edited message for some reason: %1").arg(ex.what())); + } } std::vector getEditedMessages(ID userId, ID dialogId, ID messageId) { @@ -198,13 +202,18 @@ std::vector getEditedMessages(ID userId, ID dialogId, ID messageI } bool hasRevisions(ID userId, ID dialogId, ID messageId) { - return storage.count( - where( - c(&EditedMessage::userId) == userId and - c(&EditedMessage::dialogId) == dialogId and - c(&EditedMessage::messageId) == messageId - ) - ) > 0; + try { + return storage.count( + where( + c(&EditedMessage::userId) == userId and + c(&EditedMessage::dialogId) == dialogId and + c(&EditedMessage::messageId) == messageId + ) + ) > 0; + } catch (std::exception& ex) { + LOG(("Failed to check if message has revisions: %1").arg(ex.what())); + return false; + } } } diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index cfe32b0cb..5c68f9f48 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -2468,11 +2468,21 @@ void Session::checkTTLs() { _ttlCheckTimer.cancel(); const auto now = base::unixtime::now(); - while (!_ttlMessages.empty() && _ttlMessages.begin()->first <= now) { - if (!settings->saveDeletedMessages) { + + if (settings->saveDeletedMessages) { + auto toBeRemoved = ranges::views::take_while( + _ttlMessages, + [now](const auto &pair) { + return pair.first <= now; + }) | ranges::views::transform([](const auto &pair) { + return pair.second; + }) | ranges::views::join; + for (auto &item : toBeRemoved) { + item->setAyuHint(settings->deletedMark); + } + } else { + while (!_ttlMessages.empty() && _ttlMessages.begin()->first <= now) { _ttlMessages.begin()->second.front()->destroy(); - } else { - _ttlMessages.begin()->second.front()->setAyuHint(settings->deletedMark); } } scheduleNextTTLs(); diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 9f6455261..9c33163f2 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -3264,7 +3264,9 @@ void HistoryWidget::messagesReceived( not_null peer, const MTPmessages_Messages &messages, int requestId) { - Expects(_history != nullptr); + if (!_history) { + return; // AyuGram: fix crash when using `saveDeletedMessages` + } const auto toMigrated = (peer == _peer->migrateFrom()); if (peer != _peer && !toMigrated) {