seed = $seed; } /** * Execute the job. * * @return void */ public function handle() { try { $temp_dir = sys_get_temp_dir(); $seed = $this->seed; $params = array_merge(['seed' => $seed->seed], $seed->settings); $url = 'https://aosrando.surge.sh/?'.http_build_query($params, '', '&'); $fac = new BrowserFactory('chromium'); $browser = $fac->createBrowser(); $page = $browser->createPage(); $page->setDownloadPath($temp_dir); $page->navigate($url)->waitForNavigation(); $fileInput = $page->dom()->querySelector('input[type=file]'); $fileInput->sendFile(config('aos.base_rom')); $page->waitUntilContainsElement('select'); $page->mouse()->find('button', 2)->click(); $page->waitUntilContainsElement('a[download]'); $page->dom()->querySelector('a[download]')->setAttributeValue('download', $seed->hash.'.gba'); $page->mouse()->find('a[download]')->click(); sleep(2); $encoder = new Encoder(file_get_contents(config('aos.base_rom'))); $patch = $encoder->createPatch(file_get_contents($temp_dir.'/'.$seed->hash.'.gba')); Storage::disk('aos-seeds')->put($seed->hash.'.bps', $patch); unlink($temp_dir.'/'.$seed->hash.'.gba'); $seed->status = 'generated'; $seed->save(); $browser->close(); } catch (\Throwable $e) { $seed->status = 'error'; $seed->error_detail = [ 'type' => get_class($e), 'message' => $e->getMessage(), ]; $seed->save(); } } protected $seed; }