mirror of
https://github.com/HDInnovations/UNIT3D.git
synced 2026-01-31 01:35:31 +01:00
604 lines
24 KiB
PHP
604 lines
24 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* NOTICE OF LICENSE.
|
|
*
|
|
* UNIT3D Community Edition is open-sourced software licensed under the GNU Affero General Public License v3.0
|
|
* The details is bundled with this project in the file LICENSE.txt.
|
|
*
|
|
* @project UNIT3D Community Edition
|
|
*
|
|
* @author HDVinnie <hdinnovations@protonmail.com>
|
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0
|
|
*/
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\Torrent;
|
|
use App\Models\User;
|
|
use App\Services\Tmdb\Client\Movie;
|
|
use App\Services\Tmdb\Client\TV;
|
|
use App\Services\Tmdb\TMDBScraper;
|
|
use Exception;
|
|
use Illuminate\Console\Command;
|
|
use Throwable;
|
|
|
|
class DemoSeed extends Command
|
|
{
|
|
/**
|
|
* The console command name.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $name = 'demo:seed';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Seeds fake data for demonstration or testing purposes';
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*
|
|
* @throws Exception|Throwable If there is an error during the execution of the command.
|
|
*/
|
|
final public function handle(): void
|
|
{
|
|
$this->alert('Demo Seeder v2.0 (Author: Poppabear)');
|
|
$this->warn('*** This process could take a few minutes ***');
|
|
$this->warn('Press CTRL + C to abort');
|
|
|
|
sleep(5);
|
|
|
|
$abort = false;
|
|
|
|
foreach ($this->movie_ids() as $id) {
|
|
// Users
|
|
$this->info('Creating user account');
|
|
|
|
$uid = User::factory()->create([
|
|
'chatroom_id' => 1,
|
|
'group_id' => random_int(1, 20),
|
|
'chat_status_id' => 1,
|
|
'image' => null,
|
|
])->id;
|
|
|
|
// random boolean
|
|
if ([false, true][random_int(0, 1)]) {
|
|
$movie = $this->fetchMovie($id);
|
|
|
|
// Torrents
|
|
$this->info('Creating movie torrents for account ID #'.$uid);
|
|
|
|
try {
|
|
$freeleech = ['0', '25', '50', '75', '100'];
|
|
$selected = random_int(0, \count($freeleech) - 1);
|
|
|
|
Torrent::factory()->create([
|
|
'user_id' => $uid,
|
|
'tmdb_movie_id' => $id,
|
|
'name' => $movie['title'],
|
|
'description' => $movie['overview'],
|
|
'category_id' => 1,
|
|
'type_id' => random_int(1, 6),
|
|
'resolution_id' => random_int(1, 10),
|
|
'region_id' => random_int(1, 242),
|
|
'distributor_id' => random_int(1, 965),
|
|
'free' => $freeleech[$selected],
|
|
'sticky' => false,
|
|
'mediainfo' => '
|
|
Complete name : Double.Impact.1991.1080p.BluRay.DD+5.1.x264-LoRD.mkv
|
|
Format : Matroska
|
|
Format version : Version 4
|
|
File size : 14.1 GiB
|
|
Duration : 1 h 49 min
|
|
Overall bit rate : 18.5 Mb/s
|
|
Encoded date : UTC 2020-02-24 10:07:15
|
|
Writing application : mkvmerge v43.0.0 (\'The Quartermaster\') 64-bit
|
|
Writing library : libebml v1.3.10 + libmatroska v1.5.2
|
|
|
|
Video
|
|
ID : 1
|
|
Format : AVC
|
|
Format/Info : Advanced Video Codec
|
|
Format profile : High@L4.1
|
|
Format settings : CABAC / 4 Ref Frames
|
|
Format settings, CABAC : Yes
|
|
Format settings, Reference frames : 4 frames
|
|
Codec ID : V_MPEG4/ISO/AVC
|
|
Duration : 1 h 49 min
|
|
Bit rate : 17.5 Mb/s
|
|
Width : 1 920 pixels
|
|
Height : 1 040 pixels
|
|
Display aspect ratio : 1.85:1
|
|
Frame rate mode : Constant
|
|
Frame rate : 23.976 (24000/1001) FPS
|
|
Color space : YUV
|
|
Chroma subsampling : 4:2:0
|
|
Bit depth : 8 bits
|
|
Scan type : Progressive
|
|
Bits/(Pixel*Frame) : 0.366
|
|
Stream size : 13.4 GiB (94%)
|
|
Title : LoRD
|
|
Writing library : x264 core 159 r2991+49 ~ LoRD
|
|
Encoding settings : cabac=1 / ref=4 / deblock=1:-3:-3 / analyse=0x3:0x133 / me=umh / subme=10 / psy=1 / fade_compensate=0.00 / psy_rd=1.10:0.00 / mixed_ref=1 / me_range=32 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-2 / threads=12 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=0 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / fgo=0 / bframes=9 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=23 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=2pass / mbtree=0 / bitrate=17500 / ratetol=1.0 / qcomp=0.70 / qpmin=0:0:0 / qpmax=69:69:69 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / vbv_maxrate=62500 / vbv_bufsize=78125 / nal_hrd=none / filler=0 / ip_ratio=1.25 / pb_ratio=1.20 / aq=3:0.55 / aq-sensitivity=10.00 / aq-factor=1.00:1.00:1.00 / aq2=0 / aq3=0
|
|
Language : English
|
|
Default : Yes
|
|
Forced : No
|
|
|
|
Audio
|
|
ID : 2
|
|
Format : E-AC-3
|
|
Format/Info : Enhanced AC-3
|
|
Commercial name : Dolby Digital Plus
|
|
Codec ID : A_EAC3
|
|
Duration : 1 h 49 min
|
|
Bit rate mode : Constant
|
|
Bit rate : 1 023 kb/s
|
|
Channel(s) : 6 channels
|
|
Channel layout : L R C LFE Ls Rs
|
|
Sampling rate : 48.0 kHz
|
|
Frame rate : 93.750 FPS (512 SPF)
|
|
Compression mode : Lossy
|
|
Stream size : 803 MiB (6%)
|
|
Title : DD+5.1
|
|
Language : English
|
|
Service kind : Complete Main
|
|
Default : Yes
|
|
Forced : No
|
|
|
|
Text #1
|
|
ID : 3
|
|
Format : UTF-8
|
|
Codec ID : S_TEXT/UTF8
|
|
Codec ID/Info : UTF-8 Plain Text
|
|
Duration : 1 h 41 min
|
|
Bit rate : 26 b/s
|
|
Count of elements : 669
|
|
Stream size : 19.9 KiB (0%)
|
|
Language : English
|
|
Default : No
|
|
Forced : No
|
|
|
|
Text #2
|
|
ID : 4
|
|
Format : UTF-8
|
|
Codec ID : S_TEXT/UTF8
|
|
Codec ID/Info : UTF-8 Plain Text
|
|
Duration : 1 h 48 min
|
|
Bit rate : 30 b/s
|
|
Count of elements : 872
|
|
Stream size : 24.1 KiB (0%)
|
|
Title : SDH
|
|
Language : English
|
|
Default : No
|
|
Forced : No
|
|
|
|
Text #3
|
|
ID : 5
|
|
Format : UTF-8
|
|
Codec ID : S_TEXT/UTF8
|
|
Codec ID/Info : UTF-8 Plain Text
|
|
Duration : 1 h 41 min
|
|
Bit rate : 26 b/s
|
|
Count of elements : 659
|
|
Stream size : 19.9 KiB (0%)
|
|
Language : French
|
|
Default : No
|
|
Forced : No
|
|
|
|
Text #4
|
|
ID : 6
|
|
Format : UTF-8
|
|
Codec ID : S_TEXT/UTF8
|
|
Codec ID/Info : UTF-8 Plain Text
|
|
Duration : 1 h 41 min
|
|
Bit rate : 24 b/s
|
|
Count of elements : 668
|
|
Stream size : 18.3 KiB (0%)
|
|
Title : european
|
|
Language : Portuguese
|
|
Default : No
|
|
Forced : No
|
|
|
|
Text #5
|
|
ID : 7
|
|
Format : UTF-8
|
|
Codec ID : S_TEXT/UTF8
|
|
Codec ID/Info : UTF-8 Plain Text
|
|
Duration : 1 h 42 min
|
|
Bit rate : 26 b/s
|
|
Count of elements : 765
|
|
Stream size : 19.5 KiB (0%)
|
|
Title : latin
|
|
Language : Spanish
|
|
Default : No
|
|
Forced : No
|
|
|
|
Menu
|
|
00:00:00.000 : en:Logo/Title/Intro
|
|
00:03:24.037 : en:"My Babies!"
|
|
00:09:45.918 : en:Life In L.A.
|
|
00:13:08.621 : en:"He\'s Your Brother!"
|
|
00:21:01.510 : en:Fencing Benzes
|
|
00:29:05.118 : en:Mistaken Identity
|
|
00:37:34.627 : en:Fishing Expedition
|
|
00:42:22.039 : en:The Drop
|
|
00:50:05.711 : en:Bad Cognac
|
|
00:58:56.032 : en:On the Run
|
|
01:07:33.549 : en:Sibling Rivalry
|
|
01:17:59.174 : en:Hotel Invasion
|
|
01:23:51.443 : en:A Captive Audience
|
|
01:28:49.532 : en:One-On-One Combat
|
|
01:34:15.858 : en:Who Gets Away?
|
|
01:44:15.249 : en:End Credits
|
|
',
|
|
'created_at' => now(),
|
|
'bumped_at' => now(),
|
|
'updated_at' => now(),
|
|
]);
|
|
} catch (Exception $exception) {
|
|
$abort = true;
|
|
|
|
$this->warn($exception->getMessage());
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($this->tv_ids() as $id) {
|
|
// Users
|
|
$this->info('Creating user account');
|
|
|
|
$uid = User::factory()->create([
|
|
'chatroom_id' => 1,
|
|
'group_id' => random_int(1, 20),
|
|
'chat_status_id' => 1,
|
|
'image' => null,
|
|
])->id;
|
|
|
|
// random boolean
|
|
if ([false, true][random_int(0, 1)]) {
|
|
$tv = $this->fetchTv($id);
|
|
|
|
// Torrents
|
|
$this->info('Creating TV torrents for account ID #'.$uid);
|
|
|
|
try {
|
|
$freeleech = ['0', '25', '50', '75', '100'];
|
|
$selected = random_int(0, \count($freeleech) - 1);
|
|
|
|
Torrent::factory()->create([
|
|
'user_id' => $uid,
|
|
'tmdb_tv_id' => $id,
|
|
'name' => $tv['name'],
|
|
'description' => $tv['overview'],
|
|
'category_id' => 2,
|
|
'type_id' => random_int(1, 6),
|
|
'resolution_id' => random_int(1, 10),
|
|
'region_id' => random_int(1, 242),
|
|
'distributor_id' => random_int(1, 965),
|
|
'free' => $freeleech[$selected],
|
|
'sticky' => false,
|
|
'mediainfo' => '
|
|
Complete name : Double.Impact.1991.1080p.BluRay.DD+5.1.x264-LoRD.mkv
|
|
Format : Matroska
|
|
Format version : Version 4
|
|
File size : 14.1 GiB
|
|
Duration : 1 h 49 min
|
|
Overall bit rate : 18.5 Mb/s
|
|
Encoded date : UTC 2020-02-24 10:07:15
|
|
Writing application : mkvmerge v43.0.0 (\'The Quartermaster\') 64-bit
|
|
Writing library : libebml v1.3.10 + libmatroska v1.5.2
|
|
|
|
Video
|
|
ID : 1
|
|
Format : AVC
|
|
Format/Info : Advanced Video Codec
|
|
Format profile : High@L4.1
|
|
Format settings : CABAC / 4 Ref Frames
|
|
Format settings, CABAC : Yes
|
|
Format settings, Reference frames : 4 frames
|
|
Codec ID : V_MPEG4/ISO/AVC
|
|
Duration : 1 h 49 min
|
|
Bit rate : 17.5 Mb/s
|
|
Width : 1 920 pixels
|
|
Height : 1 040 pixels
|
|
Display aspect ratio : 1.85:1
|
|
Frame rate mode : Constant
|
|
Frame rate : 23.976 (24000/1001) FPS
|
|
Color space : YUV
|
|
Chroma subsampling : 4:2:0
|
|
Bit depth : 8 bits
|
|
Scan type : Progressive
|
|
Bits/(Pixel*Frame) : 0.366
|
|
Stream size : 13.4 GiB (94%)
|
|
Title : LoRD
|
|
Writing library : x264 core 159 r2991+49 ~ LoRD
|
|
Encoding settings : cabac=1 / ref=4 / deblock=1:-3:-3 / analyse=0x3:0x133 / me=umh / subme=10 / psy=1 / fade_compensate=0.00 / psy_rd=1.10:0.00 / mixed_ref=1 / me_range=32 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-2 / threads=12 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=0 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / fgo=0 / bframes=9 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=23 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=2pass / mbtree=0 / bitrate=17500 / ratetol=1.0 / qcomp=0.70 / qpmin=0:0:0 / qpmax=69:69:69 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / vbv_maxrate=62500 / vbv_bufsize=78125 / nal_hrd=none / filler=0 / ip_ratio=1.25 / pb_ratio=1.20 / aq=3:0.55 / aq-sensitivity=10.00 / aq-factor=1.00:1.00:1.00 / aq2=0 / aq3=0
|
|
Language : English
|
|
Default : Yes
|
|
Forced : No
|
|
|
|
Audio
|
|
ID : 2
|
|
Format : E-AC-3
|
|
Format/Info : Enhanced AC-3
|
|
Commercial name : Dolby Digital Plus
|
|
Codec ID : A_EAC3
|
|
Duration : 1 h 49 min
|
|
Bit rate mode : Constant
|
|
Bit rate : 1 023 kb/s
|
|
Channel(s) : 6 channels
|
|
Channel layout : L R C LFE Ls Rs
|
|
Sampling rate : 48.0 kHz
|
|
Frame rate : 93.750 FPS (512 SPF)
|
|
Compression mode : Lossy
|
|
Stream size : 803 MiB (6%)
|
|
Title : DD+5.1
|
|
Language : English
|
|
Service kind : Complete Main
|
|
Default : Yes
|
|
Forced : No
|
|
|
|
Text #1
|
|
ID : 3
|
|
Format : UTF-8
|
|
Codec ID : S_TEXT/UTF8
|
|
Codec ID/Info : UTF-8 Plain Text
|
|
Duration : 1 h 41 min
|
|
Bit rate : 26 b/s
|
|
Count of elements : 669
|
|
Stream size : 19.9 KiB (0%)
|
|
Language : English
|
|
Default : No
|
|
Forced : No
|
|
|
|
Text #2
|
|
ID : 4
|
|
Format : UTF-8
|
|
Codec ID : S_TEXT/UTF8
|
|
Codec ID/Info : UTF-8 Plain Text
|
|
Duration : 1 h 48 min
|
|
Bit rate : 30 b/s
|
|
Count of elements : 872
|
|
Stream size : 24.1 KiB (0%)
|
|
Title : SDH
|
|
Language : English
|
|
Default : No
|
|
Forced : No
|
|
|
|
Text #3
|
|
ID : 5
|
|
Format : UTF-8
|
|
Codec ID : S_TEXT/UTF8
|
|
Codec ID/Info : UTF-8 Plain Text
|
|
Duration : 1 h 41 min
|
|
Bit rate : 26 b/s
|
|
Count of elements : 659
|
|
Stream size : 19.9 KiB (0%)
|
|
Language : French
|
|
Default : No
|
|
Forced : No
|
|
|
|
Text #4
|
|
ID : 6
|
|
Format : UTF-8
|
|
Codec ID : S_TEXT/UTF8
|
|
Codec ID/Info : UTF-8 Plain Text
|
|
Duration : 1 h 41 min
|
|
Bit rate : 24 b/s
|
|
Count of elements : 668
|
|
Stream size : 18.3 KiB (0%)
|
|
Title : european
|
|
Language : Portuguese
|
|
Default : No
|
|
Forced : No
|
|
|
|
Text #5
|
|
ID : 7
|
|
Format : UTF-8
|
|
Codec ID : S_TEXT/UTF8
|
|
Codec ID/Info : UTF-8 Plain Text
|
|
Duration : 1 h 42 min
|
|
Bit rate : 26 b/s
|
|
Count of elements : 765
|
|
Stream size : 19.5 KiB (0%)
|
|
Title : latin
|
|
Language : Spanish
|
|
Default : No
|
|
Forced : No
|
|
|
|
Menu
|
|
00:00:00.000 : en:Logo/Title/Intro
|
|
00:03:24.037 : en:"My Babies!"
|
|
00:09:45.918 : en:Life In L.A.
|
|
00:13:08.621 : en:"He\'s Your Brother!"
|
|
00:21:01.510 : en:Fencing Benzes
|
|
00:29:05.118 : en:Mistaken Identity
|
|
00:37:34.627 : en:Fishing Expedition
|
|
00:42:22.039 : en:The Drop
|
|
00:50:05.711 : en:Bad Cognac
|
|
00:58:56.032 : en:On the Run
|
|
01:07:33.549 : en:Sibling Rivalry
|
|
01:17:59.174 : en:Hotel Invasion
|
|
01:23:51.443 : en:A Captive Audience
|
|
01:28:49.532 : en:One-On-One Combat
|
|
01:34:15.858 : en:Who Gets Away?
|
|
01:44:15.249 : en:End Credits
|
|
',
|
|
'created_at' => now(),
|
|
'bumped_at' => now(),
|
|
'updated_at' => now(),
|
|
]);
|
|
} catch (Exception $exception) {
|
|
$abort = true;
|
|
|
|
$this->warn($exception->getMessage());
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($abort) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($abort) {
|
|
$this->error('Aborted ...');
|
|
$this->alert('Demo data was only PARTIALLY seeded! This is likely due to an API request timeout.');
|
|
$this->alert('Ensure TMDB api key is set and run "php artisan config:clear"');
|
|
} else {
|
|
$this->alert('Demo data has been successfully seeded!');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @throws \Illuminate\Http\Client\ConnectionException
|
|
*/
|
|
private function fetchMovie(int $id): mixed
|
|
{
|
|
sleep(2);
|
|
$tmdbScraper = new TMDBScraper();
|
|
$tmdbScraper->movie($id);
|
|
|
|
return (new Movie($id))->data;
|
|
}
|
|
|
|
/**
|
|
* @throws \Illuminate\Http\Client\ConnectionException
|
|
*/
|
|
private function fetchTv(int $id): mixed
|
|
{
|
|
sleep(2);
|
|
$tmdbScraper = new TMDBScraper();
|
|
$tmdbScraper->tv($id);
|
|
|
|
return (new TV($id))->data;
|
|
}
|
|
|
|
/**
|
|
* @return array<int>
|
|
*/
|
|
private function movie_ids(): array
|
|
{
|
|
return [
|
|
893397,
|
|
783215,
|
|
570731,
|
|
679014,
|
|
239895,
|
|
413782,
|
|
138038,
|
|
1115579,
|
|
22084,
|
|
302827,
|
|
640393,
|
|
253267,
|
|
1291436,
|
|
1144962,
|
|
977871,
|
|
1081709,
|
|
252293,
|
|
376252,
|
|
918287,
|
|
1026999,
|
|
1294765,
|
|
923579,
|
|
422044,
|
|
710268,
|
|
1124136,
|
|
717088,
|
|
1163186,
|
|
1073274,
|
|
1102786,
|
|
354148,
|
|
533991,
|
|
134508,
|
|
131012,
|
|
467540,
|
|
353495,
|
|
1020896,
|
|
895718,
|
|
125290,
|
|
13245,
|
|
29829,
|
|
639720,
|
|
75704,
|
|
432956,
|
|
62489,
|
|
12161,
|
|
77146,
|
|
239398,
|
|
686941,
|
|
768076,
|
|
1059813,
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array<int>
|
|
*/
|
|
private function tv_ids(): array
|
|
{
|
|
return [
|
|
201568,
|
|
256057,
|
|
251668,
|
|
71495,
|
|
68728,
|
|
88258,
|
|
74866,
|
|
70508,
|
|
207837,
|
|
255293,
|
|
35468,
|
|
213359,
|
|
4333,
|
|
236316,
|
|
247674,
|
|
249018,
|
|
228549,
|
|
240310,
|
|
211169,
|
|
212204,
|
|
61379,
|
|
1246,
|
|
80884,
|
|
196944,
|
|
232644,
|
|
68597,
|
|
58761,
|
|
46848,
|
|
228958,
|
|
6390,
|
|
226745,
|
|
4706,
|
|
114183,
|
|
39952,
|
|
96128,
|
|
93297,
|
|
122725,
|
|
253254,
|
|
249301,
|
|
238126,
|
|
233327,
|
|
65609,
|
|
128301,
|
|
37528,
|
|
204959,
|
|
208694,
|
|
45343,
|
|
1141,
|
|
124972,
|
|
156933,
|
|
];
|
|
}
|
|
}
|