diff --git a/cbreader/settings/dev.py b/cbreader/settings/dev.py index a01c95c..3badf6b 100644 --- a/cbreader/settings/dev.py +++ b/cbreader/settings/dev.py @@ -25,4 +25,6 @@ MIDDLEWARE = [ 'silk.middleware.SilkyMiddleware', ] -SILK_ENABLED = True \ No newline at end of file +SILK_ENABLED = True + +SILKY_PYTHON_PROFILER = True diff --git a/comic/models.py b/comic/models.py index bd89e7b..7d26f06 100644 --- a/comic/models.py +++ b/comic/models.py @@ -7,7 +7,9 @@ from django.contrib.auth.models import User from django.db import models from django.db.transaction import atomic from django.utils.http import urlsafe_base64_encode -from PyPDF4 import PdfFileReader +import PyPDF4 +import PyPDF4.utils + from comic import rarfile @@ -31,6 +33,9 @@ class Directory(models.Model): parent = models.ForeignKey("Directory", null=True, blank=True, on_delete=models.CASCADE) selector = models.UUIDField(unique=True, default=uuid.uuid4, db_index=True) + class Meta: + ordering = ['name'] + def __str__(self): return "Directory: {0}; {1}".format(self.name, self.parent) @@ -263,10 +268,12 @@ class ComicBook(models.Model): cbx = zipfile.ZipFile(comic_full_path) except zipfile.BadZipFile: cbx = None + pdf_file = None if not cbx: - pdf_file = PdfFileReader(comic_full_path) - else: - pdf_file = None + try: + pdf_file = PyPDF4.PdfFileReader(comic_full_path) + except PyPDF4.utils.PyPdfError: + pass if not pdf_file and not cbx: return comic_file_name diff --git a/comic/util.py b/comic/util.py index 886c512..2adf8e1 100644 --- a/comic/util.py +++ b/comic/util.py @@ -1,6 +1,7 @@ from collections import OrderedDict from os import listdir, path +from django.db.models import Count, Q from django.db.transaction import atomic from django.utils.http import urlsafe_base64_encode @@ -94,7 +95,7 @@ class DirFile: self.icon = "fa-folder-open" self.selector = urlsafe_base64_encode(directory.selector.bytes) self.location = "/comic/{0}/".format(self.selector) - self.label = generate_dir_status(user, directory) + self.label = generate_dir_status(directory.total, directory.total_read) self.type = "directory" def populate_comic(self, comic, user): @@ -140,6 +141,12 @@ def generate_directory(user, directory=False): else: dir_list_obj = Directory.objects.filter(name__in=dir_list, parent__isnull=True) file_list_obj = ComicBook.objects.filter(file_name__in=file_list, directory__isnull=True) + + dir_list_obj = dir_list_obj.annotate(total=Count('comicbook'), + total_read=Count('comicbook__comicstatus', + Q(comicbook__comicstatus__finished=True, + comicbook__comicstatus__user=user))) + for directory_obj in dir_list_obj: df = DirFile() df.populate_directory(directory_obj, user) @@ -157,6 +164,8 @@ def generate_directory(user, directory=False): else: directory_obj = Directory(name=directory_name) directory_obj.save() + directory_obj.total = 0 + directory_obj.total_read = 0 df = DirFile() df.populate_directory(directory_obj, user) files.append(df) @@ -185,17 +194,14 @@ def generate_label(book, status): return label_text -def generate_dir_status(user, directory): - cb_list = ComicBook.objects.filter(directory=directory) - total = cb_list.count() - total_read = ComicStatus.objects.filter(user=user, comic__in=cb_list, finished=True).count() +def generate_dir_status(total, total_read): if total == 0: return '