diff options
Diffstat (limited to 'module')
| -rw-r--r-- | module/config/core_default.xml | 1 | ||||
| -rw-r--r-- | module/file_list.py | 5 | ||||
| -rw-r--r-- | module/web/ServerThread.py | 27 | ||||
| -rw-r--r-- | module/web/ajax/views.py | 36 | ||||
| -rw-r--r-- | module/web/lighttpd/lighttpd_default.conf | 2 | ||||
| -rw-r--r-- | module/web/media/default/css/default.css | 3 | ||||
| -rw-r--r-- | module/web/media/default/js/funktions.js | 2 | ||||
| -rwxr-xr-x | module/web/run_server.py | 62 | ||||
| -rw-r--r-- | module/web/templates/default/base.html | 3 | ||||
| -rw-r--r-- | module/web/templates/default/home.html | 18 | 
10 files changed, 98 insertions, 61 deletions
| diff --git a/module/config/core_default.xml b/module/config/core_default.xml index 0d684890a..4142efd2f 100644 --- a/module/config/core_default.xml +++ b/module/config/core_default.xml @@ -13,6 +13,7 @@      </ssl>      <webinterface name="Webinterface">          <activated type="bool" name="Activated">True</activated> +        <lighttpd type="bool" name="Use Lighttpd">False</lighttpd>          <host type="ip" name="IP">0.0.0.0</host>          <port type="int" name="Port">8001</port>          <template type="str" name="Template">default</template> diff --git a/module/file_list.py b/module/file_list.py index 2cdda99c4..01a5924b3 100644 --- a/module/file_list.py +++ b/module/file_list.py @@ -126,10 +126,7 @@ class File_List(object):      def getAllFiles(self): -        files = [] -        for pypack in self.data["queue"] + self.data["packages"]: -            files += pypack.files -        return files +        return map(attrgetter("files"), self.data["queue"] + self.data["packages"])      def countDownloads(self):          """ simply return len of all files in all packages(which have no type) in queue and collector""" diff --git a/module/web/ServerThread.py b/module/web/ServerThread.py index 712cd4304..7efcc0b75 100644 --- a/module/web/ServerThread.py +++ b/module/web/ServerThread.py @@ -1,9 +1,7 @@  #!/usr/bin/env python  from __future__ import with_statement -import os  from os.path import exists  from os.path import join -from signal import SIGINT  from subprocess import PIPE  from subprocess import Popen  from subprocess import call @@ -41,7 +39,7 @@ class WebServer(threading.Thread):          except Exception:              self.lighttpd = False -        if self.lighttpd: +        if self.lighttpd and self.pycore.config['webinterface']['lighttpd']:              self.pycore.logger.info("Starting lighttpd Webserver: %s:%s" % (host, port))              config = file(join(path, "lighttpd", "lighttpd_default.conf"), "rb")              content = config.readlines() @@ -52,7 +50,7 @@ class WebServer(threading.Thread):              content = content.replace("%(host)", host)              content = content.replace("%(port)", port)              content = content.replace("%(media)", join(path, "media")) -            content = content.replace("%(version)", ".".join(map(str,version_info[0:2]))) +            content = content.replace("%(version)", ".".join(map(str, version_info[0:2])))              new_config = file(join(path, "lighttpd", "lighttpd.conf"), "wb")              new_config.write(content) @@ -67,20 +65,23 @@ class WebServer(threading.Thread):          else:              self.pycore.logger.info("Starting django builtin Webserver: %s:%s" % (host, port)) - +                          command = ['python', join(self.pycore.path, "module", "web", "run_server.py"), "%s:%s" % (host, port)]              self.p = Popen(command, stderr=PIPE, stdin=PIPE, stdout=PIPE) -            while self.running: -                sleep(1) +                  def quit(self): -        if self.lighttpd: -            self.p.kill() -            self.p2.kill() -            return True +        try: +            if self.lighttpd: +                self.p.kill() +                self.p2.kill() +                return True + +            else: +                self.p.kill() +        except: +            pass -        else: -            self.p.kill()          self.running = False diff --git a/module/web/ajax/views.py b/module/web/ajax/views.py index a4bfb5573..4265e8081 100644 --- a/module/web/ajax/views.py +++ b/module/web/ajax/views.py @@ -1,5 +1,7 @@ +  # Create your views here.  from os.path import join +import time  from django.conf import settings  from django.core.serializers import json @@ -7,7 +9,16 @@ from django.http import HttpResponse  from django.http import HttpResponseForbidden  from django.http import HttpResponseServerError  from django.utils import simplejson -   +from django.utils.translation import ugettext as _ + +def format_time(seconds): +    seconds = int(seconds) + +    hours, seconds = divmod(seconds, 3600) +    minutes, seconds = divmod(seconds, 60) +    return "%.2i:%.2i:%.2i" % (hours, minutes, seconds) + +  def permission(perm):      def _dec(view_func):          def _view(request, * args, ** kwargs): @@ -41,7 +52,7 @@ def add_package(request):      queue = int(request.POST['add_dest']) -    links = request.POST['add_links'].replace(" ","\n").split("\n") +    links = request.POST['add_links'].replace(" ", "\n").split("\n")      try:          f = request.FILES['add_file'] @@ -67,7 +78,7 @@ def add_package(request):      return JsonResponse("success") -@permission('pyload.can_add_dl') +@permission('pyload.can_add')  def remove_link(request, id):      try:          settings.PYLOAD.del_links([int(id)]) @@ -86,12 +97,27 @@ def status(request):  def links(request):      try:          links = settings.PYLOAD.status_downloads() -        ids = map(lambda x: x['id'], links) +        ids = [] +        for link in links: +            ids.append(link['id']) +            print link['status'] +            if link['status'] == 'downloading': +                link['info'] = "%s @ %s kb/s" % (format_time(link['eta']), round(link['speed'], 2)) +            elif link['status'] == 'waiting': +                link['percent'] = 0 +                link['size'] = 0 +                link['kbleft'] = 0 +                link['info'] = _("waiting %s") % format_time(link['wait_until'] - time.time()) +            else: +                link['info'] = "" + +          data = {}          data['links'] = links          data['ids'] = ids          return JsonResponse(data) -    except: +    except Exception, e: +        print e          return HttpResponseServerError()  @permission('pyload.can_see_dl') diff --git a/module/web/lighttpd/lighttpd_default.conf b/module/web/lighttpd/lighttpd_default.conf index fb971ffbe..55272ce0a 100644 --- a/module/web/lighttpd/lighttpd_default.conf +++ b/module/web/lighttpd/lighttpd_default.conf @@ -37,7 +37,7 @@ server.modules              = (  ## A static document-root. For virtual hosting take a look at the  ## mod_simple_vhost module. -server.document-root        = "/srv/http/" +server.document-root        = "%(path)"  ## where to send error-messages to  server.errorlog             = "%(path)/error.log" diff --git a/module/web/media/default/css/default.css b/module/web/media/default/css/default.css index 3c4762012..986e9a4bc 100644 --- a/module/web/media/default/css/default.css +++ b/module/web/media/default/css/default.css @@ -1005,6 +1005,9 @@ a.backlink {  a.play {
  	background:transparent url(/media/default/img/control_play.png) 0px 1px no-repeat;
  }
 +a.time {
 +	background:transparent url(/media/default/img/status_None.png) 0px 1px no-repeat;
 +}
  a.play:hover {
  	background:transparent url(/media/default/img/control_play_blue.png) 0px 1px no-repeat;
  }
 diff --git a/module/web/media/default/js/funktions.js b/module/web/media/default/js/funktions.js index 9ca165b36..4c42ee336 100644 --- a/module/web/media/default/js/funktions.js +++ b/module/web/media/default/js/funktions.js @@ -12,7 +12,7 @@ function HumanFileSize(size)  	var loga = Math.log(size)/Math.log(1024);
  	var i = Math.floor(loga);
  	var a = Math.pow(1024, i);
 -	return Math.round( size / a , 2) + " " + filesizename[i];
 +	return (size == 0) ? "0 KB" : (Math.round( size / a , 2) + " " + filesizename[i]);
  }
  Array.prototype.remove = function(from, to) {
 diff --git a/module/web/run_server.py b/module/web/run_server.py index 3bb9b13f7..5ffa45781 100755 --- a/module/web/run_server.py +++ b/module/web/run_server.py @@ -1,20 +1,32 @@  #!/usr/bin/env python  # -*- coding: utf-8 -*- -from django.core.management.base import BaseCommand, CommandError  import os  import sys  os.environ["DJANGO_SETTINGS_MODULE"] = 'settings' -def handle( *args ): +class Output: +     def __init__(self, stream): +        self.stream = stream +     def write(self, data): # Do nothing +        return None +         #self.stream.write(data) +         #self.stream.flush() +     def __getattr__(self, attr): +        return getattr(self.stream, attr) + +sys.stderr = Output(sys.stderr) +#sys.stdout = Output(sys.stdout) + +def handle(* args):      import django      from django.core.servers.basehttp import run, AdminMediaHandler, WSGIServerException      from django.core.handlers.wsgi import WSGIHandler -  +          try:  	if len(args) == 1:  	    try: -		addr,port = args[0].split(":") +		addr, port = args[0].split(":")  	    except:  		addr = "127.0.0.1"  		port = args[0] @@ -28,7 +40,7 @@ def handle( *args ):      print addr, port      admin_media_path = '' -    shutdown_message =  '' +    shutdown_message = ''      quit_command = (sys.platform == 'win32') and 'CTRL-BREAK' or 'CONTROL-C'      from django.conf import settings @@ -41,26 +53,28 @@ def handle( *args ):      translation.activate(settings.LANGUAGE_CODE)      try: -	handler = AdminMediaHandler(WSGIHandler(), admin_media_path) -	run(addr, int(port), handler) +        handler = AdminMediaHandler(WSGIHandler(), admin_media_path) +        run(addr, int(port), handler) +      except WSGIServerException, e: -	# Use helpful error messages instead of ugly tracebacks. -	ERRORS = { -	    13: "You don't have permission to access that port.", -	    98: "That port is already in use.", -	    99: "That IP address can't be assigned-to.", -	} -	try: -	    error_text = ERRORS[e.args[0].args[0]] -	except (AttributeError, KeyError): -	    error_text = str(e) -	sys.stderr.write(("Error: %s" % error_text) + '\n') -	# Need to use an OS exit because sys.exit doesn't work in a thread -	os._exit(1) +        # Use helpful error messages instead of ugly tracebacks. +        ERRORS = { +            13: "You don't have permission to access that port.", +            98: "That port is already in use.", +            99: "That IP address can't be assigned-to.", +        } +        try: +            error_text = ERRORS[e.args[0].args[0]] +        except (AttributeError, KeyError): +            error_text = str(e) +        sys.stderr.write(("Error: %s" % error_text) + '\n') +        # Need to use an OS exit because sys.exit doesn't work in a thread +        #os._exit(1)      except KeyboardInterrupt: -	if shutdown_message: -	    print shutdown_message -	sys.exit(0) +        if shutdown_message: +            print shutdown_message +        sys.exit(0) +          if __name__ == "__main__": -  handle(*sys.argv[1:]) +    handle(*sys.argv[1:]) diff --git a/module/web/templates/default/base.html b/module/web/templates/default/base.html index 5771e64e5..82581da45 100644 --- a/module/web/templates/default/base.html +++ b/module/web/templates/default/base.html @@ -180,7 +180,8 @@ function AddBox()  {% if perms.pyload.can_see_dl %}
  <ul id="page-actions">
 -	<li><a class="action backlink">{% trans "Speed:" %} <b id="speed">{{ status.speed }}</b> kb/s</a></li>
 +    <li><a class="time">{% trans "Download:" %}<a style=" background-color: #7CFC00; padding-left: 0cm; padding-right: 0.1cm; "> {% trans "on" %}</a></a></li>
 +    <li><a class="action backlink">{% trans "Speed:" %} <b id="speed">{{ status.speed }}</b> kb/s</a></li>
      <li><a class="action cog">{% trans "Active:" %} <b id="aktiv">{{ status.activ }}</b> / <b id="aktiv_from">{{ status.queue }}</b></a></li>
      <li><a href=""  class="action revisions" accesskey="o" rel="nofollow">{% trans "Reload page" %}</a></li>
  </ul><br />
 diff --git a/module/web/templates/default/home.html b/module/web/templates/default/home.html index 08a7a85e6..f3d40b4e0 100644 --- a/module/web/templates/default/home.html +++ b/module/web/templates/default/home.html @@ -5,11 +5,6 @@  <script type="text/javascript">
 -/*function UpdateLinks( SetInver, index )
 -{
 -	$("#aktiv_percent").text(parseInt($("#aktiv_percent").text)+1)
 -	setTimeout( UpdateLinks( SetInver, index+1 ), SetInver[index]*1000);
 -}*/
  var em;
  document.addEvent("domready", function(){
 @@ -83,7 +78,7 @@ var EntryManager = new Class({              }
              }, this)
 -        }catch(e){alert(e)}
 +        }catch(e){}
      }
  })
 @@ -108,8 +103,7 @@ var LinkEntry = new Class({          },
          insert: function(item){
              try{
 -            info = SecToRightTime(item.eta) +' @ '+ Math.round(item.speed*100)/100+' kb/s' ;
 -            
 +
              this.elements = {
                  tr: new Element('tr', {
                  'html': '',
 @@ -124,7 +118,7 @@ var LinkEntry = new Class({                  'html': item.status
                  }),
                  info: new Element('td', {
 -                'html': info
 +                'html': item.info
                  }),
                  kbleft: new Element('td', {
                  'html': HumanFileSize(item.size)
 @@ -176,7 +170,7 @@ var LinkEntry = new Class({          update: function(item){
                  this.elements.name.set('text', item.name);
                  this.elements.status.set('text', item.status);
 -                this.elements.info.set('text', SecToRightTime(item.eta)+' @ '+Math.round(item.speed*100)/100+' kb/s');
 +                this.elements.info.set('text', item.info);
                  this.elements.kbleft.set('text', HumanFileSize(item.size));
                  this.elements.percent.set('text', item.percent+ '% / '+ HumanFileSize(item.size-item.kbleft));
                  this.bar.start({
 @@ -204,7 +198,7 @@ var LinkEntry = new Class({    <tr class="header">
      <th>{% trans "Name" %}</th>
      <th>{% trans "Status" %}</th>
 -    <th>{% trans "Infos" %}</th>
 +    <th>{% trans "Information" %}</th>
      <th>{% trans "Size" %}</th>
      <th>{% trans "Progress" %}</th>
    </tr>
 @@ -229,6 +223,6 @@ var LinkEntry = new Class({    </tr>
    {% endfor %}
 -  <tbody>
 +  </tbody>
  </table>
  {% endblock %}
\ No newline at end of file | 
