M4V meta data not imported (Local Media Assets Agent)

OK, so I solved the issues myself. Here is some code that will read most meta data from mp4 video files (tagged with Subler/iTunes or the like). You may want to edit the split() parts, since the code below is tailored to split according to the non-standard way that I tag my files.



Maybe someone will find this useful :smiley:



#MTI, April 2012<br />
<br />
import os, plistlib<br />
from mutagen.mp4 import MP4<br />
<br />
class M4Vmovietags(Agent.Movies):<br />
  name = 'M4V Movietags'<br />
  languages = [Locale.Language.NoLanguage]<br />
  primary_provider = False<br />
  contributes_to = ['com.plexapp.agents.imdb', 'com.plexapp.agents.none']<br />
  <br />
  def search(self, results, media, lang):<br />
	results.Append(MetadataSearchResult(id = 'null', score = 100))<br />
  <br />
  def update(self, metadata, media, lang):<br />
	if media and metadata.title is None: metadata.title = media.title<br />
	<br />
	for i in media.items:<br />
	  for part in i.parts:<br />
		getMetadataAtoms(part, metadata)<br />
<br />
def getMetadataAtoms(part, metadata):<br />
	tags = MP4(part.file.decode('utf-8'))<br />
<br />
#Coverart<br />
	try:<br />
		metadata.posters['atom'] = Proxy.Media(str(tags["covr"][0]))<br />
	except: pass<br />
<br />
#Title from name atom<br />
	try:<br />
		title = tags["\xa9nam"][0]<br />
		Log("Title: " + title)<br />
		metadata.title = title<br />
	except:	pass<br />
<br />
#Collection from album atom<br />
	try:<br />
		album = tags["\xa9alb"][0]<br />
		if len(album) > 0:<br />
			albumList = album.split('/')<br />
			metadata.collections.clear()<br />
			for a in albumList:<br />
				metadata.collections.add(a.strip())<br />
	except: pass<br />
<br />
#Summary from long/short decription atom<br />
	try:<br />
		try:<br />
			summary = tags["ldes"][0]<br />
		except:<br />
			summary = tags["desc"][0]<br />
		metadata.summary = summary<br />
	except: pass<br />
<br />
#Genres from genre atom<br />
	try:<br />
		genres = tags["\xa9gen"][0]<br />
		if len(genres) > 0:<br />
			genList = genres.split('/')<br />
			metadata.genres.clear()<br />
			for g in genList:<br />
				metadata.genres.add(g.strip())<br />
	except: pass<br />
<br />
#Studio from copyright atom<br />
	try:<br />
		copyright = tags["cprt"][0]<br />
		if len(copyright) > 0:<br />
			metadata.studio = copyright<br />
	except: pass<br />
	<br />
#Directors from the iTunMOVI-directors atom<br />
	try:<br />
		pl = plistlib.readPlistFromString(str(tags["----:com.apple.iTunes:iTunMOVI"][0]))<br />
		directors = pl["directors"][0]["name"]<br />
		if len(directors) > 0:<br />
			dirList = directors.split("/")<br />
			metadata.directors.clear()<br />
			for d in dirList:<br />
				metadata.directors.add(d.strip())<br />
	except:	pass<br />
<br />
#Writers from the iTunMOVI-screenwriters atom<br />
	try:<br />
		pl = plistlib.readPlistFromString(str(tags["----:com.apple.iTunes:iTunMOVI"][0]))<br />
		writers = pl["screenwriters"][0]["name"]<br />
		if len(directors) > 0:<br />
			wriList = writers.split("/")<br />
			metadata.writers.clear()<br />
			for w in wriList:<br />
				metadata.writers.add(w.strip())<br />
	except:	pass<br />
<br />
#Content rating from iTunEXTC atom<br />
	try:<br />
		rating = tags["----:com.apple.iTunes:iTunEXTC"][0].split('|')[1]<br />
		if len(rating) > 0:<br />
			metadata.content_rating = rating<br />
	except: pass<br />
	<br />
#Roles from artist atom<br />
	try:<br />
		artists = tags["\xa9ART"][0].split('/')<br />
		metadata.roles.clear()<br />
		for a in artists:<br />
			role = metadata.roles.new()<br />
			role.actor = a.split(' ')[0]<br />
			role.role = a.split(' ')[1].strip('()')<br />
	except: pass<br />
<br />
#Release date from year atom<br />
	try:<br />
		releaseDate = tags["\xa9day"][0]<br />
		releaseDate = releaseDate.split('T')[0]<br />
		parsedDate = Datetime.ParseDate(releaseDate)<br />
		metadata.year = parsedDate.year<br />
		metadata.originally_available_at = parsedDate.date()<br />
	except: pass