chore: sync database schema & refactor & reformat

This commit is contained in:
ZavaruKitsu 2024-02-04 20:41:21 +03:00
parent adb5abf4fb
commit d4a22a5110
49 changed files with 601 additions and 549 deletions

View file

@ -116,8 +116,8 @@ PRIVATE
ayu/utils/telegram_helpers.h
ayu/utils/windows_utils.cpp
ayu/utils/windows_utils.h
ayu/ui/ayu_assets.cpp
ayu/ui/ayu_assets.h
ayu/ui/ayu_logo.cpp
ayu/ui/ayu_logo.h
ayu/ui/utils/ayu_profile_values.cpp
ayu/ui/utils/ayu_profile_values.h
ayu/ui/settings/icon_picker.cpp
@ -148,8 +148,6 @@ PRIVATE
ayu/ui/boxes/message_shot_box.h
ayu/ui/components/image_view.cpp
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_ext.hpp
ayu/libs/sqlite/sqlite3.c
@ -160,9 +158,11 @@ PRIVATE
ayu/features/streamer_mode/streamer_mode.h
ayu/features/messageshot/message_shot.cpp
ayu/features/messageshot/message_shot.h
ayu/database/entities.h
ayu/database/ayu_database.cpp
ayu/database/ayu_database.h
ayu/data/messages_storage.cpp
ayu/data/messages_storage.h
ayu/data/entities.h
ayu/data/ayu_database.cpp
ayu/data/ayu_database.h
api/api_attached_stickers.cpp
api/api_attached_stickers.h

View file

@ -9,7 +9,7 @@
#include "ayu_lang.h"
#include "ayu_worker.h"
#include "ayu/ayu_settings.h"
#include "ayu/database/ayu_database.h"
#include "ayu/data/ayu_database.h"
#include "lang/lang_instance.h"
namespace AyuInfra {

View file

@ -6,7 +6,7 @@
// Copyright @Radolyn, 2023
#include "ayu_settings.h"
#include "ayu/ui/ayu_assets.h"
#include "ayu/ui/ayu_logo.h"
#include "lang_auto.h"
#include "core/application.h"

View file

@ -11,7 +11,7 @@
#include "base/unixtime.h"
#include "core/application.h"
#include "data/data_user.h"
#include "database/entities.h"
#include "data/entities.h"
#include "main/main_account.h"
#include "main/main_domain.h"
#include "main/main_session.h"

View 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;
}
}

View file

@ -7,8 +7,6 @@
#pragma once
#include "entities.h"
#include "history/history.h"
#include "history/history_item.h"
namespace AyuDatabase {

View file

@ -36,6 +36,7 @@ public:
ID replyPeerId;
int replyTopId;
bool replyForumTopic;
std::vector<char> replySerialized;
int entityCreateDate;
std::string text;
std::vector<char> textEntities;
@ -49,6 +50,7 @@ public:
};
using DeletedMessage = AyuMessageBase<struct DeletedMessageTag>;
using EditedMessage = AyuMessageBase<struct EditedMessageTag>;
class DeletedDialog
@ -58,8 +60,47 @@ public:
ID userId;
ID dialogId;
ID peerId;
std::unique_ptr<int> folderId; // nullable
int topMessage;
int lastMessageDate;
int flags;
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;
};

View file

@ -4,10 +4,10 @@
// but be respectful and credit the original author.
//
// Copyright @Radolyn, 2023
#include "ayu_messages_controller.h"
#include "messages_storage.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/telegram_helpers.h"
@ -24,21 +24,6 @@
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) {
message.userId = item->history()->owner().session().userId().bare;
message.dialogId = getDialogIdFromPeer(item->history()->peer);
@ -61,11 +46,11 @@ void map(HistoryMessageEdition &edition, not_null<HistoryItem *> item, EditedMes
message.views = item->viewsCount();
message.entityCreateDate = base::unixtime::now(); // todo: rework
auto serializedText = serializeTextWithEntities(item);
auto serializedText = AyuMapper::serializeTextWithEntities(item);
message.text = serializedText.first;
// message.textEntities = serializedText.second;
message.textEntities = serializedText.second;
// todo:
// todo: implement mapping
message.mediaPath = "/";
message.documentType = DOCUMENT_TYPE_NONE;
@ -75,14 +60,14 @@ void map(HistoryMessageEdition &edition, not_null<HistoryItem *> item, EditedMes
// message.mimeType;
}
void AyuMessagesController::addEditedMessage(HistoryMessageEdition &edition, not_null<HistoryItem *> item) {
void addEditedMessage(HistoryMessageEdition &edition, not_null<HistoryItem*> item) {
EditedMessage message;
map(edition, item, 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 dialogId = getDialogIdFromPeer(item->history()->peer);
auto msgId = item->id.bare;
@ -90,7 +75,7 @@ std::vector<EditedMessage> AyuMessagesController::getEditedMessages(HistoryItem
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 dialogId = getDialogIdFromPeer(item->history()->peer);
auto msgId = item->id.bare;

View 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);
}

View file

@ -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;
}
}

View file

@ -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();
}

View file

@ -4,7 +4,7 @@
// but be respectful and credit the original author.
//
// Copyright @Radolyn, 2023
#include "ayu_assets.h"
#include "ayu_logo.h"
#include "ayu/ayu_settings.h"
static QString LAST_LOADED_NAME;

View file

@ -13,7 +13,7 @@
#include "mainwindow.h"
#include "ayu/ayu_settings.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/utils/qt_key_modifiers_extended.h"
#include "history/history_item_components.h"
@ -37,7 +37,7 @@ bool needToShowItem(int state) {
}
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),
[=]
{

View file

@ -10,7 +10,7 @@
#include "mainwindow.h"
#include "qguiapplication.h"
#include "ayu/database/entities.h"
#include "ayu/data/entities.h"
#include "ayu/utils/telegram_helpers.h"
#include "base/unixtime.h"

View file

@ -6,7 +6,7 @@
// Copyright @Radolyn, 2023
#pragma once
#include "ayu/database/entities.h"
#include "ayu/data/entities.h"
#include "main/main_session.h"
#include "base/unique_qptr.h"

View file

@ -10,6 +10,7 @@
#include "mainwidget.h"
#include "mainwindow.h"
#include "api/api_attached_stickers.h"
#include "ayu/data/messages_storage.h"
#include "ayu/ui/sections/edited/edited_log_section.h"
#include "base/call_delayed.h"
#include "base/unixtime.h"
@ -53,7 +54,6 @@
#include "ui/widgets/popup_menu.h"
#include "window/window_session_controller.h"
#include <ayu/messages/ayu_messages_controller.h>
#include <QtGui/QClipboard>
#include <QtWidgets/QApplication>
@ -650,7 +650,7 @@ void InnerWidget::restoreState(not_null<SectionMemento *> memento) {
}
void InnerWidget::addEvents(Direction direction) {
auto messages = AyuMessages::getInstance().getEditedMessages(_item);
auto messages = AyuMessages::getEditedMessages(_item);
if (messages.empty()) {
return;
}

View file

@ -5,7 +5,7 @@
//
// Copyright @Radolyn, 2023
#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_text_entities.h"

View file

@ -6,7 +6,7 @@
// Copyright @Radolyn, 2023
#pragma once
#include "ayu/database/entities.h"
#include "ayu/data/entities.h"
class History;

View file

@ -10,7 +10,7 @@
#include "core/application.h"
#include "styles/style_layers.h"
#include "ayu/ui/ayu_assets.h"
#include "ayu/ui/ayu_logo.h"
#include "main/main_domain.h"
#include "styles/style_ayu_styles.h"
#include "ui/painter.h"

View file

@ -12,6 +12,17 @@
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 flags = 0;

View file

@ -8,6 +8,7 @@
namespace AyuMapper {
std::pair<std::string, std::vector<char>> serializeTextWithEntities(not_null<HistoryItem*> item);
int mapItemFlagsToMTPFlags(not_null<HistoryItem*> item);
} // namespace AyuMapper

View file

@ -13,7 +13,7 @@
#include "lang_auto.h"
#include "ayu/ayu_worker.h"
#include "ayu/database/entities.h"
#include "ayu/data/entities.h"
#include "core/mime_type.h"
#include "data/data_channel.h"
#include "data/data_forum.h"
@ -139,29 +139,6 @@ ID getDialogIdFromPeer(not_null<PeerData *> peer) {
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) {
return peerIsUser(peer->id)
? peerToUser(peer->id).bare

View file

@ -6,7 +6,7 @@
// Copyright @Radolyn, 2023
#pragma once
#include "ayu/database/entities.h"
#include "ayu/data/entities.h"
#include "core/application.h"
#include "dialogs/dialogs_main_list.h"
@ -19,7 +19,6 @@ bool accountExists(ID userId);
void dispatchToMainThread(std::function<void()> callback, int delay = 0);
not_null<History*> getHistoryFromDialogId(ID dialogId, Main::Session *session);
ID getDialogIdFromPeer(not_null<PeerData*> peer);
std::pair<std::string, std::string> serializeTextWithEntities(not_null<HistoryItem *> item);
ID getBareID(not_null<PeerData*> peer);

View file

@ -78,8 +78,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
// AyuGram includes
#include "ayu/ayu_settings.h"
#include "ayu/database/ayu_database.h"
#include "ayu/messages/ayu_messages_controller.h"
#include "ayu/data/ayu_database.h"
#include "../ayu/data/messages_storage.h"
#include "ayu/ayu_state.h"
@ -2309,12 +2309,11 @@ void Session::updateEditedMessage(const MTPMessage &data) {
// AyuGram saveMessagesHistory
const auto settings = &AyuSettings::getInstance();
HistoryMessageEdition edit;
if (data.type() != mtpc_message) {
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) {
const auto msg = existing->originalText();
@ -2322,7 +2321,7 @@ void Session::updateEditedMessage(const MTPMessage &data) {
goto proceed;
}
AyuMessages::getInstance().addEditedMessage(edit, existing);
AyuMessages::addEditedMessage(edit, existing);
}
proceed:

View file

@ -87,8 +87,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
// AyuGram includes
#include "ayu/ayu_settings.h"
#include "ayu/database/ayu_database.h"
#include "ayu/messages/ayu_messages_controller.h"
#include "ayu/data/ayu_database.h"
#include "../../ayu/data/messages_storage.h"
#include "ayu/ui/context_menu/context_menu.h"
#include "ayu/ui/sections/edited/edited_log_section.h"

View file

@ -40,7 +40,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "styles/style_window.h"
// AyuGram includes
#include "ayu/ui/ayu_assets.h"
#include "ayu/ui/ayu_logo.h"
namespace Intro {

View file

@ -29,7 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include <QBuffer>
// AyuGram includes
#include "ayu/ui/ayu_assets.h"
#include "ayu/ui/ayu_logo.h"
#include "ui/painter.h"

View file

@ -48,7 +48,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include <kurlmimedata.h>
// AyuGram includes
#include "ayu/ui/ayu_assets.h"
#include "ayu/ui/ayu_logo.h"
namespace Window {