[Top][All Lists]
[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) {
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r1402 - gnunet-gtk/src/plugins/fs,
grothoff <=