mirror of
https://github.com/ajurna/cbwebreader.git
synced 2025-12-06 06:17:17 +00:00
fixed bug where if page is missing it will regenerate page records and serve it correctly.
This commit is contained in:
@@ -99,7 +99,7 @@ class ComicBook(models.Model):
|
|||||||
base_dir = settings.COMIC_BOOK_VOLUME
|
base_dir = settings.COMIC_BOOK_VOLUME
|
||||||
return Path(base_dir, self.directory.get_path(), self.file_name)
|
return Path(base_dir, self.directory.get_path(), self.file_name)
|
||||||
|
|
||||||
def get_image(self, page):
|
def get_image(self, page: int):
|
||||||
base_dir = settings.COMIC_BOOK_VOLUME
|
base_dir = settings.COMIC_BOOK_VOLUME
|
||||||
if self.directory:
|
if self.directory:
|
||||||
archive_path = Path(base_dir, self.directory.path, self.file_name)
|
archive_path = Path(base_dir, self.directory.path, self.file_name)
|
||||||
@@ -112,7 +112,12 @@ class ComicBook(models.Model):
|
|||||||
except zipfile.BadZipfile:
|
except zipfile.BadZipfile:
|
||||||
return False
|
return False
|
||||||
page_obj = ComicPage.objects.get(Comic=self, index=page)
|
page_obj = ComicPage.objects.get(Comic=self, index=page)
|
||||||
|
try:
|
||||||
out = (archive.open(page_obj.page_file_name), page_obj.content_type)
|
out = (archive.open(page_obj.page_file_name), page_obj.content_type)
|
||||||
|
except rarfile.NoRarEntry:
|
||||||
|
ComicPage.objects.filter(Comic=self).delete()
|
||||||
|
self.process_comic_pages(archive, self)
|
||||||
|
out = self.get_image(page)
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def is_last_page(self, page):
|
def is_last_page(self, page):
|
||||||
@@ -271,7 +276,7 @@ class ComicBook(models.Model):
|
|||||||
if not pdf_file and not cbx:
|
if not pdf_file and not cbx:
|
||||||
return comic_file_name
|
return comic_file_name
|
||||||
|
|
||||||
with atomic():
|
|
||||||
if directory:
|
if directory:
|
||||||
book = ComicBook(file_name=comic_file_name, directory=directory)
|
book = ComicBook(file_name=comic_file_name, directory=directory)
|
||||||
else:
|
else:
|
||||||
@@ -279,6 +284,20 @@ class ComicBook(models.Model):
|
|||||||
book.save()
|
book.save()
|
||||||
page_index = 0
|
page_index = 0
|
||||||
if cbx:
|
if cbx:
|
||||||
|
ComicBook.process_comic_pages(cbx, book)
|
||||||
|
elif pdf_file:
|
||||||
|
with atomic():
|
||||||
|
for page_index in range(pdf_file.getNumPages()):
|
||||||
|
page = ComicPage(
|
||||||
|
Comic=book, index=page_index, page_file_name=page_index+1, content_type='application/pdf'
|
||||||
|
)
|
||||||
|
page.save()
|
||||||
|
return book
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def process_comic_pages(cbx, book):
|
||||||
|
with atomic():
|
||||||
|
page_index = 0
|
||||||
for page_file_name in sorted([str(x) for x in cbx.namelist()], key=str.lower):
|
for page_file_name in sorted([str(x) for x in cbx.namelist()], key=str.lower):
|
||||||
try:
|
try:
|
||||||
dot_index = page_file_name.rindex(".") + 1
|
dot_index = page_file_name.rindex(".") + 1
|
||||||
@@ -300,13 +319,6 @@ class ComicBook(models.Model):
|
|||||||
)
|
)
|
||||||
page.save()
|
page.save()
|
||||||
page_index += 1
|
page_index += 1
|
||||||
elif pdf_file:
|
|
||||||
for page_index in range(pdf_file.getNumPages()):
|
|
||||||
page = ComicPage(
|
|
||||||
Comic=book, index=page_index, page_file_name=page_index+1, content_type='application/pdf'
|
|
||||||
)
|
|
||||||
page.save()
|
|
||||||
return book
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_ordered_dir_list(folder):
|
def get_ordered_dir_list(folder):
|
||||||
|
|||||||
@@ -280,3 +280,15 @@ class ComicBookTests(TestCase):
|
|||||||
|
|
||||||
response = c.get("/comic/account/")
|
response = c.get("/comic/account/")
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
def test_file_not_in_archive(self):
|
||||||
|
c = Client()
|
||||||
|
user = User.objects.get(username="test")
|
||||||
|
book = ComicBook.objects.get(file_name='test1.rar')
|
||||||
|
page = ComicPage.objects.get(Comic=book, index=0)
|
||||||
|
page.page_file_name = 'doesnt_exist'
|
||||||
|
page.save()
|
||||||
|
generate_directory(user)
|
||||||
|
c.login(username="test", password="test")
|
||||||
|
response = c.get(f"/comic/read/{urlsafe_base64_encode(book.selector.bytes)}/0/img")
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|||||||
@@ -301,6 +301,7 @@ def read_comic(request, comic_selector):
|
|||||||
except Directory.DoesNotExist:
|
except Directory.DoesNotExist:
|
||||||
return HttpResponse(status=404)
|
return HttpResponse(status=404)
|
||||||
book = get_object_or_404(ComicBook, selector=selector)
|
book = get_object_or_404(ComicBook, selector=selector)
|
||||||
|
|
||||||
pages = ComicPage.objects.filter(Comic=book)
|
pages = ComicPage.objects.filter(Comic=book)
|
||||||
|
|
||||||
status, _ = ComicStatus.objects.get_or_create(comic=book, user=request.user)
|
status, _ = ComicStatus.objects.get_or_create(comic=book, user=request.user)
|
||||||
|
|||||||
Reference in New Issue
Block a user