From 53d1ae6364f7e42913927005f980afe209626d35 Mon Sep 17 00:00:00 2001 From: Ajurna Date: Thu, 8 Apr 2021 15:51:30 +0100 Subject: [PATCH] fixed bug where if duplicate pages exist comic will be rescanned. --- comic/models.py | 7 ++++++- comic/tests/test_models.py | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/comic/models.py b/comic/models.py index 5c2f516..a18b51b 100644 --- a/comic/models.py +++ b/comic/models.py @@ -111,7 +111,12 @@ class ComicBook(models.Model): archive = zipfile.ZipFile(archive_path) except zipfile.BadZipfile: return False - page_obj = ComicPage.objects.get(Comic=self, index=page) + try: + page_obj = ComicPage.objects.get(Comic=self, index=page) + except ComicPage.MultipleObjectsReturned: + ComicPage.objects.filter(Comic=self).delete() + self.process_comic_pages(archive, self) + page_obj = ComicPage.objects.get(Comic=self, index=page) try: out = (archive.open(page_obj.page_file_name), page_obj.content_type) except rarfile.NoRarEntry: diff --git a/comic/tests/test_models.py b/comic/tests/test_models.py index b2465cd..03abbc8 100644 --- a/comic/tests/test_models.py +++ b/comic/tests/test_models.py @@ -292,3 +292,16 @@ class ComicBookTests(TestCase): 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) + + def test_duplicate_pages(self): + c = Client() + user = User.objects.get(username="test") + generate_directory(user) + book = ComicBook.objects.get(file_name='test1.rar') + page = ComicPage.objects.get(Comic=book, index=0) + dup_page = ComicPage(Comic=book, index=0, page_file_name=page.page_file_name, content_type=page.content_type) + dup_page.save() + + 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) \ No newline at end of file