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:
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));
}
}