summaryrefslogtreecommitdiffstats
path: root/src/model.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/model.c')
-rw-r--r--src/model.c321
1 files changed, 0 insertions, 321 deletions
diff --git a/src/model.c b/src/model.c
deleted file mode 100644
index 16a1962..0000000
--- a/src/model.c
+++ /dev/null
@@ -1,321 +0,0 @@
-/* SLV2
- * Copyright (C) 2007 Dave Robillard <http://drobilla.net>
- *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#define _XOPEN_SOURCE 500
-#include <string.h>
-#include <stdlib.h>
-#include <dirent.h>
-#include <string.h>
-#include <librdf.h>
-#include <slv2/model.h>
-#include <slv2/slv2.h>
-#include <slv2/util.h>
-#include "config.h"
-#include "private_types.h"
-
-
-SLV2Model
-slv2_model_new()
-{
- struct _Model* model = (struct _Model*)malloc(sizeof(struct _Model));
-
- model->world = librdf_new_world();
- librdf_world_open(model->world);
-
- model->storage = librdf_new_storage(model->world, "hashes", NULL,
- "hash-type='memory'");
-
- model->model = librdf_new_model(model->world, model->storage, NULL);
-
- model->parser = librdf_new_parser(model->world, "turtle", NULL, NULL);
-
- model->plugins = slv2_plugins_new();
-
- /*slv2_ontology_uri = raptor_new_uri((const unsigned char*)
- "file://" LV2_TTL_PATH);*/
-
- return model;
-}
-
-
-void
-slv2_model_free(SLV2Model model)
-{
- /*raptor_free_uri(slv2_ontology_uri);
- slv2_ontology_uri = NULL;*/
-
- slv2_plugins_free(model->plugins);
- model->plugins = NULL;
-
- librdf_free_parser(model->parser);
- model->parser = NULL;
-
- librdf_free_model(model->model);
- model->model = NULL;
-
- librdf_free_storage(model->storage);
- model->storage = NULL;
-
- librdf_free_world(model->world);
- model->world = NULL;
-
- free(model);
-}
-
-
-/* private */
-void
-slv2_model_load_directory(SLV2Model model, const char* dir)
-{
- DIR* pdir = opendir(dir);
- if (!pdir)
- return;
-
- struct dirent* pfile;
- while ((pfile = readdir(pdir))) {
- if (!strcmp(pfile->d_name, ".") || !strcmp(pfile->d_name, ".."))
- continue;
-
- char* bundle_uri_str = slv2_strjoin("file://", dir, "/", pfile->d_name, "/", NULL);
- librdf_uri* bundle_uri = librdf_new_uri(model->world, (unsigned char*)bundle_uri_str);
-
- DIR* bundle_dir = opendir(bundle_uri_str + 7);
-
- if (bundle_dir != NULL) {
- closedir(bundle_dir);
-
- librdf_uri* manifest_uri = librdf_new_uri_relative_to_base(
- bundle_uri, (const unsigned char*)"manifest.ttl");
-
- librdf_parser_parse_into_model(model->parser, manifest_uri, NULL, model->model);
-
- librdf_free_uri(manifest_uri);
- }
-
- free(bundle_uri_str);
- librdf_free_uri(bundle_uri);
- }
-
- closedir(pdir);
-}
-
-
-void
-slv2_model_load_path(SLV2Model model,
- const char* lv2_path)
-{
- char* path = slv2_strjoin(lv2_path, ":", NULL);
- char* dir = path; // Pointer into path
-
- // Go through string replacing ':' with '\0', using the substring,
- // then replacing it with 'X' and moving on. i.e. strtok on crack.
- while (strchr(path, ':') != NULL) {
- char* delim = strchr(path, ':');
- *delim = '\0';
-
- slv2_model_load_directory(model, dir);
-
- *delim = 'X';
- dir = delim + 1;
- }
-
- free(path);
-}
-
-
-/** comparator for sorting */
-/*int
-slv2_plugin_compare_by_uri(const void* a, const void* b)
-{
- SLV2Plugin plugin_a = *(SLV2Plugin*)a;
- SLV2Plugin plugin_b = *(SLV2Plugin*)b;
-
- return strcmp((const char*)librdf_uri_as_string(plugin_a->plugin_uri),
- (const char*)librdf_uri_as_string(plugin_b->plugin_uri));
-}
-*/
-
-void
-slv2_model_load_all(SLV2Model model)
-{
- char* lv2_path = getenv("LV2_PATH");
-
- // Read all manifest files
- if (lv2_path) {
- slv2_model_load_path(model, lv2_path);
- } else {
- const char* const home = getenv("HOME");
- const char* const suffix = "/.lv2:/usr/local/lib/lv2:usr/lib/lv2";
- lv2_path = slv2_strjoin(home, suffix, NULL);
-
- //fprintf(stderr, "$LV2_PATH is unset. Using default path %s\n", lv2_path);
-
- slv2_model_load_path(model, lv2_path);
-
- free(lv2_path);
- }
-
-
- // Find all plugins and associated data files
- unsigned char* query_string = (unsigned char*)
- "PREFIX : <http://lv2plug.in/ontology#>\n"
- "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"
- "SELECT DISTINCT ?plugin ?data ?binary\n"
- "WHERE { ?plugin a :Plugin; rdfs:seeAlso ?data\n"
- "OPTIONAL { ?plugin :binary ?binary } }\n"
- "ORDER BY ?plugin\n";
-
- librdf_query* q = librdf_new_query(model->world, "sparql",
- NULL, query_string, NULL);
-
- librdf_query_results* results = librdf_query_execute(q, model->model);
-
- while (!librdf_query_results_finished(results)) {
-
- librdf_node* plugin_node = librdf_query_results_get_binding_value(results, 0);
- librdf_uri* plugin_uri = librdf_node_get_uri(plugin_node);
- librdf_node* data_node = librdf_query_results_get_binding_value(results, 1);
- librdf_uri* data_uri = librdf_node_get_uri(data_node);
- librdf_node* binary_node = librdf_query_results_get_binding_value(results, 2);
- librdf_uri* binary_uri = librdf_node_get_uri(binary_node);
-
- SLV2Plugin plugin = slv2_plugins_get_by_uri(model->plugins,
- (const char*)librdf_uri_as_string(plugin_uri));
-
- // Create a new SLV2Plugin
- if (!plugin)
- plugin = slv2_plugin_new(model, plugin_uri,
- (const char*)librdf_uri_as_string(binary_uri));
-
- plugin->model = model;
-
- // FIXME: check for duplicates
- raptor_sequence_push(plugin->data_uris, librdf_new_uri_from_uri(data_uri));
-
- raptor_sequence_push(model->plugins, plugin);
-
- librdf_free_node(plugin_node);
- librdf_free_node(data_node);
-
- librdf_query_results_next(results);
- }
-
- // ORDER BY should (and appears to actually) guarantee this
- //raptor_sequence_sort(model->plugins, slv2_plugin_compare_by_uri);
-
- if (results)
- librdf_free_query_results(results);
-
- librdf_free_query(q);
-}
-
-
-#if 0
-void
-slv2_model_serialize(const char* filename)
-{
- librdf_uri* lv2_uri = librdf_new_uri(slv2_rdf_world,
- (unsigned char*)"http://lv2plug.in/ontology#");
-
- librdf_uri* rdfs_uri = librdf_new_uri(slv2_rdf_world,
- (unsigned char*)"http://www.w3.org/2000/01/rdf-schema#");
-
- // Write out test file
- librdf_serializer* serializer = librdf_new_serializer(slv2_rdf_world,
- "turtle", NULL, NULL);
- librdf_serializer_set_namespace(serializer, lv2_uri, "");
- librdf_serializer_set_namespace(serializer, rdfs_uri, "rdfs");
- librdf_serializer_serialize_model_to_file(serializer, filename, NULL, slv2_model);
- librdf_free_serializer(serializer);
-}
-#endif
-
-
-SLV2Plugins
-slv2_model_get_all_plugins(SLV2Model model)
-{
- // FIXME: Slow..
-
- // NULL deleter so user can free returned sequence without nuking
- // our locally stored plugins
- raptor_sequence* result = raptor_new_sequence(NULL, NULL);
-
- for (int i=0; i < raptor_sequence_size(model->plugins); ++i)
- raptor_sequence_push(result, raptor_sequence_get_at(model->plugins, i));
-
- // sorted?
-
- return result;
-}
-
-
-SLV2Plugins
-slv2_model_get_plugins_by_filter(SLV2Model model, bool (*include)(SLV2Plugin))
-{
- SLV2Plugins all = slv2_model_get_all_plugins(model);
- SLV2Plugins result = slv2_plugins_new();
-
- for (int i=0; i < raptor_sequence_size(all); ++i) {
- SLV2Plugin p = raptor_sequence_get_at(all, i);
- if (include(p))
- raptor_sequence_push(result, slv2_plugin_duplicate(p));
- }
-
- slv2_plugins_free(all);
- return result;
-}
-
-
-#if 0
-SLV2Plugins
-slv2_model_get_plugins_by_query(SLV2Model model, const char* query)
-{
- SLV2Plugins list = slv2_plugins_new();
-
- librdf_query* rq = librdf_new_query(model->world, "sparql",
- NULL, (const unsigned char*)query, NULL);
-
- librdf_query_results* results = librdf_query_execute(rq, model->model);
-
- while (!librdf_query_results_finished(results)) {
- librdf_node* plugin_node = librdf_query_results_get_binding_value(results, 0);
- librdf_uri* plugin_uri = librdf_node_get_uri(plugin_node);
-
- SLV2Plugin plugin = slv2_plugins_get_by_uri(list,
- (const char*)librdf_uri_as_string(plugin_uri));
-
- /* Create a new SLV2Plugin */
- if (!plugin) {
- SLV2Plugin new_plugin = slv2_plugin_new(model, plugin_uri);
- raptor_sequence_push(list, new_plugin);
- }
-
- librdf_free_node(plugin_node);
-
- librdf_query_results_next(results);
- }
-
- if (results)
- librdf_free_query_results(results);
-
- librdf_free_query(rq);
-
- return list;
-}
-#endif
-