Ignore:
Timestamp:
2011-12-21 13:00:56 (2 years ago)
Author:
drobilla
Message:

Merge preset and state saving.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/jalv/src/state.c

    r3896 r3897  
    183183} 
    184184 
    185 void 
    186 jalv_save(Jalv* jalv, const char* dir) 
    187 { 
    188     char* const path   = strjoin(dir, "/state.ttl"); 
    189     FILE*       out_fd = fopen(path, "w"); 
     185int 
     186write_preset(Jalv* jalv, const char* path) 
     187{ 
     188    FILE* fd = fopen(path, "w"); 
     189    if (!fd) { 
     190        fprintf(stderr, "error: Failed to open %s (%s)\n", 
     191                path, strerror(errno)); 
     192        return 1; 
     193    } 
    190194 
    191195    SerdEnv* env = serd_env_new(NULL); 
     
    211215        &SERD_URI_NULL, 
    212216        file_sink, 
    213         out_fd); 
     217        fd); 
    214218 
    215219    serd_env_foreach(env, (SerdPrefixSink)serd_writer_set_prefix, writer); 
     
    255259    // Close state file and clean up Serd 
    256260    serd_writer_free(writer); 
    257     fclose(out_fd); 
     261    fclose(fd); 
    258262    serd_env_free(env); 
    259263 
     264    return 0; 
     265} 
     266 
     267void 
     268jalv_save(Jalv* jalv, const char* dir) 
     269{ 
     270    char* const path = strjoin(dir, "/state.ttl"); 
     271    write_preset(jalv, path); 
    260272    free(path); 
    261273} 
     
    552564 
    553565static int 
    554 add_preset_to_manifest(SerdEnv*          env, 
    555                        const LilvPlugin* plugin, 
     566add_preset_to_manifest(const LilvPlugin* plugin, 
    556567                       const char*       manifest_path, 
    557568                       const char*       preset_uri, 
     
    586597    } 
    587598 
    588     // Open preset file 
    589     FILE* fd = fopen((char*)path, "w"); 
    590     if (!fd) { 
    591         fprintf(stderr, "error: Failed to open %s (%s)\n", 
    592                 path, strerror(errno)); 
    593         ret = 3; 
    594         goto done; 
    595     } 
    596  
    597     SerdURI  base_uri; 
    598     SerdNode base = serd_node_new_uri_from_string((const uint8_t*)uri, 
    599                                                   NULL, &base_uri); 
    600  
    601     SerdEnv* env = serd_env_new(&base); 
    602     serd_env_set_prefix_from_strings(env, USTR("lv2"),  USTR(NS_LV2)); 
    603     serd_env_set_prefix_from_strings(env, USTR("pset"), USTR(NS_PSET)); 
    604     serd_env_set_prefix_from_strings(env, USTR("rdfs"), USTR(NS_RDFS)); 
    605  
    606599    // Write preset file 
    607  
    608     SerdWriter* writer = serd_writer_new( 
    609         SERD_TURTLE, SERD_STYLE_ABBREVIATED|SERD_STYLE_CURIED, 
    610         env, &base_uri, 
    611         file_sink, 
    612         fd); 
    613  
    614     serd_env_foreach(env, (SerdPrefixSink)serd_writer_set_prefix, writer); 
    615  
    616     // <> a pset:Preset 
    617     SerdNode s = serd_node_from_string(SERD_URI, USTR("")); 
    618     SerdNode p = serd_node_from_string(SERD_URI, USTR(NS_RDF "type")); 
    619     SerdNode o = serd_node_from_string(SERD_CURIE, USTR("pset:Preset")); 
    620     serd_writer_write_statement(writer, 0, NULL, &s, &p, &o, NULL, NULL); 
    621  
    622     // <> rdfs:label label 
    623     p = serd_node_from_string(SERD_URI, USTR(NS_RDFS "label")); 
    624     o = serd_node_from_string(SERD_LITERAL, USTR(label)); 
    625     serd_writer_write_statement(writer, 0, 
    626                                 NULL, &s, &p, &o, NULL, NULL); 
    627  
    628     jalv_save_port_values(jalv, writer, &s); 
    629  
    630     serd_writer_free(writer); 
    631     serd_node_free(&base); 
    632  
    633     fclose(fd); 
    634     add_preset_to_manifest(env, jalv->plugin, 
    635                            manifest_path, filename, filename); 
    636  
    637     serd_env_free(env); 
     600    write_preset(jalv, path); 
     601 
     602    // Add entry to manifest 
     603    add_preset_to_manifest(jalv->plugin, manifest_path, filename, filename); 
    638604 
    639605done: 
     
    649615 
    650616static int 
    651 add_preset_to_manifest(SerdEnv*          env, 
    652                        const LilvPlugin* plugin, 
     617add_preset_to_manifest(const LilvPlugin* plugin, 
    653618                       const char*       manifest_path, 
    654619                       const char*       preset_uri, 
     
    662627    } 
    663628 
     629    SerdEnv* env = serd_env_new(NULL); 
     630    serd_env_set_prefix_from_strings(env, USTR("lv2"),   USTR(NS_LV2)); 
     631    serd_env_set_prefix_from_strings(env, USTR("pset"),  USTR(NS_PSET)); 
     632    serd_env_set_prefix_from_strings(env, USTR("rdfs"),  USTR(NS_RDFS)); 
     633 
    664634#ifdef HAVE_LOCKF 
    665635    lockf(fileno(fd), F_LOCK, 0); 
     
    709679    fclose(fd); 
    710680    free(manifest_uri); 
     681    serd_env_free(env); 
    711682 
    712683    return 0; 
Note: See TracChangeset for help on using the changeset viewer.