This commit is contained in:
2026-04-18 14:18:52 +02:00
parent 5b4d3d435e
commit f3e5100d5d
126 changed files with 743 additions and 795 deletions

View File

@@ -8,7 +8,7 @@ use Illuminate\Http\Request;
class AlertController extends Controller
{
/**
/**
* Display alert index page
*/
public function index(): \Illuminate\View\View

View File

@@ -15,7 +15,7 @@ class ContactController extends Controller
$contacts = Contact::orderBy('created_at', 'DESC')->get();
return view('admin.contact.index', [
'contacts' => $contacts
'contacts' => $contacts,
]);
}

View File

@@ -3,9 +3,8 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Episode;
use App\Jobs\DiscordReleaseNotification;
use App\Models\Episode;
use App\Services\DownloadService;
use App\Services\EpisodeService;
use App\Services\GalleryService;
@@ -14,14 +13,16 @@ use Illuminate\Http\Request;
class EpisodeController extends Controller
{
protected EpisodeService $episodeService;
protected GalleryService $galleryService;
protected DownloadService $downloadService;
public function __construct(
EpisodeService $episodeService,
GalleryService $galleryService,
EpisodeService $episodeService,
GalleryService $galleryService,
DownloadService $downloadService
) {
) {
$this->episodeService = $episodeService;
$this->galleryService = $galleryService;
$this->downloadService = $downloadService;
@@ -43,7 +44,7 @@ class EpisodeController extends Controller
// Discord Alert
if ($request->has('censored')) {
DiscordReleaseNotification::dispatch($referenceEpisode->title." - ".$episodeNumber, 'release-censored');
DiscordReleaseNotification::dispatch($referenceEpisode->title.' - '.$episodeNumber, 'release-censored');
} else {
DiscordReleaseNotification::dispatch($episode->slug, 'release');
}
@@ -51,7 +52,7 @@ class EpisodeController extends Controller
cache()->flush();
return to_route('hentai.index', [
'title' => $episode->slug
'title' => $episode->slug,
]);
}
@@ -87,7 +88,7 @@ class EpisodeController extends Controller
cache()->flush();
return to_route('hentai.index', [
'title' => $episode->slug
'title' => $episode->slug,
]);
}
}

View File

@@ -3,9 +3,8 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Hentai;
use App\Jobs\DiscordReleaseNotification;
use App\Models\Hentai;
use App\Services\DownloadService;
use App\Services\EpisodeService;
use App\Services\GalleryService;
@@ -14,20 +13,22 @@ use Illuminate\Http\Request;
class ReleaseController extends Controller
{
protected EpisodeService $episodeService;
protected GalleryService $galleryService;
protected DownloadService $downloadService;
public function __construct(
EpisodeService $episodeService,
GalleryService $galleryService,
EpisodeService $episodeService,
GalleryService $galleryService,
DownloadService $downloadService
) {
) {
$this->episodeService = $episodeService;
$this->galleryService = $galleryService;
$this->downloadService = $downloadService;
}
/**
/**
* Display release page
*/
public function index(): \Illuminate\View\View

View File

@@ -3,19 +3,17 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\SiteBackground;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Log;
use Intervention\Image\Laravel\Facades\Image;
use Intervention\Image\Encoders\WebpEncoder;
use Intervention\Image\Laravel\Facades\Image;
class SiteBackgroundController extends Controller
{
/**
/**
* Display admin index page
*/
public function index(): \Illuminate\View\View
@@ -31,12 +29,12 @@ class SiteBackgroundController extends Controller
public function create(Request $request): \Illuminate\Http\RedirectResponse
{
$request->validate([
'images' => 'required',
'date_start' => 'required',
'date_end' => 'required',
'images' => 'required',
'date_start' => 'required',
'date_end' => 'required',
]);
foreach($request->file('images') as $file) {
foreach ($request->file('images') as $file) {
// Initiating a database transaction in case something goes wrong.
DB::beginTransaction();
@@ -44,24 +42,25 @@ class SiteBackgroundController extends Controller
$bg = SiteBackground::create(array_merge(
$request->only(['date_start', 'date_end']),
[
'default' => (bool) $request->input('default', false)
'default' => (bool) $request->input('default', false),
]
));
$resolutions = [1440, 1080, 720, 640];
foreach($resolutions as $resolution) {
foreach ($resolutions as $resolution) {
// /images/background/1-2560p.webp
$targetPath = "/images/background/{$bg->id}-{$resolution}p.webp";
Image::read($file->getRealPath())
->scaleDown(height: $resolution)
->encode(new WebpEncoder())
->encode(new WebpEncoder)
->save(public_path($targetPath));
}
} catch (\Exception $e) {
DB::rollBack();
Log::error($e->getMessage());
return redirect()->back();
}
@@ -77,15 +76,15 @@ class SiteBackgroundController extends Controller
public function update(Request $request): \Illuminate\Http\RedirectResponse
{
$request->validate([
'id' => 'required|exists:site_backgrounds,id',
'date_start' => 'required',
'date_end' => 'required',
'id' => 'required|exists:site_backgrounds,id',
'date_start' => 'required',
'date_end' => 'required',
]);
SiteBackground::where('id', $request->input('id'))->update(array_merge(
$request->only(['date_start', 'date_end']),
[
'default' => (bool) $request->input('default', false)
'default' => (bool) $request->input('default', false),
]
));
@@ -109,16 +108,17 @@ class SiteBackgroundController extends Controller
$resolutions = [1440, 1080, 720, 640];
try {
foreach($resolutions as $resolution) {
foreach ($resolutions as $resolution) {
$targetPath = "/images/background/{$id}-{$resolution}p.webp";
File::delete(public_path($targetPath));
}
} catch (\Exception $e) {
DB::rollBack();
Log::error($e->getMessage());
return redirect()->back();
}
// Committing the database transaction.
DB::commit();

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Episode;
use App\Models\EpisodeSubtitle;
use App\Models\Subtitle;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class SubtitleController extends Controller
@@ -16,8 +16,8 @@ class SubtitleController extends Controller
public function store(Request $request): \Illuminate\Http\RedirectResponse
{
$subtitle = Subtitle::create([
'name' => $request->name,
'slug' => $request->slug,
'name' => $request->name,
'slug' => $request->slug,
]);
// Add to Episode
@@ -37,7 +37,7 @@ class SubtitleController extends Controller
$episode = Episode::where('id', $request->input('episode_id'))->firstOrFail();
// Clear everything
foreach($episode->subtitles as $sub) {
foreach ($episode->subtitles as $sub) {
$sub->delete();
}

View File

@@ -3,8 +3,8 @@
namespace App\Http\Controllers\Admin;
use App\Enums\UserRole;
use App\Models\User;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
@@ -23,10 +23,9 @@ class UserController extends Controller
public function update(Request $request)
{
$validated = $request->validate([
'id' => 'required|exists:users,id',
'action' => 'required',
'id' => 'required|exists:users,id',
'action' => 'required',
]);
$user = User::findOrFail($validated['id']);
@@ -40,7 +39,7 @@ class UserController extends Controller
alert()->success('Unbanned', 'User has been unbanned.');
break;
default:
alert()->error('Error','Invalid action provided');
alert()->error('Error', 'Invalid action provided');
}
return redirect()->back();

View File

@@ -3,10 +3,10 @@
namespace App\Http\Controllers\Api;
use App\Helpers\CacheHelper;
use App\Http\Controllers\Controller;
use App\Models\Episode;
use App\Models\Studios;
use App\Models\Subtitle;
use App\Http\Controllers\Controller;
class AdminApiController extends Controller
{

View File

@@ -2,13 +2,11 @@
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Downloads;
use App\Models\Episode;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use GrantHolle\Altcha\Rules\ValidAltcha;
use Illuminate\Http\Request;
class DownloadApiController extends Controller
{
@@ -18,8 +16,8 @@ class DownloadApiController extends Controller
public function getDownload(Request $request)
{
$validated = $request->validate([
'episode_id' => ['required'],
'captcha' => ['required', new ValidAltcha],
'episode_id' => ['required'],
'captcha' => ['required', new ValidAltcha],
]);
$episode = Episode::where('id', $request->input('episode_id'))
@@ -33,9 +31,9 @@ class DownloadApiController extends Controller
$download->save();
return response()->json([
'message' => 'success',
'download_url' => $download->url,
'download_count' => $oldCount,
'message' => 'success',
'download_url' => $download->url,
'download_count' => $oldCount,
], 200);
}
}

View File

@@ -2,12 +2,11 @@
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Hentai;
use App\Models\PopularMonthly;
use Carbon\Carbon;
use Illuminate\Support\Facades\Cache;
use App\Http\Controllers\Controller;
class HentaiApiController extends Controller
{
@@ -23,13 +22,13 @@ class HentaiApiController extends Controller
->get()
->map(function ($hentai) {
return [
'title' => $hentai->episodes[0]->title,
'title' => $hentai->episodes[0]->title,
'title_jpn' => $hentai->episodes[0]->title_jpn,
'slug' => $hentai->slug,
'episodes' => $hentai->episodes->map(function ($ep) {
'slug' => $hentai->slug,
'episodes' => $hentai->episodes->map(function ($ep) {
return [
'episode' => $ep->episode,
'slug' => $ep->slug,
'episode' => $ep->episode,
'slug' => $ep->slug,
];
}),
];

View File

@@ -3,9 +3,7 @@
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Episode;
use Illuminate\Http\Request;
class StreamApiController extends Controller
@@ -16,24 +14,24 @@ class StreamApiController extends Controller
public function getStream(Request $request)
{
$validated = $request->validate([
'episode_id' => 'required',
'episode_id' => 'required',
]);
$episode = Episode::where('id', $request->input('episode_id'))->firstOrFail();
$subtitles = $episode->subtitles
->mapWithKeys(fn($sub) => [$sub->subtitle->slug => $sub->subtitle->name])
->mapWithKeys(fn ($sub) => [$sub->subtitle->slug => $sub->subtitle->name])
->toArray();
return response()->json([
'title' => $episode->title.' - '.$episode->episode,
'poster' => $episode->gallery()->first()->image_url,
'interpolated' => $episode->interpolated,
'interpolated_uhd' => $episode->interpolated_uhd,
'stream_url' => $episode->dmca_takedown ? 'stuff/dmca' : $episode->url,
'stream_domains' => config('hstream.stream_domain'),
'asia_stream_domains' => config('hstream.asia_stream_domain'),
'extra_subtitles' => $subtitles
'title' => $episode->title.' - '.$episode->episode,
'poster' => $episode->gallery()->first()->image_url,
'interpolated' => $episode->interpolated,
'interpolated_uhd' => $episode->interpolated_uhd,
'stream_url' => $episode->dmca_takedown ? 'stuff/dmca' : $episode->url,
'stream_domains' => config('hstream.stream_domain'),
'asia_stream_domains' => config('hstream.asia_stream_domain'),
'extra_subtitles' => $subtitles,
], 200);
}
}

View File

@@ -4,9 +4,8 @@ namespace App\Http\Controllers\Api;
use App\Helpers\CacheHelper;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Conner\Tagging\Model\Tag;
use Illuminate\Http\Request;
class UserApiController extends Controller
{
@@ -33,11 +32,10 @@ class UserApiController extends Controller
}
}
return response()->json([
'message' => 'success',
'tags' => $tagWhiteList,
'usertags' => $tagBlackList
'message' => 'success',
'tags' => $tagWhiteList,
'usertags' => $tagBlackList,
], 200);
}
}

View File

@@ -3,11 +3,9 @@
namespace App\Http\Controllers\Auth;
use App\Enums\UserRole;
use App\Models\User;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
@@ -32,7 +30,7 @@ class DiscordAuthController extends Controller
$user = User::where('discord_id', $discordUser->id)->first();
if (!$user) {
if (! $user) {
// link by email if it already exists
$user = User::where('email', $discordUser->email)->first();
@@ -77,7 +75,7 @@ class DiscordAuthController extends Controller
private function checkDiscordRoles(User $user): void
{
// Should not ever happen
if (!$user->discord_id) {
if (! $user->discord_id) {
return;
}
@@ -90,6 +88,7 @@ class DiscordAuthController extends Controller
// User is not in the guild
if ($response->status() === 404) {
$user->removeRole(UserRole::SUPPORTER);
return;
}
@@ -109,11 +108,12 @@ class DiscordAuthController extends Controller
$patreonRoles = config('discord.patreon_roles', []);
// If intersect of array is empty, then the user doesn't have the role
$hasSupporterRole = !empty(array_intersect($discordRoles, $patreonRoles));
$hasSupporterRole = ! empty(array_intersect($discordRoles, $patreonRoles));
if (!$hasSupporterRole) {
if (! $hasSupporterRole) {
// Remove role if not found
$user->removeRole(UserRole::SUPPORTER);
return;
}

View File

@@ -16,8 +16,7 @@ class PasswordController extends Controller
public function update(Request $request): RedirectResponse
{
// If user logged in with Discord and has not yet a password, allow to set password
if ($request->user()->discord_id && is_null($request->user()->password))
{
if ($request->user()->discord_id && is_null($request->user()->password)) {
$validated = $request->validateWithBag('updatePassword', [
'password' => ['required', Password::defaults(), 'confirmed'],
]);

View File

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use GrantHolle\Altcha\Rules\ValidAltcha;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
@@ -11,8 +12,6 @@ use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules;
use GrantHolle\Altcha\Rules\ValidAltcha;
class RegisteredUserController extends Controller
{
/**
@@ -26,7 +25,7 @@ class RegisteredUserController extends Controller
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
'altcha' => ['required', new ValidAltcha],
'altcha' => ['required', new ValidAltcha],
]);
$user = User::create([

View File

@@ -3,9 +3,8 @@
namespace App\Http\Controllers;
use App\Models\Contact;
use Illuminate\Http\Request;
use GrantHolle\Altcha\Rules\ValidAltcha;
use Illuminate\Http\Request;
class ContactController extends Controller
{
@@ -23,14 +22,14 @@ class ContactController extends Controller
public function store(Request $request): \Illuminate\Http\RedirectResponse
{
$validated = $request->validate([
'name' => 'required|max:30',
'email' => 'required|max:50',
'name' => 'required|max:30',
'email' => 'required|max:50',
'message' => 'required|max:1000',
'subject' => 'required|max:50',
'altcha' => ['required', new ValidAltcha],
'altcha' => ['required', new ValidAltcha],
]);
$contact = new Contact();
$contact = new Contact;
$contact->name = $request->input('name');
$contact->email = $request->input('email');
$contact->message = $request->input('message');

View File

@@ -2,11 +2,10 @@
namespace App\Http\Controllers;
use App\Models\Episode;
use App\Helpers\CacheHelper;
use App\Models\Episode;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cookie;
class HomeController extends Controller
{
@@ -19,28 +18,27 @@ class HomeController extends Controller
$guestString = $guest ? 'guest' : 'authed';
$mostLikes = \cache()->remember('mostLikes'.$guestString, 300, fn () =>
Episode::with('gallery')
->when($guest, fn ($query) => $query->withoutTags(['loli', 'shota']))
->whereIn('id', function($query) {
$mostLikesIds = CacheHelper::getMostLikes()->pluck('markable_id')->toArray();
$query->selectRaw('id')
->from('episodes')
->whereIn('id', $mostLikesIds)
->orderByRaw("FIELD(id, " . implode(',', $mostLikesIds) . ")");
})
->get()
$mostLikes = \cache()->remember('mostLikes'.$guestString, 300, fn () => Episode::with('gallery')
->when($guest, fn ($query) => $query->withoutTags(['loli', 'shota']))
->whereIn('id', function ($query) {
$mostLikesIds = CacheHelper::getMostLikes()->pluck('markable_id')->toArray();
$query->selectRaw('id')
->from('episodes')
->whereIn('id', $mostLikesIds)
->orderByRaw('FIELD(id, '.implode(',', $mostLikesIds).')');
})
->get()
);
return view('home.index', [
'recentlyReleased' => CacheHelper::getRecentlyReleased($guest),
'recentlyUploaded' => CacheHelper::getRecentlyUploaded($guest),
'popularAllTime' => CacheHelper::getPopularAllTime($guest),
'popularMonthly' => CacheHelper::getPopularMonthly(),
'popularWeekly' => CacheHelper::getPopularWeekly(),
'popularDaily' => CacheHelper::getPopularDaily(),
'mostLikes' => $mostLikes,
'latestComments' => CacheHelper::getLatestComments(),
'recentlyReleased' => CacheHelper::getRecentlyReleased($guest),
'recentlyUploaded' => CacheHelper::getRecentlyUploaded($guest),
'popularAllTime' => CacheHelper::getPopularAllTime($guest),
'popularMonthly' => CacheHelper::getPopularMonthly(),
'popularWeekly' => CacheHelper::getPopularWeekly(),
'popularDaily' => CacheHelper::getPopularDaily(),
'mostLikes' => $mostLikes,
'latestComments' => CacheHelper::getLatestComments(),
]);
}
@@ -100,9 +98,9 @@ class HomeController extends Controller
public function stats(): \Illuminate\View\View
{
return view('home.stats', [
'viewCount' => CacheHelper::getTotalViewCount(),
'episodeCount' => CacheHelper::getTotalEpisodeCount(),
'hentaiCount' => CacheHelper::getTotalHentaiCount(),
'viewCount' => CacheHelper::getTotalViewCount(),
'episodeCount' => CacheHelper::getTotalEpisodeCount(),
'hentaiCount' => CacheHelper::getTotalHentaiCount(),
]);
}

View File

@@ -17,7 +17,7 @@ class MatrixController extends Controller
['name' => '🏠 General', 'description' => 'Our main chat.', 'alias' => 'https://matrix.to/#/#general:hstream.moe'],
['name' => '📡 Releases', 'description' => 'Were we @everyone for new releases.', 'alias' => 'https://matrix.to/#/#releases:hstream.moe'],
['name' => '👗 NSFW 2D', 'description' => 'Channel for R18 2D Media.', 'alias' => 'https://matrix.to/#/#nsfw:hstream.moe'],
['name' => '👗 NSFW IRL', 'description' => 'Channel for R18 IRL Media.', 'alias' => 'https://matrix.to/#/#nsfw-irl:hstream.moe']
['name' => '👗 NSFW IRL', 'description' => 'Channel for R18 IRL Media.', 'alias' => 'https://matrix.to/#/#nsfw-irl:hstream.moe'],
];
return view('matrix.index', [
@@ -49,7 +49,7 @@ class MatrixController extends Controller
} catch (\Exception $e) {
return back()
->withErrors([
'username' => $e->getMessage()
'username' => $e->getMessage(),
])
->withInput();
}

View File

@@ -3,7 +3,6 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class NotificationController extends Controller
{
@@ -13,7 +12,7 @@ class NotificationController extends Controller
public function index(Request $request): \Illuminate\View\View
{
return view('profile.notifications', [
'user' => $request->user(),
'user' => $request->user(),
'notifications' => $request->user()->unreadNotifications,
]);
}
@@ -24,7 +23,7 @@ class NotificationController extends Controller
public function delete(Request $request): \Illuminate\Http\RedirectResponse
{
$request->validate([
'id' => 'required|exists:notifications,id',
'id' => 'required|exists:notifications,id',
]);
$notification = $request->user()

View File

@@ -7,7 +7,6 @@ use App\Models\Playlist;
use App\Models\PlaylistEpisode;
use App\Services\PlaylistService;
use Illuminate\Http\Request;
use RealRashid\SweetAlert\Facades\Alert;
class PlaylistController extends Controller
{
@@ -31,7 +30,7 @@ class PlaylistController extends Controller
*/
public function show($playlist_id): \Illuminate\View\View
{
if (!is_numeric($playlist_id)) {
if (! is_numeric($playlist_id)) {
abort(404);
}
@@ -42,18 +41,17 @@ class PlaylistController extends Controller
]);
}
/**
* Display the user's playlists page.
*/
public function playlists(Request $request): \Illuminate\View\View
{
$title = 'Delete Playlist!';
$text = "Are you sure you want to delete?";
$text = 'Are you sure you want to delete?';
confirmDelete($title, $text);
return view('profile.playlists', [
'user' => $request->user(),
'user' => $request->user(),
'playlists' => $request->user()->playlists,
]);
}
@@ -63,7 +61,7 @@ class PlaylistController extends Controller
*/
public function showPlaylist(Request $request, $playlist_id): \Illuminate\View\View
{
if (!is_numeric($playlist_id)) {
if (! is_numeric($playlist_id)) {
abort(404);
}
@@ -82,10 +80,10 @@ class PlaylistController extends Controller
public function createPlaylist(Request $request): \Illuminate\Http\RedirectResponse
{
$validated = $request->validate([
'name' => 'required|max:30',
'name' => 'required|max:30',
]);
$playlist = new Playlist();
$playlist = new Playlist;
$playlist->user_id = $request->user()->id;
$playlist->name = $request->input('name');
$playlist->is_private = $request->input('visiblity') === 'private';
@@ -99,7 +97,7 @@ class PlaylistController extends Controller
*/
public function deletePlaylist(Request $request, $playlist_id): \Illuminate\Http\RedirectResponse
{
if (!is_numeric($playlist_id)) {
if (! is_numeric($playlist_id)) {
abort(404);
}
@@ -119,10 +117,10 @@ class PlaylistController extends Controller
*/
public function deleteEpisodeFromPlaylist(Request $request): \Illuminate\Http\JsonResponse
{
if (!is_numeric($request->input('playlist')) || !is_numeric($request->input('episode'))) {
if (! is_numeric($request->input('playlist')) || ! is_numeric($request->input('episode'))) {
return response()->json([
'message' => 'not-numeric',
'user' => $request->user(),
'user' => $request->user(),
], 404);
}
@@ -133,12 +131,12 @@ class PlaylistController extends Controller
PlaylistEpisode::where('playlist_id', $playlist->id)
->where('episode_id', (int) $request->input('episode'))
->delete();
$this->playlistService->reorderPositions($playlist);
return response()->json([
'message' => 'success',
'user' => $request->user(),
'user' => $request->user(),
], 200);
}
@@ -150,8 +148,8 @@ class PlaylistController extends Controller
$user = $request->user();
$validated = $request->validate([
'playlist' => 'required|max:30',
'episode_id' => 'required'
'playlist' => 'required|max:30',
'episode_id' => 'required',
]);
$playlist = Playlist::where('user_id', $user->id)->where('id', $request->input('playlist'))->firstOrFail();
@@ -161,7 +159,7 @@ class PlaylistController extends Controller
$exists = PlaylistEpisode::where('playlist_id', $playlist->id)->where('episode_id', $episode->id)->exists();
if ($exists) {
return response()->json([
'message' => 'already-added'
'message' => 'already-added',
], 200);
}
@@ -175,7 +173,7 @@ class PlaylistController extends Controller
]);
return response()->json([
'message' => 'success'
'message' => 'success',
], 200);
}
@@ -185,18 +183,18 @@ class PlaylistController extends Controller
public function createPlaylistApi(Request $request): \Illuminate\Http\JsonResponse
{
$validated = $request->validate([
'name' => 'required|max:30',
'name' => 'required|max:30',
]);
$playlist = new Playlist();
$playlist = new Playlist;
$playlist->user_id = $request->user()->id;
$playlist->name = $request->input('name');
$playlist->is_private = $request->input('visiblity') === 'private';
$playlist->save();
return response()->json([
'message' => 'success',
'playlist_id' => $playlist->id
'message' => 'success',
'playlist_id' => $playlist->id,
], 200);
}
}

View File

@@ -2,22 +2,20 @@
namespace App\Http\Controllers;
use App\Http\Requests\ProfileUpdateRequest;
use App\Models\Episode;
use App\Models\User;
use App\Http\Requests\ProfileUpdateRequest;
use Conner\Tagging\Model\Tag;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Illuminate\View\View;
use Intervention\Image\Laravel\Facades\Image;
use Conner\Tagging\Model\Tag;
class ProfileController extends Controller
{
/**
@@ -38,8 +36,8 @@ class ProfileController extends Controller
$example = Episode::where('title', 'Succubus Yondara Gibo ga Kita!?')->first();
return view('profile.settings', [
'user' => $request->user(),
'example' => $example,
'user' => $request->user(),
'example' => $example,
]);
}
@@ -92,7 +90,7 @@ class ProfileController extends Controller
public function likes(Request $request): View
{
return view('profile.likes', [
'user' => $request->user(),
'user' => $request->user(),
]);
}
@@ -118,9 +116,10 @@ class ProfileController extends Controller
$user = $request->user();
$tags = json_decode($request->input('tags'));
if (!$tags) {
if (! $tags) {
$user->tag_blacklist = null;
$user->save();
return Redirect::route('profile.settings')->with('status', 'blacklist-updated');
}
@@ -144,7 +143,7 @@ class ProfileController extends Controller
$user = $request->user();
// Verify password if user has password
if (!is_null($user->password)) {
if (! is_null($user->password)) {
$request->validateWithBag('userDeletion', [
'password' => ['required', 'current_password'],
]);
@@ -177,8 +176,8 @@ class ProfileController extends Controller
protected function storeAvatar(\Illuminate\Http\UploadedFile $file, User $user): void
{
// Create Folder for Image Upload
if (! Storage::disk('public')->exists("/images/avatars")) {
Storage::disk('public')->makeDirectory("/images/avatars");
if (! Storage::disk('public')->exists('/images/avatars')) {
Storage::disk('public')->makeDirectory('/images/avatars');
}
// Delete old avatar if it exists
@@ -196,5 +195,4 @@ class ProfileController extends Controller
$user->avatar = $filename;
}
}

View File

@@ -2,20 +2,18 @@
namespace App\Http\Controllers;
use App\Helpers\CacheHelper;
use App\Models\Episode;
use App\Models\Gallery;
use App\Models\Hentai;
use App\Models\Playlist;
use App\Models\PlaylistEpisode;
use App\Models\Watched;
use App\Helpers\CacheHelper;
use hisorange\BrowserDetect\Facade as Browser;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use hisorange\BrowserDetect\Facade as Browser;
class StreamController extends Controller
{
/**
@@ -32,12 +30,11 @@ class StreamController extends Controller
}
return view('series.index', [
'hentai' => $hentai,
'hentai' => $hentai,
'popularWeekly' => CacheHelper::getPopularWeekly(),
]);
}
$episode = Episode::where('slug', $title)->firstOrFail();
$gallery = Gallery::where('episode_id', $episode->id)->get();
$moreEpisodes = Episode::with(['gallery', 'studio'])->where('hentai_id', $episode->hentai_id)->whereNot('id', $episode->id)->get();
@@ -54,15 +51,15 @@ class StreamController extends Controller
// Increment Popular Count
$episode->incrementPopularCount();
if (!Auth::guest()) {
if (! Auth::guest()) {
$user = Auth::user();
// Add to user watched list
$time = Carbon::now()->subHour(1);
$alreadyWatched = Watched::where('user_id', $user->id)->where('episode_id', $episode->id)->where('created_at', '>=', $time)->exists();
if (!$alreadyWatched) {
if (! $alreadyWatched) {
Watched::create(['user_id' => $user->id, 'episode_id' => $episode->id]);
cache()->forget('user' . $user->id . 'watched' . $episode->id);
cache()->forget('user'.$user->id.'watched'.$episode->id);
}
}
@@ -81,29 +78,29 @@ class StreamController extends Controller
$playlistEpisodes = $playlist->episodes()->orderBy('position')->get();
// Check if authorized
if ($playlist->is_private && (Auth::guest() || (!Auth::guest() && Auth::user()->id != $playlist->user_id))) {
if ($playlist->is_private && (Auth::guest() || (! Auth::guest() && Auth::user()->id != $playlist->user_id))) {
abort(404);
}
return view('stream.index', [
'episode' => $episode,
'moreEpisodes' => $moreEpisodes,
'studioEpisodes' => $studioEpisodes,
'gallery' => $gallery,
'playlist' => $playlist,
'playlistEpisodes' => $playlistEpisodes,
'popularWeekly' => CacheHelper::getPopularWeekly(),
'isMobile' => $isMobile,
'episode' => $episode,
'moreEpisodes' => $moreEpisodes,
'studioEpisodes' => $studioEpisodes,
'gallery' => $gallery,
'playlist' => $playlist,
'playlistEpisodes' => $playlistEpisodes,
'popularWeekly' => CacheHelper::getPopularWeekly(),
'isMobile' => $isMobile,
]);
}
return view('stream.index', [
'episode' => $episode,
'moreEpisodes' => $moreEpisodes,
'studioEpisodes' => $studioEpisodes,
'gallery' => $gallery,
'popularWeekly' => CacheHelper::getPopularWeekly(),
'isMobile' => $isMobile,
'episode' => $episode,
'moreEpisodes' => $moreEpisodes,
'studioEpisodes' => $studioEpisodes,
'gallery' => $gallery,
'popularWeekly' => CacheHelper::getPopularWeekly(),
'isMobile' => $isMobile,
]);
}
}