mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-06 15:13:57 +02:00
chore: sync database schema & refactor & reformat
This commit is contained in:
parent
adb5abf4fb
commit
d4a22a5110
49 changed files with 601 additions and 549 deletions
|
@ -116,8 +116,8 @@ PRIVATE
|
||||||
ayu/utils/telegram_helpers.h
|
ayu/utils/telegram_helpers.h
|
||||||
ayu/utils/windows_utils.cpp
|
ayu/utils/windows_utils.cpp
|
||||||
ayu/utils/windows_utils.h
|
ayu/utils/windows_utils.h
|
||||||
ayu/ui/ayu_assets.cpp
|
ayu/ui/ayu_logo.cpp
|
||||||
ayu/ui/ayu_assets.h
|
ayu/ui/ayu_logo.h
|
||||||
ayu/ui/utils/ayu_profile_values.cpp
|
ayu/ui/utils/ayu_profile_values.cpp
|
||||||
ayu/ui/utils/ayu_profile_values.h
|
ayu/ui/utils/ayu_profile_values.h
|
||||||
ayu/ui/settings/icon_picker.cpp
|
ayu/ui/settings/icon_picker.cpp
|
||||||
|
@ -148,8 +148,6 @@ PRIVATE
|
||||||
ayu/ui/boxes/message_shot_box.h
|
ayu/ui/boxes/message_shot_box.h
|
||||||
ayu/ui/components/image_view.cpp
|
ayu/ui/components/image_view.cpp
|
||||||
ayu/ui/components/image_view.h
|
ayu/ui/components/image_view.h
|
||||||
ayu/messages/ayu_messages_controller.cpp
|
|
||||||
ayu/messages/ayu_messages_controller.h
|
|
||||||
ayu/libs/json.hpp
|
ayu/libs/json.hpp
|
||||||
ayu/libs/json_ext.hpp
|
ayu/libs/json_ext.hpp
|
||||||
ayu/libs/sqlite/sqlite3.c
|
ayu/libs/sqlite/sqlite3.c
|
||||||
|
@ -160,9 +158,11 @@ PRIVATE
|
||||||
ayu/features/streamer_mode/streamer_mode.h
|
ayu/features/streamer_mode/streamer_mode.h
|
||||||
ayu/features/messageshot/message_shot.cpp
|
ayu/features/messageshot/message_shot.cpp
|
||||||
ayu/features/messageshot/message_shot.h
|
ayu/features/messageshot/message_shot.h
|
||||||
ayu/database/entities.h
|
ayu/data/messages_storage.cpp
|
||||||
ayu/database/ayu_database.cpp
|
ayu/data/messages_storage.h
|
||||||
ayu/database/ayu_database.h
|
ayu/data/entities.h
|
||||||
|
ayu/data/ayu_database.cpp
|
||||||
|
ayu/data/ayu_database.h
|
||||||
|
|
||||||
api/api_attached_stickers.cpp
|
api/api_attached_stickers.cpp
|
||||||
api/api_attached_stickers.h
|
api/api_attached_stickers.h
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include "ayu_lang.h"
|
#include "ayu_lang.h"
|
||||||
#include "ayu_worker.h"
|
#include "ayu_worker.h"
|
||||||
#include "ayu/ayu_settings.h"
|
#include "ayu/ayu_settings.h"
|
||||||
#include "ayu/database/ayu_database.h"
|
#include "ayu/data/ayu_database.h"
|
||||||
#include "lang/lang_instance.h"
|
#include "lang/lang_instance.h"
|
||||||
|
|
||||||
namespace AyuInfra {
|
namespace AyuInfra {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
// Copyright @Radolyn, 2023
|
// Copyright @Radolyn, 2023
|
||||||
#include "ayu_settings.h"
|
#include "ayu_settings.h"
|
||||||
|
|
||||||
#include "ayu/ui/ayu_assets.h"
|
#include "ayu/ui/ayu_logo.h"
|
||||||
|
|
||||||
#include "lang_auto.h"
|
#include "lang_auto.h"
|
||||||
#include "core/application.h"
|
#include "core/application.h"
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include "base/unixtime.h"
|
#include "base/unixtime.h"
|
||||||
#include "core/application.h"
|
#include "core/application.h"
|
||||||
#include "data/data_user.h"
|
#include "data/data_user.h"
|
||||||
#include "database/entities.h"
|
#include "data/entities.h"
|
||||||
#include "main/main_account.h"
|
#include "main/main_account.h"
|
||||||
#include "main/main_domain.h"
|
#include "main/main_domain.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
|
|
210
Telegram/SourceFiles/ayu/data/ayu_database.cpp
Normal file
210
Telegram/SourceFiles/ayu/data/ayu_database.cpp
Normal file
|
@ -0,0 +1,210 @@
|
||||||
|
// This is the source code of AyuGram for Desktop.
|
||||||
|
//
|
||||||
|
// We do not and cannot prevent the use of our code,
|
||||||
|
// but be respectful and credit the original author.
|
||||||
|
//
|
||||||
|
// Copyright @Radolyn, 2023
|
||||||
|
#include "ayu_database.h"
|
||||||
|
|
||||||
|
#include <ranges>
|
||||||
|
|
||||||
|
#include "entities.h"
|
||||||
|
#include "ayu/libs/sqlite/sqlite_orm.h"
|
||||||
|
|
||||||
|
#include "base/unixtime.h"
|
||||||
|
|
||||||
|
using namespace sqlite_orm;
|
||||||
|
auto storage = make_storage(
|
||||||
|
"./tdata/ayudata.db",
|
||||||
|
make_table(
|
||||||
|
"DeletedMessage",
|
||||||
|
make_column("fakeId", &DeletedMessage::fakeId, primary_key().autoincrement()),
|
||||||
|
make_column("userId", &DeletedMessage::userId),
|
||||||
|
make_column("dialogId", &DeletedMessage::dialogId),
|
||||||
|
make_column("groupedId", &DeletedMessage::groupedId),
|
||||||
|
make_column("peerId", &DeletedMessage::peerId),
|
||||||
|
make_column("fromId", &DeletedMessage::fromId),
|
||||||
|
make_column("topicId", &DeletedMessage::topicId),
|
||||||
|
make_column("messageId", &DeletedMessage::messageId),
|
||||||
|
make_column("date", &DeletedMessage::date),
|
||||||
|
make_column("flags", &DeletedMessage::flags),
|
||||||
|
make_column("editDate", &DeletedMessage::editDate),
|
||||||
|
make_column("views", &DeletedMessage::views),
|
||||||
|
make_column("fwdFlags", &DeletedMessage::fwdFlags),
|
||||||
|
make_column("fwdFromId", &DeletedMessage::fwdFromId),
|
||||||
|
make_column("fwdName", &DeletedMessage::fwdName),
|
||||||
|
make_column("fwdDate", &DeletedMessage::fwdDate),
|
||||||
|
make_column("fwdPostAuthor", &DeletedMessage::fwdPostAuthor),
|
||||||
|
make_column("replyFlags", &DeletedMessage::replyFlags),
|
||||||
|
make_column("replyMessageId", &DeletedMessage::replyMessageId),
|
||||||
|
make_column("replyPeerId", &DeletedMessage::replyPeerId),
|
||||||
|
make_column("replyTopId", &DeletedMessage::replyTopId),
|
||||||
|
make_column("replyForumTopic", &DeletedMessage::replyForumTopic),
|
||||||
|
make_column("replySerialized", &DeletedMessage::replySerialized),
|
||||||
|
make_column("entityCreateDate", &DeletedMessage::entityCreateDate),
|
||||||
|
make_column("text", &DeletedMessage::text),
|
||||||
|
make_column("textEntities", &DeletedMessage::textEntities),
|
||||||
|
make_column("mediaPath", &DeletedMessage::mediaPath),
|
||||||
|
make_column("hqThumbPath", &DeletedMessage::hqThumbPath),
|
||||||
|
make_column("documentType", &DeletedMessage::documentType),
|
||||||
|
make_column("documentSerialized", &DeletedMessage::documentSerialized),
|
||||||
|
make_column("thumbsSerialized", &DeletedMessage::thumbsSerialized),
|
||||||
|
make_column("documentAttributesSerialized", &DeletedMessage::documentAttributesSerialized),
|
||||||
|
make_column("mimeType", &DeletedMessage::mimeType)
|
||||||
|
),
|
||||||
|
make_table(
|
||||||
|
"EditedMessage",
|
||||||
|
make_column("fakeId", &EditedMessage::fakeId, primary_key().autoincrement()),
|
||||||
|
make_column("userId", &EditedMessage::userId),
|
||||||
|
make_column("dialogId", &EditedMessage::dialogId),
|
||||||
|
make_column("groupedId", &EditedMessage::groupedId),
|
||||||
|
make_column("peerId", &EditedMessage::peerId),
|
||||||
|
make_column("fromId", &EditedMessage::fromId),
|
||||||
|
make_column("topicId", &EditedMessage::topicId),
|
||||||
|
make_column("messageId", &EditedMessage::messageId),
|
||||||
|
make_column("date", &EditedMessage::date),
|
||||||
|
make_column("flags", &EditedMessage::flags),
|
||||||
|
make_column("editDate", &EditedMessage::editDate),
|
||||||
|
make_column("views", &EditedMessage::views),
|
||||||
|
make_column("fwdFlags", &EditedMessage::fwdFlags),
|
||||||
|
make_column("fwdFromId", &EditedMessage::fwdFromId),
|
||||||
|
make_column("fwdName", &EditedMessage::fwdName),
|
||||||
|
make_column("fwdDate", &EditedMessage::fwdDate),
|
||||||
|
make_column("fwdPostAuthor", &EditedMessage::fwdPostAuthor),
|
||||||
|
make_column("replyFlags", &EditedMessage::replyFlags),
|
||||||
|
make_column("replyMessageId", &EditedMessage::replyMessageId),
|
||||||
|
make_column("replyPeerId", &EditedMessage::replyPeerId),
|
||||||
|
make_column("replyTopId", &EditedMessage::replyTopId),
|
||||||
|
make_column("replyForumTopic", &EditedMessage::replyForumTopic),
|
||||||
|
make_column("replySerialized", &EditedMessage::replySerialized),
|
||||||
|
make_column("entityCreateDate", &EditedMessage::entityCreateDate),
|
||||||
|
make_column("text", &EditedMessage::text),
|
||||||
|
make_column("textEntities", &EditedMessage::textEntities),
|
||||||
|
make_column("mediaPath", &EditedMessage::mediaPath),
|
||||||
|
make_column("hqThumbPath", &EditedMessage::hqThumbPath),
|
||||||
|
make_column("documentType", &EditedMessage::documentType),
|
||||||
|
make_column("documentSerialized", &EditedMessage::documentSerialized),
|
||||||
|
make_column("thumbsSerialized", &EditedMessage::thumbsSerialized),
|
||||||
|
make_column("documentAttributesSerialized", &EditedMessage::documentAttributesSerialized),
|
||||||
|
make_column("mimeType", &EditedMessage::mimeType)
|
||||||
|
),
|
||||||
|
make_table(
|
||||||
|
"DeletedDialog",
|
||||||
|
make_column("fakeId", &DeletedDialog::fakeId, primary_key().autoincrement()),
|
||||||
|
make_column("userId", &DeletedDialog::userId),
|
||||||
|
make_column("dialogId", &DeletedDialog::dialogId),
|
||||||
|
make_column("peerId", &DeletedDialog::peerId),
|
||||||
|
make_column("folderId", &DeletedDialog::folderId),
|
||||||
|
make_column("topMessage", &DeletedDialog::topMessage),
|
||||||
|
make_column("lastMessageDate", &DeletedDialog::lastMessageDate),
|
||||||
|
make_column("flags", &DeletedDialog::flags),
|
||||||
|
make_column("entityCreateDate", &DeletedDialog::entityCreateDate)
|
||||||
|
),
|
||||||
|
make_table(
|
||||||
|
"RegexFilter",
|
||||||
|
make_column("id", &RegexFilter::id),
|
||||||
|
make_column("text", &RegexFilter::text),
|
||||||
|
make_column("enabled", &RegexFilter::enabled),
|
||||||
|
make_column("caseInsensitive", &RegexFilter::caseInsensitive),
|
||||||
|
make_column("dialogId", &RegexFilter::dialogId)
|
||||||
|
),
|
||||||
|
make_table(
|
||||||
|
"RegexFilterGlobalExclusion",
|
||||||
|
make_column("fakeId", &RegexFilterGlobalExclusion::fakeId, primary_key().autoincrement()),
|
||||||
|
make_column("dialogId", &RegexFilterGlobalExclusion::dialogId),
|
||||||
|
make_column("filterId", &RegexFilterGlobalExclusion::filterId)
|
||||||
|
),
|
||||||
|
make_table(
|
||||||
|
"SpyMessageRead",
|
||||||
|
make_column("fakeId", &SpyMessageRead::fakeId, primary_key().autoincrement()),
|
||||||
|
make_column("userId", &SpyMessageRead::userId),
|
||||||
|
make_column("dialogId", &SpyMessageRead::dialogId),
|
||||||
|
make_column("messageId", &SpyMessageRead::messageId),
|
||||||
|
make_column("entityCreateDate", &SpyMessageRead::entityCreateDate)
|
||||||
|
),
|
||||||
|
make_table(
|
||||||
|
"SpyMessageContentsRead",
|
||||||
|
make_column("fakeId", &SpyMessageContentsRead::fakeId, primary_key().autoincrement()),
|
||||||
|
make_column("userId", &SpyMessageContentsRead::userId),
|
||||||
|
make_column("dialogId", &SpyMessageContentsRead::dialogId),
|
||||||
|
make_column("messageId", &SpyMessageContentsRead::messageId),
|
||||||
|
make_column("entityCreateDate", &SpyMessageContentsRead::entityCreateDate)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
namespace AyuDatabase {
|
||||||
|
|
||||||
|
void moveCurrentDatabase() {
|
||||||
|
auto time = base::unixtime::now();
|
||||||
|
|
||||||
|
if (std::filesystem::exists("./tdata/ayudata.db")) {
|
||||||
|
std::filesystem::rename("./tdata/ayudata.db", QString("./tdata/ayudata_%1.db").arg(time).toStdString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (std::filesystem::exists("./tdata/ayudata.db-shm")) {
|
||||||
|
std::filesystem::rename("./tdata/ayudata.db-shm",
|
||||||
|
QString("./tdata/ayudata_%1.db-shm").arg(time).toStdString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (std::filesystem::exists("./tdata/ayudata.db-wal")) {
|
||||||
|
std::filesystem::rename("./tdata/ayudata.db-wal",
|
||||||
|
QString("./tdata/ayudata_%1.db-wal").arg(time).toStdString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void initialize() {
|
||||||
|
const auto res = storage.sync_schema_simulate(true);
|
||||||
|
auto movePrevious = false;
|
||||||
|
for (const auto val : res | std::views::values) {
|
||||||
|
if (val == sync_schema_result::dropped_and_recreated) {
|
||||||
|
movePrevious = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (movePrevious) {
|
||||||
|
moveCurrentDatabase();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
storage.sync_schema(true);
|
||||||
|
} catch (...) {
|
||||||
|
LOG(("Failed to sync database schema"));
|
||||||
|
LOG(("Moving current database just in case"));
|
||||||
|
|
||||||
|
moveCurrentDatabase();
|
||||||
|
|
||||||
|
storage.sync_schema();
|
||||||
|
}
|
||||||
|
|
||||||
|
storage.begin_transaction();
|
||||||
|
storage.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void addEditedMessage(const EditedMessage &message) {
|
||||||
|
storage.begin_transaction();
|
||||||
|
storage.insert(message);
|
||||||
|
storage.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<EditedMessage> getEditedMessages(ID userId, ID dialogId, ID messageId) {
|
||||||
|
return storage.get_all<EditedMessage>(
|
||||||
|
where(
|
||||||
|
c(&EditedMessage::userId) == userId and
|
||||||
|
c(&EditedMessage::dialogId) == dialogId and
|
||||||
|
c(&EditedMessage::messageId) == messageId
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -7,8 +7,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "entities.h"
|
#include "entities.h"
|
||||||
#include "history/history.h"
|
|
||||||
#include "history/history_item.h"
|
|
||||||
|
|
||||||
namespace AyuDatabase {
|
namespace AyuDatabase {
|
||||||
|
|
|
@ -36,6 +36,7 @@ public:
|
||||||
ID replyPeerId;
|
ID replyPeerId;
|
||||||
int replyTopId;
|
int replyTopId;
|
||||||
bool replyForumTopic;
|
bool replyForumTopic;
|
||||||
|
std::vector<char> replySerialized;
|
||||||
int entityCreateDate;
|
int entityCreateDate;
|
||||||
std::string text;
|
std::string text;
|
||||||
std::vector<char> textEntities;
|
std::vector<char> textEntities;
|
||||||
|
@ -49,6 +50,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
using DeletedMessage = AyuMessageBase<struct DeletedMessageTag>;
|
using DeletedMessage = AyuMessageBase<struct DeletedMessageTag>;
|
||||||
|
|
||||||
using EditedMessage = AyuMessageBase<struct EditedMessageTag>;
|
using EditedMessage = AyuMessageBase<struct EditedMessageTag>;
|
||||||
|
|
||||||
class DeletedDialog
|
class DeletedDialog
|
||||||
|
@ -58,8 +60,47 @@ public:
|
||||||
ID userId;
|
ID userId;
|
||||||
ID dialogId;
|
ID dialogId;
|
||||||
ID peerId;
|
ID peerId;
|
||||||
|
std::unique_ptr<int> folderId; // nullable
|
||||||
int topMessage;
|
int topMessage;
|
||||||
int lastMessageDate;
|
int lastMessageDate;
|
||||||
int flags;
|
int flags;
|
||||||
int entityCreateDate;
|
int entityCreateDate;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class RegexFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::vector<char> id;
|
||||||
|
std::string text;
|
||||||
|
bool enabled;
|
||||||
|
bool caseInsensitive;
|
||||||
|
std::unique_ptr<ID> dialogId; // nullable
|
||||||
|
};
|
||||||
|
|
||||||
|
class RegexFilterGlobalExclusion
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ID fakeId;
|
||||||
|
ID dialogId;
|
||||||
|
std::vector<char> filterId;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SpyMessageRead
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ID fakeId;
|
||||||
|
ID userId;
|
||||||
|
ID dialogId;
|
||||||
|
int messageId;
|
||||||
|
int entityCreateDate;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SpyMessageContentsRead
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ID fakeId;
|
||||||
|
ID userId;
|
||||||
|
ID dialogId;
|
||||||
|
int messageId;
|
||||||
|
int entityCreateDate;
|
||||||
|
};
|
|
@ -4,10 +4,10 @@
|
||||||
// but be respectful and credit the original author.
|
// but be respectful and credit the original author.
|
||||||
//
|
//
|
||||||
// Copyright @Radolyn, 2023
|
// Copyright @Radolyn, 2023
|
||||||
#include "ayu_messages_controller.h"
|
#include "messages_storage.h"
|
||||||
|
|
||||||
#include "ayu/ayu_constants.h"
|
#include "ayu/ayu_constants.h"
|
||||||
#include "ayu/database/ayu_database.h"
|
#include "ayu/data/ayu_database.h"
|
||||||
#include "ayu/utils/ayu_mapper.h"
|
#include "ayu/utils/ayu_mapper.h"
|
||||||
#include "ayu/utils/telegram_helpers.h"
|
#include "ayu/utils/telegram_helpers.h"
|
||||||
|
|
||||||
|
@ -24,21 +24,6 @@
|
||||||
|
|
||||||
namespace AyuMessages {
|
namespace AyuMessages {
|
||||||
|
|
||||||
std::optional<AyuMessagesController> controller = std::nullopt;
|
|
||||||
|
|
||||||
void initialize() {
|
|
||||||
if (controller.has_value()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
controller = AyuMessagesController();
|
|
||||||
}
|
|
||||||
|
|
||||||
AyuMessagesController &getInstance() {
|
|
||||||
initialize();
|
|
||||||
return controller.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
void map(HistoryMessageEdition &edition, not_null<HistoryItem*> item, EditedMessage &message) {
|
void map(HistoryMessageEdition &edition, not_null<HistoryItem*> item, EditedMessage &message) {
|
||||||
message.userId = item->history()->owner().session().userId().bare;
|
message.userId = item->history()->owner().session().userId().bare;
|
||||||
message.dialogId = getDialogIdFromPeer(item->history()->peer);
|
message.dialogId = getDialogIdFromPeer(item->history()->peer);
|
||||||
|
@ -61,11 +46,11 @@ void map(HistoryMessageEdition &edition, not_null<HistoryItem *> item, EditedMes
|
||||||
message.views = item->viewsCount();
|
message.views = item->viewsCount();
|
||||||
message.entityCreateDate = base::unixtime::now(); // todo: rework
|
message.entityCreateDate = base::unixtime::now(); // todo: rework
|
||||||
|
|
||||||
auto serializedText = serializeTextWithEntities(item);
|
auto serializedText = AyuMapper::serializeTextWithEntities(item);
|
||||||
message.text = serializedText.first;
|
message.text = serializedText.first;
|
||||||
// message.textEntities = serializedText.second;
|
message.textEntities = serializedText.second;
|
||||||
|
|
||||||
// todo:
|
// todo: implement mapping
|
||||||
message.mediaPath = "/";
|
message.mediaPath = "/";
|
||||||
message.documentType = DOCUMENT_TYPE_NONE;
|
message.documentType = DOCUMENT_TYPE_NONE;
|
||||||
|
|
||||||
|
@ -75,14 +60,14 @@ void map(HistoryMessageEdition &edition, not_null<HistoryItem *> item, EditedMes
|
||||||
// message.mimeType;
|
// message.mimeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AyuMessagesController::addEditedMessage(HistoryMessageEdition &edition, not_null<HistoryItem *> item) {
|
void addEditedMessage(HistoryMessageEdition &edition, not_null<HistoryItem*> item) {
|
||||||
EditedMessage message;
|
EditedMessage message;
|
||||||
map(edition, item, message);
|
map(edition, item, message);
|
||||||
|
|
||||||
AyuDatabase::addEditedMessage(message);
|
AyuDatabase::addEditedMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<EditedMessage> AyuMessagesController::getEditedMessages(HistoryItem *item) {
|
std::vector<EditedMessage> getEditedMessages(not_null<HistoryItem*> item) {
|
||||||
auto userId = item->history()->owner().session().userId().bare;
|
auto userId = item->history()->owner().session().userId().bare;
|
||||||
auto dialogId = getDialogIdFromPeer(item->history()->peer);
|
auto dialogId = getDialogIdFromPeer(item->history()->peer);
|
||||||
auto msgId = item->id.bare;
|
auto msgId = item->id.bare;
|
||||||
|
@ -90,7 +75,7 @@ std::vector<EditedMessage> AyuMessagesController::getEditedMessages(HistoryItem
|
||||||
return AyuDatabase::getEditedMessages(userId, dialogId, msgId);
|
return AyuDatabase::getEditedMessages(userId, dialogId, msgId);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AyuMessagesController::hasRevisions(not_null<HistoryItem *> item) {
|
bool hasRevisions(not_null<HistoryItem*> item) {
|
||||||
auto userId = item->history()->owner().session().userId().bare;
|
auto userId = item->history()->owner().session().userId().bare;
|
||||||
auto dialogId = getDialogIdFromPeer(item->history()->peer);
|
auto dialogId = getDialogIdFromPeer(item->history()->peer);
|
||||||
auto msgId = item->id.bare;
|
auto msgId = item->id.bare;
|
19
Telegram/SourceFiles/ayu/data/messages_storage.h
Normal file
19
Telegram/SourceFiles/ayu/data/messages_storage.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// This is the source code of AyuGram for Desktop.
|
||||||
|
//
|
||||||
|
// We do not and cannot prevent the use of our code,
|
||||||
|
// but be respectful and credit the original author.
|
||||||
|
//
|
||||||
|
// Copyright @Radolyn, 2023
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "entities.h"
|
||||||
|
|
||||||
|
#include "history/history_item_edition.h"
|
||||||
|
|
||||||
|
namespace AyuMessages {
|
||||||
|
|
||||||
|
void addEditedMessage(HistoryMessageEdition &edition, not_null<HistoryItem*> item);
|
||||||
|
std::vector<EditedMessage> getEditedMessages(not_null<HistoryItem*> item);
|
||||||
|
bool hasRevisions(not_null<HistoryItem*> item);
|
||||||
|
|
||||||
|
}
|
|
@ -1,163 +0,0 @@
|
||||||
// This is the source code of AyuGram for Desktop.
|
|
||||||
//
|
|
||||||
// We do not and cannot prevent the use of our code,
|
|
||||||
// but be respectful and credit the original author.
|
|
||||||
//
|
|
||||||
// Copyright @Radolyn, 2023
|
|
||||||
#include "ayu_database.h"
|
|
||||||
|
|
||||||
#include "entities.h"
|
|
||||||
#include "ayu/libs/sqlite/sqlite_orm.h"
|
|
||||||
|
|
||||||
#include "base/unixtime.h"
|
|
||||||
|
|
||||||
using namespace sqlite_orm;
|
|
||||||
|
|
||||||
auto storage = make_storage("./tdata/ayudata.db",
|
|
||||||
make_table("DeletedMessage",
|
|
||||||
make_column("userId", &DeletedMessage::userId),
|
|
||||||
make_column("dialogId", &DeletedMessage::dialogId),
|
|
||||||
make_column("groupedId", &DeletedMessage::groupedId),
|
|
||||||
make_column("peerId", &DeletedMessage::peerId),
|
|
||||||
make_column("fromId", &DeletedMessage::fromId),
|
|
||||||
make_column("topicId", &DeletedMessage::topicId),
|
|
||||||
make_column("messageId", &DeletedMessage::messageId),
|
|
||||||
make_column("date", &DeletedMessage::date),
|
|
||||||
make_column("flags", &DeletedMessage::flags),
|
|
||||||
make_column("editDate", &DeletedMessage::editDate),
|
|
||||||
make_column("views", &DeletedMessage::views),
|
|
||||||
make_column("fwdFlags", &DeletedMessage::fwdFlags),
|
|
||||||
make_column("fwdFromId", &DeletedMessage::fwdFromId),
|
|
||||||
make_column("fwdName", &DeletedMessage::fwdName),
|
|
||||||
make_column("fwdDate", &DeletedMessage::fwdDate),
|
|
||||||
make_column("fwdPostAuthor", &DeletedMessage::fwdPostAuthor),
|
|
||||||
make_column("replyFlags", &DeletedMessage::replyFlags),
|
|
||||||
make_column("replyMessageId", &DeletedMessage::replyMessageId),
|
|
||||||
make_column("replyPeerId", &DeletedMessage::replyPeerId),
|
|
||||||
make_column("replyTopId", &DeletedMessage::replyTopId),
|
|
||||||
make_column("replyForumTopic", &DeletedMessage::replyForumTopic),
|
|
||||||
make_column("entityCreateDate", &DeletedMessage::entityCreateDate),
|
|
||||||
make_column("text", &DeletedMessage::text),
|
|
||||||
make_column("textEntities", &DeletedMessage::textEntities),
|
|
||||||
make_column("mediaPath", &DeletedMessage::mediaPath),
|
|
||||||
make_column("hqThumbPath", &DeletedMessage::hqThumbPath),
|
|
||||||
make_column("documentType", &DeletedMessage::documentType),
|
|
||||||
make_column("documentSerialized", &DeletedMessage::documentSerialized),
|
|
||||||
make_column("thumbsSerialized", &DeletedMessage::thumbsSerialized),
|
|
||||||
make_column("documentAttributesSerialized",
|
|
||||||
&DeletedMessage::documentAttributesSerialized),
|
|
||||||
make_column("mimeType", &DeletedMessage::mimeType)
|
|
||||||
),
|
|
||||||
make_table("EditedMessage",
|
|
||||||
make_column("userId", &EditedMessage::userId),
|
|
||||||
make_column("dialogId", &EditedMessage::dialogId),
|
|
||||||
make_column("groupedId", &EditedMessage::groupedId),
|
|
||||||
make_column("peerId", &EditedMessage::peerId),
|
|
||||||
make_column("fromId", &EditedMessage::fromId),
|
|
||||||
make_column("topicId", &EditedMessage::topicId),
|
|
||||||
make_column("messageId", &EditedMessage::messageId),
|
|
||||||
make_column("date", &EditedMessage::date),
|
|
||||||
make_column("flags", &EditedMessage::flags),
|
|
||||||
make_column("editDate", &EditedMessage::editDate),
|
|
||||||
make_column("views", &EditedMessage::views),
|
|
||||||
make_column("fwdFlags", &EditedMessage::fwdFlags),
|
|
||||||
make_column("fwdFromId", &EditedMessage::fwdFromId),
|
|
||||||
make_column("fwdName", &EditedMessage::fwdName),
|
|
||||||
make_column("fwdDate", &EditedMessage::fwdDate),
|
|
||||||
make_column("fwdPostAuthor", &EditedMessage::fwdPostAuthor),
|
|
||||||
make_column("replyFlags", &EditedMessage::replyFlags),
|
|
||||||
make_column("replyMessageId", &EditedMessage::replyMessageId),
|
|
||||||
make_column("replyPeerId", &EditedMessage::replyPeerId),
|
|
||||||
make_column("replyTopId", &EditedMessage::replyTopId),
|
|
||||||
make_column("replyForumTopic", &EditedMessage::replyForumTopic),
|
|
||||||
make_column("entityCreateDate", &EditedMessage::entityCreateDate),
|
|
||||||
make_column("text", &EditedMessage::text),
|
|
||||||
make_column("textEntities", &EditedMessage::textEntities),
|
|
||||||
make_column("mediaPath", &EditedMessage::mediaPath),
|
|
||||||
make_column("hqThumbPath", &EditedMessage::hqThumbPath),
|
|
||||||
make_column("documentType", &EditedMessage::documentType),
|
|
||||||
make_column("documentSerialized", &EditedMessage::documentSerialized),
|
|
||||||
make_column("thumbsSerialized", &EditedMessage::thumbsSerialized),
|
|
||||||
make_column("documentAttributesSerialized",
|
|
||||||
&EditedMessage::documentAttributesSerialized),
|
|
||||||
make_column("mimeType", &EditedMessage::mimeType)
|
|
||||||
),
|
|
||||||
make_table("DeletedDialog",
|
|
||||||
make_column("userId", &DeletedDialog::userId),
|
|
||||||
make_column("dialogId", &DeletedDialog::dialogId),
|
|
||||||
make_column("peerId", &DeletedDialog::peerId),
|
|
||||||
make_column("topMessage", &DeletedDialog::topMessage),
|
|
||||||
make_column("lastMessageDate", &DeletedDialog::lastMessageDate),
|
|
||||||
make_column("flags", &DeletedDialog::flags),
|
|
||||||
make_column("entityCreateDate", &DeletedDialog::entityCreateDate)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
namespace AyuDatabase {
|
|
||||||
|
|
||||||
void initialize() {
|
|
||||||
// move to `tdata` from legacy version
|
|
||||||
if (std::filesystem::exists("ayugram.db")) {
|
|
||||||
try {
|
|
||||||
std::filesystem::rename("ayugram.db", "./tdata/ayudata.db");
|
|
||||||
} catch (std::filesystem::filesystem_error &e) {
|
|
||||||
LOG(("Failed to move database: %1").arg(e.what()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
storage.sync_schema();
|
|
||||||
} catch (...) {
|
|
||||||
auto time = base::unixtime::now();
|
|
||||||
|
|
||||||
LOG(("Failed to sync database schema"));
|
|
||||||
LOG(("Moving current database just in case"));
|
|
||||||
|
|
||||||
if (std::filesystem::exists("./tdata/ayudata.db")) {
|
|
||||||
std::filesystem::rename("./tdata/ayudata.db", QString("./tdata/ayudata_%1.db").arg(time).toStdString());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (std::filesystem::exists("./tdata/ayudata.db-shm")) {
|
|
||||||
std::filesystem::rename("./tdata/ayudata.db-shm",
|
|
||||||
QString("./tdata/ayudata_%1.db-shm").arg(time).toStdString());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (std::filesystem::exists("./tdata/ayudata.db-wal")) {
|
|
||||||
std::filesystem::rename("./tdata/ayudata.db-wal",
|
|
||||||
QString("./tdata/ayudata_%1.db-wal").arg(time).toStdString());
|
|
||||||
}
|
|
||||||
|
|
||||||
storage.sync_schema();
|
|
||||||
}
|
|
||||||
|
|
||||||
storage.begin_transaction();
|
|
||||||
storage.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
void addEditedMessage(const EditedMessage &message) {
|
|
||||||
storage.begin_transaction();
|
|
||||||
storage.insert(message);
|
|
||||||
storage.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<EditedMessage> getEditedMessages(ID userId, ID dialogId, ID messageId) {
|
|
||||||
return storage.get_all<EditedMessage>(
|
|
||||||
where(
|
|
||||||
c(&EditedMessage::userId) == userId and
|
|
||||||
c(&EditedMessage::dialogId) == dialogId and
|
|
||||||
c(&EditedMessage::messageId) == messageId
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
// This is the source code of AyuGram for Desktop.
|
|
||||||
//
|
|
||||||
// We do not and cannot prevent the use of our code,
|
|
||||||
// but be respectful and credit the original author.
|
|
||||||
//
|
|
||||||
// Copyright @Radolyn, 2023
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "ayu/database/entities.h"
|
|
||||||
|
|
||||||
#include "history/history_item_edition.h"
|
|
||||||
|
|
||||||
namespace AyuMessages {
|
|
||||||
|
|
||||||
class AyuMessagesController
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void addEditedMessage(HistoryMessageEdition &edition, not_null<HistoryItem *> item);
|
|
||||||
std::vector<EditedMessage> getEditedMessages(HistoryItem *item);
|
|
||||||
bool hasRevisions(not_null<HistoryItem *> item);
|
|
||||||
};
|
|
||||||
|
|
||||||
AyuMessagesController &getInstance();
|
|
||||||
|
|
||||||
}
|
|
|
@ -4,7 +4,7 @@
|
||||||
// but be respectful and credit the original author.
|
// but be respectful and credit the original author.
|
||||||
//
|
//
|
||||||
// Copyright @Radolyn, 2023
|
// Copyright @Radolyn, 2023
|
||||||
#include "ayu_assets.h"
|
#include "ayu_logo.h"
|
||||||
#include "ayu/ayu_settings.h"
|
#include "ayu/ayu_settings.h"
|
||||||
|
|
||||||
static QString LAST_LOADED_NAME;
|
static QString LAST_LOADED_NAME;
|
|
@ -13,7 +13,7 @@
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "ayu/ayu_settings.h"
|
#include "ayu/ayu_settings.h"
|
||||||
#include "ayu/ayu_state.h"
|
#include "ayu/ayu_state.h"
|
||||||
#include "ayu/messages/ayu_messages_controller.h"
|
#include "../../data/messages_storage.h"
|
||||||
#include "ayu/ui/context_menu/menu_item_subtext.h"
|
#include "ayu/ui/context_menu/menu_item_subtext.h"
|
||||||
#include "ayu/utils/qt_key_modifiers_extended.h"
|
#include "ayu/utils/qt_key_modifiers_extended.h"
|
||||||
#include "history/history_item_components.h"
|
#include "history/history_item_components.h"
|
||||||
|
@ -37,7 +37,7 @@ bool needToShowItem(int state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddHistoryAction(not_null<Ui::PopupMenu*> menu, HistoryItem *item) {
|
void AddHistoryAction(not_null<Ui::PopupMenu*> menu, HistoryItem *item) {
|
||||||
if (AyuMessages::getInstance().hasRevisions(item)) {
|
if (AyuMessages::hasRevisions(item)) {
|
||||||
menu->addAction(tr::ayu_EditsHistoryMenuText(tr::now),
|
menu->addAction(tr::ayu_EditsHistoryMenuText(tr::now),
|
||||||
[=]
|
[=]
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "qguiapplication.h"
|
#include "qguiapplication.h"
|
||||||
#include "ayu/database/entities.h"
|
#include "ayu/data/entities.h"
|
||||||
#include "ayu/utils/telegram_helpers.h"
|
#include "ayu/utils/telegram_helpers.h"
|
||||||
|
|
||||||
#include "base/unixtime.h"
|
#include "base/unixtime.h"
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
// Copyright @Radolyn, 2023
|
// Copyright @Radolyn, 2023
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ayu/database/entities.h"
|
#include "ayu/data/entities.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
|
|
||||||
#include "base/unique_qptr.h"
|
#include "base/unique_qptr.h"
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "mainwidget.h"
|
#include "mainwidget.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "api/api_attached_stickers.h"
|
#include "api/api_attached_stickers.h"
|
||||||
|
#include "ayu/data/messages_storage.h"
|
||||||
#include "ayu/ui/sections/edited/edited_log_section.h"
|
#include "ayu/ui/sections/edited/edited_log_section.h"
|
||||||
#include "base/call_delayed.h"
|
#include "base/call_delayed.h"
|
||||||
#include "base/unixtime.h"
|
#include "base/unixtime.h"
|
||||||
|
@ -53,7 +54,6 @@
|
||||||
#include "ui/widgets/popup_menu.h"
|
#include "ui/widgets/popup_menu.h"
|
||||||
#include "window/window_session_controller.h"
|
#include "window/window_session_controller.h"
|
||||||
|
|
||||||
#include <ayu/messages/ayu_messages_controller.h>
|
|
||||||
#include <QtGui/QClipboard>
|
#include <QtGui/QClipboard>
|
||||||
#include <QtWidgets/QApplication>
|
#include <QtWidgets/QApplication>
|
||||||
|
|
||||||
|
@ -650,7 +650,7 @@ void InnerWidget::restoreState(not_null<SectionMemento *> memento) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void InnerWidget::addEvents(Direction direction) {
|
void InnerWidget::addEvents(Direction direction) {
|
||||||
auto messages = AyuMessages::getInstance().getEditedMessages(_item);
|
auto messages = AyuMessages::getEditedMessages(_item);
|
||||||
if (messages.empty()) {
|
if (messages.empty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
//
|
//
|
||||||
// Copyright @Radolyn, 2023
|
// Copyright @Radolyn, 2023
|
||||||
#include "ayu/ui/sections/edited/edited_log_item.h"
|
#include "ayu/ui/sections/edited/edited_log_item.h"
|
||||||
#include <ayu/database/entities.h>
|
#include "ayu/data/entities.h"
|
||||||
|
|
||||||
#include "api/api_chat_participants.h"
|
#include "api/api_chat_participants.h"
|
||||||
#include "api/api_text_entities.h"
|
#include "api/api_text_entities.h"
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
// Copyright @Radolyn, 2023
|
// Copyright @Radolyn, 2023
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ayu/database/entities.h"
|
#include "ayu/data/entities.h"
|
||||||
|
|
||||||
class History;
|
class History;
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "core/application.h"
|
#include "core/application.h"
|
||||||
#include "styles/style_layers.h"
|
#include "styles/style_layers.h"
|
||||||
|
|
||||||
#include "ayu/ui/ayu_assets.h"
|
#include "ayu/ui/ayu_logo.h"
|
||||||
#include "main/main_domain.h"
|
#include "main/main_domain.h"
|
||||||
#include "styles/style_ayu_styles.h"
|
#include "styles/style_ayu_styles.h"
|
||||||
#include "ui/painter.h"
|
#include "ui/painter.h"
|
||||||
|
|
|
@ -12,6 +12,17 @@
|
||||||
|
|
||||||
namespace AyuMapper {
|
namespace AyuMapper {
|
||||||
|
|
||||||
|
std::pair<std::string, std::vector<char>> serializeTextWithEntities(not_null<HistoryItem*> item) {
|
||||||
|
if (item->emptyText()) {
|
||||||
|
return std::make_pair("", std::vector<char>());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto textWithEntities = item->originalText();
|
||||||
|
std::vector<char> entities; // todo: implement writing to buffer
|
||||||
|
|
||||||
|
return std::make_pair(textWithEntities.text.toStdString(), entities);
|
||||||
|
}
|
||||||
|
|
||||||
int mapItemFlagsToMTPFlags(not_null<HistoryItem*> item) {
|
int mapItemFlagsToMTPFlags(not_null<HistoryItem*> item) {
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
namespace AyuMapper {
|
namespace AyuMapper {
|
||||||
|
|
||||||
|
std::pair<std::string, std::vector<char>> serializeTextWithEntities(not_null<HistoryItem*> item);
|
||||||
int mapItemFlagsToMTPFlags(not_null<HistoryItem*> item);
|
int mapItemFlagsToMTPFlags(not_null<HistoryItem*> item);
|
||||||
|
|
||||||
} // namespace AyuMapper
|
} // namespace AyuMapper
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
#include "lang_auto.h"
|
#include "lang_auto.h"
|
||||||
#include "ayu/ayu_worker.h"
|
#include "ayu/ayu_worker.h"
|
||||||
#include "ayu/database/entities.h"
|
#include "ayu/data/entities.h"
|
||||||
#include "core/mime_type.h"
|
#include "core/mime_type.h"
|
||||||
#include "data/data_channel.h"
|
#include "data/data_channel.h"
|
||||||
#include "data/data_forum.h"
|
#include "data/data_forum.h"
|
||||||
|
@ -139,29 +139,6 @@ ID getDialogIdFromPeer(not_null<PeerData *> peer) {
|
||||||
return peerId;
|
return peerId;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<std::string, std::string> serializeTextWithEntities(not_null<HistoryItem *> item) {
|
|
||||||
if (item->emptyText()) {
|
|
||||||
return std::make_pair("", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
auto textWithEntities = item->originalText();
|
|
||||||
auto text = textWithEntities.text.toStdString();
|
|
||||||
auto entities = EntitiesToMTP(&item->history()->owner().session(),
|
|
||||||
textWithEntities.entities,
|
|
||||||
Api::ConvertOption::SkipLocal);
|
|
||||||
|
|
||||||
if (entities.v.isEmpty()) {
|
|
||||||
return std::make_pair(text, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
auto buff = mtpBuffer();
|
|
||||||
for (auto entity : entities.v) {
|
|
||||||
entity.write(buff);
|
|
||||||
}
|
|
||||||
|
|
||||||
return std::make_pair(text, std::string(reinterpret_cast<char *>(buff.data()), buff.size()));
|
|
||||||
}
|
|
||||||
|
|
||||||
ID getBareID(not_null<PeerData*> peer) {
|
ID getBareID(not_null<PeerData*> peer) {
|
||||||
return peerIsUser(peer->id)
|
return peerIsUser(peer->id)
|
||||||
? peerToUser(peer->id).bare
|
? peerToUser(peer->id).bare
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
// Copyright @Radolyn, 2023
|
// Copyright @Radolyn, 2023
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ayu/database/entities.h"
|
#include "ayu/data/entities.h"
|
||||||
|
|
||||||
#include "core/application.h"
|
#include "core/application.h"
|
||||||
#include "dialogs/dialogs_main_list.h"
|
#include "dialogs/dialogs_main_list.h"
|
||||||
|
@ -19,7 +19,6 @@ bool accountExists(ID userId);
|
||||||
void dispatchToMainThread(std::function<void()> callback, int delay = 0);
|
void dispatchToMainThread(std::function<void()> callback, int delay = 0);
|
||||||
not_null<History*> getHistoryFromDialogId(ID dialogId, Main::Session *session);
|
not_null<History*> getHistoryFromDialogId(ID dialogId, Main::Session *session);
|
||||||
ID getDialogIdFromPeer(not_null<PeerData*> peer);
|
ID getDialogIdFromPeer(not_null<PeerData*> peer);
|
||||||
std::pair<std::string, std::string> serializeTextWithEntities(not_null<HistoryItem *> item);
|
|
||||||
|
|
||||||
ID getBareID(not_null<PeerData*> peer);
|
ID getBareID(not_null<PeerData*> peer);
|
||||||
|
|
||||||
|
|
|
@ -78,8 +78,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
|
||||||
// AyuGram includes
|
// AyuGram includes
|
||||||
#include "ayu/ayu_settings.h"
|
#include "ayu/ayu_settings.h"
|
||||||
#include "ayu/database/ayu_database.h"
|
#include "ayu/data/ayu_database.h"
|
||||||
#include "ayu/messages/ayu_messages_controller.h"
|
#include "../ayu/data/messages_storage.h"
|
||||||
#include "ayu/ayu_state.h"
|
#include "ayu/ayu_state.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -2309,12 +2309,11 @@ void Session::updateEditedMessage(const MTPMessage &data) {
|
||||||
|
|
||||||
// AyuGram saveMessagesHistory
|
// AyuGram saveMessagesHistory
|
||||||
const auto settings = &AyuSettings::getInstance();
|
const auto settings = &AyuSettings::getInstance();
|
||||||
HistoryMessageEdition edit;
|
|
||||||
|
|
||||||
if (data.type() != mtpc_message) {
|
if (data.type() != mtpc_message) {
|
||||||
goto proceed;
|
goto proceed;
|
||||||
}
|
}
|
||||||
edit = HistoryMessageEdition(_session, data.c_message());
|
HistoryMessageEdition edit = HistoryMessageEdition(_session, data.c_message());
|
||||||
if (settings->saveMessagesHistory && !existing->isLocal() && !existing->author()->isSelf() && !edit.isEditHide) {
|
if (settings->saveMessagesHistory && !existing->isLocal() && !existing->author()->isSelf() && !edit.isEditHide) {
|
||||||
const auto msg = existing->originalText();
|
const auto msg = existing->originalText();
|
||||||
|
|
||||||
|
@ -2322,7 +2321,7 @@ void Session::updateEditedMessage(const MTPMessage &data) {
|
||||||
goto proceed;
|
goto proceed;
|
||||||
}
|
}
|
||||||
|
|
||||||
AyuMessages::getInstance().addEditedMessage(edit, existing);
|
AyuMessages::addEditedMessage(edit, existing);
|
||||||
}
|
}
|
||||||
|
|
||||||
proceed:
|
proceed:
|
||||||
|
|
|
@ -87,8 +87,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
|
||||||
// AyuGram includes
|
// AyuGram includes
|
||||||
#include "ayu/ayu_settings.h"
|
#include "ayu/ayu_settings.h"
|
||||||
#include "ayu/database/ayu_database.h"
|
#include "ayu/data/ayu_database.h"
|
||||||
#include "ayu/messages/ayu_messages_controller.h"
|
#include "../../ayu/data/messages_storage.h"
|
||||||
#include "ayu/ui/context_menu/context_menu.h"
|
#include "ayu/ui/context_menu/context_menu.h"
|
||||||
#include "ayu/ui/sections/edited/edited_log_section.h"
|
#include "ayu/ui/sections/edited/edited_log_section.h"
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "styles/style_window.h"
|
#include "styles/style_window.h"
|
||||||
|
|
||||||
// AyuGram includes
|
// AyuGram includes
|
||||||
#include "ayu/ui/ayu_assets.h"
|
#include "ayu/ui/ayu_logo.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Intro {
|
namespace Intro {
|
||||||
|
|
|
@ -29,7 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
|
|
||||||
// AyuGram includes
|
// AyuGram includes
|
||||||
#include "ayu/ui/ayu_assets.h"
|
#include "ayu/ui/ayu_logo.h"
|
||||||
#include "ui/painter.h"
|
#include "ui/painter.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include <kurlmimedata.h>
|
#include <kurlmimedata.h>
|
||||||
|
|
||||||
// AyuGram includes
|
// AyuGram includes
|
||||||
#include "ayu/ui/ayu_assets.h"
|
#include "ayu/ui/ayu_logo.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Window {
|
namespace Window {
|
||||||
|
|
Loading…
Add table
Reference in a new issue