123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- // storagefs.js
- // This file contains the functions that handle filesystem based storage.
- var helpers = require( './helpers' ),
- fs = require( 'fs' ),
- url = require( 'url' ),
- libpath = require( 'path' );
- var storage_root = "./documents";
- function list_application_instances( public_path, application ) {
- var result = [ ];
- var potential_app_dir = helpers.JoinPath( storage_root, public_path, application );
- if ( helpers.IsDirectory( potential_app_dir ) ) {
- var potential_instances = fs.readdirSync( potential_app_dir.replace( /\//g, libpath.sep ) );
- for ( var index = 0; index < potential_instances; index++ ) {
- if ( ( helpers.IsDirectory( helpers.JoinPath( potential_app_dir, potential_instances[ index ] ) ) ) && ( potential_instances[ index ].match( /^instance_*/ ) ) ) {
- var potential_instance_id = potential_instances[ index ].slice( 9 );
- if ( ( get_instance_metadata( public_path, application, potential_instance_id ) != undefined ) && ( get_persistence_state( public_path, application, potential_instance_id ) != undefined ) && ( list_instance_save_states( public_path, application, potential_instance_id ).length == 0 ) ) {
- result.push( potential_instance_id );
- }
- }
- }
- }
- return result.sort();
- }
- function get_instance_metadata( public_path, application, instance ) {
- result = undefined;
- potential_filename = helpers.JoinPath( storage_root, public_path, application, "instance_" + instance, "metadata.json" );
- if ( helpers.IsFile( potential_filename ) ) {
- var file_contents = fs.readFileSync( potential_filename, "utf8" );
- result = JSON.parse( file_contents );
- }
- return result;
- }
- function set_instance_metadata( public_path, application, instance, metadata ) {
- var segments = helpers.generateSegments( public_path );
- segments.push( application );
- segments.push( "instance_" + instance );
- var current_path = storage_root;
- for ( var index = 0; index < segments.length; index++ ) {
- current_path = helpers.JoinPath( current_path, segments[ index ] );
- if ( !( helpers.IsDirectory( current_path ) ) ) {
- fs.mkdirSync( current_path );
- }
- }
- fs.writeFileSync( helpers.JoinPath( storage_root, public_path, application, "instance_" + instance, "metadata.json" ), JSON.stringify( metadata ) );
- }
- function get_persistence_state( public_path, application, instance ) {
- result = undefined;
- potential_filename = helpers.JoinPath( storage_root, public_path, application, "instance_" + instance, "persistenceState.vwf.json" );
- if ( helpers.IsFile( potential_filename ) ) {
- var file_contents = fs.readFileSync( potential_filename, "utf8" );
- result = JSON.parse( file_contents );
- }
- return result;
- }
- // WARNING: Take note, if an instance already has metadata, but you provide undefined metadata, the
- // old metadata will persist.
- function set_persistence_state( public_path, application, instance, state, metadata ) {
- var segments = helpers.generateSegments( public_path );
- segments.push( application );
- segments.push( "instance_" + instance );
- var current_path = storage_root;
- for ( var index = 0; index < segments.length; index++ ) {
- current_path = helpers.JoinPath( current_path, segments[ index ] );
- if ( !( helpers.IsDirectory( current_path ) ) ) {
- fs.mkdirSync( current_path );
- }
- }
- fs.writeFileSync( helpers.JoinPath( storage_root, public_path, application, "instance_" + instance, "persistenceState.vwf.json" ), JSON.stringify( state ) );
- if ( metadata ) {
- fs.writeFileSync( helpers.JoinPath( storage_root, public_path, application, "instance_" + instance, "metadata.json" ), JSON.stringify( metadata ) );
- }
- }
- function list_instance_save_states( public_path, application, instance ) {
- var result = [ ];
- var potential_dir_name = helpers.JoinPath( storage_root, public_path, application, "instance_" + instance );
- if ( helpers.IsDirectory( potential_dir_name ) ) {
- var potential_save_names = fs.readdirSync( potential_dir_name.replace( /\//g, libpath.sep ) );
- for ( var index = 0; index < potential_save_names.length; index++ ) {
- if ( ( potential_save_names[ index ].match( /^save_*/ ) ) && ( helpers.IsDirectory( helpers.JoinPath( potential_dir_name, potential_save_names[ index ] ) ) ) ) {
- if ( helpers.IsFile( helpers.JoinPath( potential_dir_name, potential_save_names[ index ], "saveState.vwf.json" ) ) ) {
- result.push( potential_save_names[ index ].slice( 5 ) );
- }
- }
- }
- }
- return result.sort();
- }
- function list_application_save_states( public_path, application ) {
- result = {};
- var application_dir_name = helpers.JoinPath( storage_root, public_path, application );
- if ( helpers.IsDirectory( application_dir_name ) ) {
- var potential_instances = fs.readdirSync( application_dir_name.replace( /\//g, libpath.sep ) );
- for ( var index = 0; index < potential_instances.length; index++ ) {
- if ( potential_instances[ index ].match( /^instance_*/ ) ) {
- var instance_id = potential_instances[ index ].slice( 9 );
- var instance_saves = list_instance_save_states( public_path, application, instance_id );
- if ( instance_saves.length > 0 ) {
- result[ instance_id ] = instance_saves;
- }
- }
- }
- }
- return result;
- }
- function get_save_metadata( public_path, application, instance, save_name ) {
- result = undefined;
- potential_filename = helpers.JoinPath( storage_root, public_path, application, "instance_" + instance, "save_" + save_name, "metadata.json" );
- if ( helpers.IsFile( potential_filename ) ) {
- var file_contents = fs.readFileSync( potential_filename, "utf8" );
- result = JSON.parse( file_contents );
- } else {
- potential_filename = helpers.JoinPath( storage_root, public_path, application, "instance_" + instance, "metadata.json" );
- if ( helpers.IsFile( potential_filename ) ) {
- var file_contents = fs.readFileSync( potential_filename, "utf8" );
- result = JSON.parse( file_contents );
- }
- }
- return result;
- }
- function get_save_state( public_path, application, instance, save_name ) {
- result = undefined;
- potential_filename = helpers.JoinPath( storage_root, public_path, application, "instance_" + instance, "save_" + save_name, "saveState.vwf.json" );
- if ( helpers.IsFile( potential_filename ) ) {
- var file_contents = fs.readFileSync( potential_filename, "utf8" );
- result = JSON.parse( file_contents );
- }
- return result;
- }
- function set_save_state( public_path, application, instance, save_name, save_state, metadata ) {
- var segments = helpers.generateSegments( public_path );
- segments.push( application );
- segments.push( "instance_" + instance );
- segments.push( "save_" + save_name );
- var current_path = storage_root;
- for ( var index = 0; index < segments.length; index++ ) {
- current_path = helpers.JoinPath( current_path, segments[ index ] );
- if ( !( helpers.IsDirectory( current_path ) ) ) {
- fs.mkdirSync( current_path );
- }
- }
- fs.writeFileSync( helpers.JoinPath( storage_root, public_path, application, "instance_" + instance, "save_" + save_name, "saveState.vwf.json" ), JSON.stringify( save_state ) );
- if ( metadata ) {
- fs.writeFileSync( helpers.JoinPath( storage_root, public_path, application, "instance_" + instance, "save_" + save_name, "metadata.json" ), JSON.stringify( metadata ) );
- }
- }
- exports.ListApplicationInstances = list_application_instances;
- exports.GetInstanceMetadata = get_instance_metadata;
- exports.SetInstanceMetadata = set_instance_metadata;
- exports.GetPersistenceState = get_persistence_state;
- exports.SetPersistenceState = set_persistence_state;
- exports.ListInstanceSaveStates = list_instance_save_states;
- exports.ListApplicationSaveStates = list_application_save_states;
- exports.GetSaveMetadata = get_save_metadata;
- exports.GetSaveState = get_save_state;
- exports.SetSaveState = set_save_state;
|