Fix fiile uploads for Toob ML and Toob Convolution Reversbs.

This commit is contained in:
Robin E. R. Davies
2024-11-22 15:58:08 -05:00
parent 33dc523ae3
commit 1c071ba7f3
13 changed files with 150 additions and 53 deletions
+1
View File
@@ -38,4 +38,5 @@ JSON_MAP_BEGIN(FileRequestResult)
JSON_MAP_REFERENCE(FileRequestResult,files)
JSON_MAP_REFERENCE(FileRequestResult,isProtected)
JSON_MAP_REFERENCE(FileRequestResult,breadcrumbs)
JSON_MAP_REFERENCE(FileRequestResult,currentDirectory)
JSON_MAP_END()
+1
View File
@@ -52,6 +52,7 @@ namespace pipedal {
std::vector<FileEntry> files_;
bool isProtected_ = false;
std::vector<BreadcrumbEntry> breadcrumbs_;
std::string currentDirectory_;
DECLARE_JSON_MAP(FileRequestResult);
};
+37 -1
View File
@@ -43,9 +43,21 @@
#include "RingBufferReader.hpp"
using namespace pipedal;
namespace fs = std::filesystem;
const float BYPASS_TIME_S = 0.1f;
static fs::path makeAbsolutePath(const std::filesystem::path &path, const std::filesystem::path &parentPath)
{
if (path.is_absolute())
{
return path;
}
return parentPath / path;
}
Lv2Effect::Lv2Effect(
IHost *pHost_,
const std::shared_ptr<Lv2PluginInfo> &info_,
@@ -69,7 +81,6 @@ Lv2Effect::Lv2Effect(
this->pathProperties.push_back(filePropertyUrid);
this->pathPropertyWriters.push_back(PatchPropertyWriter(instanceId, filePropertyUrid));
std::vector<PatchPropertyWriter> pathPropertyWriters;
}
}
for (auto &pathProperty: pedalboardItem.pathProperties_)
@@ -84,8 +95,10 @@ Lv2Effect::Lv2Effect(
const LilvPlugins *plugins = lilv_world_get_all_plugins(pWorld);
// xxx: could we not stash the pPlugin in the plugin info?
auto uriNode = lilv_new_uri(pWorld, pedalboardItem.uri().c_str());
const LilvPlugin *pPlugin = lilv_plugins_get_by_uri(plugins, uriNode);
lilv_node_free(uriNode);
{
AutoLilvNode bundleUri = lilv_plugin_get_bundle_uri(pPlugin);
@@ -98,6 +111,25 @@ Lv2Effect::Lv2Effect(
logFeature.GetLog(),
bundleUriString,
storagePath);
mapPathFeature.Prepare(&(pHost_->GetMapFeature()));
mapPathFeature.SetPluginStoragePath(pHost_->GetPluginStoragePath());
if (info->piPedalUI())
{
const auto &fileProperties = info_->piPedalUI()->fileProperties();
for (const auto &fileProperty : fileProperties)
{
if (!fileProperty->resourceDirectory().empty())
{
mapPathFeature.AddResourceFileMapping({
makeAbsolutePath(fileProperty->resourceDirectory(),bundleUriString),
makeAbsolutePath(fileProperty->directory(),pHost_->GetPluginStoragePath())
});
}
}
}
lilv_free(bundleUriString);
}
@@ -109,6 +141,10 @@ Lv2Effect::Lv2Effect(
{
this->features.push_back(*p);
}
this->features.push_back(mapPathFeature.GetMapPathFeature());
this->features.push_back(mapPathFeature.GetMakePathFeature());
this->features.push_back(mapPathFeature.GetFreePathFeature());
this->features.push_back(this->fileBrowserFilesFeature.GetFeature());
+2 -1
View File
@@ -27,6 +27,7 @@
#include "FileBrowserFilesFeature.hpp"
#include "PatchPropertyWriter.hpp"
#include <unordered_map>
#include "MapPathFeature.hpp"
#include "IEffect.hpp"
#include "Worker.hpp"
@@ -90,7 +91,7 @@ namespace pipedal
std::vector<char *> outputAtomBuffers;
std::vector<const LV2_Feature *> features;
LV2_Feature *work_schedule_feature = nullptr;
MapPathFeature mapPathFeature;
uint64_t maxInputControlPort = 0;
std::vector<bool> isInputControlPort;
+1 -2
View File
@@ -26,8 +26,7 @@
using namespace pipedal;
MapPathFeature::MapPathFeature(const std::filesystem::path &storagePath)
:storagePath(storagePath)
MapPathFeature::MapPathFeature()
{
lv2_state_map_path.handle = (LV2_State_Map_Path_Handle *)this;
lv2_state_map_path.absolute_path = FnAbsolutePath;
+13 -1
View File
@@ -24,12 +24,23 @@
namespace pipedal
{
struct ResourceFileMapping {
std::string resourcePath; // absolute path of the resource directory.
std::string storagePath; // absolute path of where resource directory files get placed.
};
class MapPathFeature
{
public:
MapPathFeature(const std::filesystem::path &storagePath);
MapPathFeature();
void Prepare(MapFeature* map);
void SetPluginStoragePath(const std::string&path) { storagePath = path;}
void AddResourceFileMapping(const ResourceFileMapping &resourceFileMapping)
{
this->resourceFileMappings.push_back(resourceFileMapping);
}
const std::vector<ResourceFileMapping> &GetResourceFileMappings() const { return resourceFileMappings; }
const std::string&GetPluginStoragePath() const { return storagePath; }
const LV2_Feature*GetMapPathFeature() { return &mapPathFeature;}
const LV2_Feature*GetMakePathFeature() { return &makePathFeature;}
@@ -60,5 +71,6 @@ namespace pipedal
private:
std::string storagePath;
std::vector<ResourceFileMapping> resourceFileMappings;
};
}
+3 -8
View File
@@ -243,16 +243,15 @@ static float nodeAsFloat(const LilvNode *node, float default_ = 0)
void PluginHost::SetPluginStoragePath(const std::filesystem::path &path)
{
mapPathFeature.SetPluginStoragePath(path);
pluginStoragePath = path;
}
std::string PluginHost::GetPluginStoragePath() const
{
return mapPathFeature.GetPluginStoragePath();
return pluginStoragePath;
}
PluginHost::PluginHost()
: mapPathFeature("")
{
pWorld = nullptr;
@@ -260,13 +259,9 @@ PluginHost::PluginHost()
lv2Features.push_back(mapFeature.GetUnmapFeature());
optionsFeature.Prepare(mapFeature, 44100, this->GetMaxAudioBufferSize(), this->GetAtomBufferSize());
mapPathFeature.Prepare(&mapFeature);
lv2Features.push_back(mapPathFeature.GetMapPathFeature());
lv2Features.push_back(mapPathFeature.GetMakePathFeature());
lv2Features.push_back(mapPathFeature.GetFreePathFeature());
lv2Features.push_back(optionsFeature.GetFeature());
lv2Features.push_back(nullptr);
this->urids = new Urids(mapFeature);
+1 -1
View File
@@ -757,7 +757,7 @@ namespace pipedal
std::vector<const LV2_Feature *> lv2Features;
MapFeature mapFeature;
OptionsFeature optionsFeature;
MapPathFeature mapPathFeature;
std::string pluginStoragePath;
static void fn_LilvSetPortValueFunc(const char *port_symbol,
void *user_data,
+36 -1
View File
@@ -1770,6 +1770,7 @@ FileRequestResult Storage::GetModFileList2(const std::string &relativePath, cons
FileEntry(uploadsDirectory / fileProperty.directory(), fs::path(fileProperty.directory()).filename().string(), true, true));
}
result.breadcrumbs_.push_back({"", "Home"});
result.currentDirectory_ = relativePath;
return result;
}
fs::path modDirectoryPath;
@@ -1824,9 +1825,23 @@ FileRequestResult Storage::GetModFileList2(const std::string &relativePath, cons
}
AddFilesToResult(result, fileProperty, relativePath);
result.currentDirectory_ = relativePath;
return result;
}
static bool IsChildDirectory(const fs::path& child, const fs::path&parent) {
auto iChild = child.begin();
for (auto i = parent.begin(); i != parent.end(); ++i)
{
if (iChild == child.end() || (*i) != *iChild)
{
return false;
}
++iChild;
}
return true;
}
FileRequestResult Storage::GetFileList2(const std::string &relativePath_, const UiFileProperty &fileProperty)
{
std::string absolutePath = relativePath_;
@@ -1843,15 +1858,35 @@ FileRequestResult Storage::GetFileList2(const std::string &relativePath_, const
if (fileProperty.directory().empty())
{
throw std::runtime_error("fileProperty.directory() not specified.");
}
std::filesystem::path pluginRootDirectory = this->GetPluginUploadDirectory() / fileProperty.directory();
if (absolutePath == "")
if (absolutePath.empty())
{
absolutePath = pluginRootDirectory.string();
}
// handle resource directories.
if (!fileProperty.resourceDirectory().empty())
{
if (fileProperty.resourceDirectory() == absolutePath)
{
absolutePath = pluginRootDirectory;
}
}
if (!IsChildDirectory(absolutePath,pluginRootDirectory))
{
absolutePath = pluginRootDirectory;
}
result.currentDirectory_ = absolutePath;
{
// watch out for resource files!!!
result.breadcrumbs_.push_back({"", "Home"});
fs::path fsAbsolutePath{absolutePath};
auto iAbsolutePath = fsAbsolutePath.begin();
+5
View File
@@ -398,6 +398,11 @@ int main(int argc, char *argv[])
}
Lv2Log::info("Shutdown complete.");
if (systemd)
{
sd_notify(0, "STOPPING=1");
}
if (g_restart)
return EXIT_FAILURE; // indicate to systemd that we want a restart.
}