From 3be526d42b9cbccb81563dc50d5c10ce7f8f9e27 Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 30 Aug 2023 19:48:56 +0200 Subject: [PATCH 1/2] refactoring: generic refactoring - Add file size limit to settings - Remove unused variables - Add "use" instead of using \ - Align vue files with 4 space indentation --- app/Events/SlipProcessFinished.php | 4 +- app/Events/SlipProcessUpdate.php | 7 +-- app/Events/SlipUploaded.php | 8 --- app/Helpers/AppHelper.php | 9 +-- .../Api/SupportedMimeTypesController.php | 4 +- app/Http/Controllers/JobController.php | 2 - app/Http/Controllers/SlipShowController.php | 1 - app/Http/Requests/SlipTempUploadRequest.php | 4 +- app/Rules/SupportedMimeTypes.php | 3 +- app/Settings/GeneralSettings.php | 3 +- ...3_07_11_194334_create_general_settings.php | 1 + resources/js/Composables/useCanvas.js | 2 +- .../js/Composables/useHumanReadableSize.js | 4 +- resources/js/Composables/useIconType.js | 16 ++--- .../js/Composables/useInfiniteScrolling.js | 54 ++++++++--------- resources/js/Composables/useSlipSockets.js | 42 +++++++------- .../js/Composables/useTimeManipulation.js | 5 +- resources/js/Layouts/InstallLayout.vue | 2 +- resources/js/Layouts/MainLayout.vue | 45 +++++++++----- resources/js/Layouts/SlipLayout.vue | 3 +- resources/js/Pages/Auth/Login.vue | 9 ++- resources/js/Pages/Dashboard.vue | 39 ++++++------- resources/js/Pages/Install/Index.vue | 16 ++--- resources/js/Pages/Slip.vue | 8 +-- resources/js/app.js | 58 +++++++++---------- resources/js/bootstrap.js | 29 +++++----- 26 files changed, 186 insertions(+), 192 deletions(-) diff --git a/app/Events/SlipProcessFinished.php b/app/Events/SlipProcessFinished.php index faddbd5..eca5e0b 100644 --- a/app/Events/SlipProcessFinished.php +++ b/app/Events/SlipProcessFinished.php @@ -19,9 +19,7 @@ class SlipProcessFinished implements ShouldBroadcastNow public function __construct( public Slip $slip, public bool $success = true - ) { - // - } + ) {} /** * Get the channels the event should broadcast on. diff --git a/app/Events/SlipProcessUpdate.php b/app/Events/SlipProcessUpdate.php index 0f422bd..648fd4b 100644 --- a/app/Events/SlipProcessUpdate.php +++ b/app/Events/SlipProcessUpdate.php @@ -4,9 +4,6 @@ use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; -use Illuminate\Broadcasting\PresenceChannel; -use Illuminate\Broadcasting\PrivateChannel; -use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; @@ -22,9 +19,7 @@ public function __construct( public string $token, public string $status, public int $percentage - ) - { - } + ) {} /** * Get the channels the event should broadcast on. diff --git a/app/Events/SlipUploaded.php b/app/Events/SlipUploaded.php index 6862d6e..278de0c 100644 --- a/app/Events/SlipUploaded.php +++ b/app/Events/SlipUploaded.php @@ -12,14 +12,6 @@ class SlipUploaded implements ShouldBroadcastNow { use Dispatchable, InteractsWithSockets, SerializesModels; - /** - * Create a new event instance. - */ - public function __construct() - { - - } - /** * Get the channels the event should broadcast on. * diff --git a/app/Helpers/AppHelper.php b/app/Helpers/AppHelper.php index 79620b8..ded4401 100644 --- a/app/Helpers/AppHelper.php +++ b/app/Helpers/AppHelper.php @@ -10,12 +10,7 @@ class AppHelper { public static function is_installed() { - $usersCount = User::count(); - // If there are no users, redirect to the installation - if ($usersCount === 0) { - return false; - } - return true; + return User::count() > 0; } public static function getVersion() @@ -29,8 +24,6 @@ public static function getLatestVersion() $output = []; exec($command, $output); - $pattern = '/refs\/tags\/(.*)/'; - preg_match('/refs\/tags\/(.*)/', Arr::last($output), $output_array); return $output_array[1]; diff --git a/app/Http/Controllers/Api/SupportedMimeTypesController.php b/app/Http/Controllers/Api/SupportedMimeTypesController.php index 5e85d46..d5a6f16 100644 --- a/app/Http/Controllers/Api/SupportedMimeTypesController.php +++ b/app/Http/Controllers/Api/SupportedMimeTypesController.php @@ -3,12 +3,12 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; -use Illuminate\Http\Request; +use Config; class SupportedMimeTypesController extends Controller { public function __invoke() { - return \Config::get('slipstream.supported_mimetypes'); + return Config::get('slipstream.supported_mimetypes'); } } diff --git a/app/Http/Controllers/JobController.php b/app/Http/Controllers/JobController.php index feafaf9..b03ccb3 100644 --- a/app/Http/Controllers/JobController.php +++ b/app/Http/Controllers/JobController.php @@ -14,11 +14,9 @@ class JobController extends Controller /* TODO: Optimize this */ public function requeue(Slip $slip) { - $failedJobProvider = app(FailedJobProviderInterface::class); $failedJob = $failedJobProvider->find($slip->job_uuid); - Queue::pushRaw($failedJob->payload); $slip->setStatus(SlipStatus::QUEUED); diff --git a/app/Http/Controllers/SlipShowController.php b/app/Http/Controllers/SlipShowController.php index 9cb2d42..e48ba08 100644 --- a/app/Http/Controllers/SlipShowController.php +++ b/app/Http/Controllers/SlipShowController.php @@ -3,7 +3,6 @@ namespace App\Http\Controllers; use App\Models\Slip; -use Illuminate\Http\Request; class SlipShowController extends Controller { diff --git a/app/Http/Requests/SlipTempUploadRequest.php b/app/Http/Requests/SlipTempUploadRequest.php index 25ee4dc..c759751 100644 --- a/app/Http/Requests/SlipTempUploadRequest.php +++ b/app/Http/Requests/SlipTempUploadRequest.php @@ -22,9 +22,9 @@ public function authorize(): bool */ public function rules(): array { - // TODO: File size limit by settings + $max = app(GeneralSettings::class)->file_size_limit; return [ - 'file' => ['file', 'max:999999', new SupportedMimeTypes()] + 'file' => ['file', "max:{$max}", new SupportedMimeTypes()] ]; } } diff --git a/app/Rules/SupportedMimeTypes.php b/app/Rules/SupportedMimeTypes.php index 5908588..f54ddcc 100644 --- a/app/Rules/SupportedMimeTypes.php +++ b/app/Rules/SupportedMimeTypes.php @@ -3,6 +3,7 @@ namespace App\Rules; use Closure; +use Config; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Validation\ValidationException; @@ -15,7 +16,7 @@ class SupportedMimeTypes implements ValidationRule */ public function validate(string $attribute, mixed $value, Closure $fail): void { - $supportedMimeTypes = \Config::get('slipstream.supported_mimetypes'); + $supportedMimeTypes = Config::get('slipstream.supported_mimetypes'); try { $mimeType = $value->getClientMimeType(); diff --git a/app/Settings/GeneralSettings.php b/app/Settings/GeneralSettings.php index 61f7a09..32f176e 100644 --- a/app/Settings/GeneralSettings.php +++ b/app/Settings/GeneralSettings.php @@ -6,11 +6,12 @@ class GeneralSettings extends Settings { - public string $site_name; public bool $guests_can_see_video_info; + public int $file_size_limit; + public array $streaming_bitrates; public static function group(): string diff --git a/database/settings/2023_07_11_194334_create_general_settings.php b/database/settings/2023_07_11_194334_create_general_settings.php index c7fda77..fe1b388 100644 --- a/database/settings/2023_07_11_194334_create_general_settings.php +++ b/database/settings/2023_07_11_194334_create_general_settings.php @@ -7,6 +7,7 @@ public function up(): void { $this->migrator->add('general.site_name', 'Slipstream'); $this->migrator->add('general.guests_can_see_video_info', true); + $this->migrator->add('general.file_size_limit', 999999); $this->migrator->add('general.streaming_bitrates', [ 2160 => 4000, 1440 => 3000, diff --git a/resources/js/Composables/useCanvas.js b/resources/js/Composables/useCanvas.js index 809cf74..9479a20 100644 --- a/resources/js/Composables/useCanvas.js +++ b/resources/js/Composables/useCanvas.js @@ -1,4 +1,4 @@ -import {onMounted, ref} from 'vue' +import { onMounted, ref } from 'vue' export default function useCanvas() { let canvas = ref(null) diff --git a/resources/js/Composables/useHumanReadableSize.js b/resources/js/Composables/useHumanReadableSize.js index 6177112..da10ce5 100644 --- a/resources/js/Composables/useHumanReadableSize.js +++ b/resources/js/Composables/useHumanReadableSize.js @@ -8,7 +8,7 @@ * * @return Formatted string. */ -export const humanReadableSize = (bytes, si=false, dp=1) => { +export const humanReadableSize = (bytes, si = false, dp = 1) => { const thresh = si ? 1000 : 1024 if (Math.abs(bytes) < thresh) { @@ -19,7 +19,7 @@ export const humanReadableSize = (bytes, si=false, dp=1) => { ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'] let u = -1 - const r = 10**dp + const r = 10 ** dp do { bytes /= thresh diff --git a/resources/js/Composables/useIconType.js b/resources/js/Composables/useIconType.js index a61ff8d..3d6088e 100644 --- a/resources/js/Composables/useIconType.js +++ b/resources/js/Composables/useIconType.js @@ -4,14 +4,14 @@ import StreamableType from '~icons/solar/play-stream-bold' const iconType = (type) => { switch (type) { - case 1: - return OriginalType - case 2: - return OptimizedType - case 3: - return StreamableType - default: - return OriginalType + case 1: + return OriginalType + case 2: + return OptimizedType + case 3: + return StreamableType + default: + return OriginalType } } diff --git a/resources/js/Composables/useInfiniteScrolling.js b/resources/js/Composables/useInfiniteScrolling.js index ca861d4..be3936f 100644 --- a/resources/js/Composables/useInfiniteScrolling.js +++ b/resources/js/Composables/useInfiniteScrolling.js @@ -1,39 +1,39 @@ import axios from 'axios' -import {onMounted, onUnmounted, ref} from 'vue' +import { onMounted, onUnmounted, ref } from 'vue' const isFetching = ref(false) const loadMoreIntersect = ref(null) export const useInfiniteScrolling = (slips) => { - const fetchSlips = async () => { - const next_url = slips.value.next_page_url - - if (!next_url) return - - isFetching.value = true - await axios.get(next_url) - .then((response) => { - slips.value.data.push(...response.data.data) - slips.value.next_page_url = response.data.next_page_url - console.log(slips.value.meta) - isFetching.value = false - }) - } - - const observer = new IntersectionObserver(entries => { - entries.forEach(entry => { - if (entry.isIntersecting) { - fetchSlips() - } + const fetchSlips = async () => { + const next_url = slips.value.next_page_url + + if (!next_url) return + + isFetching.value = true + await axios.get(next_url) + .then((response) => { + slips.value.data.push(...response.data.data) + slips.value.next_page_url = response.data.next_page_url + console.log(slips.value.meta) + isFetching.value = false + }) + } + + const observer = new IntersectionObserver(entries => { + entries.forEach(entry => { + if (entry.isIntersecting) { + fetchSlips() + } + }) + }, { + rootMargin: '-100px 0px 0px 0px', }) - }, { - rootMargin: '-100px 0px 0px 0px', - }) - onMounted(() => observer.observe(loadMoreIntersect.value)) + onMounted(() => observer.observe(loadMoreIntersect.value)) - onUnmounted(() => observer.disconnect()) + onUnmounted(() => observer.disconnect()) - return {loadMoreIntersect, isFetching} + return { loadMoreIntersect, isFetching } } diff --git a/resources/js/Composables/useSlipSockets.js b/resources/js/Composables/useSlipSockets.js index ac95d0e..9f402d4 100644 --- a/resources/js/Composables/useSlipSockets.js +++ b/resources/js/Composables/useSlipSockets.js @@ -1,28 +1,28 @@ -import {router} from '@inertiajs/vue3' +import { router } from '@inertiajs/vue3' // TODO: Check if can work without snackbar and add toastr logic in -const useSlipSockets = (snackbar) => { - window.Echo.channel('ss').listen('SlipProcessFinished', (e) => { - router.reload({ - preserveState: true, - only: ['slips'], - onSuccess: (page) => { - //I had to move this to success, so toastr doesn't appear double - if (e.success) { - $snackbar.add({ - type: 'success', - text: 'Slip successfully processed', - }) - } else { - $snackbar.add({ - type: 'error', - text: 'Processing failed for ' + e.slip.title, - }) - } - }, +const useSlipSockets = () => { + window.Echo.channel('ss').listen('SlipProcessFinished', (e) => { + router.reload({ + preserveState: true, + only: ['slips'], + onSuccess: (page) => { + //I had to move this to success, so toastr doesn't appear double + if (e.success) { + $snackbar.add({ + type: 'success', + text: 'Slip successfully processed', + }) + } else { + $snackbar.add({ + type: 'error', + text: 'Processing failed for ' + e.slip.title, + }) + } + }, + }) }) - }) } export default useSlipSockets diff --git a/resources/js/Composables/useTimeManipulation.js b/resources/js/Composables/useTimeManipulation.js index c06a61c..f8c7665 100644 --- a/resources/js/Composables/useTimeManipulation.js +++ b/resources/js/Composables/useTimeManipulation.js @@ -1,7 +1,8 @@ import moment from 'moment/moment.js' -export const formattedDuration = (duration) =>moment.utc(duration*1000).format('mm:ss') +export const formattedDuration = (duration) => moment.utc(duration * 1000).format('mm:ss') export const relativeTime = (time) => { - return moment(time).fromNow()} + return moment(time).fromNow() +} diff --git a/resources/js/Layouts/InstallLayout.vue b/resources/js/Layouts/InstallLayout.vue index ade051a..f32d995 100644 --- a/resources/js/Layouts/InstallLayout.vue +++ b/resources/js/Layouts/InstallLayout.vue @@ -1,6 +1,6 @@