mirror of
https://github.com/usetrmnl/byos_laravel.git
synced 2026-01-13 23:18:10 +00:00
feat: override device refresh time via playlist
This commit is contained in:
parent
cd50e27288
commit
c8b21acb36
4 changed files with 54 additions and 6 deletions
|
|
@ -18,6 +18,7 @@ class Playlist extends Model
|
||||||
'weekdays' => 'array',
|
'weekdays' => 'array',
|
||||||
'active_from' => 'datetime:H:i',
|
'active_from' => 'datetime:H:i',
|
||||||
'active_until' => 'datetime:H:i',
|
'active_until' => 'datetime:H:i',
|
||||||
|
'refresh_time' => 'integer',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function device(): BelongsTo
|
public function device(): BelongsTo
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('playlists', function (Blueprint $table) {
|
||||||
|
$table->integer('refresh_time')->nullable()->after('active_until');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('playlists', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('refresh_time');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -11,9 +11,10 @@ new class extends Component {
|
||||||
|
|
||||||
// Playlist form properties
|
// Playlist form properties
|
||||||
public $playlist_name;
|
public $playlist_name;
|
||||||
public $selected_weekdays = [];
|
public $selected_weekdays = null;
|
||||||
public $active_from;
|
public $active_from;
|
||||||
public $active_until;
|
public $active_until;
|
||||||
|
public $refresh_time = null;
|
||||||
|
|
||||||
public function mount()
|
public function mount()
|
||||||
{
|
{
|
||||||
|
|
@ -89,29 +90,40 @@ new class extends Component {
|
||||||
|
|
||||||
$this->validate([
|
$this->validate([
|
||||||
'playlist_name' => 'required|string|max:255',
|
'playlist_name' => 'required|string|max:255',
|
||||||
'selected_weekdays' => 'array',
|
'selected_weekdays' => 'nullable|array',
|
||||||
'active_from' => 'nullable|date_format:H:i',
|
'active_from' => 'nullable|date_format:H:i',
|
||||||
'active_until' => 'nullable|date_format:H:i',
|
'active_until' => 'nullable|date_format:H:i',
|
||||||
|
'refresh_time' => 'nullable|integer|min:60',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if ($this->refresh_time < 60) {
|
||||||
|
$this->refresh_time = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($this->selected_weekdays)){
|
||||||
|
$this->selected_weekdays = null;
|
||||||
|
}
|
||||||
|
|
||||||
$playlist->update([
|
$playlist->update([
|
||||||
'name' => $this->playlist_name,
|
'name' => $this->playlist_name,
|
||||||
'weekdays' => $this->selected_weekdays,
|
'weekdays' => $this->selected_weekdays,
|
||||||
'active_from' => $this->active_from,
|
'active_from' => $this->active_from,
|
||||||
'active_until' => $this->active_until,
|
'active_until' => $this->active_until,
|
||||||
|
'refresh_time' => $this->refresh_time,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->devices = auth()->user()->devices()->with(['playlists.items.plugin'])->get();
|
$this->devices = auth()->user()->devices()->with(['playlists.items.plugin'])->get();
|
||||||
$this->reset(['playlist_name', 'selected_weekdays', 'active_from', 'active_until']);
|
$this->reset(['playlist_name', 'selected_weekdays', 'active_from', 'active_until', 'refresh_time']);
|
||||||
Flux::modal('edit-playlist-' . $playlist->id)->close();
|
Flux::modal('edit-playlist-' . $playlist->id)->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function preparePlaylistEdit(Playlist $playlist)
|
public function preparePlaylistEdit(Playlist $playlist)
|
||||||
{
|
{
|
||||||
$this->playlist_name = $playlist->name;
|
$this->playlist_name = $playlist->name;
|
||||||
$this->selected_weekdays = $playlist->weekdays ?? [];
|
$this->selected_weekdays = $playlist->weekdays ?? null;
|
||||||
$this->active_from = optional($playlist->active_from)->format('H:i');
|
$this->active_from = optional($playlist->active_from)->format('H:i');
|
||||||
$this->active_until = optional($playlist->active_until)->format('H:i');
|
$this->active_until = optional($playlist->active_until)->format('H:i');
|
||||||
|
$this->refresh_time = $playlist->refresh_time;
|
||||||
}
|
}
|
||||||
}; ?>
|
}; ?>
|
||||||
|
|
||||||
|
|
@ -257,6 +269,10 @@ new class extends Component {
|
||||||
<flux:input type="time" label="Active Until" wire:model="active_until"/>
|
<flux:input type="time" label="Active Until" wire:model="active_until"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-4">
|
||||||
|
<flux:input type="number" label="Refresh Time (seconds)" wire:model="refresh_time" min="1" placeholder="Leave empty to use device default"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<flux:spacer/>
|
<flux:spacer/>
|
||||||
<flux:button type="submit" variant="primary">Save Changes</flux:button>
|
<flux:button type="submit" variant="primary">Save Changes</flux:button>
|
||||||
|
|
|
||||||
|
|
@ -41,11 +41,14 @@ Route::get('/display', function (Request $request) {
|
||||||
'last_firmware_version' => $request->header('fw-version'),
|
'last_firmware_version' => $request->header('fw-version'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$refreshTimeOverride = null;
|
||||||
// Skip if cloud proxy is enabled for device
|
// Skip if cloud proxy is enabled for device
|
||||||
if (! $device->proxy_cloud) {
|
if (! $device->proxy_cloud || $device->getNextPlaylistItem()) {
|
||||||
$playlistItem = $device->getNextPlaylistItem();
|
$playlistItem = $device->getNextPlaylistItem();
|
||||||
|
|
||||||
if ($playlistItem) {
|
if ($playlistItem) {
|
||||||
|
$refreshTimeOverride = $playlistItem->playlist()->first()->refresh_time;
|
||||||
|
|
||||||
$plugin = $playlistItem->plugin;
|
$plugin = $playlistItem->plugin;
|
||||||
|
|
||||||
// Check and update stale data if needed
|
// Check and update stale data if needed
|
||||||
|
|
@ -78,7 +81,7 @@ Route::get('/display', function (Request $request) {
|
||||||
'status' => 0,
|
'status' => 0,
|
||||||
'image_url' => url('storage/'.$image_path),
|
'image_url' => url('storage/'.$image_path),
|
||||||
'filename' => $filename,
|
'filename' => $filename,
|
||||||
'refresh_rate' => $device->default_refresh_interval,
|
'refresh_rate' => $refreshTimeOverride ?? $device->default_refresh_interval,
|
||||||
'reset_firmware' => false,
|
'reset_firmware' => false,
|
||||||
'update_firmware' => $device->update_firmware,
|
'update_firmware' => $device->update_firmware,
|
||||||
'firmware_url' => $device->firmware_url,
|
'firmware_url' => $device->firmware_url,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue