reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

commit 3d3e98d84150d9c8eb1e1a8e3af7b45022bcb593
parent e78ee6377e2c97dd86734c5ae1200455e9b4a408
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Tue,  6 Jun 2017 01:10:36 -0400

add support for project templates, track templates and midi note names [p=1823893]

Diffstat:
Msrc/browser.cpp | 3+++
Msrc/package.cpp | 18++++++++++++++++--
Msrc/package.hpp | 3+++
Msrc/source.cpp | 12++++++++++++
Mtest/package.cpp | 82++++++++++++++++++++++++++++++++-----------------------------------------------
Mtest/source.cpp | 56++++++++++++++++----------------------------------------
6 files changed, 83 insertions(+), 91 deletions(-)

diff --git a/src/browser.cpp b/src/browser.cpp @@ -475,6 +475,9 @@ bool Browser::isFiltered(Package::Type type) const break; case Package::DataType: case Package::WebInterfaceType: + case Package::ProjectTemplateType: + case Package::TrackTemplateType: + case Package::MIDINoteNamesType: type = Package::UnknownType; break; } diff --git a/src/package.cpp b/src/package.cpp @@ -42,6 +42,12 @@ Package::Type Package::getType(const char *type) return LangPackType; else if(!strcmp(type, "webinterface")) return WebInterfaceType; + else if(!strcmp(type, "projecttpl")) + return ProjectTemplateType; + else if(!strcmp(type, "tracktpl")) + return TrackTemplateType; + else if(!strcmp(type, "midinotenames")) + return MIDINoteNamesType; else return UnknownType; } @@ -49,6 +55,8 @@ Package::Type Package::getType(const char *type) string Package::displayType(const Type type) { switch(type) { + case UnknownType: + break; case ScriptType: return "Script"; case ExtensionType: @@ -63,9 +71,15 @@ string Package::displayType(const Type type) return "Language Pack"; case WebInterfaceType: return "Web Interface"; - default: - return "Unknown"; + case ProjectTemplateType: + return "Project Template"; + case TrackTemplateType: + return "Track Template"; + case MIDINoteNamesType: + return "MIDI Note Names"; } + + return "Unknown"; } const string &Package::displayName(const string &name, diff --git a/src/package.hpp b/src/package.hpp @@ -34,6 +34,9 @@ public: ThemeType, LangPackType, WebInterfaceType, + ProjectTemplateType, + TrackTemplateType, + MIDINoteNamesType, }; static Type getType(const char *); diff --git a/src/source.cpp b/src/source.cpp @@ -115,6 +115,15 @@ Path Source::targetPath() const case Package::WebInterfaceType: path += "reaper_www_root"; break; + case Package::ProjectTemplateType: + path += "ProjectTemplates"; + break; + case Package::TrackTemplateType: + path += "TrackTemplates"; + break; + case Package::MIDINoteNamesType: + path += "MIDINoteNames"; + break; case Package::UnknownType: // The package has an unsupported type, so we make an empty path. // The empty path won't be used because the category will reject @@ -140,6 +149,9 @@ Path Source::targetPath() const case Package::DataType: case Package::LangPackType: case Package::WebInterfaceType: + case Package::ProjectTemplateType: + case Package::TrackTemplateType: + case Package::MIDINoteNamesType: path.append(file(), false); // no directory traversal break; case Package::UnknownType: diff --git a/test/package.cpp b/test/package.cpp @@ -13,58 +13,42 @@ using namespace std; static const char *M = "[package]"; TEST_CASE("package type from string", M) { - SECTION("unknown") - REQUIRE(Package::getType("yoyo") == Package::UnknownType); - - SECTION("script") - REQUIRE(Package::getType("script") == Package::ScriptType); - - SECTION("extension") - REQUIRE(Package::getType("extension") == Package::ExtensionType); - - SECTION("effect") - REQUIRE(Package::getType("effect") == Package::EffectType); - - SECTION("data") - REQUIRE(Package::getType("data") == Package::DataType); - - SECTION("theme") - REQUIRE(Package::getType("theme") == Package::ThemeType); - - SECTION("langpack") - REQUIRE(Package::getType("langpack") == Package::LangPackType); - - SECTION("web interface") - REQUIRE(Package::getType("webinterface") == Package::WebInterfaceType); + const vector<pair<const char *, Package::Type> > tests{ + {"yoyo", Package::UnknownType}, + {"script", Package::ScriptType}, + {"extension", Package::ExtensionType}, + {"effect", Package::EffectType}, + {"data", Package::DataType}, + {"theme", Package::ThemeType}, + {"langpack", Package::LangPackType}, + {"webinterface", Package::WebInterfaceType}, + {"projecttpl", Package::ProjectTemplateType}, + {"tracktpl", Package::TrackTemplateType}, + {"midinotenames", Package::MIDINoteNamesType}, + }; + + for(const auto &pair : tests) + REQUIRE(Package::getType(pair.first) == pair.second); } TEST_CASE("package type to string", M) { - SECTION("unknown") - REQUIRE("Unknown" == Package::displayType(Package::UnknownType)); - - SECTION("script") - REQUIRE("Script" == Package::displayType(Package::ScriptType)); - - SECTION("extension") - REQUIRE("Extension" == Package::displayType(Package::ExtensionType)); - - SECTION("effect") - REQUIRE("Effect" == Package::displayType(Package::EffectType)); - - SECTION("data") - REQUIRE("Data" == Package::displayType(Package::DataType)); - - SECTION("theme") - REQUIRE("Theme" == Package::displayType(Package::ThemeType)); - - SECTION("langpack") - REQUIRE("Language Pack" == Package::displayType(Package::LangPackType)); - - SECTION("web interface") - REQUIRE("Web Interface" == Package::displayType(Package::WebInterfaceType)); - - SECTION("invalid") - REQUIRE("Unknown" == Package::displayType(static_cast<Package::Type>(-1))); + const vector<pair<Package::Type, string> > tests{ + {Package::UnknownType, "Unknown"}, + {Package::ScriptType, "Script"}, + {Package::ExtensionType, "Extension"}, + {Package::EffectType, "Effect"}, + {Package::DataType, "Data"}, + {Package::ThemeType, "Theme"}, + {Package::LangPackType, "Language Pack"}, + {Package::WebInterfaceType, "Web Interface"}, + {Package::ProjectTemplateType, "Project Template"}, + {Package::TrackTemplateType, "Track Template"}, + {Package::MIDINoteNamesType, "MIDI Note Names"}, + {static_cast<Package::Type>(-1), "Unknown"}, + }; + + for(const auto &pair : tests) + REQUIRE(Package::displayType(pair.first) == pair.second); } TEST_CASE("invalid package name", M) { diff --git a/test/source.cpp b/test/source.cpp @@ -146,46 +146,22 @@ TEST_CASE("source target path", M) { Source source("file.name", "url", &ver); - SECTION("script") { - source.setTypeOverride(Package::ScriptType); - const Path expected("Scripts/Index Name/Category Name/file.name"); - REQUIRE(source.targetPath() == expected); - } - - SECTION("effect") { - source.setTypeOverride(Package::EffectType); - const Path expected("Effects/Index Name/Category Name/file.name"); - REQUIRE(source.targetPath() == expected); - } - - SECTION("extension") { - source.setTypeOverride(Package::ExtensionType); - const Path expected("UserPlugins/file.name"); - REQUIRE(source.targetPath() == expected); - } - - SECTION("data") { - source.setTypeOverride(Package::DataType); - const Path expected("Data/file.name"); - REQUIRE(source.targetPath() == expected); - } - - SECTION("theme") { - source.setTypeOverride(Package::ThemeType); - const Path expected("ColorThemes/file.name"); - REQUIRE(source.targetPath() == expected); - } - - SECTION("langpack") { - source.setTypeOverride(Package::LangPackType); - const Path expected("LangPack/file.name"); - REQUIRE(source.targetPath() == expected); - } - - SECTION("web interface") { - source.setTypeOverride(Package::WebInterfaceType); - const Path expected("reaper_www_root/file.name"); - REQUIRE(source.targetPath() == expected); + const vector<pair<Package::Type, string> > tests{ + {Package::ScriptType, "Scripts/Index Name/Category Name/file.name"}, + {Package::EffectType, "Effects/Index Name/Category Name/file.name"}, + {Package::ExtensionType, "UserPlugins/file.name"}, + {Package::DataType, "Data/file.name"}, + {Package::ThemeType, "ColorThemes/file.name"}, + {Package::LangPackType, "LangPack/file.name"}, + {Package::WebInterfaceType, "reaper_www_root/file.name"}, + {Package::ProjectTemplateType, "ProjectTemplates/file.name"}, + {Package::TrackTemplateType, "TrackTemplates/file.name"}, + {Package::MIDINoteNamesType, "MIDINoteNames/file.name"}, + }; + + for(const auto &pair : tests) { + source.setTypeOverride(pair.first); + REQUIRE(source.targetPath() == Path(pair.second)); } }