Browse Source

XBMC Metadata base

pull/51/merge
Ruud 14 years ago
parent
commit
9734521178
  1. 12
      couchpotato/core/_base/_core/__init__.py
  2. 25
      couchpotato/core/plugins/base.py
  3. 6
      couchpotato/core/plugins/metadata/main.py
  4. 10
      couchpotato/core/plugins/renamer/main.py
  5. 45
      couchpotato/core/providers/metadata/base.py
  6. 34
      couchpotato/core/providers/metadata/mediabrowser/__init__.py
  7. 24
      couchpotato/core/providers/metadata/sonyps3/__init__.py
  8. 24
      couchpotato/core/providers/metadata/wdtv/__init__.py
  9. 34
      couchpotato/core/providers/metadata/xbmc/__init__.py
  10. 98
      couchpotato/core/providers/metadata/xbmc/main.py
  11. 4
      couchpotato/environment.py

12
couchpotato/core/_base/_core/__init__.py

@ -68,6 +68,18 @@ config = [{
'label': 'Url Base',
'description': 'When using mod_proxy use this to append the url with this.',
},
{
'name': 'permission_folder',
'default': 0755,
'label': 'Folder CHMOD',
'description': 'Permission for creating/copying folders',
},
{
'name': 'permission_file',
'default': 0755,
'label': 'File CHMOD',
'description': 'Permission for creating/copying files',
},
],
},
],

25
couchpotato/core/plugins/base.py

@ -1,15 +1,20 @@
from couchpotato import addView
from couchpotato.core.event import fireEvent
from couchpotato.core.helpers.variable import getExt
from couchpotato.core.logger import CPLog
from couchpotato.environment import Env
from flask.helpers import send_from_directory
import glob
import os.path
import re
log = CPLog(__name__)
class Plugin(object):
enabled_option = 'enabled'
def conf(self, attr, default = None):
return Env.setting(attr, self.getName().lower(), default = default)
@ -36,8 +41,26 @@ class Plugin(object):
dir = os.path.join(self.plugin_path, 'static')
return send_from_directory(dir, file)
def createFile(self, path, content):
self.makeDir(os.path.dirname(path))
try:
file = open(path, 'w')
file.write(content)
file.close()
except Exception, e:
log.error('Unable writing to file "%s": %s' % (path, e))
def makeDir(self, path):
try:
if not os.path.isdir(path):
os.makedirs(path, Env.getPermission('folder'))
except Exception, e:
log.error('Unable to create folder "%s": %s' % (path, e))
def isDisabled(self):
return not self.isEnabled()
def isEnabled(self):
return self.conf('enabled') or self.conf('enabled') == None
return self.conf(self.enabled_option) or self.conf(self.enabled_option) == None

6
couchpotato/core/plugins/metadata/main.py

@ -12,11 +12,9 @@ class MetaData(Plugin):
self.registerStatic(__file__)
def test():
fireEvent('metadata.create')
addEvent('app.load', test)
addEvent('app.load', self.add)
def add(self, data = {}):
log.info('Getting meta data')
fireEvent('metadata.create', data)

10
couchpotato/core/plugins/renamer/main.py

@ -105,6 +105,7 @@ class Renamer(Plugin):
# Original filename
replacements['original'] = os.path.basename(file)
replacements['original_folder'] = os.path.basename(os.path.dirname(file))
# Extension
replacements['ext'] = getExt(file)
@ -122,7 +123,7 @@ class Renamer(Plugin):
if file_type is 'trailer':
final_file_name = self.doReplace(trailer_name, replacements)
elif file_type is 'nfo':
final_file_name = self.doReplace(nfo_name, replacements)
final_file_name = self.doReplace(nfo_name, replacements) + '-orig'
elif file_type is 'backdrop':
final_file_name = self.doReplace(backdrop_name, replacements)
@ -131,7 +132,6 @@ class Renamer(Plugin):
final_file_name = final_file_name.replace(' ', separator)
# Main file
group['destination_dir'] = os.path.join(destination, final_folder_name)
rename_files[file] = os.path.join(destination, final_folder_name, final_file_name)
# Check for extra subtitle files
@ -147,12 +147,16 @@ class Renamer(Plugin):
final_file_name = self.doReplace(file_name, replacements)
rename_files[subtitle_extra] = os.path.join(destination, final_folder_name, final_file_name)
# Filename without cd etc
if file_type is 'movie':
group['destination_dir'] = os.path.join(destination, final_folder_name)
if multiple:
cd += 1
# Notify on download
download_message = 'Download of %s (%s) successful.' % (group['library']['titles'][0]['title'], replacements['quality'])
fireEvent('notify', type = 'movie.downloaded', message = download_message, data = replacements)
fireEvent('notify', type = 'movie.downloaded', message = download_message, data = group)
# Before renaming, remove the lower quality files
db = get_session()

45
couchpotato/core/providers/metadata/base.py

@ -1,26 +1,59 @@
from couchpotato.core.event import addEvent
from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin
from couchpotato.environment import Env
import os
log = CPLog(__name__)
class MetaDataBase(Plugin):
enabled_option = 'meta_enabled'
def __init__(self):
addEvent('metadata.create', self.create)
def create(self):
print 'create metadata %s' % __name__
def create(self, release):
if self.isDisabled(): return
log.info('Creating %s metadata.' % self.getName())
root = self.getRootName()
for type in ['nfo', 'thumbnail', 'fanart']:
try:
# Get file path
name = getattr(self, 'get' + type.capitalize() + 'Name')(root)
if name and self.conf('meta_' + type):
# Get file content
content = getattr(self, 'get' + type.capitalize())(release)
if content:
log.debug('Creating %s file: %s' % (type, name))
self.createFile(name, content)
except Exception, e:
log.error('Unable to create %s file: %s' % (type, e))
def getRootName(self, data):
return
def getFanartName(self, root):
return
def getThumbnailName(self, root):
return
def getFanartName(self):
def getNfoName(self, root):
return
def getThumbnailName(self):
def getNfo(self, data):
return
def getNfoName(self):
def getThumbnail(self, data):
return
def getNfo(self):
def getFanart(self, data):
return

34
couchpotato/core/providers/metadata/mediabrowser/__init__.py

@ -3,4 +3,36 @@ from .main import MediaBrowser
def start():
return MediaBrowser()
config = []
config = [{
'name': 'mediabrowser',
'groups': [
{
'tab': 'renamer',
'name': 'metadata',
'label': 'MediaBrowser',
'description': 'Enable metadata MediaBrowser can understand',
'options': [
{
'name': 'meta_enabled',
'default': False,
'type': 'enabler',
},
{
'name': 'meta_nfo',
'default': True,
'type': 'bool',
},
{
'name': 'meta_fanart',
'default': True,
'type': 'bool',
},
{
'name': 'meta_thumbnail',
'default': True,
'type': 'bool',
},
],
},
],
}]

24
couchpotato/core/providers/metadata/sonyps3/__init__.py

@ -3,4 +3,26 @@ from .main import SonyPS3
def start():
return SonyPS3()
config = []
config = [{
'name': 'sonyps3',
'groups': [
{
'tab': 'renamer',
'name': 'metadata',
'label': 'Sony PS3',
'description': 'Enable metadata your Playstation 3 can understand',
'options': [
{
'name': 'meta_enabled',
'default': False,
'type': 'enabler',
},
{
'name': 'meta_thumbnail',
'default': True,
'type': 'bool',
},
],
},
],
}]

24
couchpotato/core/providers/metadata/wdtv/__init__.py

@ -3,4 +3,26 @@ from .main import WDTV
def start():
return WDTV()
config = []
config = [{
'name': 'wdtv',
'groups': [
{
'tab': 'renamer',
'name': 'metadata',
'label': 'WDTV',
'description': 'Enable metadata WDTV can understand',
'options': [
{
'name': 'meta_enabled',
'default': False,
'type': 'enabler',
},
{
'name': 'meta_thumbnail',
'default': True,
'type': 'bool',
},
],
},
],
}]

34
couchpotato/core/providers/metadata/xbmc/__init__.py

@ -3,4 +3,36 @@ from .main import XBMC
def start():
return XBMC()
config = []
config = [{
'name': 'xbmc',
'groups': [
{
'tab': 'renamer',
'name': 'metadata',
'label': 'XBMC',
'description': 'Enable metadata XBMC can understand',
'options': [
{
'name': 'meta_enabled',
'default': False,
'type': 'enabler',
},
{
'name': 'meta_nfo',
'default': True,
'type': 'bool',
},
{
'name': 'meta_fanart',
'default': True,
'type': 'bool',
},
{
'name': 'meta_thumbnail',
'default': True,
'type': 'bool',
},
],
},
],
}]

98
couchpotato/core/providers/metadata/xbmc/main.py

@ -1,9 +1,16 @@
from couchpotato.core.providers.metadata.base import MetaDataBase
from xml.etree.ElementTree import Element, SubElement, Comment, tostring
from xml.etree.ElementTree import Element, SubElement, tostring
import re
import xml.dom.minidom
class XBMC(MetaDataBase):
def getRootName(self, data = {}):
return '/Users/ruud/Downloads/Test/Transformers'
def getFanartName(self, root):
return '%s-fanart.jpg' % root
@ -13,92 +20,31 @@ class XBMC(MetaDataBase):
def getNfoName(self, root):
return '%s.nfo' % root
def getNfo(self):
pass
"""
def write_nfo(self, path, url = True, xml = True):
self.out_string = ''
if xml:
self.out_string = self._generate_nfo_xml()
if url:
self.out_string = self.out_string + self.nfo_string
try:
f = open(path, 'w')
f.write(self.out_string)
f.close()
except:
raise NfoError("Couldn't write nfo")
def _generate_nfo_xml(self):
def getNfo(self, data):
nfoxml = Element('movie')
try:
title = SubElement(nfoxml, 'title')
title.text = self.tmdb_data['name']
except:
pass
try:
originaltitle = SubElement(nfoxml, 'originaltitel')
originaltitle.text = self.tmdb_data['original_name']
except:
pass
try:
rating = SubElement(nfoxml, 'rating')
rating.text = str(self.tmdb_data['rating'])
except:
pass
types = ['title', 'rating', 'year', 'votes', 'rating', 'mpaa', 'originaltitle:original_title', 'outline:overview', 'premiered:released', 'id:imdb_id']
try:
year = SubElement(nfoxml, 'year')
year.text = self.tmdb_data['released'][:4]
except:
pass
for type in types:
try:
votes = SubElement(nfoxml, 'votes')
votes.text = str(self.tmdb_data['votes'])
except:
pass
if ':' in type:
name, type = type.split(':')
else:
name = type
try:
plot = SubElement(nfoxml, 'outline')
plot.text = self.tmdb_data['overview']
el = SubElement(nfoxml, name)
el.text = data.get(type, '')
except:
pass
for genre in self.tmdb_data['genres']:
genres = SubElement(nfoxml, 'genre')
genres.text = genre['name']
#for genre in self.get('genres'):
# genres = SubElement(nfoxml, 'genre')
# genres.text = genre
try:
runtime = SubElement(nfoxml, 'runtime')
runtime.text = str(self.tmdb_data['runtime']) + " min"
except:
pass
try:
premiered = SubElement(nfoxml, 'premiered')
premiered.text = self.tmdb_data['released']
except:
pass
try:
mpaa = SubElement(nfoxml, 'mpaa')
mpaa.text = self.tmdb_data['certification']
except:
pass
try:
id = SubElement(nfoxml, 'id')
id.text = self.tmdb_data['imdb_id']
runtime.text = data.get('runtime') + " min"
except:
pass
@ -109,7 +55,7 @@ class XBMC(MetaDataBase):
xml_string = text_re.sub('>\g<1></', xml_string)
return xml_string.encode('utf-8')
"""
def _get_fanart(self, min_height, min_width):
''' Fetches the fanart for the specified imdb_id and saves it to dir.
Arguments

4
couchpotato/environment.py

@ -45,3 +45,7 @@ class Env:
s = Env.get('settings')
s.set(section, attr, value)
return s
@staticmethod
def getPermission(type):
return int(Env.get('settings').get('permission_%s' % type, default = 0777))

Loading…
Cancel
Save