mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +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() {
|
void runOnce() {
|
||||||
if (!Core::App().domain().started()) {
|
if (!Core::IsAppLaunched() || !Core::App().domain().started()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -182,9 +182,13 @@ void initialize() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void addEditedMessage(const EditedMessage &message) {
|
void addEditedMessage(const EditedMessage &message) {
|
||||||
storage.begin_transaction();
|
try {
|
||||||
storage.insert(message);
|
storage.begin_transaction();
|
||||||
storage.commit();
|
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) {
|
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) {
|
bool hasRevisions(ID userId, ID dialogId, ID messageId) {
|
||||||
return storage.count<EditedMessage>(
|
try {
|
||||||
where(
|
return storage.count<EditedMessage>(
|
||||||
c(&EditedMessage::userId) == userId and
|
where(
|
||||||
c(&EditedMessage::dialogId) == dialogId and
|
c(&EditedMessage::userId) == userId and
|
||||||
c(&EditedMessage::messageId) == messageId
|
c(&EditedMessage::dialogId) == dialogId and
|
||||||
)
|
c(&EditedMessage::messageId) == messageId
|
||||||
) > 0;
|
)
|
||||||
|
) > 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();
|
_ttlCheckTimer.cancel();
|
||||||
const auto now = base::unixtime::now();
|
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();
|
_ttlMessages.begin()->second.front()->destroy();
|
||||||
} else {
|
|
||||||
_ttlMessages.begin()->second.front()->setAyuHint(settings->deletedMark);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scheduleNextTTLs();
|
scheduleNextTTLs();
|
||||||
|
|
|
@ -3264,7 +3264,9 @@ void HistoryWidget::messagesReceived(
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
const MTPmessages_Messages &messages,
|
const MTPmessages_Messages &messages,
|
||||||
int requestId) {
|
int requestId) {
|
||||||
Expects(_history != nullptr);
|
if (!_history) {
|
||||||
|
return; // AyuGram: fix crash when using `saveDeletedMessages`
|
||||||
|
}
|
||||||
|
|
||||||
const auto toMigrated = (peer == _peer->migrateFrom());
|
const auto toMigrated = (peer == _peer->migrateFrom());
|
||||||
if (peer != _peer && !toMigrated) {
|
if (peer != _peer && !toMigrated) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue