You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.5 KiB

14 years ago
from couchpotato import get_session
from couchpotato.api import addApiView
from couchpotato.core.event import addEvent, fireEvent
from couchpotato.core.helpers.encoding import toUnicode
14 years ago
from couchpotato.core.helpers.variable import md5, getExt
from couchpotato.core.logger import CPLog
from couchpotato.core.plugins.base import Plugin
from couchpotato.core.settings.model import FileType, File
from couchpotato.environment import Env
from flask.helpers import send_from_directory
from sqlalchemy.sql.expression import or_
14 years ago
import os.path
import traceback
14 years ago
import urllib2
log = CPLog(__name__)
class FileManager(Plugin):
def __init__(self):
addEvent('file.add', self.add)
addEvent('file.download', self.download)
addEvent('file.types', self.getTypes)
addApiView('file.cache/<path:filename>', self.showImage)
14 years ago
def showImage(self, filename = ''):
14 years ago
cache_dir = Env.get('cache_dir')
14 years ago
filename = filename.replace(cache_dir[1:] + '/', '')
14 years ago
return send_from_directory(cache_dir, filename)
def download(self, url = '', dest = None, overwrite = False):
try:
filedata = self.urlopen(url)
except:
14 years ago
return False
14 years ago
14 years ago
if not dest: # to Cache
dest = os.path.join(Env.get('cache_dir'), '%s.%s' % (md5(url), getExt(url)))
14 years ago
if overwrite or not os.path.isfile(dest):
self.createFile(dest, filedata)
14 years ago
14 years ago
return dest
14 years ago
def add(self, path = '', part = 1, type = (), available = 1, properties = {}):
14 years ago
db = get_session()
f = db.query(File).filter(or_(File.path == toUnicode(path), File.path == path)).first()
14 years ago
if not f:
f = File()
db.add(f)
f.path = path
f.part = part
f.available = available
14 years ago
f.type_id = self.getType(type).id
db.commit()
file_dict = f.to_dict()
return file_dict
14 years ago
def getType(self, type):
db = get_session()
type, identifier = type
ft = db.query(FileType).filter_by(identifier = identifier).first()
if not ft:
ft = FileType(
type = type,
identifier = identifier,
name = identifier[0].capitalize() + identifier[1:]
)
db.add(ft)
db.commit()
return ft
def getTypes(self):
db = get_session()
results = db.query(FileType).all()
types = []
for type in results:
types.append(type.to_dict())
14 years ago
return types