void panda_dbopen (panda_pdf * document) { int ec; char filename[] = "/tmp/panda-XXXXXX"; if (NULL == document) panda_error(panda_true, "Attempt to open a database for a NULL document"); /* The name of the database must be unique, or we wont be able to create more than one document at a time */ if((ec = mkstemp(filename)) < 0){ panda_error(panda_true, "Could not generate a temporary filename for database"); } close(ec); unlink(filename); #ifdef DEBUG printf ("Opening the database: %s\n", filename); #endif // DEBUG #ifdef _WINDOWS panda_windbopen (document); #else #ifdef USE_EDB if ( !(document->db = e_db_open(filename)) ) panda_error(panda_true, "Could not open database."); #else { DB *dbptr = (DB *) document->db; if((ec = db_create(&dbptr, NULL, 0)) != 0) panda_error(panda_true, panda_xsnprintf("Could not open database: %s", db_strerror(ec))); if(NULL == dbptr) panda_error(panda_true, "Couldn't create the database\n"); if((ec = dbptr->open(dbptr, filename, "panda", DB_BTREE, DB_CREATE, 0600)) != 0) panda_error(panda_true, panda_xsnprintf("Could not open database: %s", db_strerror(ec))); document->db = (void *) dbptr; } #endif // USE_EDB #endif // _WINDOWS }
void sprite_load_from_metadata_f(gevas_metadata_find_edb_data* d) { sprite_load_from_metadata_data* data = (sprite_load_from_metadata_data*)d; E_DB_File* edb = 0; const char* edb_prefix = 0; gboolean loaded = 1; GtkgEvasSprite* ev = 0; /* printf("sprite_load_from_metadata() TOP\n"); */ g_return_if_fail(d != NULL); g_return_if_fail(data->ev != NULL); if(data->loaded) return; ev = data->ev; edb_prefix = url_args_lookup_str(d->hash_args, "prefix", "" ); /* printf("sprite_load_from_metadata() edb_full_path:%s\n",d->edb_full_path); */ /* printf("sprite_load_from_metadata() edb_prefix :%s\n",edb_prefix); */ /* load the data */ if( edb = e_db_open( d->edb_full_path )) { gint idx = 0; gint count = 0; char* t = 0; gint n = 0; count = edb_lookup_int( edb, 0, "%s/%s", edb_prefix, "Count",0 ); for( idx = 0; loaded && idx < count ; idx++ ) { GtkgEvasImage* o = gevasimage_new(); char* image_name = 0; image_name = edb_lookup_str( edb, "", "%s/%d/Location", edb_prefix, idx,0 ); /* printf("load_from_metadata() image_name:%s\n",image_name); */ if(!(o = gevasimage_new_from_metadata( GEVAS(ev), image_name ))) { gevas_obj_collection_clear( ev->col ); loaded=0; } else { gevas_obj_collection_add( ev->col, GTK_GEVASOBJ(o) ); } g_free(image_name); } if(loaded && !(idx < count)) { const char* p = edb_prefix; GHashTable* def_hash_args = g_hash_table_new( g_str_hash, g_str_equal ); data->loaded = 1; edb_to_hash_int( edb, def_hash_args, "default_frame_delay", p, 0 ); edb_to_hash_int( edb, def_hash_args, "x", p, 0 ); edb_to_hash_int( edb, def_hash_args, "y", p, 0 ); edb_to_hash_int( edb, def_hash_args, "visible", p, 0 ); edb_to_hash_int( edb, def_hash_args, "play_forever", p, 0 ); setup_attribs( ev, def_hash_args ); setup_attribs( ev, d->hash_args ); hash_str_str_clean( def_hash_args ); } e_db_close(edb); } }
static void load_from_metadata( gpointer data, gpointer user_data ) { const char* fully_qualified_prefix = data; GtkgEvasSprite* ev = user_data; char* full_buffer; char* filen; char* edb_prefix = 0; char* p = 0; E_DB_File* edb = 0; gboolean loaded=1; GHashTable* hash_args = 0; char* strbuf1 = 0; g_return_if_fail(ev != NULL); g_return_if_fail(fully_qualified_prefix!= NULL); g_return_if_fail(GTK_IS_GEVAS_SPRITE(ev)); if( ev->metadata_load_loaded ) { return; } /* printf("SPRITE load_from_metadata() fully_qualified_prefix: %s\n", */ /* fully_qualified_prefix); */ /* printf("SPRITE load_from_metadata() ev->metadata_load_postfix:%s\n", */ /* ev->metadata_load_postfix); */ if( strlen( fully_qualified_prefix )) { full_buffer = g_strconcat( fully_qualified_prefix, "/", ev->metadata_load_postfix,0 ); } else { full_buffer = g_strdup(ev->metadata_load_postfix); } /* printf("full_buffer:%s\n",full_buffer ); */ filen = strbuf1 = url_file_name_part_new( full_buffer ); hash_args = url_args_to_hash( full_buffer ); g_free(full_buffer); filen = gevas_trim_prefix("file:",filen); edb_prefix = url_args_lookup_str(hash_args, "prefix", "" ); /* printf("load_from_metadata() filen :%s\n",filen); */ /* printf("load_from_metadata() edb_prefix :%s\n",edb_prefix); */ edb = e_db_open(filen); if( edb ) { gint idx = 0; gint count = 0; char* t = 0; int rc = 0; gint n = 0; /* printf("load_from_metadata() loaded edb\n"); */ t = g_strconcat( edb_prefix, "/Count",0 ); rc = e_db_int_get(edb, t, &count); g_free(t); if( rc == 1 ) { /* printf("load_from_metadata() count:%d\n",count); */ for( idx = 0; loaded && idx < count ; idx++ ) { GtkgEvasImage* o = gevasimage_new(); char* image_name = 0; t = g_strdup_printf("%s/%d/Location",edb_prefix,idx); /* printf("load_from_metadata() image_name comes from loc:%s\n",t); */ image_name=e_db_str_get(edb, t); g_free(t); /* printf("load_from_metadata() image_name:%s\n",image_name); */ if(!(o = gevasimage_new_from_metadata( GEVAS(ev), image_name ))) { loaded=0; } else { gevas_obj_collection_add( ev->col, GTK_GEVASOBJ(o) ); } g_free(image_name); } if(loaded && !(idx < count)) { char* p = edb_prefix; GHashTable* def_hash_args = g_hash_table_new( g_str_hash, g_str_equal ); ev->metadata_load_loaded = 1; edb_to_hash_int( edb, def_hash_args, "default_frame_delay", p, 0 ); edb_to_hash_int( edb, def_hash_args, "x", p, 0 ); edb_to_hash_int( edb, def_hash_args, "y", p, 0 ); edb_to_hash_int( edb, def_hash_args, "visible", p, 0 ); edb_to_hash_int( edb, def_hash_args, "play_forever", p, 0 ); setup_attribs( ev, def_hash_args ); setup_attribs( ev, hash_args ); hash_str_str_clean( def_hash_args ); } e_db_close(edb); } } hash_str_str_clean( hash_args ); g_free(strbuf1); }