Get album updates working for all file types

This commit is contained in:
Jaisen Mathai 2015-10-20 23:51:14 -07:00
parent cf2f6096b5
commit b372cde326
4 changed files with 65 additions and 44 deletions

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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