def write(self): """Save exif data to photo file on disk.""" self.exif.set_gps_info(self.longitude, self.latitude, self.altitude) self.exif[IPTC + 'City'] = self.names[0] or '' self.exif[IPTC + 'ProvinceState'] = self.names[1] or '' self.exif[IPTC + 'CountryName'] = self.names[2] or '' self.exif['Iptc.Envelope.CharacterSet'] = '\x1b%G' self.exif.save_file() modified.discard(self) Widgets.loaded_photos.set_value(self.iter, 1, str(self))
def destroy(self): """Agony!""" self.update_derived_properties() # To clear any callback... # TODO: Disconnect this from here if self in Label.cache: Label(self).destroy() if self.camera is not None: self.camera.remove_photo(self) modified.discard(self) if self.iter: Widgets.loaded_photos.remove(self.iter) del Photograph.cache[self.filename]
def read(self): """Discard all state and (re)initialize from disk.""" self.exif = GExiv2.Metadata(self.filename) self.manual = False self.modified_timeout = None self.latitude = 0.0 self.longitude = 0.0 self.altitude = 0.0 self.timestamp = 0 self.names = (None, None, None) self.geotimezone = '' for tag in ('Exif.Photo.DateTimeOriginal', 'Exif.Image.DateTimeOriginal', 'Exif.Photo.DateTime', 'Exif.Image.DateTime'): with ignored(TypeError, AttributeError, ValueError): self.orig_time = datetime.strptime( self.exif.get(tag), '%Y:%m:%d %H:%M:%S').timetuple() break self.longitude, self.latitude, self.altitude = self.exif.get_gps_info() modified.discard(self) self.calculate_timestamp() if self.iter is None: self.iter = Widgets.loaded_photos.append() Widgets.loaded_photos.set_row(self.iter, [self.filename, str(self), self.thumb, self.timestamp]) # Get the camera info self.camera_info = {'Make': '', 'Model': ''} keys = ['Exif.Image.' + key for key in list(self.camera_info.keys()) + ['CameraSerialNumber']] + ['Exif.Photo.BodySerialNumber'] for key in keys: with ignored(KeyError): self.camera_info.update( {key.split('.')[-1]: self.exif[key]})
def read(self): """Discard all state and (re)initialize from disk.""" self.exif = GExiv2.Metadata(self.filename) self.manual = False self.modified_timeout = None self.latitude = 0.0 self.longitude = 0.0 self.altitude = 0.0 self.timestamp = 0 self.names = (None, None, None) self.geotimezone = '' for tag in ('Exif.Photo.DateTimeOriginal', 'Exif.Image.DateTimeOriginal', 'Exif.Photo.DateTime', 'Exif.Image.DateTime'): with ignored(TypeError, AttributeError, ValueError): self.orig_time = datetime.strptime( self.exif.get(tag), '%Y:%m:%d %H:%M:%S').timetuple() break self.longitude, self.latitude, self.altitude = self.exif.get_gps_info() modified.discard(self) self.calculate_timestamp() if self.iter is None: self.iter = Widgets.loaded_photos.append() Widgets.loaded_photos.set_row( self.iter, [self.filename, str(self), self.thumb, self.timestamp]) # Get the camera info self.camera_info = {'Make': '', 'Model': ''} keys = [ 'Exif.Image.' + key for key in list(self.camera_info.keys()) + ['CameraSerialNumber'] ] + ['Exif.Photo.BodySerialNumber'] for key in keys: with ignored(KeyError): self.camera_info.update({key.split('.')[-1]: self.exif[key]})