mirror of
https://github.com/hyprwm/Hyprland
synced 2025-12-20 02:30:03 +01:00
48 lines
1.8 KiB
C++
48 lines
1.8 KiB
C++
#include "Plugin.hpp"
|
|
|
|
SPluginRepoIdentifier SPluginRepoIdentifier::fromUrl(const std::string& url) {
|
|
return SPluginRepoIdentifier{.type = IDENTIFIER_URL, .url = url};
|
|
}
|
|
|
|
SPluginRepoIdentifier SPluginRepoIdentifier::fromName(const std::string& name) {
|
|
return SPluginRepoIdentifier{.type = IDENTIFIER_NAME, .name = name};
|
|
}
|
|
|
|
SPluginRepoIdentifier SPluginRepoIdentifier::fromAuthorName(const std::string& author, const std::string& name) {
|
|
return SPluginRepoIdentifier{.type = IDENTIFIER_AUTHOR_NAME, .name = name, .author = author};
|
|
}
|
|
|
|
SPluginRepoIdentifier SPluginRepoIdentifier::fromString(const std::string& string) {
|
|
if (string.find(':') != std::string::npos) {
|
|
return SPluginRepoIdentifier{.type = IDENTIFIER_URL, .url = string};
|
|
} else {
|
|
auto slashPos = string.find('/');
|
|
if (slashPos != std::string::npos) {
|
|
std::string author = string.substr(0, slashPos);
|
|
std::string name = string.substr(slashPos + 1, string.size() - slashPos - 1);
|
|
return SPluginRepoIdentifier{.type = IDENTIFIER_AUTHOR_NAME, .name = name, .author = author};
|
|
} else {
|
|
return SPluginRepoIdentifier{.type = IDENTIFIER_NAME, .name = string};
|
|
}
|
|
}
|
|
}
|
|
|
|
std::string SPluginRepoIdentifier::toString() const {
|
|
switch (type) {
|
|
case IDENTIFIER_NAME: return name;
|
|
case IDENTIFIER_AUTHOR_NAME: return author + '/' + name;
|
|
case IDENTIFIER_URL: return url;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
bool SPluginRepoIdentifier::matches(const std::string& url, const std::string& name, const std::string& author) const {
|
|
switch (type) {
|
|
case IDENTIFIER_URL: return this->url == url;
|
|
case IDENTIFIER_NAME: return this->name == name;
|
|
case IDENTIFIER_AUTHOR_NAME: return this->author == author && this->name == name;
|
|
}
|
|
|
|
return false;
|
|
}
|