summaryrefslogtreecommitdiffstats
path: root/src/Serialiser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Serialiser.cpp')
-rw-r--r--src/Serialiser.cpp77
1 files changed, 31 insertions, 46 deletions
diff --git a/src/Serialiser.cpp b/src/Serialiser.cpp
index 2f976d53..86913aa4 100644
--- a/src/Serialiser.cpp
+++ b/src/Serialiser.cpp
@@ -22,14 +22,8 @@
#include <string>
#include <utility>
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <glibmm/convert.h>
-#include <glibmm/fileutils.h>
-#include <glibmm/miscutils.h>
-#include <glibmm/module.h>
-
#include "ingen/Arc.hpp"
+#include "ingen/FilePath.hpp"
#include "ingen/Forge.hpp"
#include "ingen/Interface.hpp"
#include "ingen/Log.hpp"
@@ -41,6 +35,8 @@
#include "ingen/URIMap.hpp"
#include "ingen/URIs.hpp"
#include "ingen/World.hpp"
+#include "ingen/filesystem.hpp"
+#include "ingen/runtime_paths.hpp"
#include "lv2/lv2plug.in/ns/ext/state/state.h"
#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
#include "raul/Path.hpp"
@@ -65,7 +61,8 @@ struct Serialiser::Impl {
enum class Mode { TO_FILE, TO_STRING };
- void start_to_file(const Raul::Path& root, const std::string& filename);
+ void start_to_file(const Raul::Path& root,
+ const FilePath& filename);
std::set<const Resource*> serialise_graph(SPtr<const Node> graph,
const Sord::Node& graph_id);
@@ -85,10 +82,10 @@ struct Serialiser::Impl {
Sord::Node path_rdf_node(const Raul::Path& path);
- void write_manifest(const std::string& bundle_path,
- SPtr<const Node> graph);
+ void write_manifest(const FilePath& bundle_path,
+ SPtr<const Node> graph);
- void write_plugins(const std::string& bundle_path,
+ void write_plugins(const FilePath& bundle_path,
const std::set<const Resource*> plugins);
void serialise_arc(const Sord::Node& parent,
@@ -116,11 +113,11 @@ Serialiser::~Serialiser()
}
void
-Serialiser::Impl::write_manifest(const std::string& bundle_path,
- SPtr<const Node> graph)
+Serialiser::Impl::write_manifest(const FilePath& bundle_path,
+ SPtr<const Node> graph)
{
- const string manifest_path(Glib::build_filename(bundle_path, "manifest.ttl"));
- const string binary_path(Glib::Module::build_path("", "ingen_lv2"));
+ const FilePath manifest_path(bundle_path / "manifest.ttl");
+ const FilePath binary_path(ingen_module_path("lv2"));
start_to_file(Raul::Path("/"), manifest_path);
@@ -147,10 +144,10 @@ Serialiser::Impl::write_manifest(const std::string& bundle_path,
}
void
-Serialiser::Impl::write_plugins(const std::string& bundle_path,
+Serialiser::Impl::write_plugins(const FilePath& bundle_path,
const std::set<const Resource*> plugins)
{
- const string plugins_path(Glib::build_filename(bundle_path, "plugins.ttl"));
+ const FilePath plugins_path(bundle_path / "plugins.ttl");
start_to_file(Raul::Path("/"), plugins_path);
@@ -187,27 +184,22 @@ Serialiser::write_bundle(SPtr<const Node> graph, const URI& uri)
void
Serialiser::Impl::write_bundle(SPtr<const Node> graph, const URI& uri)
{
- std::string path = Glib::filename_from_uri(uri.string());
- if (Glib::file_test(path, Glib::FILE_TEST_EXISTS)
- && !Glib::file_test(path, Glib::FILE_TEST_IS_DIR)) {
- path = Glib::path_get_dirname(path);
+ FilePath path(uri.path());
+ if (filesystem::exists(path) && !filesystem::is_directory(path)) {
+ path = path.parent_path();
}
_world.log().info(fmt("Writing bundle %1%\n") % path);
+ filesystem::create_directories(path);
- if (path.back() != '/') {
- path.append("/");
- }
-
- g_mkdir_with_parents(path.c_str(), 0744);
-
- const string main_file = Glib::build_filename(path, "main.ttl");
+ const FilePath main_file = path / "main.ttl";
const Raul::Path old_root_path = _root_path;
start_to_file(graph->path(), main_file);
std::set<const Resource*> plugins = serialise_graph(
- graph, Sord::URI(_model->world(), main_file, _base_uri.string()));
+ graph,
+ Sord::URI(_model->world(), main_file.string(), _base_uri.string()));
finish();
write_manifest(path, graph);
@@ -221,20 +213,13 @@ Serialiser::Impl::write_bundle(SPtr<const Node> graph, const URI& uri)
* This must be called before any serializing methods.
*/
void
-Serialiser::Impl::start_to_file(const Raul::Path& root, const string& filename)
+Serialiser::Impl::start_to_file(const Raul::Path& root,
+ const FilePath& filename)
{
- // Set Base URI
- assert(filename.find(":") == string::npos || filename.substr(0, 5) == "file:");
- if (filename.find(":") == string::npos) {
- _base_uri = URI("file://" + filename);
- } else {
- _base_uri = URI(filename);
- }
-
- // Find graph basename to use as symbol / fallback name
- _basename = Glib::path_get_basename(filename);
+ _base_uri = URI(filename);
+ _basename = filename.stem().string();
if (_basename == "main.ttl") {
- _basename = Glib::path_get_basename(Glib::path_get_dirname(filename));
+ _basename = filename.filename().parent_path().stem().string();
}
_model = new Sord::Model(*_world.rdf_world(), _base_uri.string());
@@ -449,14 +434,14 @@ Serialiser::Impl::serialise_block(SPtr<const Node> block,
serialise_properties(block_id, props);
if (_base_uri.scheme() == "file") {
- const std::string base = Glib::filename_from_uri(_base_uri.string());
- const std::string graph_dir = Glib::path_get_dirname(base);
- const std::string state_dir = Glib::build_filename(graph_dir, block->symbol());
- const std::string state_file = Glib::build_filename(state_dir, "state.ttl");
+ const FilePath base_path = _base_uri.file_path();
+ const FilePath graph_dir = base_path.parent_path();
+ const FilePath state_dir = graph_dir / block->symbol();
+ const FilePath state_file = state_dir / "state.ttl";
if (block->save_state(state_dir)) {
_model->add_statement(block_id,
Sord::URI(_model->world(), uris.state_state),
- Sord::URI(_model->world(), Glib::filename_to_uri(state_file)));
+ Sord::URI(_model->world(), URI(state_file)));
}
}