mirror of
https://github.com/ajurna/cbwebreader.git
synced 2025-12-06 06:17:17 +00:00
multiple fixes for queries that stop duplicates from being created.
This commit is contained in:
@@ -46,10 +46,21 @@ class Command(BaseCommand):
|
|||||||
if isdir(os.path.join(comic_dir, file)):
|
if isdir(os.path.join(comic_dir, file)):
|
||||||
if self.OUTPUT:
|
if self.OUTPUT:
|
||||||
logger.info(f"Scanning Directory {file}")
|
logger.info(f"Scanning Directory {file}")
|
||||||
if directory:
|
try:
|
||||||
next_directory, created = Directory.objects.get_or_create(name=file, parent=directory)
|
if directory:
|
||||||
else:
|
next_directory, created = Directory.objects.get_or_create(name=file, parent=directory)
|
||||||
next_directory, created = Directory.objects.get_or_create(name=file, parent__isnull=True)
|
else:
|
||||||
|
next_directory, created = Directory.objects.get_or_create(name=file, parent__isnull=True)
|
||||||
|
except Directory.MultipleObjectsReturned:
|
||||||
|
if directory:
|
||||||
|
next_directories = Directory.objects.filter(name=file, parent=directory)
|
||||||
|
else:
|
||||||
|
next_directories = Directory.objects.filter(name=file, parent__isnull=True)
|
||||||
|
next_directories = next_directories.order_by('id')
|
||||||
|
next_directory = next_directories.first()
|
||||||
|
next_directories.exclude(id=next_directory.id).delete()
|
||||||
|
logger.error(f'Duplicate Directory {file}')
|
||||||
|
created = False
|
||||||
if created:
|
if created:
|
||||||
next_directory.save()
|
next_directory.save()
|
||||||
self.scan_directory(next_directory)
|
self.scan_directory(next_directory)
|
||||||
@@ -61,7 +72,7 @@ class Command(BaseCommand):
|
|||||||
try:
|
try:
|
||||||
book = ComicBook.objects.get(file_name=file, directory=directory)
|
book = ComicBook.objects.get(file_name=file, directory=directory)
|
||||||
except ComicBook.MultipleObjectsReturned:
|
except ComicBook.MultipleObjectsReturned:
|
||||||
logger.error(f'Duplicate Record {file}')
|
logger.error(f'Duplicate Comic {file}')
|
||||||
books = ComicBook.objects.filter(file_name=file, directory=directory).order_by('id')
|
books = ComicBook.objects.filter(file_name=file, directory=directory).order_by('id')
|
||||||
book = books.first()
|
book = books.first()
|
||||||
extra_books = books.exclude(id=book.id)
|
extra_books = books.exclude(id=book.id)
|
||||||
|
|||||||
@@ -138,16 +138,18 @@ def generate_directory(user, directory=False):
|
|||||||
dir_list_obj = Directory.objects.filter(name__in=dir_list, parent__isnull=True)
|
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)
|
file_list_obj = ComicBook.objects.filter(file_name__in=file_list, directory__isnull=True)
|
||||||
|
|
||||||
dir_list_obj = dir_list_obj.filter(comicbook__comicstatus__user=user).annotate(
|
dir_list_obj = dir_list_obj.annotate(
|
||||||
total=Count('comicbook'),
|
total=Count('comicbook', distinct=True),
|
||||||
total_read=Count('comicbook__comicstatus', Q(comicbook__comicstatus__finished=True))
|
total_read=Count('comicbook__comicstatus', Q(comicbook__comicstatus__finished=True,
|
||||||
|
comicbook__comicstatus__user=user), distinct=True)
|
||||||
)
|
)
|
||||||
file_list_obj = file_list_obj.filter(comicstatus__user=user).annotate(
|
file_list_obj = file_list_obj.annotate(
|
||||||
total_pages=Count('comicpage'),
|
total_pages=Count('comicpage', distinct=True),
|
||||||
last_read_page=F('comicstatus__last_read_page'),
|
last_read_page=F('comicstatus__last_read_page'),
|
||||||
finished=F('comicstatus__finished'),
|
finished=F('comicstatus__finished'),
|
||||||
unread=F('comicstatus__unread')
|
unread=F('comicstatus__unread'),
|
||||||
)
|
user=F('comicstatus__user')
|
||||||
|
).filter(Q(user__isnull=True) | Q(user=user.id))
|
||||||
|
|
||||||
for directory_obj in dir_list_obj:
|
for directory_obj in dir_list_obj:
|
||||||
df = DirFile()
|
df = DirFile()
|
||||||
|
|||||||
Reference in New Issue
Block a user