gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r1402 - gnunet-gtk/src/plugins/fs


From: grothoff
Subject: [GNUnet-SVN] r1402 - gnunet-gtk/src/plugins/fs
Date: Mon, 11 Jul 2005 19:02:59 -0700 (PDT)

Author: grothoff
Date: 2005-07-11 19:02:51 -0700 (Mon, 11 Jul 2005)
New Revision: 1402

Added:
   gnunet-gtk/src/plugins/fs/meta.c
   gnunet-gtk/src/plugins/fs/meta.h
Modified:
   gnunet-gtk/src/plugins/fs/Makefile.am
   gnunet-gtk/src/plugins/fs/collection.c
   gnunet-gtk/src/plugins/fs/namespace.c
   gnunet-gtk/src/plugins/fs/upload.c
Log:
code cleanup

Modified: gnunet-gtk/src/plugins/fs/Makefile.am
===================================================================
--- gnunet-gtk/src/plugins/fs/Makefile.am       2005-07-11 19:09:17 UTC (rev 
1401)
+++ gnunet-gtk/src/plugins/fs/Makefile.am       2005-07-12 02:02:51 UTC (rev 
1402)
@@ -13,6 +13,7 @@
   collection.c collection.h \
   download.c download.h \
   fs.c fs.h \
+  meta.c meta.h \
   namespace.c namespace.h \
   search.c search.h \
   upload.c upload.h

Modified: gnunet-gtk/src/plugins/fs/collection.c
===================================================================
--- gnunet-gtk/src/plugins/fs/collection.c      2005-07-11 19:09:17 UTC (rev 
1401)
+++ gnunet-gtk/src/plugins/fs/collection.c      2005-07-12 02:02:51 UTC (rev 
1402)
@@ -27,82 +27,32 @@
 #include "platform.h"
 #include "gnunetgtk_common.h"
 #include "fs.h"
+#include "meta.h"
 #include "collection.h"
 #include <extractor.h>
 
 static GladeXML * metaXML;
 
-
-
-/**
- * FIXME: somehow this function is not called
- * when the button is clicked.
- */
-void 
-on_collectionDialogMetaDataAddButton_clicked(gpointer dummy,
-                                            GtkWidget * uploadButton) {
-  GtkWidget * metaList;
-  GtkWidget * entryLine;
-  GtkWidget * typeCB;
-  const char * value;
-  EXTRACTOR_KeywordType type;
-  GtkListStore * metamodel;
-  GtkListStore * typemodel;
-  GtkTreeIter iter;
-  char * stype;
-  
-  metaList = glade_xml_get_widget(metaXML,
-                                 "collectionMetaDataTreeView");
-  metamodel
-    = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(metaList)));
-
-  entryLine = glade_xml_get_widget(metaXML,
-                                  "collectionMetaDataValueEntry"); 
-  value = gtk_entry_get_text(GTK_ENTRY(entryLine));
-  typeCB = glade_xml_get_widget(metaXML,
-                               "collectionMetaDataTypeComboBox"); 
-  typemodel
-    = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(typeCB)));
-  if (! gtk_combo_box_get_active_iter(GTK_COMBO_BOX(typeCB),
-                                     &iter))
-    return; /* oops */
-  gtk_tree_model_get(GTK_TREE_MODEL(typemodel),
-                    &iter,
-                    KTYPE_STRING, &stype,
-                    KTYPE_TYPE, &type,
-                    -1);  
-  gtk_list_store_append(metamodel,
-                       &iter);
-  gtk_list_store_set(metamodel,
-                    &iter,
-                    META_TYPE, type,
-                    META_STYPE, stype,
-                    META_VALUE, value,
-                    -1); 
-  gtk_entry_set_text(GTK_ENTRY(entryLine), "");
+void on_collectionDialogMetaDataAddButton_clicked(gpointer dummy,
+                                                 GtkWidget * uploadButton) {
+  handleMetaDataListUpdate(metaXML,
+                          "collectionMetaDataTypeComboBox",               
+                          "collectionMetaDataValueEntry",
+                          "collectionMetaDataTreeView");
 }
 
 
 void createCollection_clicked(GtkWidget * dummy1,
                               GtkWidget * dummy2) {  
-  GtkWidget * w;
   const char * collectionName;
+  const char * updateIntervalString;
+  GtkWidget * w;
   GtkWidget * nameLine;
-  GtkWidget * metaList;
   GtkWidget * dialog;
-  GtkWidget * metaType;
   GtkWidget * spin;
-  GtkListStore * metamodel;
-  GtkCellRenderer * renderer;
-  GtkListStore * keywordTypeModel;
-  GtkTreeIter iter;
   struct ECRS_MetaData * meta;
-  EXTRACTOR_KeywordType type;
-  const char * stype;
-  char * mvalue;
   struct ECRS_URI * root;
   cron_t updateInterval;
-  const char * updateIntervalString;
 
   metaXML
     = glade_xml_new(getGladeFileName(),
@@ -111,75 +61,18 @@
   connectGladeWithPlugins(metaXML);
   dialog = glade_xml_get_widget(metaXML,
                                "createCollectionDialog");
-  metamodel
-    = gtk_list_store_new(META_NUM,
-                        G_TYPE_INT,
-                        G_TYPE_STRING,
-                        G_TYPE_STRING);
-  metaList = glade_xml_get_widget(metaXML,
-                                 "collectionMetaDataTreeView");
-  renderer = gtk_cell_renderer_text_new();
-  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(metaList),
-                                             -1,
-                                             _("Category"),
-                                             renderer,
-                                             "text", META_STYPE,
-                                             NULL);
-  renderer = gtk_cell_renderer_text_new();
-  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(metaList),
-                                             -1,
-                                             _("Value"),
-                                             renderer,
-                                             "text", META_VALUE,
-                                             NULL);
-  gtk_tree_view_set_model(GTK_TREE_VIEW(metaList),
-                         GTK_TREE_MODEL(metamodel));
-  keywordTypeModel
-    = gtk_list_store_new(KTYPE_NUM,
-                        G_TYPE_STRING,
-                        G_TYPE_INT);
-  metaType 
-    = glade_xml_get_widget(metaXML,
-                          "collectionMetaTypeComboBox");
-  gtk_combo_box_set_model(GTK_COMBO_BOX(metaType),
-                         GTK_TREE_MODEL(keywordTypeModel));
-  for (type=0;type<EXTRACTOR_getHighestKeywordTypeNumber();type++) {   
-    stype = EXTRACTOR_getKeywordTypeAsString(type);    
-    gtk_list_store_append(keywordTypeModel,
-                         &iter);
-    gtk_list_store_set(keywordTypeModel,
-                      &iter,
-                      KTYPE_STRING, stype,
-                      KTYPE_TYPE, type,
-                      -1); 
-  }
-  renderer = gtk_cell_renderer_text_new();
-  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(metaType),
-                            renderer,
-                            FALSE);
-  gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(metaType),
-                               renderer,
-                               "text", KTYPE_STRING);
-  gtk_combo_box_set_active(GTK_COMBO_BOX(metaType),
-                          0);
+  createMetaDataListTreeView(metaXML,
+                            "collectionMetaDataTreeView",
+                            NULL,
+                            NULL);
+  createMetaTypeComboBox(metaXML,
+                        "collectionMetaTypeComboBox");
   gtk_dialog_set_default_response(GTK_DIALOG(dialog),
                                  GTK_RESPONSE_OK);
   if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) {
-    meta = ECRS_createMetaData();
-    if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(metamodel),
-                                     &iter)) {
-      do {     
-       gtk_tree_model_get(GTK_TREE_MODEL(metamodel),
-                          &iter,
-                          META_TYPE, &type,
-                          META_VALUE, &mvalue,
-                          -1);
-       ECRS_addToMetaData(meta,
-                          type,
-                          mvalue);
-      } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(metamodel),
-                                       &iter));
-    }
+    meta = getMetaDataFromList(metaXML,
+                              "collectionMetaDataTreeView",
+                              NULL);
     spin = glade_xml_get_widget(metaXML,
                                "collectionAnonymityLevel");    
     nameLine

Added: gnunet-gtk/src/plugins/fs/meta.c
===================================================================
--- gnunet-gtk/src/plugins/fs/meta.c    2005-07-11 19:09:17 UTC (rev 1401)
+++ gnunet-gtk/src/plugins/fs/meta.c    2005-07-12 02:02:51 UTC (rev 1402)
@@ -0,0 +1,412 @@
+/*
+     This file is part of GNUnet.
+     (C) 2005 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file src/plugins/fs/meta.c
+ * @brief code for dealing with meta and keyword tree views
+ * @author Christian Grothoff
+ */
+
+#include "platform.h"
+#include "meta.h"
+#include "fs.h"
+#include <extractor.h>
+
+static int publishMetaData(EXTRACTOR_KeywordType type,
+                          const char * data,
+                          void * cls) {  
+  GtkListStore * store = cls;
+  const char * stype;
+  GtkTreeIter iter;
+
+  stype = EXTRACTOR_getKeywordTypeAsString(type);
+  GNUNET_ASSERT(stype != NULL);
+  gtk_list_store_append(store,
+                       &iter);
+  gtk_list_store_set(store,
+                    &iter,
+                    META_TYPE, type,
+                    META_STYPE, stype,
+                    META_VALUE, data,
+                    -1);
+  return OK;
+}
+
+void createMetaDataListTreeView(GladeXML * xml,
+                               const char * name,
+                               const char * previewName,
+                               const struct ECRS_MetaData * init) {
+  GtkWidget * metaList;
+  GtkListStore * metamodel;
+  GtkCellRenderer * renderer;
+  GtkWidget * preview;
+  GdkPixbuf * pixbuf;
+  GdkPixbufLoader * loader;
+  unsigned char * thumb;
+  size_t ts;
+
+  metamodel
+    = gtk_list_store_new(META_NUM,
+                        G_TYPE_INT,
+                        G_TYPE_STRING,
+                        G_TYPE_STRING);
+  metaList = glade_xml_get_widget(xml,
+                                 name);
+  renderer = gtk_cell_renderer_text_new();
+  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(metaList),
+                                             -1,
+                                             _("Category"),
+                                             renderer,
+                                             "text", META_STYPE,
+                                             NULL);
+  renderer = gtk_cell_renderer_text_new();
+  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(metaList),
+                                             -1,
+                                             _("Value"),
+                                             renderer,
+                                             "text", META_VALUE,
+                                             NULL);
+  gtk_tree_view_set_model(GTK_TREE_VIEW(metaList),
+                         GTK_TREE_MODEL(metamodel));
+  if (init != NULL) 
+    ECRS_getMetaData(init,
+                    &publishMetaData,
+                    metamodel);  
+  if (previewName == NULL)
+    return;
+  preview = glade_xml_get_widget(xml,
+                                previewName);
+
+  thumb = NULL;
+  ts = ECRS_getThumbnailFromMetaData(init,
+                                    &thumb);
+  preview = glade_xml_get_widget(xml,
+                                previewName);  
+  if (ts != 0) {
+    loader = gdk_pixbuf_loader_new();
+    gdk_pixbuf_loader_write(loader,
+                           (const guchar*) thumb,
+                           ts,
+                           NULL);    
+    pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
+    gdk_pixbuf_loader_close(loader,
+                           NULL);    
+    gtk_image_set_from_pixbuf(GTK_IMAGE(preview),
+                             pixbuf);
+    g_object_unref(pixbuf);
+  }
+}
+
+static int publishKeyword(const char * data,
+                         void * cls) {
+  GtkListStore * store = cls;
+  GtkTreeIter iter;
+
+  gtk_list_store_append(store,
+                       &iter);
+  gtk_list_store_set(store,
+                    &iter,
+                    0, data,
+                    -1);
+  return OK;
+}
+
+void createKeywordListTreeView(GladeXML * xml,
+                              const char * name,
+                              const struct ECRS_URI * init) {
+  GtkWidget * keywordList;
+  GtkListStore * keymodel;
+  GtkCellRenderer * renderer;
+
+  keymodel
+    = gtk_list_store_new(1,
+                       G_TYPE_STRING);
+  keywordList = glade_xml_get_widget(xml,
+                                    name);
+  renderer = gtk_cell_renderer_text_new();
+  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(keywordList),
+                                             -1,
+                                             _("Keyword"),
+                                             renderer,
+                                             "text", 0,
+                                             NULL);
+  gtk_tree_view_set_model(GTK_TREE_VIEW(keywordList),
+                         GTK_TREE_MODEL(keymodel));
+  if (init != NULL)
+    ECRS_getKeywordsFromUri(init,
+                           &publishKeyword,
+                           keymodel);
+}
+
+void createMetaTypeComboBox(GladeXML * xml,
+                           const char * name) {
+  const char * stype;
+  GtkWidget * metaType;
+  GtkCellRenderer * renderer;
+  GtkListStore * keywordTypeModel;
+  GtkTreeIter iter;
+  EXTRACTOR_KeywordType type; 
+
+  keywordTypeModel
+    = gtk_list_store_new(KTYPE_NUM,
+                        G_TYPE_STRING,
+                        G_TYPE_INT);
+  metaType = glade_xml_get_widget(xml,
+                                 name);
+  gtk_combo_box_set_model(GTK_COMBO_BOX(metaType),
+                         GTK_TREE_MODEL(keywordTypeModel));
+  for (type=0;type<EXTRACTOR_getHighestKeywordTypeNumber();type++) {   
+    stype = EXTRACTOR_getKeywordTypeAsString(type);    
+    gtk_list_store_append(keywordTypeModel,
+                         &iter);
+    gtk_list_store_set(keywordTypeModel,
+                      &iter,
+                      KTYPE_STRING, stype,
+                      KTYPE_TYPE, type,
+                      -1); 
+  }
+  renderer = gtk_cell_renderer_text_new();
+  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(metaType),
+                            renderer,
+                            FALSE);
+  gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(metaType),
+                               renderer,
+                               "text", KTYPE_STRING);
+  gtk_combo_box_set_active(GTK_COMBO_BOX(metaType),
+                          0);
+}
+
+void handleKeywordListUpdate(GladeXML * xml,
+                            const char * inputLineName,
+                            const char * keywordListName) {
+  const char * keyword;
+  GtkWidget * keywordList;
+  GtkWidget * entryLine;
+  GtkListStore * keymodel;
+  GtkTreeIter iter;
+  
+  keywordList = glade_xml_get_widget(xml,
+                                    keywordListName);
+  keymodel
+    = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(keywordList)));
+
+  entryLine = glade_xml_get_widget(xml,
+                                  inputLineName);
+  keyword = gtk_entry_get_text(GTK_ENTRY(entryLine));
+  gtk_list_store_append(keymodel,
+                       &iter);
+  gtk_list_store_set(keymodel,
+                    &iter,
+                    0, keyword,
+                    -1); 
+  gtk_entry_set_text(GTK_ENTRY(entryLine), "");
+}
+
+void handleMetaDataListUpdate(GladeXML * xml,                        
+                             const char * typeInputLineName,
+                             const char * valueInputLineName,
+                             const char * metaDataListName) {
+  const char * value;
+  GtkWidget * metaList;
+  GtkWidget * entryLine;
+  GtkWidget * typeCB;
+  EXTRACTOR_KeywordType type;
+  GtkListStore * metamodel;
+  GtkListStore * typemodel;
+  GtkTreeIter iter;
+  char * stype;
+  
+  metaList = glade_xml_get_widget(xml,
+                                 metaDataListName);
+  metamodel
+    = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(metaList)));
+
+  entryLine = glade_xml_get_widget(xml,
+                                  valueInputLineName); 
+  value = gtk_entry_get_text(GTK_ENTRY(entryLine));
+  if ( (value == NULL) || (strlen(value) == 0) )
+    return;
+  typeCB = glade_xml_get_widget(xml,
+                               typeInputLineName); 
+  typemodel
+    = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(typeCB)));
+  if (! gtk_combo_box_get_active_iter(GTK_COMBO_BOX(typeCB),
+                                     &iter))
+    return; /* oops */
+  gtk_tree_model_get(GTK_TREE_MODEL(typemodel),
+                    &iter,
+                    KTYPE_STRING, &stype,
+                    KTYPE_TYPE, &type,
+                    -1);  
+  gtk_list_store_append(metamodel,
+                       &iter);
+  gtk_list_store_set(metamodel,
+                    &iter,
+                    META_TYPE, type,
+                    META_STYPE, stype,
+                    META_VALUE, value,
+                    -1); 
+  gtk_entry_set_text(GTK_ENTRY(entryLine), "");
+}
+
+struct ECRS_MetaData * getMetaDataFromList(GladeXML * xml,
+                                          const char * name,
+                                          const char * previewName) {
+  GtkWidget * metaList;
+  GtkWidget * preview;
+  GtkTreeModel * metamodel;
+  GtkTreeIter iter;
+  struct ECRS_MetaData * meta;
+  EXTRACTOR_KeywordType type;
+  GdkPixbuf * pixbuf;
+  char * mvalue;
+
+  metaList = glade_xml_get_widget(xml,
+                                 name);
+  metamodel = gtk_tree_view_get_model(GTK_TREE_VIEW(metaList));
+  meta = ECRS_createMetaData();
+  if (gtk_tree_model_get_iter_first(metamodel,
+                                   &iter)) {
+    do {       
+      gtk_tree_model_get(metamodel,
+                        &iter,
+                        META_TYPE, &type,
+                        META_VALUE, &mvalue,
+                        -1);
+      ECRS_addToMetaData(meta,
+                        type,
+                        mvalue);
+    } while (gtk_tree_model_iter_next(metamodel,
+                                     &iter));
+  }
+  if (previewName == NULL) 
+    return meta;
+
+  preview = glade_xml_get_widget(xml,
+                                previewName);
+  
+  if (GTK_IMAGE_PIXBUF == 
+      gtk_image_get_storage_type(GTK_IMAGE(preview))) {
+    size_t length;
+    char * thumb;
+    
+    pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(preview));
+    if (pixbuf != NULL) {
+      thumb = NULL;
+      if (gdk_pixbuf_save_to_buffer(pixbuf,
+                                   &thumb,
+                                   &length,
+                                   "png",
+                                   NULL,
+                                   NULL)) {
+       char * binary;
+       size_t pos;
+       size_t end;
+       size_t wpos;
+       size_t i;
+       unsigned int markers[8]; /* 256 bits */
+       unsigned char marker;
+       
+       /* encode! */
+       binary = MALLOC(2 + length + (length+256) / 254);         
+       pos = 0;
+       wpos = 0;
+       while (pos < length) {
+         /* find unused value between 1 and 255 in
+            the next 254 bytes */
+         end = pos + 254;
+         if (end < pos)
+           break; /* integer overflow! */
+         if (end > length)
+           end = length;
+         memset(markers, 0, sizeof(markers));
+         for (i=pos;i<end;i++)
+           markers[thumb[i]&7] |= 1 << (thumb[i] >> 3);
+         marker = 1;
+         while (markers[marker&7] & (1 << (marker >> 3))) {
+           marker++;
+           GNUNET_ASSERT(marker != 0);
+         }
+         /* recode */
+         binary[wpos++] = marker;
+         for (i=pos;i<end;i++)
+           binary[wpos++] = thumb[i] == 0 ? marker : thumb[i];
+         pos = end;
+       }
+       binary[wpos++] = 0; /* 0-termination! */
+       free(thumb);
+       ECRS_addToMetaData(meta,
+                          EXTRACTOR_THUMBNAIL_DATA,
+                          binary);
+       FREE(binary);   
+      }
+    }
+  } 
+  return meta;
+}
+
+struct ECRS_URI * getKeywordURIFromList(GladeXML * xml,
+                                       const char * name) {
+  GtkTreeModel * keymodel;
+  GtkTreeView * keyList;
+  GtkTreeIter iter;
+  struct ECRS_URI * keywordURI;
+  char * mvalue;
+  char ** keywords;
+  unsigned int kpos;
+  unsigned int ksize;
+
+  keyList = GTK_TREE_VIEW(glade_xml_get_widget(xml,
+                                              name));
+  keymodel = gtk_tree_view_get_model(keyList);
+  
+  keywords = NULL;
+  ksize = 0;
+  GROW(keywords,
+       ksize,
+       64);
+  kpos = 0;
+  if (gtk_tree_model_get_iter_first(keymodel,
+                                   &iter)) {
+    do {       
+      gtk_tree_model_get(keymodel,
+                        &iter,
+                        0, &mvalue,
+                        -1);
+      keywords[kpos++] = mvalue;
+      if (kpos == ksize)
+       GROW(keywords,
+            ksize,
+            kpos*2);
+    } while (gtk_tree_model_iter_next(keymodel,
+                                     &iter));
+  }
+  keywords[kpos] = NULL;
+  
+  keywordURI = ECRS_keywordsToUri((const char**)keywords);    
+  while (kpos > 0) 
+    FREE(keywords[--kpos]);
+  GROW(keywords,
+       ksize,
+       0);
+  return keywordURI;
+}
+
+/* end of meta.c */

Added: gnunet-gtk/src/plugins/fs/meta.h
===================================================================
--- gnunet-gtk/src/plugins/fs/meta.h    2005-07-11 19:09:17 UTC (rev 1401)
+++ gnunet-gtk/src/plugins/fs/meta.h    2005-07-12 02:02:51 UTC (rev 1402)
@@ -0,0 +1,63 @@
+/*
+     This file is part of GNUnet.
+     (C) 2005 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file src/plugins/fs/meta.h
+ * @brief code for dealing with meta and keyword tree views
+ * @author Christian Grothoff
+ */
+
+#ifndef GTK_META_H
+#define GTK_META_H
+
+#include "gnunetgtk_common.h"
+#include <GNUnet/gnunet_ecrs_lib.h>
+
+void createMetaDataListTreeView(GladeXML * xml,
+                               const char * name,
+                               const char * previewName,
+                               const struct ECRS_MetaData * init);
+
+void createKeywordListTreeView(GladeXML * xml,
+                              const char * name,
+                              const struct ECRS_URI * init);
+
+void createMetaTypeComboBox(GladeXML * xml,
+                           const char * name);
+
+void handleKeywordListUpdate(GladeXML * xml,
+                            const char * inputLineName,
+                            const char * keywordListName);
+
+void handleMetaDataListUpdate(GladeXML * xml,                        
+                             const char * typeInputLineName,
+                             const char * valueInputLineName,
+                             const char * metaDataListName);
+
+struct ECRS_MetaData * getMetaDataFromList(GladeXML * xml,
+                                          const char * name,
+                                          const char * preview);
+
+struct ECRS_URI * getKeywordURIFromList(GladeXML * xml,
+                                       const char * name);
+
+
+/* end of meta.h */
+#endif

Modified: gnunet-gtk/src/plugins/fs/namespace.c
===================================================================
--- gnunet-gtk/src/plugins/fs/namespace.c       2005-07-11 19:09:17 UTC (rev 
1401)
+++ gnunet-gtk/src/plugins/fs/namespace.c       2005-07-12 02:02:51 UTC (rev 
1402)
@@ -27,6 +27,7 @@
 #include "platform.h"
 #include "gnunetgtk_common.h"
 #include "fs.h"
+#include "meta.h"
 #include "namespace.h"
 #include <extractor.h>
 
@@ -372,112 +373,29 @@
   return OK;
 }
 
-/**
- * FIXME: somehow this function is not called
- * when the button is clicked.
- */
-void 
-on_namespacemetaDataDialogKeywordAddButton_clicked(gpointer dummy,
-                                                  GtkWidget * uploadButton) {
-  GtkWidget * keywordList;
-  GtkWidget * entryLine;
-  const char * keyword;
-  GtkListStore * keymodel;
-  GtkTreeIter iter;
-
-  keywordList = glade_xml_get_widget(metaXML,
-                                    "namespaceMetaDataDialogKeywordList");
-  keymodel
-    = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(keywordList)));
-
-  entryLine = glade_xml_get_widget(metaXML,
-                                  "namespaceKeywordEntry"); 
-  keyword = gtk_entry_get_text(GTK_ENTRY(entryLine));
-  gtk_list_store_append(keymodel,
-                       &iter);
-  gtk_list_store_set(keymodel,
-                    &iter,
-                    0, keyword,
-                    -1); 
-  gtk_entry_set_text(GTK_ENTRY(entryLine), "");
+void on_namespacemetaDataDialogKeywordAddButton_clicked(gpointer dummy,
+                                                       GtkWidget * 
uploadButton) {
+  handleKeywordListUpdate(metaXML,
+                         "namespaceKeywordEntry",
+                         "namespaceMetaDataDialogKeywordList");
 }
 
-/**
- * FIXME: somehow this function is not called
- * when the button is clicked.
- */
-void 
-on_namespacemetaDataDialogMetaDataAddButton_clicked(gpointer dummy,
-                                                   GtkWidget * uploadButton) {
-  GtkWidget * metaList;
-  GtkWidget * entryLine;
-  GtkWidget * typeCB;
-  const char * value;
-  EXTRACTOR_KeywordType type;
-  GtkListStore * metamodel;
-  GtkListStore * typemodel;
-  GtkTreeIter iter;
-  char * stype;
-  
-  metaList = glade_xml_get_widget(metaXML,
-                                 "namespaceMetaDataDialogMetaDataList");
-  metamodel
-    = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(metaList)));
-
-  entryLine = glade_xml_get_widget(metaXML,
-                                  "namespaceMetaDataValueEntry"); 
-  value = gtk_entry_get_text(GTK_ENTRY(entryLine));
-  typeCB = glade_xml_get_widget(metaXML,
-                               "namespaceMetaDataDialogMetaTypeComboBox"); 
-  typemodel
-    = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(typeCB)));
-  if (! gtk_combo_box_get_active_iter(GTK_COMBO_BOX(typeCB),
-                                     &iter))
-    return; /* oops */
-  gtk_tree_model_get(GTK_TREE_MODEL(typemodel),
-                    &iter,
-                    KTYPE_STRING, &stype,
-                    KTYPE_TYPE, &type,
-                    -1);  
-  gtk_list_store_append(metamodel,
-                       &iter);
-  gtk_list_store_set(metamodel,
-                    &iter,
-                    META_TYPE, type,
-                    META_STYPE, stype,
-                    META_VALUE, value,
-                    -1); 
-  gtk_entry_set_text(GTK_ENTRY(entryLine), "");
+void on_namespacemetaDataDialogMetaDataAddButton_clicked(gpointer dummy,
+                                                        GtkWidget * 
uploadButton) {
+  handleMetaDataListUpdate(metaXML,
+                          "namespaceMetaDataDialogMetaTypeComboBox",
+                          "namespaceMetaDataValueEntry",
+                          "namespaceMetaDataDialogMetaDataList");
 }
 
-
-
-/**
- * CLEANUP: refactor code to share keyword/metadata list 
- * and model creation with upload and collection!
- */
 void create_namespace_clicked(GtkWidget * dummy1,
                              GtkWidget * dummy2) {
   const char * namespaceName;
   GtkWidget * nameLine;
-  GtkWidget * metaList;
-  GtkWidget * keywordList;
   GtkWidget * dialog;
-  GtkWidget * metaType;
   GtkWidget * spin;
-  GtkListStore * metamodel;
-  GtkListStore * keymodel;
-  GtkCellRenderer * renderer;
-  GtkListStore * keywordTypeModel;
-  GtkTreeIter iter;
   struct ECRS_MetaData * meta;
-  EXTRACTOR_KeywordType type;
   struct ECRS_URI * keywordURI;
-  const char * stype;
-  char * mvalue;
-  char ** keywords;
-  unsigned int kpos;
-  unsigned int ksize;
   struct ECRS_URI * root;
   HashCode512 namespaceId;
   HashCode512 rootEntry;
@@ -489,118 +407,25 @@
   connectGladeWithPlugins(metaXML);
   dialog = glade_xml_get_widget(metaXML,
                                "namespaceMetaDataDialog");
-  metamodel
-    = gtk_list_store_new(META_NUM,
-                        G_TYPE_INT,
-                        G_TYPE_STRING,
-                        G_TYPE_STRING);
-  metaList = glade_xml_get_widget(metaXML,
-                                 "namespaceMetaDataDialogMetaDataList");
-  renderer = gtk_cell_renderer_text_new();
-  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(metaList),
-                                             -1,
-                                             _("Category"),
-                                             renderer,
-                                             "text", META_STYPE,
-                                             NULL);
-  renderer = gtk_cell_renderer_text_new();
-  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(metaList),
-                                             -1,
-                                             _("Value"),
-                                             renderer,
-                                             "text", META_VALUE,
-                                             NULL);
-  gtk_tree_view_set_model(GTK_TREE_VIEW(metaList),
-                         GTK_TREE_MODEL(metamodel));
-  keymodel
-    = gtk_list_store_new(1,
-                        G_TYPE_STRING);
-  keywordList = glade_xml_get_widget(metaXML,
-                                    "namespaceMetaDataDialogKeywordList");
-  renderer = gtk_cell_renderer_text_new();
-  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(keywordList),
-                                             -1,
-                                             _("Keyword"),
-                                             renderer,
-                                             "text", 0,
-                                             NULL);
-  gtk_tree_view_set_model(GTK_TREE_VIEW(keywordList),
-                         GTK_TREE_MODEL(keymodel));
-  keywordTypeModel
-    = gtk_list_store_new(KTYPE_NUM,
-                        G_TYPE_STRING,
-                        G_TYPE_INT);
-  metaType 
-    = glade_xml_get_widget(metaXML,
-                          "namespaceMetaDataDialogMetaTypeComboBox");
-  gtk_combo_box_set_model(GTK_COMBO_BOX(metaType),
-                         GTK_TREE_MODEL(keywordTypeModel));
-  for (type=0;type<EXTRACTOR_getHighestKeywordTypeNumber();type++) {   
-    stype = EXTRACTOR_getKeywordTypeAsString(type);    
-    gtk_list_store_append(keywordTypeModel,
-                         &iter);
-    gtk_list_store_set(keywordTypeModel,
-                      &iter,
-                      KTYPE_STRING, stype,
-                      KTYPE_TYPE, type,
-                      -1); 
-  }
-  renderer = gtk_cell_renderer_text_new();
-  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(metaType),
-                            renderer,
-                            FALSE);
-  gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(metaType),
-                               renderer,
-                               "text", KTYPE_STRING);
-  gtk_combo_box_set_active(GTK_COMBO_BOX(metaType),
-                          0);
+  createMetaDataListTreeView(metaXML,                       
+                            "namespaceMetaDataDialogMetaDataList",
+                            NULL,
+                            NULL);
+  createKeywordListTreeView(metaXML,
+                           "namespaceMetaDataDialogKeywordList",
+                           NULL);
+  createMetaTypeComboBox(metaXML,                       
+                        "namespaceMetaDataDialogMetaTypeComboBox");
   gtk_dialog_set_default_response(GTK_DIALOG(dialog),
                                  GTK_RESPONSE_OK);
   if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) {
-    meta = ECRS_createMetaData();
-    if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(metamodel),
-                                     &iter)) {
-      do {     
-       gtk_tree_model_get(GTK_TREE_MODEL(metamodel),
-                          &iter,
-                          META_TYPE, &type,
-                          META_VALUE, &mvalue,
-                          -1);
-       ECRS_addToMetaData(meta,
-                          type,
-                          mvalue);
-      } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(metamodel),
-                                       &iter));
-    }
-    keywords = NULL;
-    ksize = 0;
-    GROW(keywords,
-        ksize,
-        64);
-    kpos = 0;
-    if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(keymodel),
-                                     &iter)) {
-      do {     
-       gtk_tree_model_get(GTK_TREE_MODEL(keymodel),
-                          &iter,
-                          0, &mvalue,
-                          -1);
-       keywords[kpos++] = mvalue;
-       if (kpos == ksize)
-         GROW(keywords,
-              ksize,
-              kpos*2);
-      } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(keymodel),
-                                       &iter));
-    }
-    keywords[kpos] = NULL;
-
-    keywordURI = ECRS_keywordsToUri((const char**)keywords);    
-    while (kpos > 0) 
-      FREE(keywords[--kpos]);
-    GROW(keywords,
-        ksize,
-        0);
+    meta
+      = getMetaDataFromList(metaXML,
+                           "namespaceMetaDataDialogMetaDataList",
+                           NULL);
+    keywordURI 
+      = getKeywordURIFromList(metaXML,
+                             "namespaceMetaDataDialogKeywordList");
     spin = glade_xml_get_widget(metaXML,
                                "namespaceAnonymityspinbutton");    
     nameLine = glade_xml_get_widget(metaXML,

Modified: gnunet-gtk/src/plugins/fs/upload.c
===================================================================
--- gnunet-gtk/src/plugins/fs/upload.c  2005-07-11 19:09:17 UTC (rev 1401)
+++ gnunet-gtk/src/plugins/fs/upload.c  2005-07-12 02:02:51 UTC (rev 1402)
@@ -29,6 +29,7 @@
 #include "search.h"
 #include "upload.h"
 #include "fs.h"
+#include "meta.h"
 #include <extractor.h>
 
 #ifdef MINGW
@@ -243,38 +244,6 @@
 }
 
 
-static int publishMetaData(EXTRACTOR_KeywordType type,
-                          const char * data,
-                          GtkListStore * store) {
-  const char * stype;
-  GtkTreeIter iter;
-
-  stype = EXTRACTOR_getKeywordTypeAsString(type);
-  GNUNET_ASSERT(stype != NULL);
-  gtk_list_store_append(store,
-                       &iter);
-  gtk_list_store_set(store,
-                    &iter,
-                    META_TYPE, type,
-                    META_STYPE, stype,
-                    META_VALUE, data,
-                    -1);
-  return OK;
-}
-
-static int publishKeyword(const char * data,
-                         GtkListStore * store) {
-  GtkTreeIter iter;
-
-  gtk_list_store_append(store,
-                       &iter);
-  gtk_list_store_set(store,
-                    &iter,
-                    0, data,
-                    -1);
-  return OK;
-}
-
 void on_selectAlternativePreviewButton_selection_changed(GtkWidget * preview,
                                                         GtkWidget * 
fileChooser) {
   char * fn;
@@ -297,108 +266,34 @@
 
 void on_metaDataDialogKeywordAddButton_clicked(gpointer dummy,
                                               GtkWidget * uploadButton) {
-  GtkWidget * keywordList;
-  GtkWidget * entryLine;
-  const char * keyword;
-  GtkListStore * keymodel;
-  GtkTreeIter iter;
-  
-  keywordList = glade_xml_get_widget(metaXML,
-                                    "metaDataDialogKeywordList");
-  keymodel
-    = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(keywordList)));
-
-  entryLine = glade_xml_get_widget(metaXML,
-                                  "fileInformationKeywordEntry"); 
-  keyword = gtk_entry_get_text(GTK_ENTRY(entryLine));
-  gtk_list_store_append(keymodel,
-                       &iter);
-  gtk_list_store_set(keymodel,
-                    &iter,
-                    0, keyword,
-                    -1); 
-  gtk_entry_set_text(GTK_ENTRY(entryLine), "");
+  handleKeywordListUpdate(metaXML,
+                         "fileInformationKeywordEntry",
+                         "metaDataDialogKeywordList");
 }
 
 void on_metaDataDialogMetaDataAddButton_clicked(gpointer dummy,
-                                              GtkWidget * uploadButton) {
-  GtkWidget * metaList;
-  GtkWidget * entryLine;
-  GtkWidget * typeCB;
-  const char * value;
-  EXTRACTOR_KeywordType type;
-  GtkListStore * metamodel;
-  GtkListStore * typemodel;
-  GtkTreeIter iter;
-  char * stype;
-  
-  metaList = glade_xml_get_widget(metaXML,
-                                 "metaDataDialogMetaDataList");
-  metamodel
-    = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(metaList)));
-
-  entryLine = glade_xml_get_widget(metaXML,
-                                  "metaDataDialogValueEntry"); 
-  value = gtk_entry_get_text(GTK_ENTRY(entryLine));
-  if ( (value == NULL) || (strlen(value) == 0) )
-    return;
-  typeCB = glade_xml_get_widget(metaXML,
-                               "metaDataDialogMetaTypeComboBox"); 
-  typemodel
-    = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(typeCB)));
-  if (! gtk_combo_box_get_active_iter(GTK_COMBO_BOX(typeCB),
-                                     &iter))
-    return; /* oops */
-  gtk_tree_model_get(GTK_TREE_MODEL(typemodel),
-                    &iter,
-                    KTYPE_STRING, &stype,
-                    KTYPE_TYPE, &type,
-                    -1);  
-  gtk_list_store_append(metamodel,
-                       &iter);
-  gtk_list_store_set(metamodel,
-                    &iter,
-                    META_TYPE, type,
-                    META_STYPE, stype,
-                    META_VALUE, value,
-                    -1); 
-  gtk_entry_set_text(GTK_ENTRY(entryLine), "");
+                                               GtkWidget * uploadButton) {
+  handleMetaDataListUpdate(metaXML,
+                          "metaDataDialogMetaTypeComboBox",
+                          "metaDataDialogValueEntry",
+                          "metaDataDialogMetaDataList");
 }
 
 void on_fsinsertuploadbutton_clicked(gpointer dummy,
                                     GtkWidget * uploadButton) {
   const char * filename;
+  const char * filenamerest;
   GtkWidget * uploadLine;
-  GtkWidget * metaList;
-  GtkWidget * keywordList;
   GtkWidget * entry;
   GtkWidget * dialog;
-  GtkWidget * preview;
-  GtkWidget * metaType;
   GtkWidget * recBut;
   GtkWidget * idxBut;
   GtkWidget * spin;
-  GtkListStore * metamodel;
-  GtkListStore * keymodel;
-  GtkCellRenderer * renderer;
-  GtkListStore * keywordTypeModel;
-  GtkTreeIter iter;
   struct ECRS_MetaData * meta;
   EXTRACTOR_ExtractorList * extractors;
-  EXTRACTOR_KeywordType type;
   char * config;
   struct ECRS_URI * keywordURI;
   struct ECRS_URI * gkeywordURI;
-  const char * stype;
-  GdkPixbuf * pixbuf;
-  GdkPixbufLoader * loader;
-  unsigned char * thumb;
-  size_t ts;
-  char * mvalue;
-  char ** keywords;
-  unsigned int kpos;
-  unsigned int ksize;
-  const char * filenamerest;
 
   extractors = EXTRACTOR_loadDefaultLibraries();
   config = getConfigurationString("FS",
@@ -421,45 +316,6 @@
   connectGladeWithPlugins(metaXML);
   dialog = glade_xml_get_widget(metaXML,
                                "metaDataDialog");
-  metamodel
-    = gtk_list_store_new(META_NUM,
-                        G_TYPE_INT,
-                        G_TYPE_STRING,
-                        G_TYPE_STRING);
-  metaList = glade_xml_get_widget(metaXML,
-                                 "metaDataDialogMetaDataList");
-  renderer = gtk_cell_renderer_text_new();
-  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(metaList),
-                                             -1,
-                                             _("Category"),
-                                             renderer,
-                                             "text", META_STYPE,
-                                             NULL);
-  renderer = gtk_cell_renderer_text_new();
-  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(metaList),
-                                             -1,
-                                             _("Value"),
-                                             renderer,
-                                             "text", META_VALUE,
-                                             NULL);
-  gtk_tree_view_set_model(GTK_TREE_VIEW(metaList),
-                         GTK_TREE_MODEL(metamodel));
-
-
-  keymodel
-    = gtk_list_store_new(1,
-                       G_TYPE_STRING);
-  keywordList = glade_xml_get_widget(metaXML,
-                                    "metaDataDialogKeywordList");
-  renderer = gtk_cell_renderer_text_new();
-  gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(keywordList),
-                                             -1,
-                                             _("Keyword"),
-                                             renderer,
-                                             "text", 0,
-                                             NULL);
-  gtk_tree_view_set_model(GTK_TREE_VIEW(keywordList),
-                         GTK_TREE_MODEL(keymodel));
   meta = ECRS_createMetaData();
   ECRS_extractMetaData(meta,
                       filename,
@@ -471,62 +327,20 @@
   ECRS_addToMetaData(meta,
                     EXTRACTOR_FILENAME,
                     filenamerest);
-  ECRS_getMetaData(meta,
-                  (ECRS_MetaDataIterator) &publishMetaData,
-                  metamodel);
+  createMetaDataListTreeView(metaXML,
+                            "metaDataDialogMetaDataList",
+                            "previewImage",
+                            meta);
+  ECRS_freeMetaData(meta);
   keywordURI = ECRS_metaDataToUri(meta);
-  ECRS_getKeywordsFromUri(keywordURI,
-                         (ECRS_KeywordIterator) &publishKeyword,
-                         keymodel);
-  keywordTypeModel
-    = gtk_list_store_new(KTYPE_NUM,
-                        G_TYPE_STRING,
-                        G_TYPE_INT);
-  metaType = glade_xml_get_widget(metaXML,
-                                 "metaDataDialogMetaTypeComboBox");
-  gtk_combo_box_set_model(GTK_COMBO_BOX(metaType),
-                         GTK_TREE_MODEL(keywordTypeModel));
-  for (type=0;type<EXTRACTOR_getHighestKeywordTypeNumber();type++) {   
-    stype = EXTRACTOR_getKeywordTypeAsString(type);    
-    gtk_list_store_append(keywordTypeModel,
-                         &iter);
-    gtk_list_store_set(keywordTypeModel,
-                      &iter,
-                      KTYPE_STRING, stype,
-                      KTYPE_TYPE, type,
-                      -1); 
-  }
-  renderer = gtk_cell_renderer_text_new();
-  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(metaType),
-                            renderer,
-                            FALSE);
-  gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(metaType),
-                               renderer,
-                               "text", KTYPE_STRING);
-  gtk_combo_box_set_active(GTK_COMBO_BOX(metaType),
-                          0);
+  createKeywordListTreeView(metaXML,
+                           "metaDataDialogKeywordList",
+                           keywordURI);
+  ECRS_freeUri(keywordURI);
+  createMetaTypeComboBox(metaXML,
+                        "metaDataDialogMetaTypeComboBox");
   gtk_dialog_set_default_response(GTK_DIALOG(dialog),
                                  GTK_RESPONSE_OK);
-  thumb = NULL;
-  ts = ECRS_getThumbnailFromMetaData(meta,
-                                    &thumb);
-  ECRS_freeMetaData(meta);
-  ECRS_freeUri(keywordURI);
-  preview = glade_xml_get_widget(metaXML,
-                                "previewImage");
-  if (ts != 0) {
-    loader = gdk_pixbuf_loader_new();
-    gdk_pixbuf_loader_write(loader,
-                           (const guchar*) thumb,
-                           ts,
-                           NULL);    
-    pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
-    gdk_pixbuf_loader_close(loader,
-                           NULL);    
-    gtk_image_set_from_pixbuf(GTK_IMAGE(preview),
-                             pixbuf);
-    g_object_unref(pixbuf);
-  }
   if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL) {
     int doIndex;
     int doRec;
@@ -544,107 +358,11 @@
     else
       doIndex = NO;
 
-    meta = ECRS_createMetaData();
-    if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(metamodel),
-                                     &iter)) {
-      do {     
-       gtk_tree_model_get(GTK_TREE_MODEL(metamodel),
-                          &iter,
-                          META_TYPE, &type,
-                          META_VALUE, &mvalue,
-                          -1);
-       ECRS_addToMetaData(meta,
-                          type,
-                          mvalue);
-      } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(metamodel),
-                                       &iter));
-    }
-    if (GTK_IMAGE_PIXBUF == 
-       gtk_image_get_storage_type(GTK_IMAGE(preview))) {
-      size_t length;
-      char * thumb;
-
-      pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(preview));
-      if (pixbuf != NULL) {
-       thumb = NULL;
-       if (gdk_pixbuf_save_to_buffer(pixbuf,
-                                     &thumb,
-                                     &length,
-                                     "png",
-                                     NULL,
-                                     NULL)) {
-         char * binary;
-         size_t pos;
-         size_t end;
-         size_t wpos;
-         size_t i;
-         unsigned int markers[8]; /* 256 bits */
-         unsigned char marker;
-         
-         /* encode! */
-         binary = MALLOC(2 + length + (length+256) / 254);       
-         pos = 0;
-         wpos = 0;
-         while (pos < length) {
-           /* find unused value between 1 and 255 in
-              the next 254 bytes */
-           end = pos + 254;
-           if (end < pos)
-             break; /* integer overflow! */
-           if (end > length)
-             end = length;
-           memset(markers, 0, sizeof(markers));
-           for (i=pos;i<end;i++)
-             markers[thumb[i]&7] |= 1 << (thumb[i] >> 3);
-           marker = 1;
-           while (markers[marker&7] & (1 << (marker >> 3))) {
-             marker++;
-             GNUNET_ASSERT(marker != 0);
-           }
-           /* recode */
-           binary[wpos++] = marker;
-           for (i=pos;i<end;i++)
-             binary[wpos++] = thumb[i] == 0 ? marker : thumb[i];
-           pos = end;
-         }
-         binary[wpos++] = 0; /* 0-termination! */
-         free(thumb);
-         ECRS_addToMetaData(meta,
-                            EXTRACTOR_THUMBNAIL_DATA,
-                            binary);
-         FREE(binary); 
-       }
-      }
-    }
-    keywords = NULL;
-    ksize = 0;
-    GROW(keywords,
-        ksize,
-        64);
-    kpos = 0;
-    if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(keymodel),
-                                     &iter)) {
-      do {     
-       gtk_tree_model_get(GTK_TREE_MODEL(keymodel),
-                          &iter,
-                          0, &mvalue,
-                          -1);
-       keywords[kpos++] = mvalue;
-       if (kpos == ksize)
-         GROW(keywords,
-              ksize,
-              kpos*2);
-      } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(keymodel),
-                                       &iter));
-    }
-    keywords[kpos] = NULL;
-
-    keywordURI = ECRS_keywordsToUri((const char**)keywords);    
-    while (kpos > 0) 
-      FREE(keywords[--kpos]);
-    GROW(keywords,
-        ksize,
-        0);
+    meta = getMetaDataFromList(metaXML,
+                              "metaDataDialogMetaDataList",
+                              "previewImage");   
+    keywordURI = getKeywordURIFromList(metaXML,
+                                      "metaDataDialogKeywordList");
     spin = glade_xml_get_widget(getMainXML(),
                                "uploadAnonymityLevelSpinButton");  
     if (doRec) {





reply via email to

[Prev in Thread] Current Thread [Next in Thread]