diff --git a/CHANGELOG.md b/CHANGELOG.md index 4701973e..4193063e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -113,6 +113,7 @@ - Dev: `Details` file properties tab is now populated on Windows. (#4912) - Dev: Removed `Outcome` from network requests. (#4959) - Dev: Added Tests for Windows and MacOS in CI. (#4970, #5032) +- Dev: Added "Copy message as JSON" option when shift-right-clicking a message. (#5150) - Dev: Move `clang-tidy` checker to its own CI job. (#4996) - Dev: Refactored the Image Uploader feature. (#4971) - Dev: Refactored the SplitOverlay code. (#5082) diff --git a/src/messages/Message.hpp b/src/messages/Message.hpp index 937309cf..73c7640a 100644 --- a/src/messages/Message.hpp +++ b/src/messages/Message.hpp @@ -3,6 +3,7 @@ #include "common/FlagsEnum.hpp" #include "util/QStringHash.hpp" +#include #include #include @@ -107,3 +108,8 @@ struct Message { }; } // namespace chatterino + +template <> +struct magic_enum::customize::enum_range { + static constexpr bool is_flags = true; +}; diff --git a/src/widgets/helper/ChannelView.cpp b/src/widgets/helper/ChannelView.cpp index fbc28c6c..1f494834 100644 --- a/src/widgets/helper/ChannelView.cpp +++ b/src/widgets/helper/ChannelView.cpp @@ -45,6 +45,7 @@ #include "widgets/TooltipWidget.hpp" #include "widgets/Window.hpp" +#include #include #include #include @@ -52,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -244,6 +246,30 @@ void addHiddenContextMenuItems(QMenu *menu, crossPlatformCopy(messageID); }); } + + const auto *message = layout->getMessage(); + + if (message != nullptr) + { + QJsonDocument jsonDocument; + + QJsonObject jsonObject; + + jsonObject["id"] = message->id; + jsonObject["searchText"] = message->searchText; + jsonObject["messageText"] = message->messageText; + jsonObject["flags"] = QString::fromStdString( + magic_enum::enum_flags_name(message->flags.value())); + + jsonDocument.setObject(jsonObject); + + auto jsonString = + jsonDocument.toJson(QJsonDocument::JsonFormat::Indented); + + menu->addAction("Copy message &JSON", [jsonString] { + crossPlatformCopy(jsonString); + }); + } } // Current function: https://www.desmos.com/calculator/vdyamchjwh