Fix: manualCheck now checks modpack_installations + cron cache
Detection priority in manualCheck(): 1. Egg variables 2. modpack_installations table (NEW) 3. DaemonFileRepository file scan 4. Cached cron data from modpackchecker_servers (NEW) Also returns current_version and update_available in response so the console widget can show version comparison. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
dce0e06023
commit
32e2d726bb
@@ -0,0 +1,43 @@
|
||||
# Chronicler Dispatch — manualCheck doesn't check modpack_installations
|
||||
|
||||
**Date:** 2026-04-12
|
||||
**From:** Chronicler #84 — The Meridian
|
||||
**To:** Code
|
||||
|
||||
---
|
||||
|
||||
## Root Cause
|
||||
|
||||
The console widget calls `manualCheck()` in `ModpackAPIController.php`. That method only checks:
|
||||
1. Egg variables
|
||||
2. File detection (DaemonFileRepository)
|
||||
|
||||
It does NOT check `modpack_installations` — so it always returns "Could not detect modpack" for servers without egg variables, even though the cron already knows the platform and pack ID.
|
||||
|
||||
## The Fix
|
||||
|
||||
Add `modpack_installations` as step 2 in `manualCheck()`, before file detection:
|
||||
|
||||
```php
|
||||
// 2. Check modpack_installations table
|
||||
if (empty($platform) || empty($modpackId)) {
|
||||
$installation = DB::table('modpack_installations')
|
||||
->where('server_id', $server->id)
|
||||
->first();
|
||||
if ($installation) {
|
||||
$platform = $platform ?: $installation->provider;
|
||||
$modpackId = $modpackId ?: (string) $installation->modpack_id;
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Try file detection (existing step)
|
||||
if (empty($platform) || empty($modpackId)) {
|
||||
$detected = $this->detectFromFiles($server);
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Also — the widget only shows `latest_version` but not `current_version`. Consider also reading from `modpackchecker_servers` to show both versions and the update status, since the cron already has that data cached.
|
||||
|
||||
*— Chronicler #84, The Meridian*
|
||||
**Fire + Frost + Foundation** 💙🔥❄️
|
||||
@@ -92,14 +92,36 @@ class ModpackAPIController extends Controller
|
||||
};
|
||||
}
|
||||
|
||||
// 2. If no egg variables, try file detection
|
||||
// 2. Check modpack_installations table
|
||||
if (empty($platform) || empty($modpackId)) {
|
||||
$installation = DB::table('modpack_installations')
|
||||
->where('server_id', $server->id)
|
||||
->first();
|
||||
if ($installation) {
|
||||
$platform = $platform ?: ($installation->provider ?? null);
|
||||
$modpackId = $modpackId ?: (string) ($installation->modpack_id ?? '');
|
||||
}
|
||||
}
|
||||
|
||||
// 3. If still nothing, try file detection
|
||||
if (empty($platform) || empty($modpackId)) {
|
||||
$detected = $this->detectFromFiles($server);
|
||||
$platform = $platform ?: ($detected['platform'] ?? null);
|
||||
$modpackId = $modpackId ?: ($detected['modpack_id'] ?? null);
|
||||
}
|
||||
|
||||
// 3. If still nothing, return helpful error
|
||||
// 4. If still nothing, check cached cron data
|
||||
if (empty($platform) || empty($modpackId)) {
|
||||
$cached = DB::table('modpackchecker_servers')
|
||||
->where('server_uuid', $server->uuid)
|
||||
->first();
|
||||
if ($cached && !empty($cached->platform) && !empty($cached->modpack_id)) {
|
||||
$platform = $cached->platform;
|
||||
$modpackId = $cached->modpack_id;
|
||||
}
|
||||
}
|
||||
|
||||
// 5. If still nothing, return helpful error
|
||||
if (empty($platform) || empty($modpackId)) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
@@ -109,16 +131,24 @@ class ModpackAPIController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
// 4. Check the appropriate API using the unified Service
|
||||
// 6. Check the appropriate API using the unified Service
|
||||
try {
|
||||
$versionData = $this->apiService->fetchLatestVersion($platform, $modpackId);
|
||||
|
||||
// Get cached current_version for comparison
|
||||
$cached = DB::table('modpackchecker_servers')
|
||||
->where('server_uuid', $server->uuid)
|
||||
->first();
|
||||
$currentVersion = $cached->current_version ?? null;
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'platform' => $platform,
|
||||
'modpack_id' => $modpackId,
|
||||
'modpack_name' => $versionData['name'],
|
||||
'current_version' => $currentVersion,
|
||||
'latest_version' => $versionData['version'],
|
||||
'update_available' => $currentVersion && $currentVersion !== $versionData['version'],
|
||||
'status' => 'checked',
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
|
||||
Reference in New Issue
Block a user