|
|
|
import json, environ, requests, os, subprocess |
|
import asyncio, uuid |
|
|
|
from django.http import HttpResponse, JsonResponse, HttpResponseBadRequest |
|
from django_ratelimit.decorators import ratelimit |
|
from django.views.decorators.csrf import csrf_exempt |
|
from asgiref.sync import sync_to_async |
|
|
|
from backend.module import web_scrap |
|
from backend.module.utils import manage_image |
|
from backend.models.model_cache import SocketRequestChapterQueueCache, ComicStorageCache |
|
from core.settings import BASE_DIR |
|
from backend.module.utils import cloudflare_turnstile |
|
|
|
|
|
env = environ.Env() |
|
|
|
|
|
@csrf_exempt |
|
@ratelimit(key='ip', rate='60/m') |
|
def request_chapter(request): |
|
try: |
|
if request.method != "POST": return HttpResponseBadRequest('Allowed POST request only!', status=400) |
|
token = request.META.get('HTTP_X_CLOUDFLARE_TURNSTILE_TOKEN') |
|
if not cloudflare_turnstile.check(token): return HttpResponseBadRequest('Cloudflare turnstile token not existed or expired!', status=511) |
|
|
|
payload = json.loads(request.body) |
|
source = payload.get("source") |
|
comic_id = payload.get("comic_id") |
|
chapter_id = payload.get("chapter_id") |
|
chapter_idx = payload.get("chapter_idx") |
|
socket_id = payload.get("socket_id") |
|
channel_name = payload.get("channel_name") |
|
options = payload.get("options") or {} |
|
|
|
options["translate"]["target"] = options.get("translate").get("target") if options.get("translate").get("state") else "" |
|
query_count = ComicStorageCache.objects.filter( |
|
source=source, |
|
comic_id=comic_id, |
|
chapter_id=chapter_id, |
|
chapter_idx=chapter_idx, |
|
colorize=options.get("colorize"), |
|
translate=options.get("translate").get("state"), |
|
target_lang = options.get("translate").get("target") |
|
).count() |
|
|
|
if query_count: return JsonResponse({"status":"ready"}) |
|
else: |
|
SocketRequestChapterQueueCache( |
|
socket_id=socket_id, |
|
channel_name=channel_name, |
|
source=source, |
|
comic_id=comic_id, |
|
chapter_id=chapter_id, |
|
chapter_idx=chapter_idx, |
|
options=options |
|
).save() |
|
return JsonResponse({"status":"queue"}) |
|
except Exception as e: |
|
print(e) |
|
return HttpResponseBadRequest('Internal Error.', status=500) |
|
|
|
|
|
@csrf_exempt |
|
@ratelimit(key='ip', rate='60/m') |
|
def request_info(request): |
|
try: |
|
if request.method != "POST": return HttpResponseBadRequest('Allowed POST request only!', status=400) |
|
token = request.META.get('HTTP_X_CLOUDFLARE_TURNSTILE_TOKEN') |
|
if not cloudflare_turnstile.check(token): return HttpResponseBadRequest('Cloudflare turnstile token not existed or expired!', status=511) |
|
|
|
payload = json.loads(request.body) |
|
socket_id = payload.get("socket_id") |
|
source = payload.get("source") |
|
comic_id = payload.get("comic_id") |
|
chapter_requested = payload.get("chapter_requested") |
|
|
|
|
|
result_request = {} |
|
for chapter in chapter_requested: |
|
options = chapter.get("options") |
|
query_count = SocketRequestChapterQueueCache.objects.filter(socket_id=socket_id, source=source, comic_id=comic_id, chapter_id=chapter.get("chapter_id")).count() |
|
if query_count: result_request[chapter.get("chapter_id")] = {"state":"queue","chapter_idx":chapter.get("chapter_idx"),"options":options} |
|
else: |
|
query_result = ComicStorageCache.objects.filter( |
|
source=source, |
|
comic_id=comic_id, |
|
chapter_id=chapter.get("chapter_id"), |
|
chapter_idx=chapter.get("chapter_idx"), |
|
colorize=options.get("colorize"), |
|
translate=options.get("translate").get("state"), |
|
target_lang = options.get("translate").get("target") if options.get("translate").get("state") else "" |
|
).first() |
|
|
|
if query_result: |
|
file_path = query_result.file_path |
|
if os.path.exists(file_path): |
|
result_request[chapter.get("chapter_id")] = {"state":"ready","chapter_idx":chapter.get("chapter_idx"),"options":options} |
|
else: |
|
ComicStorageCache.objects.filter(id=query_result.id).delete() |
|
result_request[chapter.get("chapter_id")] = {"state":"unkown","chapter_idx":chapter.get("chapter_idx"),"options":options} |
|
else: |
|
result_request[chapter.get("chapter_id")] = {"state":"unkown","chapter_idx":chapter.get("chapter_idx"),"options":options} |
|
return JsonResponse(result_request) |
|
|
|
except Exception as e: |
|
print(e) |
|
return HttpResponseBadRequest('Internal Error.', status=500) |