]> git.localhorst.tv Git - alttp.git/blobdiff - app/Console/Commands/GenerateAosSeed.php
faster implementation for generating AoSR seeds
[alttp.git] / app / Console / Commands / GenerateAosSeed.php
index c51ce29a09a04a7acfe55e44fa6d1ab950994d84..fa390c8f4c35e6f9b5e2df16583a510205a3aebb 100644 (file)
@@ -4,9 +4,9 @@ namespace App\Console\Commands;
 
 use App\Beat\Encoder;
 use App\Models\AosSeed;
-use HeadlessChromium\BrowserFactory;
 use Illuminate\Console\Command;
 use Illuminate\Support\Facades\Storage;
+use Symfony\Component\Process\Process;
 
 class GenerateAosSeed extends Command
 {
@@ -41,39 +41,14 @@ class GenerateAosSeed extends Command
                        $temp_dir = sys_get_temp_dir();
 
                        $params = array_merge(['seed' => $seed->seed], $seed->settings);
-                       $url = config('aos.surge_url').'/?'.http_build_query($params, '', '&');
+                       $settings = http_build_query($params, '', '&');
 
-                       $fac = new BrowserFactory('chromium');
-                       $fac->addOptions(['noSandbox' => true]);
-                       $browser = $fac->createBrowser();
-
-                       $stage = 'loading page';
-                       $page = $browser->createPage();
-                       $page->setDownloadPath($temp_dir);
-                       $page->navigate($url)->waitForNavigation();
-
-                       $stage = 'selecting rom';
-                       $fileInput = $page->dom()->querySelector('input[type=file]');
-                       $fileInput->sendFile(config('aos.base_rom'));
-                       $page->waitUntilContainsElement('select');
-
-                       $stage = 'clicking randomize';
-                       $page->mouse()->find('button', 2)->click();
-                       $page->waitUntilContainsElement('a[download]');
-
-                       $stage = 'clicking download';
-                       $page->dom()->querySelector('a[download]')->setAttributeValue('download', $seed->hash.'.gba');
-                       $page->mouse()->find('a[download]')->click();
-
-                       $stage = 'waiting for rom';
                        $romFile = $temp_dir.'/'.$seed->hash.'.gba';
-                       for ($i = 0; $i < 100; ++$i) {
-                               clearstatcache();
-                               if (is_file($romFile) && filesize($romFile) >= 8388608) {
-                                       break;
-                               }
-                               usleep(100_000);
-                       }
+                       $spoilerFile = $temp_dir.'/'.$seed->hash.'.txt';
+
+                       $stage = 'randomizing';
+                       $proc = new Process([config('aos.cli'), config('aos.base_rom'), $romFile, $settings]);
+                       $proc->mustRun();
 
                        $stage = 'calculating patch';
                        $encoder = new Encoder(file_get_contents(config('aos.base_rom')));
@@ -81,11 +56,12 @@ class GenerateAosSeed extends Command
                        Storage::disk('aos-seeds')->put($seed->hash.'.bps', $patch);
                        unlink($romFile);
 
+                       $stage = 'saving spoiler';
+                       Storage::disk('aos-spoilers')->put($seed->hash.'.txt', $proc->getOutput());
+
                        $stage = 'done';
                        $seed->status = 'generated';
                        $seed->save();
-
-                       $browser->close();
                } catch (\Throwable $e) {
                        $seed->status = 'error';
                        $seed->error_detail = [