X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=app%2FJobs%2FGenerateAosSeed.php;h=bd0d73c86b900c0fed5f5262b81b5e7e2793d7e4;hb=0a4af7267374d1a750ed07e9c4b491fea42490af;hp=b8c7e9e73c9d4343e4104daea3ff2ee9319f83bf;hpb=ca90048a9fb2d8c3c65d81096ecd36bbf7c51ff5;p=alttp.git diff --git a/app/Jobs/GenerateAosSeed.php b/app/Jobs/GenerateAosSeed.php index b8c7e9e..bd0d73c 100644 --- a/app/Jobs/GenerateAosSeed.php +++ b/app/Jobs/GenerateAosSeed.php @@ -34,43 +34,63 @@ class GenerateAosSeed implements ShouldQueue */ public function handle() { + $stage = 'initial'; 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, '', '&'); + $url = config('aos.surge_url').'/?'.http_build_query($params, '', '&'); $fac = new BrowserFactory('chromium'); $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(); - sleep(2); - + $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); + } + + $stage = 'calculating patch'; $encoder = new Encoder(file_get_contents(config('aos.base_rom'))); - $patch = $encoder->createPatch(file_get_contents($temp_dir.'/'.$seed->hash.'.gba')); + $patch = $encoder->createPatch(file_get_contents($romFile)); Storage::disk('aos-seeds')->put($seed->hash.'.bps', $patch); - unlink($temp_dir.'/'.$seed->hash.'.gba'); + unlink($romFile); + $stage = 'done'; $seed->status = 'generated'; $seed->save(); $browser->close(); - } catch (\Throwable) { + } catch (\Throwable $e) { $seed->status = 'error'; + $seed->error_detail = [ + 'stage' => $stage, + 'type' => get_class($e), + 'message' => $e->getMessage(), + ]; $seed->save(); } }