/////////////// // toplevel and common /////////////// static int image_luaautoc_member(lua_State *L) { dt_lua_image_t imgid; luaA_to(L, dt_lua_image_t, &imgid, 1); const char *member_name = luaL_checkstring(L, 2); if(lua_gettop(L) != 3) { const dt_image_t *image = checkreadimage(L, 1); luaA_struct_push_member_name(L, dt_image_t, member_name, image); releasereadimage(L, image); return 1; } else { dt_image_t *image = checkwriteimage(L, 1); luaA_struct_to_member_name(L, dt_image_t, member_name, image, 3); releasewriteimage(L, image); return 0; } }
static int image_index(lua_State *L) { const char* membername = lua_tostring(L, -1); const dt_image_t * my_image=checkreadimage(L,-2); if(luaA_struct_has_member_name(L,dt_image_t,membername)) { const int result = luaA_struct_push_member_name(L, dt_image_t, my_image, membername); releasereadimage(L,my_image); return result; } switch(luaL_checkoption(L,-1,NULL,image_fields_name)) { case PATH: { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "select folder from images, film_rolls where " "images.film_id = film_rolls.id and images.id = ?1", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, my_image->id); if(sqlite3_step(stmt) == SQLITE_ROW) { lua_pushstring(L,(char *)sqlite3_column_text(stmt, 0)); } else { sqlite3_finalize(stmt); releasereadimage(L,my_image); return luaL_error(L,"should never happen"); } sqlite3_finalize(stmt); break; } case DUP_INDEX: { // get duplicate suffix int version = 0; sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "select count(id) from images where filename in " "(select filename from images where id = ?1) and film_id in " "(select film_id from images where id = ?1) and id < ?1", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, my_image->id); if(sqlite3_step(stmt) == SQLITE_ROW) version = sqlite3_column_int(stmt, 0); sqlite3_finalize(stmt); lua_pushinteger(L,version); break; } case IS_LDR: lua_pushboolean(L,dt_image_is_ldr(my_image)); break; case IS_HDR: lua_pushboolean(L,dt_image_is_hdr(my_image)); break; case IS_RAW: lua_pushboolean(L,dt_image_is_raw(my_image)); break; case RATING: { int score = my_image->flags & 0x7; if(score >6) score=5; if(score ==6) score=-1; lua_pushinteger(L,score); break; } case ID: lua_pushinteger(L,my_image->id); break; case FILM: luaA_push(L,dt_lua_film_t,&my_image->film_id); break; case CREATOR: { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db),"select value from meta_data where id = ?1 and key = ?2", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, my_image->id); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, DT_METADATA_XMP_DC_CREATOR); if(sqlite3_step(stmt) != SQLITE_ROW) { lua_pushstring(L,""); } else { lua_pushstring(L,(char *)sqlite3_column_text(stmt, 0)); } sqlite3_finalize(stmt); break; } case PUBLISHER: { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db),"select value from meta_data where id = ?1 and key = ?2", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, my_image->id); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, DT_METADATA_XMP_DC_PUBLISHER); if(sqlite3_step(stmt) != SQLITE_ROW) { lua_pushstring(L,""); } else { lua_pushstring(L,(char *)sqlite3_column_text(stmt, 0)); } sqlite3_finalize(stmt); break; } case TITLE: { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db),"select value from meta_data where id = ?1 and key = ?2", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, my_image->id); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, DT_METADATA_XMP_DC_TITLE); if(sqlite3_step(stmt) != SQLITE_ROW) { lua_pushstring(L,""); } else { lua_pushstring(L,(char *)sqlite3_column_text(stmt, 0)); } sqlite3_finalize(stmt); break; } case DESCRIPTION: { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db),"select value from meta_data where id = ?1 and key = ?2", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, my_image->id); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, DT_METADATA_XMP_DC_DESCRIPTION); if(sqlite3_step(stmt) != SQLITE_ROW) { lua_pushstring(L,""); } else { lua_pushstring(L,(char *)sqlite3_column_text(stmt, 0)); } sqlite3_finalize(stmt); break; } case RIGHTS: { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db),"select value from meta_data where id = ?1 and key = ?2", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, my_image->id); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, DT_METADATA_XMP_DC_RIGHTS); if(sqlite3_step(stmt) != SQLITE_ROW) { lua_pushstring(L,""); } else { lua_pushstring(L,(char *)sqlite3_column_text(stmt, 0)); } sqlite3_finalize(stmt); break; } case GROUP_LEADER: { luaA_push(L,dt_lua_image_t,&(my_image->group_id)); break; } case APPLY_STYLE: { lua_pushcfunction(L,dt_lua_style_apply); break; } case CREATE_STYLE: { lua_pushcfunction(L,dt_lua_style_create_from_image); break; } case RESET: { lua_pushcfunction(L,history_delete); break; } case MOVE: { lua_pushcfunction(L,dt_lua_move_image); break; } case COPY: { lua_pushcfunction(L,dt_lua_copy_image); break; } case LOCAL_COPY: { lua_pushboolean(L,my_image->flags &DT_IMAGE_LOCAL_COPY); break; } default: releasereadimage(L,my_image); return luaL_error(L,"should never happen %s",lua_tostring(L,-1)); } releasereadimage(L,my_image); return 1; }