config['jellyStatURL'] ?? ''; $jellyStatInternalURL = $organizr->config['jellyStatInternalURL'] ?? ''; $jellyStatApikey = $organizr->config['jellyStatApikey'] ?? ''; $enabled = $organizr->config['homepageJellyStatEnabled'] ?? false; echo "Configuration:\n"; echo "- JellyStat URL: " . ($jellyStatURL ?: 'NOT SET') . "\n"; echo "- Internal URL: " . ($jellyStatInternalURL ?: 'NOT SET') . "\n"; echo "- API Key: " . ($jellyStatApikey ? 'SET (****)' : 'NOT SET') . "\n"; echo "- Plugin Enabled: " . ($enabled ? 'YES' : 'NO') . "\n\n"; if (!$enabled) { echo "❌ JellyStat plugin is not enabled!\n"; echo "Enable it in Organizr settings first.\n"; exit(1); } if (!$jellyStatURL) { echo "❌ JellyStat URL is not configured!\n"; echo "Set jellyStatURL in Organizr settings first.\n"; exit(1); } // Test basic connectivity $testUrl = !empty($jellyStatInternalURL) ? $jellyStatInternalURL : $jellyStatURL; $testUrl = rtrim($organizr->qualifyURL($testUrl), '/'); echo "Testing connectivity to: {$testUrl}\n\n"; // Test endpoints that the metadata function would try $testKey = 'test-item-id'; $endpoints = []; if ($jellyStatApikey) { $endpoints['JellyStat API (getItem)'] = $testUrl . '/api/getItem?apiKey=' . urlencode($jellyStatApikey) . '&id=' . urlencode($testKey); $endpoints['JellyStat API (getItemById)'] = $testUrl . '/api/getItemById?apiKey=' . urlencode($jellyStatApikey) . '&id=' . urlencode($testKey); } $endpoints['Jellyfin Proxy (basic)'] = $testUrl . '/proxy/Items/' . rawurlencode($testKey); $endpoints['Jellyfin Proxy (with fields)'] = $testUrl . '/proxy/Items/' . rawurlencode($testKey) . '?Fields=Overview,People,Genres,CommunityRating,CriticRating,Studios,Taglines,ProductionYear,PremiereDate'; // Also test a real item ID if provided via command line if (isset($argv[1])) { $realKey = $argv[1]; echo "Testing with real item ID: {$realKey}\n\n"; if ($jellyStatApikey) { $endpoints['Real Item - JellyStat API'] = $testUrl . '/api/getItem?apiKey=' . urlencode($jellyStatApikey) . '&id=' . urlencode($realKey); } $endpoints['Real Item - Jellyfin Proxy'] = $testUrl . '/proxy/Items/' . rawurlencode($realKey) . '?Fields=Overview,People,Genres,CommunityRating,CriticRating,Studios,Taglines,ProductionYear,PremiereDate'; } foreach ($endpoints as $name => $url) { echo "Testing {$name}:\n"; echo "URL: {$url}\n"; try { $options = $organizr->requestOptions($url, null, $organizr->config['jellyStatDisableCertCheck'] ?? false, $organizr->config['jellyStatUseCustomCertificate'] ?? false ); $response = Requests::get($url, [], $options); if ($response->success) { $data = json_decode($response->body, true); if (json_last_error() === JSON_ERROR_NONE) { echo "✅ SUCCESS - Status: {$response->status_code}\n"; if (is_array($data)) { $keys = array_keys($data); echo "Response has keys: " . implode(', ', array_slice($keys, 0, 10)) . (count($keys) > 10 ? '... (' . count($keys) . ' total)' : '') . "\n"; // Look for typical media metadata fields $mediaFields = ['Name', 'Id', 'Type', 'Overview', 'Genres', 'People', 'RunTimeTicks', 'ProductionYear']; $foundFields = array_intersect($keys, $mediaFields); if (!empty($foundFields)) { echo "Media fields found: " . implode(', ', $foundFields) . "\n"; // Show sample values foreach (['Name', 'Type', 'Overview'] as $field) { if (isset($data[$field])) { $value = $data[$field]; if (is_string($value) && strlen($value) > 50) { $value = substr($value, 0, 47) . '...'; } echo "{$field}: {$value}\n"; } } } } else { echo "Response is not an array: " . gettype($data) . "\n"; } } else { echo "❌ Invalid JSON response\n"; echo "Raw response: " . substr($response->body, 0, 200) . "...\n"; } } else { echo "❌ HTTP Error: {$response->status_code}\n"; if (!empty($response->body)) { echo "Error body: " . substr($response->body, 0, 200) . "...\n"; } } } catch (Exception $e) { echo "❌ Exception: " . $e->getMessage() . "\n"; } echo "\n" . str_repeat('-', 60) . "\n\n"; } echo "=== Debug Complete ===\n\n"; echo "Next steps if endpoints are failing:\n"; echo "1. Verify JellyStat is running and accessible\n"; echo "2. Check if API key is correct and has permissions\n"; echo "3. Test URLs directly in browser/curl\n"; echo "4. Check JellyStat logs for errors\n"; echo "5. Verify firewall/network connectivity\n\n"; echo "If you have a working item ID from JellyStat, run:\n"; echo "php debug_jellystat_metadata.php YOUR-ITEM-ID\n";