Compare commits
5 Commits
3bb6af73c3
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5b4d3d435e | |||
| 564f816fb9 | |||
| 3709e378c3 | |||
| 4a45dae593 | |||
| 2b0448d517 |
14
README.md
14
README.md
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
## hstream Website
|
## hstream Website
|
||||||
|
|
||||||
### Install
|
### Install (Ubuntu)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install PHP
|
# Install PHP
|
||||||
sudo add-apt-repository ppa:ondrej/php
|
sudo add-apt-repository ppa:ondrej/php
|
||||||
apt update && apt upgrade
|
apt update && apt upgrade
|
||||||
apt install php8.3 php8.3-xml php8.3-mysql php8.3-gd php8.3-zip php8.3-curl php8.3-mbstring
|
apt install php8.4 php8.4-xml php8.4-mysql php8.4-gd php8.4-zip php8.4-curl php8.4-mbstring
|
||||||
|
|
||||||
# Install NodeJS
|
# Install NodeJS
|
||||||
curl -sL https://deb.nodesource.com/setup_20.x -o /tmp/nodesource_setup.sh
|
curl -sL https://deb.nodesource.com/setup_20.x -o /tmp/nodesource_setup.sh
|
||||||
@@ -22,7 +22,7 @@ mv composer.phar composer
|
|||||||
|
|
||||||
# Install NGINX (skip for local dev)
|
# Install NGINX (skip for local dev)
|
||||||
apt install nginx
|
apt install nginx
|
||||||
apt install php8.3-fpm
|
apt install php8.4-fpm
|
||||||
|
|
||||||
# Install MariaDB
|
# Install MariaDB
|
||||||
apt install mariadb-server
|
apt install mariadb-server
|
||||||
@@ -54,7 +54,7 @@ nano /etc/supervisor/conf.d/laravel-queue.conf :
|
|||||||
|
|
||||||
[program:laravel-queue]
|
[program:laravel-queue]
|
||||||
process_name=%(program_name)s_%(process_num)02d
|
process_name=%(program_name)s_%(process_num)02d
|
||||||
command=php /var/www/hstream/artisan queue:work --queue=default --sleep=3 --tries=3 --max-time=3600
|
command=php84 /var/www/hstream/artisan queue:work --queue=default --sleep=3 --tries=3 --max-time=3600
|
||||||
autostart=true
|
autostart=true
|
||||||
autorestart=true
|
autorestart=true
|
||||||
stopasgroup=true
|
stopasgroup=true
|
||||||
@@ -83,9 +83,9 @@ zip -r hstream_2023_11_30.zip hstream/
|
|||||||
|
|
||||||
### Update
|
### Update
|
||||||
```bash
|
```bash
|
||||||
php artisan down
|
php84 artisan down
|
||||||
git pull
|
git pull
|
||||||
npm run build
|
npm run build
|
||||||
php artisan view:clear && php artisan optimize:clear && php artisan cache:clear && service php8.4-fpm restart
|
php84 artisan view:clear && php84 artisan optimize:clear && php84 artisan cache:clear && service php8.4-fpm restart
|
||||||
php artisan up
|
php84 artisan up
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -15,7 +15,9 @@ class MatrixController extends Controller
|
|||||||
{
|
{
|
||||||
$rooms = [
|
$rooms = [
|
||||||
['name' => '🏠 General', 'description' => 'Our main chat.', 'alias' => 'https://matrix.to/#/#general:hstream.moe'],
|
['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' => '📡 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']
|
||||||
];
|
];
|
||||||
|
|
||||||
return view('matrix.index', [
|
return view('matrix.index', [
|
||||||
|
|||||||
@@ -21,6 +21,15 @@ class DownloadButton extends Component
|
|||||||
|
|
||||||
public $background = 'bg-rose-600';
|
public $background = 'bg-rose-600';
|
||||||
|
|
||||||
|
public $fileExtension = 'HEVC';
|
||||||
|
|
||||||
|
public function mount()
|
||||||
|
{
|
||||||
|
if (str_contains($this->downloadUrl, 'AV1')) {
|
||||||
|
$this->fileExtension = 'AV1';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function clicked($downloadId)
|
public function clicked($downloadId)
|
||||||
{
|
{
|
||||||
$download = Downloads::find($downloadId);
|
$download = Downloads::find($downloadId);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
@else
|
@else
|
||||||
<p class="text-lg">Episode {{ $episodeNumber }}</p>
|
<p class="text-lg">Episode {{ $episodeNumber }}</p>
|
||||||
@endif
|
@endif
|
||||||
<p class="text-xs">HEVC MKV {{ $fileSize ?? '' }}</p>
|
<p class="text-xs">{{ $fileExtension }} MKV {{ $fileSize ?? '' }}</p>
|
||||||
<p class="text-xs" id="count-{{ $downloadId }}">Downloaded {{ $downloadCount }} times</p>
|
<p class="text-xs" id="count-{{ $downloadId }}">Downloaded {{ $downloadCount }} times</p>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -235,6 +235,11 @@
|
|||||||
'/' .
|
'/' .
|
||||||
$expire;
|
$expire;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$fileExtension = "HEVC";
|
||||||
|
if (str_contains($download->url, 'AV1')) {
|
||||||
|
$fileExtension = "AV1";
|
||||||
|
}
|
||||||
@endphp
|
@endphp
|
||||||
<a href="{{ $downloadURL }}" wire:click="clicked({{ $download->id }})"
|
<a href="{{ $downloadURL }}" wire:click="clicked({{ $download->id }})"
|
||||||
download>
|
download>
|
||||||
@@ -249,7 +254,7 @@
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col text-center w-full">
|
<div class="flex flex-col text-center w-full">
|
||||||
<p class="text-xs">HEVC MKV</p>
|
<p class="text-xs">{{ $fileExtension }} MKV</p>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
<a href="{{ $dldomains[array_rand($dldomains)] }}/{{ $hdl->getDownloadByType('FHD')->url }}">
|
<a href="{{ $dldomains[array_rand($dldomains)] }}/{{ $hdl->getDownloadByType('FHD')->url }}">
|
||||||
|
@php
|
||||||
|
$fileExtension = "HEVC";
|
||||||
|
if (str_contains($hdl->getDownloadByType('FHD')->url, 'AV1')) {
|
||||||
|
$fileExtension = "AV1";
|
||||||
|
}
|
||||||
|
@endphp
|
||||||
<button class="group rounded-md shadow bg-rose-600 text-white cursor-pointer flex justify-between items-center overflow-hidden transition-all hover:glow m-1 w-[150px]">
|
<button class="group rounded-md shadow bg-rose-600 text-white cursor-pointer flex justify-between items-center overflow-hidden transition-all hover:glow m-1 w-[150px]">
|
||||||
<div class="relative w-12 h-12 bg-white bg-opacity-20 text-white flex justify-center items-center transition-all"><svg id="arrow" class="w-4 h-4 transition-all group-hover:-translate-y-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
<div class="relative w-12 h-12 bg-white bg-opacity-20 text-white flex justify-center items-center transition-all"><svg id="arrow" class="w-4 h-4 transition-all group-hover:-translate-y-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path>
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path>
|
||||||
@@ -7,7 +13,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="w-32 text-center">
|
<div class="w-32 text-center">
|
||||||
<p class="px-5 text-sm row-span-2">Episode {{ $hdl->episode }}</p>
|
<p class="px-5 text-sm row-span-2">Episode {{ $hdl->episode }}</p>
|
||||||
<p class="px-5 text-xs">HEVC MKV</p>
|
<p class="px-5 text-xs">{{ $fileExtension }} MKV</p>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -47,7 +47,8 @@
|
|||||||
<ul class="list-disc pl-6 text-gray-700 dark:text-neutral-300 space-y-2 mb-6">
|
<ul class="list-disc pl-6 text-gray-700 dark:text-neutral-300 space-y-2 mb-6">
|
||||||
<li>Available to users registered for more than 1 month</li>
|
<li>Available to users registered for more than 1 month</li>
|
||||||
<li>Fully federated with the entire Matrix network</li>
|
<li>Fully federated with the entire Matrix network</li>
|
||||||
<li>No obligation to use it — it’s optional</li>
|
<li>No obligation to use it - it’s optional</li>
|
||||||
|
<li>Anonymized IP addresses to protect your privacy</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@auth
|
@auth
|
||||||
@@ -74,7 +75,7 @@
|
|||||||
<li>Or using our web client via <strong><a href="https://element.hstream.moe/" target="_blank" class="underline">Element Web</a></strong></li>
|
<li>Or using our web client via <strong><a href="https://element.hstream.moe/" target="_blank" class="underline">Element Web</a></strong></li>
|
||||||
</ul>
|
</ul>
|
||||||
<p class="text-green-700 dark:text-green-400 mb-4">
|
<p class="text-green-700 dark:text-green-400 mb-4">
|
||||||
Simply sign in with your new username and password to get started.
|
Simply sign in with your new username (<code>{{ $user->matrix_id }}</code>) and password to get started.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
@@ -82,10 +83,16 @@
|
|||||||
<h3 class="font-semibold text-green-800 dark:text-green-300 mb-2">
|
<h3 class="font-semibold text-green-800 dark:text-green-300 mb-2">
|
||||||
🎉 You are eligible!
|
🎉 You are eligible!
|
||||||
</h3>
|
</h3>
|
||||||
<p class="text-green-700 dark:text-green-400 mb-4">
|
<p class="text-green-700 dark:text-green-400 mb-2">
|
||||||
Your account is older than one month. You can create your account now.
|
Your account is older than one month. You can create your account now.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<div class="p-4 bg-red-100 dark:bg-red-950 border border-red-100 dark:border-red-700 rounded-lg mb-4">
|
||||||
|
<p class="text-red-500 text-sm font-bold">
|
||||||
|
Important: Save your password! We don't have a password reset function yet!
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
@include('matrix.register')
|
@include('matrix.register')
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
@@ -123,7 +130,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Room List -->
|
<!-- Room List -->
|
||||||
<div class="bg-white dark:bg-neutral-800 rounded-2xl shadow-sm p-8">
|
<div class="bg-white dark:bg-neutral-800 rounded-2xl shadow-sm p-8 mb-8">
|
||||||
<h2 class="text-2xl dark:text-white font-semibold mb-6">Our Matrix Rooms</h2>
|
<h2 class="text-2xl dark:text-white font-semibold mb-6">Our Matrix Rooms</h2>
|
||||||
|
|
||||||
<div class="grid md:grid-cols-2 gap-6">
|
<div class="grid md:grid-cols-2 gap-6">
|
||||||
@@ -144,6 +151,19 @@
|
|||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Guide -->
|
||||||
|
<div class="bg-white dark:bg-neutral-800 rounded-2xl shadow-sm p-8">
|
||||||
|
<h2 class="text-2xl dark:text-white font-semibold mb-4">Matrix Guide</h2>
|
||||||
|
|
||||||
|
<p class="text-gray-700 dark:text-neutral-300 mb-4">
|
||||||
|
Matrix and Element can be overwhelming for new users, so here is a guide from Element:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul class="list-disc pl-6 text-gray-700 dark:text-neutral-300 space-y-2 mb-6">
|
||||||
|
<li>Element Guide: <a class="font-bold text-green-800 dark:text-green-300 underline" referrerPolicy="no-referrer" href="https://static.element.io/pdfs/element-user-guide.pdf" target="_blank">element-user-guide.pdf</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</x-app-layout>
|
</x-app-layout>
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
<div class="flex items-center justify-end mt-4">
|
<div class="flex items-center justify-end mt-4">
|
||||||
<x-primary-button class="ms-4">
|
<x-primary-button class="ms-4">
|
||||||
{{ __('Create Matrix User') }}
|
{{ __('Create Matrix Account') }}
|
||||||
</x-primary-button>
|
</x-primary-button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -52,7 +52,19 @@
|
|||||||
<br>
|
<br>
|
||||||
@php $download = $episode->getDownloadByType('UHD'); @endphp
|
@php $download = $episode->getDownloadByType('UHD'); @endphp
|
||||||
@isset($download)
|
@isset($download)
|
||||||
@if (!Auth::user()->hasRole(\App\Enums\UserRole::SUPPORTER))
|
@if (Auth::user()->hasRole(\App\Enums\UserRole::SUPPORTER) || Auth::user()->hasRole(\App\Enums\UserRole::ADMINISTRATOR))
|
||||||
|
<p class="font-bold text-gray-800 dark:text-gray-200">
|
||||||
|
<i class="fa-solid fa-lock-open pr-[4px] text-green-400"></i> 4k
|
||||||
|
</p>
|
||||||
|
|
||||||
|
@php $dlpdomains = config('hstream.download_domain_4k'); @endphp
|
||||||
|
|
||||||
|
<div class="flex flex-wrap justify-around">
|
||||||
|
@foreach ($dlList as $hdl)
|
||||||
|
@include('modals.partials.download-button-patreon')
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
@else
|
||||||
@if (config('hstream.free_downloads'))
|
@if (config('hstream.free_downloads'))
|
||||||
<p class="font-bold text-gray-800 dark:text-gray-200">
|
<p class="font-bold text-gray-800 dark:text-gray-200">
|
||||||
<i class="fa-solid fa-lock-open pr-[4px] text-yellow-600"></i> 4k
|
<i class="fa-solid fa-lock-open pr-[4px] text-yellow-600"></i> 4k
|
||||||
@@ -67,18 +79,6 @@
|
|||||||
on our Discord server, you have to logout and login again.
|
on our Discord server, you have to logout and login again.
|
||||||
</p>
|
</p>
|
||||||
@endif
|
@endif
|
||||||
@else
|
|
||||||
<p class="font-bold text-gray-800 dark:text-gray-200">
|
|
||||||
<i class="fa-solid fa-lock-open pr-[4px] text-green-400"></i> 4k
|
|
||||||
</p>
|
|
||||||
|
|
||||||
@php $dlpdomains = config('hstream.download_domain_4k'); @endphp
|
|
||||||
|
|
||||||
<div class="flex flex-wrap justify-around">
|
|
||||||
@foreach ($dlList as $hdl)
|
|
||||||
@include('modals.partials.download-button-patreon')
|
|
||||||
@endforeach
|
|
||||||
</div>
|
|
||||||
@endif
|
@endif
|
||||||
@else
|
@else
|
||||||
<p class="text-gray-800 dark:text-gray-200 font-bold">
|
<p class="text-gray-800 dark:text-gray-200 font-bold">
|
||||||
@@ -91,7 +91,19 @@
|
|||||||
|
|
||||||
<br>
|
<br>
|
||||||
@if ($episode->interpolated_uhd)
|
@if ($episode->interpolated_uhd)
|
||||||
@if (!Auth::user()->hasRole(\App\Enums\UserRole::SUPPORTER))
|
@if (Auth::user()->hasRole(\App\Enums\UserRole::SUPPORTER) || Auth::user()->hasRole(\App\Enums\UserRole::ADMINISTRATOR) )
|
||||||
|
<p class="font-bold text-gray-800 dark:text-gray-200">
|
||||||
|
<i class="fa-solid fa-lock-open pr-[4px] text-green-400"></i> 4k 48fps
|
||||||
|
</p>
|
||||||
|
|
||||||
|
@php $dlpdomains = config('hstream.download_domain_4k'); @endphp
|
||||||
|
|
||||||
|
<div class="flex flex-wrap justify-around">
|
||||||
|
@foreach ($dlList as $hdl)
|
||||||
|
@include('modals.partials.download-button-patreon-interpolated')
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
@else
|
||||||
@if (config('hstream.free_downloads'))
|
@if (config('hstream.free_downloads'))
|
||||||
<p class="font-bold text-gray-800 dark:text-gray-200">
|
<p class="font-bold text-gray-800 dark:text-gray-200">
|
||||||
<i class="fa-solid fa-lock-open pr-[4px] text-yellow-600"></i> 4k 48fps
|
<i class="fa-solid fa-lock-open pr-[4px] text-yellow-600"></i> 4k 48fps
|
||||||
@@ -106,18 +118,6 @@
|
|||||||
on our Discord server, you have to logout and login again.
|
on our Discord server, you have to logout and login again.
|
||||||
</p>
|
</p>
|
||||||
@endif
|
@endif
|
||||||
@else
|
|
||||||
<p class="font-bold text-gray-800 dark:text-gray-200">
|
|
||||||
<i class="fa-solid fa-lock-open pr-[4px] text-green-400"></i> 4k 48fps
|
|
||||||
</p>
|
|
||||||
|
|
||||||
@php $dlpdomains = config('hstream.download_domain_4k'); @endphp
|
|
||||||
|
|
||||||
<div class="flex flex-wrap justify-around">
|
|
||||||
@foreach ($dlList as $hdl)
|
|
||||||
@include('modals.partials.download-button-patreon-interpolated')
|
|
||||||
@endforeach
|
|
||||||
</div>
|
|
||||||
@endif
|
@endif
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
|||||||
@@ -28,9 +28,15 @@
|
|||||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path>
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
|
@php
|
||||||
|
$fileExtension = "HEVC";
|
||||||
|
if (str_contains($episode->getDownloadByType('FHD')->url, 'AV1')) {
|
||||||
|
$fileExtension = "AV1";
|
||||||
|
}
|
||||||
|
@endphp
|
||||||
<div class="flex flex-col text-center w-full">
|
<div class="flex flex-col text-center w-full">
|
||||||
<p class="text-xl">Episode {{ $episode->episode }}</p>
|
<p class="text-xl">Episode {{ $episode->episode }}</p>
|
||||||
<p class="text-xs">HEVC MKV {{ $episode->getDownloadByType('FHD')->getFileSize() ?? '' }}</p>
|
<p class="text-xs">{{ $fileExtension }} MKV {{ $episode->getDownloadByType('FHD')->getFileSize() ?? '' }}</p>
|
||||||
<p class="text-xs" id="downloadCount">Downloaded {{ $episode->getDownloadByType('FHD')->count }} times</p>
|
<p class="text-xs" id="downloadCount">Downloaded {{ $episode->getDownloadByType('FHD')->count }} times</p>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
Reference in New Issue
Block a user