mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-25 18:29:51 +01:00
add --notify
This commit is contained in:
parent
51fb8686ab
commit
d5e404fbcb
3 changed files with 107 additions and 36 deletions
|
@ -535,17 +535,17 @@ bool CPluginManager::disablePlugin(const std::string& name) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPluginManager::ensurePluginsLoadState() {
|
ePluginLoadStateReturn CPluginManager::ensurePluginsLoadState() {
|
||||||
if (headersValid() != HEADERS_OK) {
|
if (headersValid() != HEADERS_OK) {
|
||||||
std::cerr << "\n" << std::string{Colors::RED} + "✖" + Colors::RESET + " headers are not up-to-date, please run hyprpm update.";
|
std::cerr << "\n" << std::string{Colors::RED} + "✖" + Colors::RESET + " headers are not up-to-date, please run hyprpm update.";
|
||||||
return;
|
return LOADSTATE_HEADERS_OUTDATED;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto HOME = getenv("HOME");
|
const auto HOME = getenv("HOME");
|
||||||
const auto HIS = getenv("HYPRLAND_INSTANCE_SIGNATURE");
|
const auto HIS = getenv("HYPRLAND_INSTANCE_SIGNATURE");
|
||||||
if (!HOME || !HIS) {
|
if (!HOME || !HIS) {
|
||||||
std::cerr << "PluginManager: no $HOME or HIS\n";
|
std::cerr << "PluginManager: no $HOME or HIS\n";
|
||||||
return;
|
return LOADSTATE_FAIL;
|
||||||
}
|
}
|
||||||
const auto HYPRPMPATH = DataState::getDataStatePath() + "/";
|
const auto HYPRPMPATH = DataState::getDataStatePath() + "/";
|
||||||
|
|
||||||
|
@ -622,6 +622,8 @@ void CPluginManager::ensurePluginsLoadState() {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << Colors::GREEN << "✔" << Colors::RESET << " Plugin load state ensured\n";
|
std::cout << Colors::GREEN << "✔" << Colors::RESET << " Plugin load state ensured\n";
|
||||||
|
|
||||||
|
return LOADSTATE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CPluginManager::loadUnloadPlugin(const std::string& path, bool load) {
|
bool CPluginManager::loadUnloadPlugin(const std::string& path, bool load) {
|
||||||
|
@ -645,3 +647,7 @@ void CPluginManager::listAllPlugins() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPluginManager::notify(const eNotifyIcons icon, uint32_t color, int durationMs, const std::string& message) {
|
||||||
|
execAndGet("hyprctl notify " + std::to_string((int)icon) + " " + std::to_string(durationMs) + " " + std::to_string(color) + " " + message);
|
||||||
|
}
|
|
@ -5,29 +5,50 @@
|
||||||
|
|
||||||
enum eHeadersErrors
|
enum eHeadersErrors
|
||||||
{
|
{
|
||||||
HEADERS_OK,
|
HEADERS_OK = 0,
|
||||||
HEADERS_NOT_HYPRLAND,
|
HEADERS_NOT_HYPRLAND,
|
||||||
HEADERS_MISSING,
|
HEADERS_MISSING,
|
||||||
HEADERS_CORRUPTED,
|
HEADERS_CORRUPTED,
|
||||||
HEADERS_MISMATCHED,
|
HEADERS_MISMATCHED,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum eNotifyIcons
|
||||||
|
{
|
||||||
|
ICON_WARNING = 0,
|
||||||
|
ICON_INFO,
|
||||||
|
ICON_HINT,
|
||||||
|
ICON_ERROR,
|
||||||
|
ICON_CONFUSED,
|
||||||
|
ICON_OK,
|
||||||
|
ICON_NONE
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ePluginLoadStateReturn
|
||||||
|
{
|
||||||
|
LOADSTATE_OK = 0,
|
||||||
|
LOADSTATE_FAIL,
|
||||||
|
LOADSTATE_PARTIAL_FAIL,
|
||||||
|
LOADSTATE_HEADERS_OUTDATED
|
||||||
|
};
|
||||||
|
|
||||||
class CPluginManager {
|
class CPluginManager {
|
||||||
public:
|
public:
|
||||||
bool addNewPluginRepo(const std::string& url);
|
bool addNewPluginRepo(const std::string& url);
|
||||||
bool removePluginRepo(const std::string& urlOrName);
|
bool removePluginRepo(const std::string& urlOrName);
|
||||||
|
|
||||||
eHeadersErrors headersValid();
|
eHeadersErrors headersValid();
|
||||||
bool updateHeaders();
|
bool updateHeaders();
|
||||||
bool updatePlugins(bool forceUpdateAll);
|
bool updatePlugins(bool forceUpdateAll);
|
||||||
|
|
||||||
void listAllPlugins();
|
void listAllPlugins();
|
||||||
|
|
||||||
bool enablePlugin(const std::string& name);
|
bool enablePlugin(const std::string& name);
|
||||||
bool disablePlugin(const std::string& name);
|
bool disablePlugin(const std::string& name);
|
||||||
void ensurePluginsLoadState();
|
ePluginLoadStateReturn ensurePluginsLoadState();
|
||||||
|
|
||||||
bool loadUnloadPlugin(const std::string& path, bool load);
|
bool loadUnloadPlugin(const std::string& path, bool load);
|
||||||
|
|
||||||
|
void notify(const eNotifyIcons icon, uint32_t color, int durationMs, const std::string& message);
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::unique_ptr<CPluginManager> g_pPluginManager;
|
inline std::unique_ptr<CPluginManager> g_pPluginManager;
|
|
@ -26,61 +26,105 @@ int main(int argc, char** argv, char** envp) {
|
||||||
ARGS[i] = std::string{argv[i]};
|
ARGS[i] = std::string{argv[i]};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ARGS.size() < 2 || ARGS[1] == "--help" || ARGS[1] == "-h") {
|
if (ARGS.size() < 2) {
|
||||||
std::cout << HELP;
|
std::cout << HELP;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> command;
|
||||||
|
bool notify = false;
|
||||||
|
|
||||||
|
for (int i = 1; i < argc; ++i) {
|
||||||
|
if (ARGS[i].starts_with("-")) {
|
||||||
|
if (ARGS[i] == "--help" || ARGS[i] == "-h") {
|
||||||
|
std::cout << HELP;
|
||||||
|
return 0;
|
||||||
|
} else if (ARGS[i] == "--notify" || ARGS[i] == "-n") {
|
||||||
|
notify = true;
|
||||||
|
} else {
|
||||||
|
std::cerr << "Unrecognized option " << ARGS[i];
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
command.push_back(ARGS[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
g_pPluginManager = std::make_unique<CPluginManager>();
|
g_pPluginManager = std::make_unique<CPluginManager>();
|
||||||
|
|
||||||
if (ARGS[1] == "add") {
|
if (command[0] == "add") {
|
||||||
if (ARGS.size() < 3) {
|
if (command.size() < 2) {
|
||||||
std::cerr << Colors::RED << "✖" << Colors::RESET << " Not enough args for add.\n";
|
std::cerr << Colors::RED << "✖" << Colors::RESET << " Not enough args for add.\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_pPluginManager->addNewPluginRepo(ARGS[2]) ? 0 : 1;
|
return g_pPluginManager->addNewPluginRepo(command[1]) ? 0 : 1;
|
||||||
} else if (ARGS[1] == "remove") {
|
} else if (command[0] == "remove") {
|
||||||
if (ARGS.size() < 3) {
|
if (ARGS.size() < 2) {
|
||||||
std::cerr << Colors::RED << "✖" << Colors::RESET << " Not enough args for remove.\n";
|
std::cerr << Colors::RED << "✖" << Colors::RESET << " Not enough args for remove.\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_pPluginManager->removePluginRepo(ARGS[2]) ? 0 : 1;
|
return g_pPluginManager->removePluginRepo(command[1]) ? 0 : 1;
|
||||||
} else if (ARGS[1] == "update") {
|
} else if (command[0] == "update") {
|
||||||
bool headersValid = g_pPluginManager->headersValid() == HEADERS_OK;
|
bool headersValid = g_pPluginManager->headersValid() == HEADERS_OK;
|
||||||
bool headers = g_pPluginManager->updateHeaders();
|
bool headers = g_pPluginManager->updateHeaders();
|
||||||
if (headers) {
|
if (headers) {
|
||||||
g_pPluginManager->updatePlugins(!headersValid);
|
bool ret1 = g_pPluginManager->updatePlugins(!headersValid);
|
||||||
g_pPluginManager->ensurePluginsLoadState();
|
|
||||||
}
|
if (!ret1)
|
||||||
} else if (ARGS[1] == "enable") {
|
return 1;
|
||||||
if (ARGS.size() < 3) {
|
|
||||||
|
auto ret2 = g_pPluginManager->ensurePluginsLoadState();
|
||||||
|
|
||||||
|
if (ret2 != LOADSTATE_OK)
|
||||||
|
return 1;
|
||||||
|
} else if (notify)
|
||||||
|
g_pPluginManager->notify(ICON_ERROR, 0, 10000, "[hyprpm] Couldn't update headers");
|
||||||
|
} else if (command[0] == "enable") {
|
||||||
|
if (ARGS.size() < 2) {
|
||||||
std::cerr << Colors::RED << "✖" << Colors::RESET << " Not enough args for enable.\n";
|
std::cerr << Colors::RED << "✖" << Colors::RESET << " Not enough args for enable.\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_pPluginManager->enablePlugin(ARGS[2])) {
|
if (!g_pPluginManager->enablePlugin(command[1])) {
|
||||||
std::cerr << Colors::RED << "✖" << Colors::RESET << " Couldn't enable plugin (missing?)\n";
|
std::cerr << Colors::RED << "✖" << Colors::RESET << " Couldn't enable plugin (missing?)\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pPluginManager->ensurePluginsLoadState();
|
auto ret = g_pPluginManager->ensurePluginsLoadState();
|
||||||
} else if (ARGS[1] == "disable") {
|
if (ret != LOADSTATE_OK)
|
||||||
if (ARGS.size() < 3) {
|
return 1;
|
||||||
|
} else if (command[0] == "disable") {
|
||||||
|
if (command.size() < 2) {
|
||||||
std::cerr << Colors::RED << "✖" << Colors::RESET << " Not enough args for disable.\n";
|
std::cerr << Colors::RED << "✖" << Colors::RESET << " Not enough args for disable.\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_pPluginManager->disablePlugin(ARGS[2])) {
|
if (!g_pPluginManager->disablePlugin(command[1])) {
|
||||||
std::cerr << Colors::RED << "✖" << Colors::RESET << " Couldn't disable plugin (missing?)\n";
|
std::cerr << Colors::RED << "✖" << Colors::RESET << " Couldn't disable plugin (missing?)\n";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_pPluginManager->ensurePluginsLoadState();
|
auto ret = g_pPluginManager->ensurePluginsLoadState();
|
||||||
} else if (ARGS[1] == "load") {
|
if (ret != LOADSTATE_OK)
|
||||||
g_pPluginManager->ensurePluginsLoadState();
|
return 1;
|
||||||
} else if (ARGS[1] == "list") {
|
} else if (command[0] == "load") {
|
||||||
|
auto ret = g_pPluginManager->ensurePluginsLoadState();
|
||||||
|
|
||||||
|
if (ret != LOADSTATE_OK && notify) {
|
||||||
|
switch (ret) {
|
||||||
|
case LOADSTATE_FAIL:
|
||||||
|
case LOADSTATE_PARTIAL_FAIL: g_pPluginManager->notify(ICON_ERROR, 0, 10000, "[hyprpm] Failed to load plugins"); break;
|
||||||
|
case LOADSTATE_HEADERS_OUTDATED:
|
||||||
|
g_pPluginManager->notify(ICON_ERROR, 0, 10000, "[hyprpm] Failed to load plugins: Outdated headers. Please run hyprpm update manually.");
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
} else if (notify) {
|
||||||
|
g_pPluginManager->notify(ICON_OK, 0, 4000, "[hyprpm] Loaded plugins");
|
||||||
|
}
|
||||||
|
} else if (command[0] == "list") {
|
||||||
g_pPluginManager->listAllPlugins();
|
g_pPluginManager->listAllPlugins();
|
||||||
} else {
|
} else {
|
||||||
std::cout << HELP;
|
std::cout << HELP;
|
||||||
|
|
Loading…
Reference in a new issue