summaryrefslogtreecommitdiffstats
path: root/pyload/web
diff options
context:
space:
mode:
Diffstat (limited to 'pyload/web')
-rw-r--r--pyload/web/api_app.py9
-rw-r--r--pyload/web/app/scripts/views/linkgrabber/modalView.js45
-rwxr-xr-xpyload/web/app/templates/default/linkgrabber/modal.html12
-rw-r--r--pyload/web/middlewares.py1
4 files changed, 57 insertions, 10 deletions
diff --git a/pyload/web/api_app.py b/pyload/web/api_app.py
index b13e3bed9..66cdd58fd 100644
--- a/pyload/web/api_app.py
+++ b/pyload/web/api_app.py
@@ -2,7 +2,6 @@
# -*- coding: utf-8 -*-
from urllib import unquote
-from itertools import chain
from traceback import format_exc, print_exc
from bottle import route, request, response, HTTPError, parse_auth
@@ -60,8 +59,14 @@ def call_api(func, args=""):
if request.json:
kwargs = request.json
+ # file upload, reads whole file into memory
+ for name, f in request.files.iteritems():
+ print f.length
+ kwargs["filename"] = f.filename
+ kwargs[name] = f.value
+
# convert arguments from json to obj separately
- for x, y in chain(request.GET.iteritems(), request.POST.iteritems()):
+ for x, y in request.params.iteritems():
if not x or not y or x == "session": continue
kwargs[x] = loads(unquote(y))
diff --git a/pyload/web/app/scripts/views/linkgrabber/modalView.js b/pyload/web/app/scripts/views/linkgrabber/modalView.js
index 808d67f59..8e24f259b 100644
--- a/pyload/web/app/scripts/views/linkgrabber/modalView.js
+++ b/pyload/web/app/scripts/views/linkgrabber/modalView.js
@@ -6,7 +6,11 @@ define(['jquery', 'underscore', 'backbone', 'app', 'models/CollectorPackage', 'v
className: 'modal linkgrabber',
events: {
- 'keyup #inputLinks': 'addOnKeyUp'
+ 'keyup #inputLinks': 'addOnKeyUp',
+ 'click .btn-container': 'selectContainer',
+ 'change #inputContainer': 'checkContainer',
+ 'keyup #inputURL': 'checkURL',
+ 'click .btn-remove-all': 'clearAll'
},
template: template,
@@ -25,19 +29,19 @@ define(['jquery', 'underscore', 'backbone', 'app', 'models/CollectorPackage', 'v
addOnKeyUp: function(e) {
// Enter adds the links
if (e.keyCode === 13)
- this.parseLinks();
+ this.checkLinks();
var inputSize = this.$('#inputLinks').val().length;
// TODO: checkbox to disable this
// add links when several characters was pasted into box
if (inputSize > this.inputSize + 4)
- this.parseLinks();
+ this.checkLinks();
else
this.inputSize = inputSize;
},
- parseLinks: function() {
+ checkLinks: function() {
var self = this;
// split, trim and remove empty links
var links = _.filter(_.map(this.$('#inputLinks').val().split('\n'), function(link) {
@@ -59,6 +63,39 @@ define(['jquery', 'underscore', 'backbone', 'app', 'models/CollectorPackage', 'v
this.inputSize = 0;
},
+ selectContainer: function(e) {
+ this.$('#inputContainer').trigger('click');
+ },
+
+ checkContainer: function(e) {
+ this.$('form').attr('action', App.apiUrl('api/checkContainer'));
+ this.$('form').trigger('submit');
+ },
+
+ checkURL: function(e) {
+ // check is triggered on enter
+ if (e.keyCode !== 13)
+ return;
+
+ var self = this;
+ $.ajax(App.apiRequest('checkHTML', {
+ html: '',
+ url: $(e.target).val()
+ }, {
+ success: function(data) {
+ self.collectorView.updateData(data);
+ }
+ }));
+
+ $(e.target).val('');
+ },
+
+ // deletes every package
+ clearAll: function(e) {
+ this.collectorView.collection.reset();
+
+ },
+
// Hide when there are no more packages
onAdded: function() {
if (this.collectorView !== null) {
diff --git a/pyload/web/app/templates/default/linkgrabber/modal.html b/pyload/web/app/templates/default/linkgrabber/modal.html
index 750613663..3c50aa037 100755
--- a/pyload/web/app/templates/default/linkgrabber/modal.html
+++ b/pyload/web/app/templates/default/linkgrabber/modal.html
@@ -14,18 +14,22 @@
<textarea id="inputLinks" rows="1" placeholder="{{_ " Paste your links here..."}}"></textarea>
</div>
<div class="span4">
- <h3 class="pull-left">{{_ "Container" }}</h3>
- <button class="btn btn-blue">{{_ "Upload" }}</button>
+ <form action="" method="post" enctype="multipart/form-data" target="uploadTarget">
+ <h3 class="pull-left">{{_ "Container" }}</h3>
+ <button class="btn btn-blue btn-container">{{_ "Upload" }}</button>
+ <input type="file" name="data" id="inputContainer" style="display: none">
+ </form>
+ <iframe id="uploadTarget" name="uploadTarget" style="display: none"></iframe>
</div>
<div class="span4">
<h3 class="pull-left">{{_ "URL" }}</h3>
- <input type="text" placeholder="{{ _ "Link to Website"}}">
+ <input type="text" name="inputURL" id="inputURL" placeholder="{{ _ "Link to Website"}}">
</div>
</div>
</div>
<legend>
- {{_ "Packages" }}
+ {{_ "Packages" }} <button class="btn btn-danger btn-small btn-remove-all"><i class="icon-trash"></i></button>
</legend>
<div class="container-fluid prepared-packages">
diff --git a/pyload/web/middlewares.py b/pyload/web/middlewares.py
index 913e714bb..aeb65fde5 100644
--- a/pyload/web/middlewares.py
+++ b/pyload/web/middlewares.py
@@ -113,6 +113,7 @@ class GzipResponse(object):
# TODO: also writes large files to stringbuffer
# avoids optimized send_file and causes memory shortage
+ # pre-gzipped resources would make this obsolete
def finish_response(self, app_iter):
if self.compressible:
output = gzip.GzipFile(mode='wb', compresslevel=self.compress_level,