Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion app/Filament/Pages/Dashboard.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,18 @@ public function getHeaderWidgets(): array

public function queueSpeedtest(GeneralSettings $settings)
{
$ookla_server_id = null;

if (! blank($settings->speedtest_server)) {
$item = array_rand($settings->speedtest_server);

$ookla_server_id = $settings->speedtest_server[$item];
}

$speedtest = [
'enabled' => ! blank($settings->speedtest_schedule),
'schedule' => optional($settings)->speedtest_schedule,
'ookla_server_id' => optional($settings)->speedtest_server,
'ookla_server_id' => $ookla_server_id,
];

ExecSpeedtest::dispatch(speedtest: $speedtest, scheduled: false);
Expand Down
23 changes: 21 additions & 2 deletions app/Filament/Pages/Settings/GeneralPage.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Pages\SettingsPage;
use Illuminate\Support\Facades\Http;
use Squire\Models\Timezone;

class GeneralPage extends SettingsPage
Expand Down Expand Up @@ -66,10 +67,28 @@ protected function getFormSchema(): array
->helperText('Leave empty to disable the schedule. You can also use the cron expression generator [HERE](https://crontab.cronhub.io/) to help you make schedules.')
->nullable()
->columnSpan(1),
TextInput::make('speedtest_server')
Select::make('speedtest_server')
->label('Speedtest server ID')
->helperText('Leave empty to let the system pick the best server.')
->nullable()
->columnSpan(1),
->multiple()
->maxItems(10)
->searchable()
->getSearchResultsUsing(function (string $search) {
$url = "https://www.speedtest.net/api/js/servers?engine=js&search={$search}&https_functional=true&limit=10";

$response = Http::get($url);

$options = $response->collect()->map(function ($item) {
return [
'id' => $item['id'],
'name' => $item['id'].': '.$item['name'].' ('.$item['sponsor'].')',
];
});

return $options->pluck('name', 'id');
})
->columnSpan(2),
])
->compact()
->columns([
Expand Down
10 changes: 9 additions & 1 deletion app/Jobs/SearchForSpeedtests.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,18 @@ class SearchForSpeedtests implements ShouldQueue
*/
public function handle(GeneralSettings $settings)
{
$ookla_server_id = null;

if (! blank($settings->speedtest_server)) {
$item = array_rand($settings->speedtest_server);

$ookla_server_id = $settings->speedtest_server[$item];
}

$speedtest = [
'enabled' => ! blank($settings->speedtest_schedule),
'schedule' => optional($settings)->speedtest_schedule,
'ookla_server_id' => optional($settings)->speedtest_server,
'ookla_server_id' => $ookla_server_id,
];

if ($speedtest['enabled']) {
Expand Down
3 changes: 2 additions & 1 deletion app/Settings/GeneralSettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ class GeneralSettings extends Settings

public ?string $speedtest_schedule;

public ?string $speedtest_server;
/** @var string[] */
public $speedtest_server;

public string $site_name;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

use App\Settings\GeneralSettings;
use Illuminate\Database\Migrations\Migration;

return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$settings = new GeneralSettings();

$settings->speedtest_server = [$settings->speedtest_server];
$settings->save();
}
};