summaryrefslogtreecommitdiffstats
path: root/module/web/pyload/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/web/pyload/views.py')
-rw-r--r--module/web/pyload/views.py153
1 files changed, 153 insertions, 0 deletions
diff --git a/module/web/pyload/views.py b/module/web/pyload/views.py
new file mode 100644
index 000000000..ea9d5f1be
--- /dev/null
+++ b/module/web/pyload/views.py
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+
+# Create your views here.
+import mimetypes
+from os import listdir
+from os import stat
+from os.path import isdir
+from os.path import isfile
+from os.path import join
+
+from django.conf import settings
+from django.contrib.auth.decorators import login_required
+from django.http import HttpResponse
+from django.http import HttpResponseNotFound
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+
+
+def check_server(function):
+ def _dec(view_func):
+ def _view(request, * args, ** kwargs):
+ try:
+ version = settings.PYLOAD.get_server_version()
+ except Exception, e:
+ return base(request, messages=['Can\'t connect to pyLoad. Please check your configuration and make sure pyLoad is running.', str(e)])
+ return view_func(request, * args, ** kwargs)
+
+ _view.__name__ = view_func.__name__
+ _view.__dict__ = view_func.__dict__
+ _view.__doc__ = view_func.__doc__
+
+ return _view
+
+ if function is None:
+ return _dec
+ else:
+ return _dec(function)
+
+
+def permission(perm):
+ def _dec(view_func):
+ def _view(request, * args, ** kwargs):
+ if request.user.has_perm(perm) and request.user.is_authenticated():
+ return view_func(request, * args, ** kwargs)
+ else:
+ return base(request, messages=['You don\'t have permission to view this page.'])
+
+ _view.__name__ = view_func.__name__
+ _view.__dict__ = view_func.__dict__
+ _view.__doc__ = view_func.__doc__
+
+ return _view
+
+ return _dec
+
+
+
+def status_proc(request):
+ return {'status': settings.PYLOAD.status_server()}
+
+
+def base(request, messages):
+ return render_to_response(join(settings.TEMPLATE, 'base.html'), {'messages': messages}, RequestContext(request))
+
+@login_required
+@permission('pyload.can_see_dl')
+@check_server
+def home(request):
+ return render_to_response(join(settings.TEMPLATE, 'home.html'), RequestContext(request, {'content': settings.PYLOAD.status_downloads()}, [status_proc]))
+
+
+@login_required
+@permission('pyload.can_see_dl')
+@check_server
+def queue(request):
+ queue = settings.PYLOAD.get_queue()
+ for pack in queue:
+ pack["children"] = map(settings.PYLOAD.get_file_info, settings.PYLOAD.get_package_files(pack["id"]))
+ return render_to_response(join(settings.TEMPLATE, 'queue.html'), RequestContext(request, {'content': queue}, [status_proc]))
+
+
+@login_required
+@permission('pyload.can_download')
+@check_server
+def downloads(request):
+ if not isdir(settings.DL_ROOT):
+ return base(request, ['Download directory not found.'])
+ data = {
+ 'folder': [],
+ 'files': []
+ }
+
+ for item in listdir(settings.DL_ROOT):
+ if isdir(join(settings.DL_ROOT, item)):
+ folder = {
+ 'name': item,
+ 'files': []
+ }
+ for file in listdir(join(settings.DL_ROOT, item)):
+ if isfile(join(settings.DL_ROOT, item, file)):
+ folder['files'].append(file)
+
+ data['folder'].append(folder)
+ elif isfile(join(settings.DL_ROOT, item)):
+ data['files'].append(item)
+
+
+ return render_to_response(join(settings.TEMPLATE, 'downloads.html'), RequestContext(request, {'files': data}, [status_proc]))
+
+@login_required
+@permission('pyload.can_download')
+@check_server
+def download(request, path):
+ path = path.split("/")
+
+ dir = join(settings.DL_ROOT, path[1].replace('..', ''))
+ if isdir(dir) or isfile(dir):
+ if isdir(dir): filepath = join(dir, path[2])
+ elif isfile(dir): filepath = dir
+
+ print filepath
+ if isfile(filepath):
+ try:
+ type, encoding = mimetypes.guess_type(filepath)
+ if type is None:
+ type = 'application/octet-stream'
+
+ response = HttpResponse(mimetype=type)
+ response['Content-Length'] = str(stat(filepath).st_size)
+
+ if encoding is not None:
+ response['Content-Encoding'] = encoding
+
+ response.write(file(filepath, "rb").read())
+ return response
+
+ except Exception, e:
+ return HttpResponseNotFound("File not Found. %s" % str(e))
+
+ return HttpResponseNotFound("File not Found.")
+
+@login_required
+@permission('pyload.can_see_logs')
+@check_server
+def logs(request, page=0):
+
+ log = file(join(settings.LOG_ROOT, "log.txt")).readlines()
+ data = []
+ page = int(page)
+ for i in range(page, page + 20):
+ data.append({'line': i + 1, 'content':log[i]})
+
+ return render_to_response(join(settings.TEMPLATE, 'logs.html'), RequestContext(request, {'log': data, 'next': str(page + 20), 'prev': 0 if page-20 < 0 else page-20}, [status_proc]))