mirror of
https://github.com/ajurna/cbwebreader.git
synced 2025-12-06 06:17:17 +00:00
Merge pull request #7 from apoclyps/docker-support
[ISSUE-3] Adding docker support
This commit is contained in:
104
comic/models.py
104
comic/models.py
@@ -27,11 +27,11 @@ class Setting(models.Model):
|
||||
|
||||
class Directory(models.Model):
|
||||
name = models.CharField(max_length=100)
|
||||
parent = models.ForeignKey('Directory', null=True, blank=True, on_delete=models.CASCADE)
|
||||
parent = models.ForeignKey("Directory", null=True, blank=True, on_delete=models.CASCADE)
|
||||
selector = models.UUIDField(unique=True, default=uuid.uuid4, db_index=True)
|
||||
|
||||
def __str__(self):
|
||||
return 'Directory: {0}; {1}'.format(self.name, self.parent)
|
||||
return "Directory: {0}; {1}".format(self.name, self.parent)
|
||||
|
||||
@property
|
||||
def path(self):
|
||||
@@ -80,10 +80,10 @@ class ComicBook(models.Model):
|
||||
|
||||
@property
|
||||
def selector_string(self):
|
||||
return urlsafe_base64_encode(self.selector.bytes).decode()
|
||||
return urlsafe_base64_encode(self.selector.bytes)
|
||||
|
||||
def get_image(self, page):
|
||||
base_dir = Setting.objects.get(name='BASE_DIR').value
|
||||
base_dir = Setting.objects.get(name="BASE_DIR").value
|
||||
if self.directory:
|
||||
archive_path = path.join(base_dir, self.directory.path, self.file_name)
|
||||
else:
|
||||
@@ -109,11 +109,11 @@ class ComicBook(models.Model):
|
||||
|
||||
class Navigation:
|
||||
next_index = 0
|
||||
next_path = ''
|
||||
next_path = ""
|
||||
prev_index = 0
|
||||
prev_path = ''
|
||||
prev_path = ""
|
||||
cur_index = 0
|
||||
cur_path = ''
|
||||
cur_path = ""
|
||||
q_prev_to_directory = False
|
||||
q_next_to_directory = False
|
||||
|
||||
@@ -122,10 +122,7 @@ class ComicBook(models.Model):
|
||||
setattr(self, arg, kwargs[arg])
|
||||
|
||||
def nav(self, page, user):
|
||||
out = self.Navigation(
|
||||
cur_index=page,
|
||||
cur_path=urlsafe_base64_encode(self.selector.bytes).decode()
|
||||
)
|
||||
out = self.Navigation(cur_index=page, cur_path=urlsafe_base64_encode(self.selector.bytes))
|
||||
if page == 0:
|
||||
out.prev_path, out.prev_index = self.nav_get_prev_comic(user)
|
||||
if out.prev_index == -1:
|
||||
@@ -144,7 +141,7 @@ class ComicBook(models.Model):
|
||||
return out
|
||||
|
||||
def nav_get_prev_comic(self, user):
|
||||
base_dir = Setting.objects.get(name='BASE_DIR').value
|
||||
base_dir = Setting.objects.get(name="BASE_DIR").value
|
||||
if self.directory:
|
||||
folder = path.join(base_dir, self.directory.path)
|
||||
else:
|
||||
@@ -153,9 +150,9 @@ class ComicBook(models.Model):
|
||||
comic_index = dir_list.index(self.file_name)
|
||||
if comic_index == 0:
|
||||
if self.directory:
|
||||
comic_path = urlsafe_base64_encode(self.directory.selector.bytes).decode()
|
||||
comic_path = urlsafe_base64_encode(self.directory.selector.bytes)
|
||||
else:
|
||||
comic_path = ''
|
||||
comic_path = ""
|
||||
index = -1
|
||||
else:
|
||||
prev_comic = dir_list[comic_index - 1]
|
||||
@@ -163,11 +160,9 @@ class ComicBook(models.Model):
|
||||
if not path.isdir(path.join(folder, prev_comic)):
|
||||
try:
|
||||
if self.directory:
|
||||
book = ComicBook.objects.get(file_name=prev_comic,
|
||||
directory=self.directory)
|
||||
book = ComicBook.objects.get(file_name=prev_comic, directory=self.directory)
|
||||
else:
|
||||
book = ComicBook.objects.get(file_name=prev_comic,
|
||||
directory__isnull=True)
|
||||
book = ComicBook.objects.get(file_name=prev_comic, directory__isnull=True)
|
||||
except ComicBook.DoesNotExist:
|
||||
if self.directory:
|
||||
book = ComicBook.process_comic_book(prev_comic, self.directory)
|
||||
@@ -175,17 +170,17 @@ class ComicBook(models.Model):
|
||||
book = ComicBook.process_comic_book(prev_comic)
|
||||
cs, _ = ComicStatus.objects.get_or_create(comic=book, user=user)
|
||||
index = cs.last_read_page
|
||||
comic_path = urlsafe_base64_encode(book.selector.bytes).decode()
|
||||
comic_path = urlsafe_base64_encode(book.selector.bytes)
|
||||
else:
|
||||
if self.directory:
|
||||
comic_path = urlsafe_base64_encode(self.directory.selector.bytes).decode()
|
||||
comic_path = urlsafe_base64_encode(self.directory.selector.bytes)
|
||||
else:
|
||||
comic_path = ''
|
||||
comic_path = ""
|
||||
index = -1
|
||||
return comic_path, index
|
||||
|
||||
def nav_get_next_comic(self, user):
|
||||
base_dir = Setting.objects.get(name='BASE_DIR').value
|
||||
base_dir = Setting.objects.get(name="BASE_DIR").value
|
||||
if self.directory:
|
||||
folder = path.join(base_dir, self.directory.path)
|
||||
else:
|
||||
@@ -196,11 +191,9 @@ class ComicBook(models.Model):
|
||||
next_comic = dir_list[comic_index + 1]
|
||||
try:
|
||||
if self.directory:
|
||||
book = ComicBook.objects.get(file_name=next_comic,
|
||||
directory=self.directory)
|
||||
book = ComicBook.objects.get(file_name=next_comic, directory=self.directory)
|
||||
else:
|
||||
book = ComicBook.objects.get(file_name=next_comic,
|
||||
directory__isnull=True)
|
||||
book = ComicBook.objects.get(file_name=next_comic, directory__isnull=True)
|
||||
except ComicBook.DoesNotExist:
|
||||
if self.directory:
|
||||
book = ComicBook.process_comic_book(next_comic, self.directory)
|
||||
@@ -208,25 +201,25 @@ class ComicBook(models.Model):
|
||||
book = ComicBook.process_comic_book(next_comic)
|
||||
if type(book) is str:
|
||||
raise IndexError
|
||||
comic_path = urlsafe_base64_encode(book.selector.bytes).decode()
|
||||
comic_path = urlsafe_base64_encode(book.selector.bytes)
|
||||
cs, _ = ComicStatus.objects.get_or_create(comic=book, user=user)
|
||||
index = cs.last_read_page
|
||||
except IndexError:
|
||||
if self.directory:
|
||||
comic_path = urlsafe_base64_encode(self.directory.selector.bytes).decode()
|
||||
comic_path = urlsafe_base64_encode(self.directory.selector.bytes)
|
||||
else:
|
||||
comic_path = ''
|
||||
comic_path = ""
|
||||
index = -1
|
||||
return comic_path, index
|
||||
|
||||
class DirFile:
|
||||
def __init__(self):
|
||||
self.name = ''
|
||||
self.name = ""
|
||||
self.isdir = False
|
||||
self.icon = ''
|
||||
self.icon = ""
|
||||
self.iscb = False
|
||||
self.location = ''
|
||||
self.label = ''
|
||||
self.location = ""
|
||||
self.label = ""
|
||||
self.cur_page = 0
|
||||
|
||||
def __str__(self):
|
||||
@@ -234,7 +227,7 @@ class ComicBook(models.Model):
|
||||
|
||||
@property
|
||||
def pages(self):
|
||||
return [cp for cp in ComicPage.objects.filter(Comic=self).order_by('index')]
|
||||
return [cp for cp in ComicPage.objects.filter(Comic=self).order_by("index")]
|
||||
|
||||
def page_name(self, index):
|
||||
return ComicPage.objects.get(Comic=self, index=index).page_file_name
|
||||
@@ -247,15 +240,14 @@ class ComicBook(models.Model):
|
||||
:type directory: Directory
|
||||
"""
|
||||
try:
|
||||
book = ComicBook.objects.get(file_name=comic_file_name,
|
||||
version=0)
|
||||
book = ComicBook.objects.get(file_name=comic_file_name, version=0)
|
||||
book.directory = directory
|
||||
book.version = 1
|
||||
book.save()
|
||||
return book
|
||||
except ComicBook.DoesNotExist:
|
||||
pass
|
||||
base_dir = Setting.objects.get(name='BASE_DIR').value
|
||||
base_dir = Setting.objects.get(name="BASE_DIR").value
|
||||
if directory:
|
||||
comic_full_path = path.join(base_dir, directory.get_path(), comic_file_name)
|
||||
else:
|
||||
@@ -272,32 +264,30 @@ class ComicBook(models.Model):
|
||||
return comic_file_name
|
||||
with atomic():
|
||||
if directory:
|
||||
book = ComicBook(file_name=comic_file_name,
|
||||
directory=directory)
|
||||
book = ComicBook(file_name=comic_file_name, directory=directory)
|
||||
else:
|
||||
book = ComicBook(file_name=comic_file_name)
|
||||
book.save()
|
||||
page_index = 0
|
||||
for page_file_name in sorted([str(x) for x in cbx.namelist()], key=str.lower):
|
||||
try:
|
||||
dot_index = page_file_name.rindex('.') + 1
|
||||
dot_index = page_file_name.rindex(".") + 1
|
||||
except ValueError:
|
||||
continue
|
||||
ext = page_file_name.lower()[dot_index:]
|
||||
if ext in ['jpg', 'jpeg']:
|
||||
content_type = 'image/jpeg'
|
||||
elif ext == 'png':
|
||||
content_type = 'image/png'
|
||||
elif ext == 'bmp':
|
||||
content_type = 'image/bmp'
|
||||
elif ext == 'gif':
|
||||
content_type = 'image/gif'
|
||||
if ext in ["jpg", "jpeg"]:
|
||||
content_type = "image/jpeg"
|
||||
elif ext == "png":
|
||||
content_type = "image/png"
|
||||
elif ext == "bmp":
|
||||
content_type = "image/bmp"
|
||||
elif ext == "gif":
|
||||
content_type = "image/gif"
|
||||
else:
|
||||
content_type = 'text/plain'
|
||||
page = ComicPage(Comic=book,
|
||||
index=page_index,
|
||||
page_file_name=page_file_name,
|
||||
content_type=content_type)
|
||||
content_type = "text/plain"
|
||||
page = ComicPage(
|
||||
Comic=book, index=page_index, page_file_name=page_file_name, content_type=content_type
|
||||
)
|
||||
page.save()
|
||||
page_index += 1
|
||||
return book
|
||||
@@ -336,8 +326,12 @@ class ComicStatus(models.Model):
|
||||
return self.__repr__()
|
||||
|
||||
def __repr__(self):
|
||||
return f'<ComicStatus:{self.user.username}:{self.comic.file_name}:{self.last_read_page}:' \
|
||||
f'{self.unread}:{self.finished}'
|
||||
return (
|
||||
f"<ComicStatus:{self.user.username}:{self.comic.file_name}:{self.last_read_page}:"
|
||||
f"{self.unread}:{self.finished}"
|
||||
)
|
||||
|
||||
|
||||
# TODO: add support to reference items last being read
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user