mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 06:07:06 +02:00
fix: crashes & infinite loop
This commit is contained in:
parent
222a643ce3
commit
5bb633d982
4 changed files with 37 additions and 16 deletions
|
@ -34,7 +34,7 @@ void lateInit() {
|
|||
}
|
||||
|
||||
void runOnce() {
|
||||
if (!Core::App().domain().started()) {
|
||||
if (!Core::IsAppLaunched() || !Core::App().domain().started()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -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<EditedMessage> getEditedMessages(ID userId, ID dialogId, ID messageId) {
|
||||
|
@ -198,13 +202,18 @@ std::vector<EditedMessage> getEditedMessages(ID userId, ID dialogId, ID messageI
|
|||
}
|
||||
|
||||
bool hasRevisions(ID userId, ID dialogId, ID messageId) {
|
||||
return storage.count<EditedMessage>(
|
||||
where(
|
||||
c(&EditedMessage::userId) == userId and
|
||||
c(&EditedMessage::dialogId) == dialogId and
|
||||
c(&EditedMessage::messageId) == messageId
|
||||
)
|
||||
) > 0;
|
||||
try {
|
||||
return storage.count<EditedMessage>(
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -3264,7 +3264,9 @@ void HistoryWidget::messagesReceived(
|
|||
not_null<PeerData*> 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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue