#pragma once #include #include #include #include #include namespace rack { /** Plugin loader and plugin manager */ namespace plugin { struct Update { std::string pluginSlug; std::string pluginName; std::string version; std::string changelogUrl; float progress = 0.f; }; void init(); void destroy(); void logIn(const std::string &email, const std::string &password); void logOut(); bool isLoggedIn(); void queryUpdates(); bool hasUpdates(); void syncUpdate(Update *update); void syncUpdates(); bool isSyncing(); Plugin *getPlugin(const std::string &pluginSlug); Model *getModel(const std::string &pluginSlug, const std::string &modelSlug); std::string normalizeTag(const std::string &tag); /** Checks that the slug contains only alphanumeric characters, "-", and "_" */ bool isSlugValid(const std::string &slug); /** Returns a string containing only the valid slug characters. */ std::string normalizeSlug(const std::string &slug); extern const std::set allowedTags; extern std::vector plugins; extern std::string loginStatus; extern std::vector updates; extern std::string updateStatus; extern bool restartRequested; } // namespace plugin } // namespace rack