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…
Reference in New Issue