0.0,2
This commit is contained in:
@@ -2,17 +2,18 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Helper\ZhConversion;
|
||||
use App\Models\Author;
|
||||
use App\Models\Chapter;
|
||||
use App\Models\Comic;
|
||||
use App\Models\Image;
|
||||
use App\Remote\CopyManga;
|
||||
use App\Remote\ImageFetcher;
|
||||
use Exception;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Http\Client\ConnectionException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -24,19 +25,42 @@ use Inertia\Response;
|
||||
class ComicController extends Controller
|
||||
{
|
||||
|
||||
public function __construct(private readonly CopyManga $copyManga)
|
||||
public function __construct(private readonly CopyManga $copyManga, private readonly ZhConversion $zhConversion)
|
||||
{
|
||||
}
|
||||
|
||||
public function favourites(Request $request)
|
||||
protected function scToZh(mixed $string): mixed
|
||||
{
|
||||
$favourites = $request->user()->favourites()->with(['authors'])->orderBy('upstream_updated_at', 'desc')->get();
|
||||
if (gettype($string) !== 'string') {
|
||||
$string = serialize($string);
|
||||
return unserialize(str_replace(array_keys($this->zhConversion::ZH_TO_HANT), array_values($this->zhConversion::ZH_TO_HANT), $string));
|
||||
}
|
||||
|
||||
return str_replace(array_keys($this->zhConversion::ZH_TO_HANT), array_values($this->zhConversion::ZH_TO_HANT), $string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show user favourites
|
||||
*
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
*/
|
||||
public function favourites(Request $request): Response
|
||||
{
|
||||
$favourites = $this->scToZh($request->user()->favourites()->with(['authors'])->orderBy('upstream_updated_at', 'desc')->get());
|
||||
|
||||
return Inertia::render('Comic/Favourites', [
|
||||
'favourites' => $favourites,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle user favourites
|
||||
*
|
||||
* @param Request $request
|
||||
* @return JsonResponse
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function postFavourite(Request $request): JsonResponse
|
||||
{
|
||||
try {
|
||||
@@ -68,6 +92,14 @@ class ComicController extends Controller
|
||||
return response()->json($request->user()->favourites()->get(['pathword'])->pluck('pathword'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show image via proxy
|
||||
*
|
||||
* @param Request $request
|
||||
* @param string $url
|
||||
* @return ResponseFactory|Application|IlluminateHttpResponse
|
||||
* @throws ConnectionException
|
||||
*/
|
||||
public function image(Request $request, string $url): ResponseFactory|Application|IlluminateHttpResponse
|
||||
{
|
||||
// TODO: Ref check and make it require auth
|
||||
@@ -121,7 +153,7 @@ class ComicController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Index / Tags for comic listing
|
||||
*
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
@@ -138,11 +170,19 @@ class ComicController extends Controller
|
||||
$this->comicsUpsert($comics);
|
||||
|
||||
return Inertia::render('Comic/Index', [
|
||||
'comics' => $comics,
|
||||
'comics' => $this->scToZh($comics),
|
||||
'offset' => $request->header('offset', 0)
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Author for comic listing
|
||||
*
|
||||
* @param Request $request
|
||||
* @param string $author
|
||||
* @return Response
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function author(Request $request, string $author): Response
|
||||
{
|
||||
$params = [];
|
||||
@@ -152,11 +192,19 @@ class ComicController extends Controller
|
||||
$this->comicsUpsert($comics);
|
||||
|
||||
return Inertia::render('Comic/Index', [
|
||||
'comics' => $comics,
|
||||
'comics' => $this->scToZh($comics),
|
||||
'offset' => $request->header('offset', 0)
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for comic listing
|
||||
*
|
||||
* @param Request $request
|
||||
* @param string $search
|
||||
* @return Response
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function search(Request $request, string $search): Response
|
||||
{
|
||||
$comics = $this->copyManga->search($search, 30, $request->header('offset', 0));
|
||||
@@ -164,13 +212,25 @@ class ComicController extends Controller
|
||||
// Search API is limited, no upsert
|
||||
|
||||
return Inertia::render('Comic/Index', [
|
||||
'comics' => $comics,
|
||||
'comics' => $this->scToZh($comics),
|
||||
'offset' => $request->header('offset', 0)
|
||||
]);
|
||||
}
|
||||
|
||||
public function chapters(Request $request, string $pathword = ''): Response
|
||||
/**
|
||||
* Show comic details and chapters
|
||||
*
|
||||
* @param Request $request
|
||||
* @param string $pathword
|
||||
* @return RedirectResponse|Response
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function chapters(Request $request, string $pathword = ''): RedirectResponse|Response
|
||||
{
|
||||
if ($pathword === 'installHook.js.map') {
|
||||
return to_route('comics.index');
|
||||
}
|
||||
|
||||
$comic = $this->copyManga->comic($pathword);
|
||||
$chapters = $this->copyManga->chapters($pathword, 200, $request->header('offset', 0), [], $request->get('group', 'default'));
|
||||
|
||||
@@ -228,13 +288,22 @@ class ComicController extends Controller
|
||||
->distinct()->select('chapter_uuid')->get()->pluck('chapter_uuid');
|
||||
|
||||
return Inertia::render('Comic/Chapters', [
|
||||
'comic' => $comic,
|
||||
'chapters' => $chapters,
|
||||
'comic' => $this->scToZh($comic),
|
||||
'chapters' => $this->scToZh($chapters),
|
||||
'histories' => $histories,
|
||||
'offset' => $request->header('offset', 0)
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a chapter, showing images
|
||||
*
|
||||
* @param Request $request
|
||||
* @param string $pathword
|
||||
* @param string $uuid
|
||||
* @return Response
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function read(Request $request, string $pathword = '', string $uuid = ''): Response
|
||||
{
|
||||
$comic = $this->copyManga->comic($pathword);
|
||||
@@ -277,11 +346,17 @@ class ComicController extends Controller
|
||||
$request->user()->readingHistories()->attach($chapterObj->id, ['comic_id' => $comicObj->id]);
|
||||
|
||||
return Inertia::render('Comic/Read', [
|
||||
'comic' => $comic,
|
||||
'chapter' => $chapter,
|
||||
'comic' => $this->scToZh($comic),
|
||||
'chapter' => $this->scToZh($chapter),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show user read histories
|
||||
*
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
*/
|
||||
public function histories(Request $request): Response
|
||||
{
|
||||
// Get history
|
||||
@@ -289,10 +364,16 @@ class ComicController extends Controller
|
||||
->select(['reading_histories.id as hid', 'reading_histories.created_at as read_at', 'chapters.comic_id', 'chapters.name'])->paginate(50)->toArray();
|
||||
|
||||
return Inertia::render('Comic/Histories', [
|
||||
'histories' => $histories
|
||||
'histories' => $this->scToZh($histories)
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete user read histories by submitting ids
|
||||
*
|
||||
* @param Request $request
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
public function destroyHistories(Request $request): RedirectResponse
|
||||
{
|
||||
if (!is_array($request->get('ids')) && $request->get('ids') === 'all') {
|
||||
@@ -304,10 +385,17 @@ class ComicController extends Controller
|
||||
return redirect()->route('comics.histories');
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch tags
|
||||
*
|
||||
* @return JsonResponse
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function tags()
|
||||
{
|
||||
// TODO
|
||||
$tags = $this->copyManga->tags();
|
||||
$tags = $this->scToZh($this->copyManga->tags());
|
||||
|
||||
Cache::forever('tags', $tags);
|
||||
|
||||
return response()->json($tags);
|
||||
|
||||
Reference in New Issue
Block a user