diff src/bar_exif.c @ 1288:10073464e6aa

use metadata_read_* functions where possible switch exiv2 to utf8 charset support for exiv2 formatting that depends on other tags: http://dev.robotbattle.com/bugs/view.php?id=0000516
author nadvornik
date Sat, 07 Feb 2009 19:01:21 +0000
parents 8b89e3ff286b
children 48e064b37ba6
line wrap: on
line diff
--- a/src/bar_exif.c	Fri Feb 06 23:49:03 2009 +0000
+++ b/src/bar_exif.c	Sat Feb 07 19:01:21 2009 +0000
@@ -15,6 +15,7 @@
 #include "bar_exif.h"
 
 #include "exif.h"
+#include "metadata.h"
 #include "filedata.h"
 #include "history_list.h"
 #include "misc.h"
@@ -180,27 +181,25 @@
 
 static void bar_exif_update(ExifBar *eb)
 {
-	ExifData *exif_processed;
 	ExifData *exif;
 	gint i;
 
-	exif_processed = exif_read_fd(eb->fd);
+	/* do we have any exif at all ? */
+	exif = exif_read_fd(eb->fd);
 
-	if (!exif_processed)
+	if (!exif)
 		{
 		bar_exif_sensitive(eb, FALSE);
 		return;
 		}
-	
-	if (eb->advanced_scrolled)
-		{
-		/* show the original values from the file */
-		exif = exif_get_original(exif_processed);
-		}
 	else
 		{
-		exif = exif_processed;
+		/* we will use high level functions so we can release it for now.
+		   it will stay in the cache */
+		exif_free_fd(eb->fd, exif);
+		exif = NULL;
 		}
+	
 
 	bar_exif_sensitive(eb, TRUE);
 
@@ -210,7 +209,6 @@
 		for (i = 0; ExifUIList[i].key; i++)
 			{
 			gchar *text;
-			gchar *utf8_text;
 
 			if (ExifUIList[i].current == EXIF_UI_OFF)
 				{
@@ -218,21 +216,19 @@
 				gtk_widget_hide(eb->keys[i]);
 				continue;
 				}
-			text = exif_get_data_as_text(exif, ExifUIList[i].key);
-			utf8_text = utf8_validate_or_convert(text);
-			g_free(text);
+			text =  metadata_read_string(eb->fd, ExifUIList[i].key, METADATA_FORMATTED);
 			if (ExifUIList[i].current == EXIF_UI_IFSET
-			    && (!utf8_text || !*utf8_text))
+			    && (!text || !*text))
 				{
 				gtk_widget_hide(eb->labels[i]);
 				gtk_widget_hide(eb->keys[i]);
-				g_free(utf8_text);
+				g_free(text);
 				continue;
 				}
 			gtk_widget_show(eb->labels[i]);
 			gtk_widget_show(eb->keys[i]);
-			gtk_label_set_text(GTK_LABEL(eb->labels[i]), utf8_text);
-			g_free(utf8_text);
+			gtk_label_set_text(GTK_LABEL(eb->labels[i]), text);
+			g_free(text);
 			}
 
 		list = g_list_last(history_list_get_by_key("exif_extras"));
@@ -248,7 +244,6 @@
 		while (list && i < EXIF_BAR_CUSTOM_COUNT)
 			{
 			gchar *text;
-			gchar *utf8_text;
 			gchar *name;
 			gchar *buf;
 			gchar *description;
@@ -256,9 +251,7 @@
 			name = list->data;
 			list = list->prev;
 			
-			text = exif_get_data_as_text(exif, name);
-			utf8_text = utf8_validate_or_convert(text);
-			g_free(text);
+			text =  metadata_read_string(eb->fd, name, METADATA_FORMATTED);
 
 			description = exif_get_tag_description_by_key(name);
 			if (!description || *description == '\0') 
@@ -271,8 +264,8 @@
 			
 			gtk_label_set_text(GTK_LABEL(eb->custom_name[i]), buf);
 			g_free(buf);
-			gtk_label_set_text(GTK_LABEL(eb->custom_value[i]), utf8_text);
-			g_free(utf8_text);
+			gtk_label_set_text(GTK_LABEL(eb->custom_value[i]), text);
+			g_free(text);
 
 			gtk_widget_show(eb->custom_name[i]);
 			gtk_widget_show(eb->custom_value[i]);
@@ -297,12 +290,18 @@
 		{
 		GtkListStore *store;
 		GtkTreeIter iter;
+		ExifData *exif_original;
 		ExifItem *item;
 
+		exif = exif_read_fd(eb->fd);
+		if (!exif) return;
+		
+		exif_original = exif_get_original(exif);
+
 		store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(eb->listview)));
 		gtk_list_store_clear(store);
 
-		item = exif_get_first_item(exif);
+		item = exif_get_first_item(exif_original);
 		while (item)
 			{
 			gchar *tag;
@@ -341,11 +340,11 @@
 			g_free(elements);
 			g_free(description);
 			g_free(tag_name);
-			item = exif_get_next_item(exif);
+			item = exif_get_next_item(exif_original);
 			}
+		exif_free_fd(eb->fd, exif);
 		}
 
-	exif_free_fd(eb->fd, exif_processed);
 }
 
 static void bar_exif_clear(ExifBar *eb)