1
0
Files
Bridges/FuturamaHitAndRunBridge.php

106 lines
4.5 KiB
PHP

<?php
class FuturamaHitAndRunBridge extends BridgeAbstract {
const NAME = 'Futurama: Hit & Run Mod Releases';
const URI = 'https://modbakery.donutteam.com/projects/downloads/48/183';
const DESCRIPTION = 'Returns the latest releases for the Futurama: Hit & Run total conversion mod';
const MAINTAINER = 'Akamaru';
const CACHE_TIMEOUT = 3600; // 1 hour
public function getIcon()
{
return 'https://www.google.com/s2/favicons?domain=modbakery.donutteam.com&sz=32';
}
public function collectData() {
$html = getSimpleHTMLDOM(self::URI);
if (!$html) return;
// Find all version blocks
$versionBlocks = $html->find('div.component-block h3.component-header');
foreach ($versionBlocks as $versionHeader) {
// Get version number from header
$versionText = trim($versionHeader->find('div.text', 0)->plaintext ?? '');
if (empty($versionText)) continue;
// Skip branch names - only process actual version numbers (e.g., Version 0.1.0, Version 1.2.3)
if (!preg_match('/^Version\s+\d+\./', $versionText)) continue;
// Remove "Version " prefix to get clean version number
$versionNumber = preg_replace('/^Version\s+/', '', $versionText);
// Get the parent block containing all version information
$versionBlock = $versionHeader->parent();
if (!$versionBlock) continue;
$item = [];
$item['title'] = 'Futurama: Hit & Run - Version ' . $versionNumber;
$item['uid'] = 'futurama-har-' . $versionNumber;
// Find version ID from badges
$badges = $versionBlock->find('div.component-badge');
foreach ($badges as $badge) {
$badgeText = $badge->plaintext;
if (strpos($badgeText, 'ID ') !== false) {
preg_match('/ID (\d+)/', $badgeText, $matches);
if (isset($matches[1])) {
$item['uid'] = 'futurama-har-id-' . $matches[1];
}
}
// Get published date
if (strpos($badgeText, 'Published') !== false) {
$timeElement = $badge->find('time.component-human-time', 0);
if ($timeElement && $timeElement->datetime) {
$item['timestamp'] = strtotime($timeElement->datetime);
}
}
}
// Use the project downloads page as article link
$item['uri'] = self::URI;
// Find download link for content
$downloadLink = null;
$downloadBtn = $versionBlock->find('a.component-button', 0);
if ($downloadBtn && $downloadBtn->href) {
$downloadLink = 'https://modbakery.donutteam.com' . $downloadBtn->href;
}
// Build content
$content = '';
// Add banner
$content .= '<div style="text-align: center;">';
$content .= '<img src="https://nyc3.digitaloceanspaces.com/donut-team/files/2025/10/18/19-46-32/399a6671-8cf9-4aa0-b3d5-6cd8656f8a09/banner.webp" alt="Futurama: Hit & Run Banner" style="max-width: 100%;">';
$content .= '</div><br>';
// Add changelog if available
$changelogDetails = $versionBlock->find('details.component-details', 0);
if ($changelogDetails) {
// Get the entire changelog content (includes h2, h3, ul, p elements)
$changelogHTML = $changelogDetails->innertext;
// Remove the <summary> tag from the output
$changelogHTML = preg_replace('/<summary>.*?<\/summary>/is', '', $changelogHTML);
// Remove redundant version header from changelog (e.g., <h2>Version 0.1.2</h2>)
$changelogHTML = preg_replace('/<h2[^>]*>Version\s+' . preg_quote($versionNumber, '/') . '<\/h2>/is', '', $changelogHTML);
if (!empty(trim(strip_tags($changelogHTML)))) {
$content .= $changelogHTML;
}
}
$item['content'] = $content;
$item['author'] = 'Slurm Team';
// Add banner as enclosure
$item['enclosures'][] = 'https://nyc3.digitaloceanspaces.com/donut-team/files/2025/10/18/19-46-32/399a6671-8cf9-4aa0-b3d5-6cd8656f8a09/banner.webp';
$this->items[] = $item;
}
}
public function getName() {
return 'Futurama: Hit & Run - Mod Releases';
}
}