Fixed an error in updating the Exif metadata after saving it.

svn: r17727
This commit is contained in:
Rob G. Healey 2011-06-09 05:37:47 +00:00
parent 6f4cb3f832
commit 37c6af8b45

View File

@ -263,7 +263,6 @@ class EditExifMetadata(Gramplet):
self.orig_image = False self.orig_image = False
self.image_path = False self.image_path = False
self.plugin_image = False self.plugin_image = False
self.MediaDataTags = False
self.connect_signal("Media", self.update) self.connect_signal("Media", self.update)
vbox = self.build_gui() vbox = self.build_gui()
@ -313,17 +312,17 @@ class EditExifMetadata(Gramplet):
# Copy To Edit Area button... # Copy To Edit Area button...
ccc_box.add( self.__create_button( ccc_box.add( self.__create_button(
"CopyTo", False, self.CopyTo, gtk.STOCK_COPY, False) ) "CopyTo", False, [self.CopyTo], gtk.STOCK_COPY, False) )
# Clear button... # Clear button...
ccc_box.add( self.__create_button( ccc_box.add( self.__create_button(
"Clear", False, self.clear_metadata, gtk.STOCK_CLEAR, False) ) "Clear", False, [self.clear_metadata], gtk.STOCK_CLEAR, False) )
# is ImageMagick installed? # is ImageMagick installed?
if _MAGICK_FOUND: if _MAGICK_FOUND:
# Convert button... # Convert button...
ccc_box.add( self.__create_button( ccc_box.add( self.__create_button(
"Convert", False, self.__convert_dialog, gtk.STOCK_CONVERT, False) ) "Convert", False, [self.__convert_dialog], gtk.STOCK_CONVERT, False) )
for items in [ for items in [
@ -367,16 +366,17 @@ class EditExifMetadata(Gramplet):
# Help button... # Help button...
hsd_box.add( self.__create_button( hsd_box.add( self.__create_button(
"Help", False, _help_page, gtk.STOCK_HELP) ) "Help", False, [_help_page], gtk.STOCK_HELP) )
# Save button... # Save button...
hsd_box.add( self.__create_button( hsd_box.add( self.__create_button(
"Save", False, self.__save_dialog, gtk.STOCK_SAVE, False) ) "Save", False, [self.__save_dialog, self.update, self.CopyTo, self.display_exif_tags],
gtk.STOCK_SAVE, False) )
if _MAGICK_FOUND: if _MAGICK_FOUND:
# Delete All Metadata button... # Delete All Metadata button...
hsd_box.add(self.__create_button( hsd_box.add(self.__create_button(
"Delete", False, self.__delete_dialog, gtk.STOCK_DELETE, False)) "Delete", False, [self.__delete_dialog], gtk.STOCK_DELETE, False))
# adds Exif Metadata Viewing Area # adds Exif Metadata Viewing Area
vbox.pack_start(view, padding =10) vbox.pack_start(view, padding =10)
@ -536,7 +536,7 @@ class EditExifMetadata(Gramplet):
return column return column
def __create_button(self, pos, text, callback, icon =False, sensitive = True): def __create_button(self, pos, text, callback =[], icon =False, sensitive = True):
""" """
creates and returns a button for display creates and returns a button for display
""" """
@ -546,7 +546,9 @@ class EditExifMetadata(Gramplet):
else: else:
button = gtk.Button(text) button = gtk.Button(text)
button.connect("clicked", callback) if callback is not []:
for call_ in callback:
button.connect("clicked", call_)
if not sensitive: if not sensitive:
button.set_sensitive(False) button.set_sensitive(False)
@ -609,9 +611,6 @@ class EditExifMetadata(Gramplet):
self.set_has_data(False) self.set_has_data(False)
return return
# get all KeyTags for this image for diplay only...
self.MediaDataTags = [KeyTag for KeyTag in self.plugin_image.exifKeys() ]
else: else:
try: try:
self.plugin_image.read() self.plugin_image.read()
@ -619,12 +618,6 @@ class EditExifMetadata(Gramplet):
self.set_has_data(False) self.set_has_data(False)
return return
# get all KeyTags for this image for diplay only...
self.MediaDataTags = [KeyTag for KeyTag in chain(
self.plugin_image.exif_keys,
self.plugin_image.xmp_keys,
self.plugin_image.iptc_keys) ]
def make_row(self, pos, text, choices=None, readonly=False, callback_list=[], def make_row(self, pos, text, choices=None, readonly=False, callback_list=[],
mark_dirty=False, default=0): mark_dirty=False, default=0):
@ -712,20 +705,22 @@ class EditExifMetadata(Gramplet):
return KeyValue return KeyValue
def display_exif_tags(self, obj): def display_exif_tags(self, object):
""" """
once the pyexiv2.Image has been created, we display once the pyexiv2.Image has been created, we display
all of the image Exif metadata... all of the image Exif metadata...
""" """
MediaDataTags = _get_exif_keypairs(self.plugin_image)
# set has data flag... # set has data flag...
self.set_has_data(len(self.MediaDataTags) > 0) self.set_has_data(len(MediaDataTags) > 0)
# Activate Clear and Save buttons... # Activate Clear and Save buttons...
self.activate_buttons(["Clear", "Save"]) self.activate_buttons(["Clear", "Save"])
# check to see if we got metadata from the media object? # check to see if we got metadata from the media object?
if self.MediaDataTags: if MediaDataTags:
# activate CopyTo button... # activate CopyTo button...
self.activate_buttons(["CopyTo"]) self.activate_buttons(["CopyTo"])
@ -733,7 +728,7 @@ class EditExifMetadata(Gramplet):
# set Message Area to Display... # set Message Area to Display...
self.exif_widgets["Message:Area"].set_text(_("Displaying image Exif metadata...")) self.exif_widgets["Message:Area"].set_text(_("Displaying image Exif metadata..."))
for KeyTag in self.MediaDataTags: for KeyTag in MediaDataTags:
if LesserVersion: if LesserVersion:
label = self.plugin_image.tagDetails(KeyTag)[0] label = self.plugin_image.tagDetails(KeyTag)[0]
@ -755,18 +750,15 @@ class EditExifMetadata(Gramplet):
if human_value is not False: if human_value is not False:
self.model.append((self.plugin_image, label, human_value)) self.model.append((self.plugin_image, label, human_value))
def CopyTo(self, obj): def CopyTo(self, object):
""" """
reads the image metadata after the pyexiv2.Image has been created reads the image metadata after the pyexiv2.Image has been created
""" """
if LesserVersion: imageKeyTags = _get_exif_keypairs(self.plugin_image)
imageKeyTags = [KeyTag for KeyTag in self.plugin_image.exifKeys() if KeyTag in _DATAMAP]
else:
imageKeyTags = [KeyTag for KeyTag in self.plugin_image.exif_keys if KeyTag in _DATAMAP]
if imageKeyTags: if imageKeyTags:
imageKeyTags = [KeyTag for KeyTag in imageKeyTags if KeyTag in _DATAMAP]
self.exif_widgets["Message:Area"].set_text(_("Copying Exif metadata to the Edit Area...")) self.exif_widgets["Message:Area"].set_text(_("Copying Exif metadata to the Edit Area..."))
for KeyTag in imageKeyTags: for KeyTag in imageKeyTags:
@ -1155,8 +1147,9 @@ class EditExifMetadata(Gramplet):
erase_results = str(erase) erase_results = str(erase)
else: else:
if self.MediaDataTags: MediaDataTags = _get_exif_keypairs(self.plugin_image)
for KeyTag in self.MediaDataTags: if MediaDataTags:
for KeyTag in MediaDataTags:
del self.plugin_image[KeyTag] del self.plugin_image[KeyTag]
erase_results = True erase_results = True
@ -1217,6 +1210,7 @@ class EditExifMetadata(Gramplet):
# close this window # close this window
self.app.destroy() self.app.destroy()
def string_to_rational(coordinate): def string_to_rational(coordinate):
""" """
convert string to rational variable for GPS convert string to rational variable for GPS
@ -1228,6 +1222,29 @@ def string_to_rational(coordinate):
else: else:
return pyexiv2.Rational(int(coordinate), 1) return pyexiv2.Rational(int(coordinate), 1)
def _get_exif_keypairs(plugin_image):
"""
Will be used to retrieve and update the Exif metadata from the image.
"""
if not plugin_image:
return False
MediaDataTags = False
if LesserVersion: # prior to pyexiv2-0.2.0
# get all KeyTags for this image for diplay only...
MediaDataTags = [KeyTag for KeyTag in plugin_image.exifKeys() ]
else: # pyexiv2-0.2.0 and above
# get all KeyTags for this image for diplay only...
MediaDataTags = [KeyTag for KeyTag in chain(
plugin_image.exif_keys, plugin_image.xmp_keys,
plugin_image.iptc_keys) ]
return MediaDataTags
def coords_to_rational(Coordinates): def coords_to_rational(Coordinates):
""" """
returns the GPS coordinates to Latitude/ Longitude returns the GPS coordinates to Latitude/ Longitude