static void write_metadata(dt_lib_module_t *self) { dt_lib_metadata_t *d = (dt_lib_metadata_t *)self->data; gchar *title = gtk_combo_box_get_active_text(GTK_COMBO_BOX(d->title)); gchar *description = gtk_combo_box_get_active_text(GTK_COMBO_BOX(d->description)); gchar *rights = gtk_combo_box_get_active_text(GTK_COMBO_BOX(d->rights)); gchar *creator = gtk_combo_box_get_active_text(GTK_COMBO_BOX(d->creator)); gchar *publisher = gtk_combo_box_get_active_text(GTK_COMBO_BOX(d->publisher)); if(title != NULL && (d->multi_title == FALSE || gtk_combo_box_get_active(GTK_COMBO_BOX(d->title)) != 0)) dt_metadata_set(-1, "Xmp.dc.title", title); if(description != NULL && (d->multi_description == FALSE || gtk_combo_box_get_active(GTK_COMBO_BOX(d->description)) != 0)) dt_metadata_set(-1, "Xmp.dc.description", description); if(rights != NULL && (d->multi_rights == FALSE || gtk_combo_box_get_active(GTK_COMBO_BOX(d->rights)) != 0)) dt_metadata_set(-1, "Xmp.dc.rights", rights); if(creator != NULL && (d->multi_creator == FALSE || gtk_combo_box_get_active(GTK_COMBO_BOX(d->creator)) != 0)) dt_metadata_set(-1, "Xmp.dc.creator", creator); if(publisher != NULL && (d->multi_publisher == FALSE || gtk_combo_box_get_active(GTK_COMBO_BOX(d->publisher)) != 0)) dt_metadata_set(-1, "Xmp.dc.publisher", publisher); if(title != NULL) g_free(title); if(description != NULL) g_free(description); if(rights != NULL) g_free(rights); if(creator != NULL) g_free(creator); if(publisher != NULL) g_free(publisher); dt_image_synch_xmp(-1); update(self, FALSE); }
// WARNING: also change src/libs/import.c when changing this! int set_params(dt_lib_module_t *self, const void *params, int size) { char *buf = (char* )params; char *title = buf; buf += strlen(title) + 1; char *description = buf; buf += strlen(description) + 1; char *rights = buf; buf += strlen(rights) + 1; char *creator = buf; buf += strlen(creator) + 1; char *publisher = buf; if(size != strlen(title) + strlen(description) + strlen(rights) + strlen(creator) + strlen(publisher) + 5) return 1; if(title != NULL && title[0] != '\0') dt_metadata_set(-1, "Xmp.dc.title", title); if(description != NULL && description[0] != '\0') dt_metadata_set(-1, "Xmp.dc.description", description); if(rights != NULL && rights[0] != '\0') dt_metadata_set(-1, "Xmp.dc.rights", rights); if(creator != NULL && creator[0] != '\0') dt_metadata_set(-1, "Xmp.dc.creator", creator); if(publisher != NULL && publisher[0] != '\0') dt_metadata_set(-1, "Xmp.dc.publisher", publisher); dt_image_synch_xmp(-1); update(self, FALSE); return 0; }
static gboolean _lib_duplicate_caption_out_callback(GtkWidget *widget, GdkEvent *event, dt_lib_module_t *self) { int imgid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget),"imgid")); // we write the content of the textbox to the caption field dt_metadata_set(imgid, "Xmp.dc.title", gtk_entry_get_text(GTK_ENTRY(widget))); dt_image_synch_xmp(imgid); return FALSE; }
static int rights_member(lua_State *L) { if(lua_gettop(L) != 3) { const dt_image_t *my_image = checkreadimage(L, 1); GList *res = dt_metadata_get(my_image->id, "Xmp.dc.rights", NULL); if(res) lua_pushstring(L, (char *)res->data); else lua_pushstring(L, ""); releasereadimage(L, my_image); g_list_free_full(res, g_free); return 1; } else { dt_image_t *my_image = checkwriteimage(L, 1); dt_metadata_set(my_image->id, "Xmp.dc.rights", luaL_checkstring(L, 3)); dt_image_synch_xmp(my_image->id); releasewriteimage(L, my_image); return 0; } }
static int image_newindex(lua_State *L) { const char* membername = lua_tostring(L, -2); dt_image_t * my_image=checkwriteimage(L,-3); if(luaA_struct_has_member_name(L,dt_image_t,membername)) { if(luaA_type_has_to_func(luaA_struct_typeof_member_name(L,dt_image_t,membername))) { luaA_struct_to_member_name(L, dt_image_t, my_image, membername,-1); } else { releasewriteimage(L,my_image); luaL_error(L,"%s is read only",membername); } releasewriteimage(L,my_image); return 0; } switch(luaL_checkoption(L,-2,NULL,image_fields_name)) { case RATING: { int my_score = luaL_checkinteger(L,-1); if(my_score > 5) { releasewriteimage(L,my_image); return luaL_error(L,"rating too high : %d",my_score); } if(my_score == -1) my_score = 6; if(my_score < -1) { releasewriteimage(L,my_image); return luaL_error(L,"rating too low : %d",my_score); } my_image->flags &= ~0x7; my_image->flags |= my_score; break; } case CREATOR: dt_metadata_set(my_image->id,"Xmp.dc.creator",luaL_checkstring(L,-1)); dt_image_synch_xmp(my_image->id); break; case PUBLISHER: dt_metadata_set(my_image->id,"Xmp.dc.publisher",luaL_checkstring(L,-1)); dt_image_synch_xmp(my_image->id); break; case TITLE: dt_metadata_set(my_image->id,"Xmp.dc.title",luaL_checkstring(L,-1)); dt_image_synch_xmp(my_image->id); break; case DESCRIPTION: dt_metadata_set(my_image->id,"Xmp.dc.description",luaL_checkstring(L,-1)); dt_image_synch_xmp(my_image->id); break; case RIGHTS: dt_metadata_set(my_image->id,"Xmp.dc.title",luaL_checkstring(L,-1)); dt_image_synch_xmp(my_image->id); break; case LOCAL_COPY: { int imgid = my_image->id; luaL_checktype(L,-1,LUA_TBOOLEAN); // we need to release write image for the other functions to use it releasewriteimage(L,my_image); if(lua_toboolean(L,-1)) { dt_image_local_copy_set(imgid); } else { dt_image_local_copy_reset(imgid); } return 0; } default: releasewriteimage(L,my_image); return luaL_error(L,"unknown index for image : ",lua_tostring(L,-2)); } releasewriteimage(L,my_image); return 0; }