Add CHATTERINO_HAVE_PLUGINS define

This commit is contained in:
Mm2PL 2023-02-02 13:06:29 +01:00
parent a61bc4d6d1
commit c7f47df827
No known key found for this signature in database
GPG key ID: 94AC9B80EFA15ED9
16 changed files with 110 additions and 72 deletions

View file

@ -24,6 +24,12 @@ option(CHATTERINO_GENERATE_COVERAGE "Generate coverage files" OFF)
option(BUILD_TRANSLATIONS "" OFF)
option(BUILD_SHARED_LIBS "" OFF)
option(CHATTERINO_LTO "Enable LTO for all targets" OFF)
option(CHATTERINO_PLUGINS "Enable EXPERIMENTAL plugin support in Chatterino" OFF)
if(CHATTERINO_PLUGINS)
add_definitions(-DCHATTERINO_HAVE_PLUGINS)
message(STATUS "Building Chatterino with lua plugin support enabled.")
endif()
if(CHATTERINO_LTO)
include(CheckIPOSupported)
@ -148,9 +154,10 @@ else()
add_subdirectory("${CMAKE_SOURCE_DIR}/lib/settings" EXCLUDE_FROM_ALL)
endif()
set(LUA_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/lib/lua/src")
add_subdirectory(lib/lua)
if (CHATTERINO_PLUGINS)
set(LUA_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/lib/lua/src")
add_subdirectory(lib/lua)
endif()
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

View file

@ -10,7 +10,9 @@
#include "controllers/hotkeys/HotkeyController.hpp"
#include "controllers/ignores/IgnoreController.hpp"
#include "controllers/notifications/NotificationController.hpp"
#include "controllers/plugins/PluginController.hpp"
#ifdef CHATTERINO_HAVE_PLUGINS
# include "controllers/plugins/PluginController.hpp"
#endif
#include "controllers/sound/SoundController.hpp"
#include "controllers/userdata/UserDataController.hpp"
#include "debug/AssertInGuiThread.hpp"
@ -85,7 +87,9 @@ Application::Application(Settings &_settings, Paths &_paths)
, seventvBadges(&this->emplace<SeventvBadges>())
, userData(&this->emplace<UserDataController>())
, sound(&this->emplace<SoundController>())
#ifdef CHATTERINO_HAVE_PLUGINS
, plugins(&this->emplace<PluginController>())
#endif
, logging(&this->emplace<Logging>())
{
this->instance = this;

View file

@ -20,7 +20,9 @@ class HotkeyController;
class IUserDataController;
class UserDataController;
class SoundController;
#ifdef CHATTERINO_HAVE_PLUGINS
class PluginController;
#endif
class Theme;
class WindowManager;
@ -96,7 +98,9 @@ public:
UserDataController *const userData{};
SoundController *const sound{};
#ifdef CHATTERINO_HAVE_PLUGINS
PluginController *const plugins{};
#endif
/*[[deprecated]]*/ Logging *const logging{};

View file

@ -625,8 +625,10 @@ target_link_libraries(${LIBRARY_PROJECT}
RapidJSON::RapidJSON
LRUCache
MagicEnum
lua
)
if (CHATTERINO_PLUGINS)
target_link_libraries(${LIBRARY_PROJECT} PUBLIC lua)
endif()
if (BUILD_WITH_QTKEYCHAIN)
target_link_libraries(${LIBRARY_PROJECT}

View file

@ -230,11 +230,12 @@ void CompletionModel::refresh(const QString &prefix, bool isFirstWord)
{
addString(emote.first.string, TaggedString::Type::BTTVGlobalEmote);
}
#ifdef CHATTERINO_HAVE_PLUGINS
for (const auto &command : getApp()->commands->pluginCommands())
{
addString(command, TaggedString::PluginCommand);
}
#endif
// Custom Chatterino commands
for (const auto &command : getApp()->commands->items)
{

View file

@ -34,7 +34,9 @@ class CompletionModel : public QAbstractListModel
CustomCommand,
ChatterinoCommand,
TwitchCommand,
#ifdef CHATTERINO_HAVE_PLUGINS
PluginCommand,
#endif
};
TaggedString(QString _string, Type type);

View file

@ -3220,7 +3220,7 @@ QString CommandController::execCommand(const QString &textNoEmoji,
return text;
}
#ifdef CHATTERINO_HAVE_PLUGINS
bool CommandController::registerPluginCommand(const QString &commandName)
{
if (this->commands_.contains(commandName))
@ -3244,6 +3244,7 @@ bool CommandController::unregisterPluginCommand(const QString &commandName)
this->pluginCommands_.removeAll(commandName);
return this->commands_.erase(commandName) != 0;
}
#endif
void CommandController::registerCommand(const QString &commandName,
CommandFunctionVariants commandFunction)

View file

@ -42,7 +42,7 @@ public:
const QStringList &words, const Command &command, bool dryRun,
ChannelPtr channel, const Message *message = nullptr,
std::unordered_map<QString, QString> context = {});
#ifdef CHATTERINO_HAVE_PLUGINS
bool registerPluginCommand(const QString &commandName);
bool unregisterPluginCommand(const QString &commandName);
@ -50,6 +50,7 @@ public:
{
return this->pluginCommands_;
}
#endif
private:
void load(Paths &paths);
@ -81,7 +82,9 @@ private:
commandsSetting_;
QStringList defaultChatterinoCommandAutoCompletions_;
#ifdef CHATTERINO_HAVE_PLUGINS
QStringList pluginCommands_;
#endif
};
} // namespace chatterino

View file

@ -1,12 +1,13 @@
#include "LuaUtilities.hpp"
#ifdef CHATTERINO_HAVE_PLUGINS
#include "common/Channel.hpp"
#include "controllers/commands/CommandContext.hpp"
#include "lauxlib.h"
#include "lua.h"
# include "common/Channel.hpp"
# include "controllers/commands/CommandContext.hpp"
# include "lauxlib.h"
# include "lua.h"
#include <climits>
#include <cstdlib>
# include <climits>
# include <cstdlib>
namespace chatterino::lua {
@ -109,3 +110,4 @@ bool peek(lua_State *L, QString *out, StackIdx idx)
return true;
}
} // namespace chatterino::lua
#endif

View file

@ -1,10 +1,11 @@
#pragma once
#include "lua.h"
#ifdef CHATTERINO_HAVE_PLUGINS
# include "lua.h"
#include <qlist.h>
# include <qlist.h>
#include <vector>
# include <vector>
struct lua_State;
class QJsonObject;
namespace chatterino {
@ -73,3 +74,4 @@ bool pop(lua_State *L, T *out, StackIdx idx = -1)
}
} // namespace chatterino::lua
#endif

View file

@ -1,4 +1,5 @@
#include "Plugin.hpp"
#ifdef CHATTERINO_HAVE_PLUGINS
namespace chatterino {
bool Plugin::registerCommand(const QString &name, const QString &functionName)
@ -27,3 +28,4 @@ std::set<QString> Plugin::listRegisteredCommands()
return out;
}
} // namespace chatterino
#endif

View file

@ -1,28 +1,26 @@
#include "PluginController.hpp"
#ifdef CHATTERINO_HAVE_PLUGINS
#include "Application.hpp"
#include "common/QLogging.hpp"
#include "controllers/commands/CommandContext.hpp"
#include "controllers/plugins/LuaUtilities.hpp"
#include "messages/MessageBuilder.hpp"
#include "providers/twitch/TwitchIrcServer.hpp"
#include "singletons/Paths.hpp"
#include "singletons/Settings.hpp"
#include "singletons/WindowManager.hpp"
#include "widgets/Notebook.hpp"
#include "widgets/splits/Split.hpp"
#include "widgets/Window.hpp"
# include "Application.hpp"
# include "common/QLogging.hpp"
# include "controllers/commands/CommandContext.hpp"
# include "controllers/plugins/LuaUtilities.hpp"
# include "lauxlib.h"
# include "lua.h"
# include "lualib.h"
# include "messages/MessageBuilder.hpp"
# include "providers/twitch/TwitchIrcServer.hpp"
# include "singletons/Paths.hpp"
# include "singletons/Settings.hpp"
# include "singletons/WindowManager.hpp"
# include "widgets/Notebook.hpp"
# include "widgets/splits/Split.hpp"
# include "widgets/Window.hpp"
#include <QJsonDocument>
# include <QJsonDocument>
#include <memory>
#include <utility>
//extern "C" {
#include "lauxlib.h"
#include "lua.h"
#include "lualib.h"
//}
# include <memory>
# include <utility>
namespace chatterino {
@ -362,3 +360,4 @@ bool PluginController::isEnabled(const QString &codename)
}
}; // namespace chatterino
#endif

View file

@ -1,20 +1,22 @@
#pragma once
#include "common/Singleton.hpp"
#include "controllers/plugins/Plugin.hpp"
#include "singletons/Paths.hpp"
#ifdef CHATTERINO_HAVE_PLUGINS
#include <QDir>
#include <QFileInfo>
#include <QJsonArray>
#include <QJsonObject>
#include <QString>
# include "common/Singleton.hpp"
# include "controllers/plugins/Plugin.hpp"
# include "singletons/Paths.hpp"
#include <algorithm>
#include <map>
#include <memory>
#include <utility>
#include <vector>
# include <QDir>
# include <QFileInfo>
# include <QJsonArray>
# include <QJsonObject>
# include <QString>
# include <algorithm>
# include <map>
# include <memory>
# include <utility>
# include <vector>
struct lua_State;
@ -68,3 +70,4 @@ private:
};
}; // namespace chatterino
#endif

View file

@ -216,7 +216,9 @@ void SettingsDialog::addTabs()
this->addTab([]{return new ModerationPage;}, "Moderation", ":/settings/moderation.svg", SettingsTabId::Moderation);
this->addTab([]{return new NotificationPage;}, "Live Notifications", ":/settings/notification2.svg");
this->addTab([]{return new ExternalToolsPage;}, "External tools", ":/settings/externaltools.svg");
#ifdef CHATTERINO_HAVE_PLUGINS
this->addTab([]{return new PluginsPage;}, "Plugins", ":/settings/externaltools.svg");
#endif
this->ui_.tabContainer->addStretch(1);
this->addTab([]{return new AboutPage;}, "About", ":/settings/about.svg", SettingsTabId(), Qt::AlignBottom);
// clang-format on

View file

@ -1,21 +1,22 @@
#include "PluginsPage.hpp"
#ifdef CHATTERINO_HAVE_PLUGINS
#include "Application.hpp"
#include "controllers/plugins/PluginController.hpp"
#include "singletons/Paths.hpp"
#include "singletons/Settings.hpp"
#include "util/Helpers.hpp"
#include "util/LayoutCreator.hpp"
#include "util/RemoveScrollAreaBackground.hpp"
# include "Application.hpp"
# include "controllers/plugins/PluginController.hpp"
# include "singletons/Paths.hpp"
# include "singletons/Settings.hpp"
# include "util/Helpers.hpp"
# include "util/LayoutCreator.hpp"
# include "util/RemoveScrollAreaBackground.hpp"
#include <QCheckBox>
#include <QFormLayout>
#include <QGroupBox>
#include <QLabel>
#include <qobject.h>
#include <QObject>
#include <QPushButton>
#include <QWidget>
# include <QCheckBox>
# include <QFormLayout>
# include <QGroupBox>
# include <QLabel>
# include <qobject.h>
# include <QObject>
# include <QPushButton>
# include <QWidget>
namespace chatterino {
@ -163,3 +164,4 @@ void PluginsPage::rebuildContent()
}
} // namespace chatterino
#endif

View file

@ -1,11 +1,12 @@
#pragma once
#include "util/LayoutCreator.hpp"
#include "widgets/settingspages/SettingsPage.hpp"
#ifdef CHATTERINO_HAVE_PLUGINS
# include "util/LayoutCreator.hpp"
# include "widgets/settingspages/SettingsPage.hpp"
#include <QDebug>
#include <QFormLayout>
#include <QGroupBox>
#include <QWidget>
# include <QDebug>
# include <QFormLayout>
# include <QGroupBox>
# include <QWidget>
namespace chatterino {
class Plugin;
@ -23,3 +24,4 @@ private:
QFrame *dataFrame_;
};
} // namespace chatterino
#endif