mirror of
https://github.com/ajurna/cbwebreader.git
synced 2025-12-06 06:17:17 +00:00
code cleanup.
moved process_comic_book to static method.
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from comic.models import Setting, ComicBook, ComicPage
|
from comic.models import Setting, ComicBook, ComicPage
|
||||||
|
|
||||||
# Register your models here.
|
|
||||||
@admin.register(Setting)
|
@admin.register(Setting)
|
||||||
class SettingAdmin(admin.ModelAdmin):
|
class SettingAdmin(admin.ModelAdmin):
|
||||||
list_display = ('name', 'value')
|
list_display = ('name', 'value')
|
||||||
@@ -11,6 +11,7 @@ class SettingAdmin(admin.ModelAdmin):
|
|||||||
class ComicBookAdmin(admin.ModelAdmin):
|
class ComicBookAdmin(admin.ModelAdmin):
|
||||||
list_display = ('file_name', 'last_read_page')
|
list_display = ('file_name', 'last_read_page')
|
||||||
|
|
||||||
|
|
||||||
@admin.register(ComicPage)
|
@admin.register(ComicPage)
|
||||||
class ComicPageAdmin(admin.ModelAdmin):
|
class ComicPageAdmin(admin.ModelAdmin):
|
||||||
list_display = ('Comic', 'index', 'page_file_name', 'content_type')
|
list_display = ('Comic', 'index', 'page_file_name', 'content_type')
|
||||||
|
|||||||
103
comic/models.py
103
comic/models.py
@@ -78,7 +78,9 @@ class ComicBook(models.Model):
|
|||||||
out.next_path = comic_path
|
out.next_path = comic_path
|
||||||
|
|
||||||
return out
|
return out
|
||||||
def nav_get_prev_comic(self, comic_path):
|
|
||||||
|
@staticmethod
|
||||||
|
def nav_get_prev_comic(comic_path):
|
||||||
base_dir = Setting.objects.get(name='BASE_DIR').value
|
base_dir = Setting.objects.get(name='BASE_DIR').value
|
||||||
comic_path = urlsafe_base64_decode(comic_path)
|
comic_path = urlsafe_base64_decode(comic_path)
|
||||||
directory, comic = path.split(comic_path)
|
directory, comic = path.split(comic_path)
|
||||||
@@ -96,14 +98,16 @@ class ComicBook(models.Model):
|
|||||||
try:
|
try:
|
||||||
book = ComicBook.objects.get(file_name=prev_comic)
|
book = ComicBook.objects.get(file_name=prev_comic)
|
||||||
except ComicBook.DoesNotExist:
|
except ComicBook.DoesNotExist:
|
||||||
book = process_comic_book(base_dir, comic_path, prev_comic)
|
book = ComicBook.process_comic_book(base_dir, comic_path, prev_comic)
|
||||||
index = ComicPage.objects.filter(Comic=book).count() - 1
|
index = ComicPage.objects.filter(Comic=book).count() - 1
|
||||||
comic_path = urlsafe_base64_encode(comic_path)
|
comic_path = urlsafe_base64_encode(comic_path)
|
||||||
else:
|
else:
|
||||||
comic_path = urlsafe_base64_encode(directory)
|
comic_path = urlsafe_base64_encode(directory)
|
||||||
index = -1
|
index = -1
|
||||||
return comic_path, index
|
return comic_path, index
|
||||||
def nav_get_next_comic(self, comic_path):
|
|
||||||
|
@staticmethod
|
||||||
|
def nav_get_next_comic(comic_path):
|
||||||
base_dir = Setting.objects.get(name='BASE_DIR')
|
base_dir = Setting.objects.get(name='BASE_DIR')
|
||||||
comic_path = urlsafe_base64_decode(comic_path)
|
comic_path = urlsafe_base64_decode(comic_path)
|
||||||
directory, comic = path.split(comic_path)
|
directory, comic = path.split(comic_path)
|
||||||
@@ -118,6 +122,53 @@ class ComicBook(models.Model):
|
|||||||
comic_path = urlsafe_base64_encode(directory)
|
comic_path = urlsafe_base64_encode(directory)
|
||||||
index = -1
|
index = -1
|
||||||
return comic_path, index
|
return comic_path, index
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def process_comic_book(base_dir, comic_path, comic_file_name):
|
||||||
|
try:
|
||||||
|
cbx = rarfile.RarFile(path.join(base_dir, comic_path))
|
||||||
|
except rarfile.BadRarFile:
|
||||||
|
cbx = zipfile.ZipFile(path.join(base_dir, comic_path))
|
||||||
|
except zipfile.BadZipfile:
|
||||||
|
return False
|
||||||
|
|
||||||
|
book = ComicBook(file_name=comic_file_name,
|
||||||
|
last_read_page=0)
|
||||||
|
book.save()
|
||||||
|
i = 0
|
||||||
|
for f in sorted([str(x) for x in cbx.namelist()], key=str.lower):
|
||||||
|
ext = f.lower()[-3:]
|
||||||
|
if ext in ['jpg', 'jpeg']:
|
||||||
|
page = ComicPage(Comic=book,
|
||||||
|
index=i,
|
||||||
|
page_file_name=f,
|
||||||
|
content_type='image/jpeg')
|
||||||
|
page.save()
|
||||||
|
i += 1
|
||||||
|
elif ext == 'png':
|
||||||
|
page = ComicPage(Comic=book,
|
||||||
|
index=i,
|
||||||
|
page_file_name=f,
|
||||||
|
content_type='image/png')
|
||||||
|
page.save()
|
||||||
|
i += 1
|
||||||
|
elif ext == 'bmp':
|
||||||
|
page = ComicPage(Comic=book,
|
||||||
|
index=i,
|
||||||
|
page_file_name=f,
|
||||||
|
content_type='image/bmp')
|
||||||
|
page.save()
|
||||||
|
i += 1
|
||||||
|
elif ext == 'gif':
|
||||||
|
page = ComicPage(Comic=book,
|
||||||
|
index=i,
|
||||||
|
page_file_name=f,
|
||||||
|
content_type='image/gif')
|
||||||
|
page.save()
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
return book
|
||||||
|
|
||||||
class Comic:
|
class Comic:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.name = ''
|
self.name = ''
|
||||||
@@ -131,56 +182,10 @@ class ComicBook(models.Model):
|
|||||||
i.index = item.index
|
i.index = item.index
|
||||||
out.append(i)
|
out.append(i)
|
||||||
return out
|
return out
|
||||||
def process_comic_book(base_dir, comic_path, comic_file_name):
|
|
||||||
try:
|
|
||||||
cbx = rarfile.RarFile(path.join(base_dir, comic_path))
|
|
||||||
except rarfile.BadRarFile:
|
|
||||||
cbx = zipfile.ZipFile(path.join(base_dir, comic_path))
|
|
||||||
except zipfile.BadZipfile:
|
|
||||||
return False
|
|
||||||
|
|
||||||
book = ComicBook(file_name=comic_file_name,
|
|
||||||
last_read_page=0)
|
|
||||||
book.save()
|
|
||||||
i = 0
|
|
||||||
for f in sorted([str(x) for x in cbx.namelist()], key=str.lower):
|
|
||||||
ext = f.lower()[-3:]
|
|
||||||
if ext in ['jpg', 'jpeg']:
|
|
||||||
page = ComicPage(Comic=book,
|
|
||||||
index=i,
|
|
||||||
page_file_name=f,
|
|
||||||
content_type='image/jpeg')
|
|
||||||
page.save()
|
|
||||||
i += 1
|
|
||||||
elif ext == 'png':
|
|
||||||
page = ComicPage(Comic=book,
|
|
||||||
index=i,
|
|
||||||
page_file_name=f,
|
|
||||||
content_type='image/png')
|
|
||||||
page.save()
|
|
||||||
i += 1
|
|
||||||
elif ext == 'bmp':
|
|
||||||
page = ComicPage(Comic=book,
|
|
||||||
index=i,
|
|
||||||
page_file_name=f,
|
|
||||||
content_type='image/bmp')
|
|
||||||
page.save()
|
|
||||||
i += 1
|
|
||||||
elif ext == 'gif':
|
|
||||||
page = ComicPage(Comic=book,
|
|
||||||
index=i,
|
|
||||||
page_file_name=f,
|
|
||||||
content_type='image/gif')
|
|
||||||
page.save()
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
return book
|
|
||||||
|
|
||||||
class ComicPage(models.Model):
|
class ComicPage(models.Model):
|
||||||
Comic = models.ForeignKey(ComicBook)
|
Comic = models.ForeignKey(ComicBook)
|
||||||
index = models.IntegerField()
|
index = models.IntegerField()
|
||||||
page_file_name = models.CharField(max_length=100, unique=False)
|
page_file_name = models.CharField(max_length=100, unique=False)
|
||||||
content_type = models.CharField(max_length=30)
|
content_type = models.CharField(max_length=30)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,5 +7,4 @@ urlpatterns = [
|
|||||||
url(r'^(?P<comic_path>[\w]+)/$', views.comic_list, name='comic_list'),
|
url(r'^(?P<comic_path>[\w]+)/$', views.comic_list, name='comic_list'),
|
||||||
url(r'^read/(?P<comic_path>[\w]+)/(?P<page>[0-9]+)/$', views.read_comic, name='read_comic'),
|
url(r'^read/(?P<comic_path>[\w]+)/(?P<page>[0-9]+)/$', views.read_comic, name='read_comic'),
|
||||||
url(r'^read/(?P<comic_path>[\w]+)/(?P<page>[0-9]+)/img$', views.get_image, name='get_image'),
|
url(r'^read/(?P<comic_path>[\w]+)/(?P<page>[0-9]+)/img$', views.get_image, name='get_image'),
|
||||||
|
|
||||||
]
|
]
|
||||||
@@ -10,19 +10,10 @@ class Breadcrumb:
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
class DirFile:
|
|
||||||
def __init__(self):
|
|
||||||
self.name = ''
|
|
||||||
self.isdir = False
|
|
||||||
self.icon = ''
|
|
||||||
self.iscb = False
|
|
||||||
self.location = ''
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
def generate_breadcrumbs(comic_path):
|
def generate_breadcrumbs(comic_path):
|
||||||
output = [Breadcrumb()]
|
output = [Breadcrumb()]
|
||||||
@@ -41,6 +32,18 @@ def generate_breadcrumbs(comic_path):
|
|||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
class DirFile:
|
||||||
|
def __init__(self):
|
||||||
|
self.name = ''
|
||||||
|
self.isdir = False
|
||||||
|
self.icon = ''
|
||||||
|
self.iscb = False
|
||||||
|
self.location = ''
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
def generate_directory(base_dir, comic_path):
|
def generate_directory(base_dir, comic_path):
|
||||||
files = []
|
files = []
|
||||||
for fn in os.listdir(path.join(base_dir, comic_path)):
|
for fn in os.listdir(path.join(base_dir, comic_path)):
|
||||||
|
|||||||
@@ -3,11 +3,12 @@ from django.template import RequestContext
|
|||||||
from django.utils.http import urlsafe_base64_decode
|
from django.utils.http import urlsafe_base64_decode
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
|
||||||
from comic.models import Setting, ComicBook, process_comic_book
|
from comic.models import Setting, ComicBook
|
||||||
from util import generate_breadcrumbs, generate_directory
|
from util import generate_breadcrumbs, generate_directory
|
||||||
|
|
||||||
from os import path
|
from os import path
|
||||||
|
|
||||||
|
|
||||||
def comic_list(request, comic_path=''):
|
def comic_list(request, comic_path=''):
|
||||||
base_dir = Setting.objects.get(name='BASE_DIR').value
|
base_dir = Setting.objects.get(name='BASE_DIR').value
|
||||||
comic_path = urlsafe_base64_decode(comic_path)
|
comic_path = urlsafe_base64_decode(comic_path)
|
||||||
@@ -29,7 +30,7 @@ def read_comic(request, comic_path, page):
|
|||||||
try:
|
try:
|
||||||
book = ComicBook.objects.get(file_name=comic_file_name)
|
book = ComicBook.objects.get(file_name=comic_file_name)
|
||||||
except ComicBook.DoesNotExist:
|
except ComicBook.DoesNotExist:
|
||||||
book = process_comic_book(base_dir, decoded_path, comic_file_name)
|
book = ComicBook.process_comic_book(base_dir, decoded_path, comic_file_name)
|
||||||
book.last_read_page = page
|
book.last_read_page = page
|
||||||
book.save()
|
book.save()
|
||||||
context = RequestContext(request, {
|
context = RequestContext(request, {
|
||||||
@@ -41,7 +42,7 @@ def read_comic(request, comic_path, page):
|
|||||||
return render(request, 'comic/read_comic.html', context)
|
return render(request, 'comic/read_comic.html', context)
|
||||||
|
|
||||||
|
|
||||||
def get_image(request, comic_path, page):
|
def get_image(_, comic_path, page):
|
||||||
base_dir = Setting.objects.get(name='BASE_DIR').value
|
base_dir = Setting.objects.get(name='BASE_DIR').value
|
||||||
page = int(page)
|
page = int(page)
|
||||||
decoded_path = urlsafe_base64_decode(comic_path)
|
decoded_path = urlsafe_base64_decode(comic_path)
|
||||||
@@ -49,7 +50,7 @@ def get_image(request, comic_path, page):
|
|||||||
try:
|
try:
|
||||||
book = ComicBook.objects.get(file_name=comic_file_name)
|
book = ComicBook.objects.get(file_name=comic_file_name)
|
||||||
except ComicBook.DoesNotExist:
|
except ComicBook.DoesNotExist:
|
||||||
book = process_comic_book(base_dir, decoded_path, comic_file_name)
|
book = ComicBook.process_comic_book(base_dir, decoded_path, comic_file_name)
|
||||||
full_path = path.join(base_dir, decoded_path)
|
full_path = path.join(base_dir, decoded_path)
|
||||||
img, content = book.get_image(full_path, page)
|
img, content = book.get_image(full_path, page)
|
||||||
return HttpResponse(img.read(), content_type=content)
|
return HttpResponse(img.read(), content_type=content)
|
||||||
|
|||||||
Reference in New Issue
Block a user