Skip to content
Snippets Groups Projects
FeedController.php 1.9 KiB
Newer Older
/**
 * @copyright  2020 Podlibre
 * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
 * @link       https://castopod.org/
 */

namespace App\Controllers;

use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Exceptions\PageNotFoundException;
use Opawg\UserAgentsPhp\UserAgentsRSS;
use Exception;
use App\Models\PodcastModel;
use CodeIgniter\Controller;

class FeedController extends Controller
    public function index(string $podcastName): ResponseInterface
        helper('rss');

        $podcast = (new PodcastModel())->where('name', $podcastName)->first();
            $service = UserAgentsRSS::find($_SERVER['HTTP_USER_AGENT']);
        } catch (Exception $exception) {
            // If things go wrong the show must go on and the user must be able to download the file
        $serviceSlug = null;
        if ($service) {
            $serviceSlug = $service['slug'];
        }

            "podcast#{$podcast->id}_feed" . ($service ? "_{$serviceSlug}" : '');
        if (!($found = cache($cacheName))) {
            $found = get_rss_feed($podcast, $serviceSlug);

            // The page cache is set to expire after next episode publication or a decade by default so it is deleted manually upon podcast update
            $secondsToNextUnpublishedEpisode = (new EpisodeModel())->getSecondsToNextUnpublishedEpisode(
            );

            cache()->save(
                $cacheName,
                $found,
                $secondsToNextUnpublishedEpisode
                    ? $secondsToNextUnpublishedEpisode
        return $this->response->setXML($found);