Skip to content

Commit 93d7665

Browse files
authored
Search and select multiple servers (alexjustesen#216)
1 parent ee99798 commit 93d7665

File tree

5 files changed

+61
-5
lines changed

5 files changed

+61
-5
lines changed

app/Filament/Pages/Dashboard.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,18 @@ public function getHeaderWidgets(): array
3737

3838
public function queueSpeedtest(GeneralSettings $settings)
3939
{
40+
$ookla_server_id = null;
41+
42+
if (! blank($settings->speedtest_server)) {
43+
$item = array_rand($settings->speedtest_server);
44+
45+
$ookla_server_id = $settings->speedtest_server[$item];
46+
}
47+
4048
$speedtest = [
4149
'enabled' => ! blank($settings->speedtest_schedule),
4250
'schedule' => optional($settings)->speedtest_schedule,
43-
'ookla_server_id' => optional($settings)->speedtest_server,
51+
'ookla_server_id' => $ookla_server_id,
4452
];
4553

4654
ExecSpeedtest::dispatch(speedtest: $speedtest, scheduled: false);

app/Filament/Pages/Settings/GeneralPage.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Filament\Forms\Components\TextInput;
1111
use Filament\Forms\Components\Toggle;
1212
use Filament\Pages\SettingsPage;
13+
use Illuminate\Support\Facades\Http;
1314
use Squire\Models\Timezone;
1415

1516
class GeneralPage extends SettingsPage
@@ -66,10 +67,28 @@ protected function getFormSchema(): array
6667
->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.')
6768
->nullable()
6869
->columnSpan(1),
69-
TextInput::make('speedtest_server')
70+
Select::make('speedtest_server')
71+
->label('Speedtest server ID')
7072
->helperText('Leave empty to let the system pick the best server.')
7173
->nullable()
72-
->columnSpan(1),
74+
->multiple()
75+
->maxItems(10)
76+
->searchable()
77+
->getSearchResultsUsing(function (string $search) {
78+
$url = "https://www.speedtest.net/api/js/servers?engine=js&search={$search}&https_functional=true&limit=10";
79+
80+
$response = Http::get($url);
81+
82+
$options = $response->collect()->map(function ($item) {
83+
return [
84+
'id' => $item['id'],
85+
'name' => $item['id'].': '.$item['name'].' ('.$item['sponsor'].')',
86+
];
87+
});
88+
89+
return $options->pluck('name', 'id');
90+
})
91+
->columnSpan(2),
7392
])
7493
->compact()
7594
->columns([

app/Jobs/SearchForSpeedtests.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,18 @@ class SearchForSpeedtests implements ShouldQueue
2121
*/
2222
public function handle(GeneralSettings $settings)
2323
{
24+
$ookla_server_id = null;
25+
26+
if (! blank($settings->speedtest_server)) {
27+
$item = array_rand($settings->speedtest_server);
28+
29+
$ookla_server_id = $settings->speedtest_server[$item];
30+
}
31+
2432
$speedtest = [
2533
'enabled' => ! blank($settings->speedtest_schedule),
2634
'schedule' => optional($settings)->speedtest_schedule,
27-
'ookla_server_id' => optional($settings)->speedtest_server,
35+
'ookla_server_id' => $ookla_server_id,
2836
];
2937

3038
if ($speedtest['enabled']) {

app/Settings/GeneralSettings.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ class GeneralSettings extends Settings
1010

1111
public ?string $speedtest_schedule;
1212

13-
public ?string $speedtest_server;
13+
/** @var string[] */
14+
public $speedtest_server;
1415

1516
public string $site_name;
1617

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
use App\Settings\GeneralSettings;
4+
use Illuminate\Database\Migrations\Migration;
5+
6+
return new class extends Migration
7+
{
8+
/**
9+
* Run the migrations.
10+
*
11+
* @return void
12+
*/
13+
public function up()
14+
{
15+
$settings = new GeneralSettings();
16+
17+
$settings->speedtest_server = [$settings->speedtest_server];
18+
$settings->save();
19+
}
20+
};

0 commit comments

Comments
 (0)