static void write_layer_params_and_data ( VikLayer *l, FILE *f ) { VikLayerParam *params = vik_layer_get_interface(l->type)->params; VikLayerFuncGetParam get_param = vik_layer_get_interface(l->type)->get_param; fprintf ( f, "name=%s\n", l->name ? l->name : "" ); if ( !l->visible ) fprintf ( f, "visible=f\n" ); if ( params && get_param ) { VikLayerParamData data; guint16 i, params_count = vik_layer_get_interface(l->type)->params_count; for ( i = 0; i < params_count; i++ ) { data = get_param(l, i, TRUE); file_write_layer_param(f, params[i].name, params[i].type, data); } } if ( vik_layer_get_interface(l->type)->write_file_data ) { fprintf ( f, "\n\n~LayerData\n" ); vik_layer_get_interface(l->type)->write_file_data ( l, f ); fprintf ( f, "~EndLayerData\n" ); } /* foreach param: write param, and get_value, etc. then run layer data, and that's it. */ }
/** * a_preferences_save_to_file: * * Returns: TRUE on success */ gboolean a_preferences_save_to_file() { gchar *fn = g_build_filename(a_get_viking_dir(), VIKING_PREFS_FILE, NULL); FILE *f = g_fopen(fn, "w"); // Since preferences file may contain sensitive information, // it'll be better to store it so it can only be read by the user if ( g_chmod(fn, 0600) != 0 ) g_warning ( "%s: Failed to set permissions on %s", __FUNCTION__, fn ); g_free ( fn ); if ( f ) { VikLayerParam *param; VikLayerTypedParamData *val; int i; for ( i = 0; i < params->len; i++ ) { param = (VikLayerParam *) g_ptr_array_index(params,i); val = (VikLayerTypedParamData *) g_hash_table_lookup ( values, param->name ); if ( val ) if ( val->type != VIK_LAYER_PARAM_PTR ) file_write_layer_param ( f, param->name, val->type, val->data ); } fclose(f); f = NULL; return TRUE; } return FALSE; }
/** * a_preferences_save_to_file: * * Returns: TRUE on success */ gboolean a_preferences_save_to_file() { gchar *fn = g_build_filename(a_get_viking_dir(), VIKING_PREFS_FILE, NULL); // TODO: error checking FILE *f = g_fopen(fn, "w"); /* Since preferences files saves OSM login credentials, * it'll be better to store it in secret. */ g_chmod(fn, 0600); g_free ( fn ); if ( f ) { VikLayerParam *param; VikLayerTypedParamData *val; int i; for ( i = 0; i < params->len; i++ ) { param = (VikLayerParam *) g_ptr_array_index(params,i); val = (VikLayerTypedParamData *) g_hash_table_lookup ( values, param->name ); if ( val ) if ( val->type != VIK_LAYER_PARAM_PTR ) file_write_layer_param ( f, param->name, val->type, val->data ); } fclose(f); f = NULL; return TRUE; } return FALSE; }
/* TRUE on success */ static gboolean preferences_save_to_file() { gchar *fn = g_build_filename(a_get_viking_dir(), VIKING_PREFS_FILE, NULL); // TODO: error checking FILE *f = g_fopen(fn, "w"); g_free ( fn ); if ( f ) { VikLayerParam *param; VikLayerTypedParamData *val; int i; for ( i = 0; i < params->len; i++ ) { param = (VikLayerParam *) g_ptr_array_index(params,i); val = (VikLayerTypedParamData *) g_hash_table_lookup ( values, param->name ); g_assert ( val != NULL ); file_write_layer_param ( f, param->name, val->type, val->data ); } fclose(f); f = NULL; return TRUE; } return FALSE; }