<?php

class FeedsController extends Zend_Controller_Action
{
    public function stationRssAction()
    {
        $this->view->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);

        $request = $this->getRequest();
        $response = $this->getResponse();

        if ((Application_Model_Preference::getStationPodcastPrivacy()
                && $request->getParam("sharing_token") != Application_Model_Preference::getStationPodcastDownloadKey())
                && !RestAuth::verifyAuth(true, false, $this)) {
            $response->setHttpResponseCode(401);
            return;
        }

        CORSHelper::enableCrossOriginRequests($request, $response);

        $rssData = Application_Service_PodcastService::createStationRssFeed();

        $mimeType = "text/xml";
        header("Content-Type: $mimeType; charset=UTF-8");

        if (isset($_SERVER['HTTP_RANGE'])) {
            header('HTTP/1.1 206 Partial Content');
        } else {
            header('HTTP/1.1 200 OK');
        }
        header("Content-Type: $mimeType");
        header("Content-Transfer-Encoding: binary");
        header('Cache-Control: public, must-revalidate, max-age=0');
        header('Pragma: no-cache');
        header('Accept-Ranges: bytes');
        $size = strlen($rssData);

        $begin = 0;
        $end   = $size - 1;

        //ob_start(); //Must start a buffer here for these header() functions

        if (isset($_SERVER['HTTP_RANGE'])) {
            if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches)) {
                $begin = intval($matches[1]);
                if (!empty($matches[2])) {
                    $end = intval($matches[2]);
                }
            }
        }

        if ($size > 0) {
            header('Content-Length:' . (($end - $begin) + 1));
            if (isset($_SERVER['HTTP_RANGE'])) {
                header("Content-Range: bytes $begin-$end/$size");
            }
        }

        echo $rssData;
    }
}