Get album updates working for all file types
This commit is contained in:
		
							parent
							
								
									cf2f6096b5
								
							
						
					
					
						commit
						b372cde326
					
				@ -2,3 +2,5 @@ from os import path
 | 
			
		||||
 | 
			
		||||
application_directory = '{}/.elodie'.format(path.expanduser('~'))
 | 
			
		||||
hash_db = '{}/hash.json'.format(application_directory)
 | 
			
		||||
script_directory = path.dirname(path.dirname(path.abspath(__file__)))
 | 
			
		||||
exiftool_config = '%s/configs/ExifTool_config' % script_directory
 | 
			
		||||
 | 
			
		||||
@ -4,9 +4,12 @@ Media package that handles all video operations
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
# load modules
 | 
			
		||||
from sys import argv
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from distutils.spawn import find_executable
 | 
			
		||||
from elodie import constants
 | 
			
		||||
from fractions import Fraction
 | 
			
		||||
from sys import argv
 | 
			
		||||
 | 
			
		||||
import LatLon
 | 
			
		||||
import mimetypes
 | 
			
		||||
import os
 | 
			
		||||
@ -34,22 +37,18 @@ class Media(object):
 | 
			
		||||
            'latitude_ref': 'Exif.GPSInfo.GPSLatitudeRef',
 | 
			
		||||
            'longitude': 'Exif.GPSInfo.GPSLongitude',
 | 
			
		||||
            'longitude_ref': 'Exif.GPSInfo.GPSLongitudeRef',
 | 
			
		||||
            'album': 'Xmp.elodie.album'
 | 
			
		||||
        }
 | 
			
		||||
        try:
 | 
			
		||||
            pyexiv2.xmp.register_namespace('https://github.com/jmathai/elodie/', 'elodie')
 | 
			
		||||
        except KeyError:
 | 
			
		||||
            pass
 | 
			
		||||
        self.exiftool_attributes = None
 | 
			
		||||
 | 
			
		||||
    def get_album(self):
 | 
			
		||||
        if(not self.is_valid()):
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        exif = self.get_exif()
 | 
			
		||||
        try:
 | 
			
		||||
            return exif[self.exif_map['album']].value
 | 
			
		||||
        except KeyError:
 | 
			
		||||
        exiftool_attributes = self.get_exiftool_attributes()
 | 
			
		||||
        if('album' not in exiftool_attributes):
 | 
			
		||||
            return None
 | 
			
		||||
        
 | 
			
		||||
        return exiftool_attributes['album']
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    Get the full path to the video.
 | 
			
		||||
@ -153,6 +152,30 @@ class Media(object):
 | 
			
		||||
 | 
			
		||||
        return self.exif
 | 
			
		||||
 | 
			
		||||
    def get_exiftool_attributes(self):
 | 
			
		||||
        if(self.exiftool_attributes is not None):
 | 
			
		||||
            return self.exiftool_attributes
 | 
			
		||||
 | 
			
		||||
        exiftool = find_executable('exiftool')
 | 
			
		||||
        if(exiftool is None):
 | 
			
		||||
            return False
 | 
			
		||||
 | 
			
		||||
        source = self.source
 | 
			
		||||
        process_output = subprocess.Popen(['%s "%s"' % (exiftool, source)], stdout=subprocess.PIPE, shell=True)
 | 
			
		||||
        output = process_output.stdout.read()
 | 
			
		||||
 | 
			
		||||
        album = None
 | 
			
		||||
        album_regex = re.search('Album +: +(.+)', output)
 | 
			
		||||
        if(album_regex is not None):
 | 
			
		||||
            album = album_regex.group(1)
 | 
			
		||||
 | 
			
		||||
        self.exiftool_attributes = {
 | 
			
		||||
            'album': album
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return self.exiftool_attributes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    Get the file extension as a lowercased string.
 | 
			
		||||
 | 
			
		||||
@ -205,6 +228,31 @@ class Media(object):
 | 
			
		||||
 | 
			
		||||
        return mimetype[0]
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    Set album for a photo
 | 
			
		||||
 | 
			
		||||
    @param, name, string, Name of album
 | 
			
		||||
 | 
			
		||||
    @returns, boolean
 | 
			
		||||
    """
 | 
			
		||||
    def set_album(self, name):
 | 
			
		||||
        if(name is None):
 | 
			
		||||
            return False
 | 
			
		||||
 | 
			
		||||
        exiftool = find_executable('exiftool')
 | 
			
		||||
        if(exiftool is None):
 | 
			
		||||
            return False
 | 
			
		||||
 | 
			
		||||
        source = self.source
 | 
			
		||||
        exiftool_config = constants.exiftool_config
 | 
			
		||||
        process_output = subprocess.Popen(['%s -config "%s" -xmp-elodie:Album="%s" "%s"' % (exiftool, exiftool_config, name, source)], stdout=subprocess.PIPE, shell=True)
 | 
			
		||||
        streamdata = process_output.communicate()[0]
 | 
			
		||||
        if(process_output.returncode != 0):
 | 
			
		||||
            return False
 | 
			
		||||
 | 
			
		||||
        os.remove('%s%s' % (source, '_original'))
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_class_by_file(Media, _file, classes):
 | 
			
		||||
        extension = os.path.splitext(_file)[1][1:].lower()
 | 
			
		||||
 | 
			
		||||
@ -4,13 +4,15 @@ Photo package that handles all photo operations
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
# load modules
 | 
			
		||||
from sys import argv
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from distutils.spawn import find_executable
 | 
			
		||||
from sys import argv
 | 
			
		||||
 | 
			
		||||
import mimetypes
 | 
			
		||||
import os
 | 
			
		||||
import pyexiv2
 | 
			
		||||
import re
 | 
			
		||||
import subprocess
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
from media import Media
 | 
			
		||||
@ -48,25 +50,6 @@ class Photo(Media):
 | 
			
		||||
                return re.search('(\d{2}:\d{2}.\d{2})', key).group(1).replace('.', ':')
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    Set album for a photo
 | 
			
		||||
 | 
			
		||||
    @param, name, string, Name of album
 | 
			
		||||
 | 
			
		||||
    @returns, boolean
 | 
			
		||||
    """
 | 
			
		||||
    def set_album(self, name):
 | 
			
		||||
        if(name is None):
 | 
			
		||||
            return False
 | 
			
		||||
 | 
			
		||||
        source = self.source
 | 
			
		||||
        exif_metadata = pyexiv2.ImageMetadata(source)
 | 
			
		||||
        exif_metadata.read()
 | 
			
		||||
 | 
			
		||||
        exif_metadata['Xmp.elodie.album'] = name
 | 
			
		||||
 | 
			
		||||
        exif_metadata.write()
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    Set the date/time a photo was taken
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -137,7 +137,7 @@ class Video(Media):
 | 
			
		||||
            "date_taken": self.get_date_taken(),
 | 
			
		||||
            "latitude": self.get_coordinate('latitude'),
 | 
			
		||||
            "longitude": self.get_coordinate('longitude'),
 | 
			
		||||
            "album": None,
 | 
			
		||||
            "album": self.get_album(),
 | 
			
		||||
            #"length": self.get_duration(),
 | 
			
		||||
            "mime_type": self.get_mimetype(),
 | 
			
		||||
            "base_name": os.path.splitext(os.path.basename(source))[0],
 | 
			
		||||
@ -146,18 +146,6 @@ class Video(Media):
 | 
			
		||||
 | 
			
		||||
        return metadata
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    Set album for a photo
 | 
			
		||||
    Not yet implemented
 | 
			
		||||
 | 
			
		||||
    @param, name, string, Name of album
 | 
			
		||||
 | 
			
		||||
    @returns, boolean
 | 
			
		||||
    """
 | 
			
		||||
    def set_album(self, name):
 | 
			
		||||
        if(name is None):
 | 
			
		||||
            return False
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    Set the date/time a photo was taken
 | 
			
		||||
 | 
			
		||||
@ -270,7 +258,7 @@ class Video(Media):
 | 
			
		||||
            metadata = self.get_metadata()
 | 
			
		||||
            temp_movie = None
 | 
			
		||||
            with tempfile.NamedTemporaryFile() as temp_file:
 | 
			
		||||
                temp_movie = '%s.%s' % (temp_file.name, metadata['extenseon'])
 | 
			
		||||
                temp_movie = '%s.%s' % (temp_file.name, metadata['extension'])
 | 
			
		||||
 | 
			
		||||
            # We need to block until the child process completes.
 | 
			
		||||
            # http://stackoverflow.com/a/5631819/1318758
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user