enable sushi caching (when not in dev mode)

This commit is contained in:
Boy132 2025-09-16 13:43:26 +02:00
parent 93ee1cdf68
commit 445cc7c88c
2 changed files with 23 additions and 6 deletions

View File

@ -5,6 +5,7 @@ namespace App\Models;
use App\Contracts\Plugins\HasPluginSettings;
use App\Enums\PluginCategory;
use App\Enums\PluginStatus;
use App\Facades\Plugins;
use Exception;
use Filament\Schemas\Components\Component;
use Illuminate\Database\Eloquent\Model;
@ -42,6 +43,12 @@ class Plugin extends Model implements HasPluginSettings
public $incrementing = false;
protected $fillable = [
'status',
'status_message',
'load_order',
];
/**
* @return string[]
*/
@ -137,12 +144,16 @@ class Plugin extends Model implements HasPluginSettings
$plugins[] = $data;
} catch (Exception $exception) {
if (Plugins::isDevModeActive()) {
throw ($exception);
}
report($exception);
if (!$exception instanceof JsonException) {
$plugins[] = [
'id' => $data['id'] ?? Str::uuid(),
'name' => $data['name'] ?? 'Invalid Plugin',
'name' => $data['name'] ?? $plugin,
'author' => $data['author'] ?? 'Unknown',
'version' => '0.0.0',
'description' => 'Plugin.json is invalid!',
@ -168,7 +179,7 @@ class Plugin extends Model implements HasPluginSettings
protected function sushiShouldCache(): bool
{
return false;
return !Plugins::isDevModeActive();
}
protected function casts(): array
@ -353,13 +364,14 @@ class Plugin extends Model implements HasPluginSettings
*/
public function saveSettings(array $data): void
{
$class = $this->fullClass();
if (class_exists($class)) {
try {
$pluginObject = filament($this->id);
if ($pluginObject instanceof HasPluginSettings) {
$pluginObject->saveSettings($data);
}
} catch (Exception) {
// Plugin is not loaded on the current panel, so no settings
}
}

View File

@ -298,8 +298,7 @@ class PluginService
/** @param array<string, mixed> $data */
private function setMetaData(string|Plugin $plugin, array $data): void
{
$plugin = $plugin instanceof Plugin ? $plugin->id : $plugin;
$path = plugin_path($plugin, 'plugin.json');
$path = plugin_path($plugin instanceof Plugin ? $plugin->id : $plugin, 'plugin.json');
if (File::exists($path)) {
$pluginData = File::json($path, JSON_THROW_ON_ERROR);
@ -307,6 +306,12 @@ class PluginService
$pluginData['meta'] = $metaData;
File::put($path, json_encode($pluginData, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
if (!$this->isDevModeActive()) {
// Update model to rebuild sushi cache
$plugin = !$plugin instanceof Plugin ? Plugin::findOrFail($plugin) : $plugin;
$plugin->update($metaData);
}
}
}