Compare commits

...

3 Commits

Author SHA1 Message Date
NH Gooi
dee127eebf Fixed: podcasts may have .mp3 extension instead of .MP3 2024-04-26 13:35:20 +02:00
Mischa Spelt
e95a079593 Merge branch 'release/dev' 2024-04-25 15:32:34 +02:00
4f940c1df0 Allow slash in podcast name 2017-11-14 10:09:36 +01:00

View File

@@ -3,7 +3,6 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpFoundation\StreamedResponse;
error_reporting(E_ALL); error_reporting(E_ALL);
@@ -12,14 +11,13 @@ ini_set('display_errors', true);
class PodcastController extends Controller class PodcastController extends Controller
{ {
public static $BASE_SQL = <<<QUERY public static $BASE_SQL = <<<QUERY
SELECT `podcast`.`id`, `podcast`.`soundfilename`, `podcast`.`duration`, SELECT `podcast`.`id`, `podcast`.`soundfilename`,
`podcast_meta`.`creationdt` AS `created`, `podcast_meta`.`title`, `podcast_meta`.`content`, `podcast_meta`.`program`, `podcast_meta`.`creationdt` AS `created`, `podcast_meta`.`title`, `podcast_meta`.`content`, `podcast_meta`.`program`,
`podcast_meta`.`imagefile`, `podcast_meta`.`imagecaption`,
`programs`.`longname` AS `program_name`, `programs`.`description` AS `program_description` `programs`.`longname` AS `program_name`, `programs`.`description` AS `program_description`
FROM `podcast` FROM `podcast`
INNER JOIN `podcast_meta` ON `podcast`.`id` = `podcast_meta`.`podcast` INNER JOIN `podcast_meta` ON `podcast`.`id` = `podcast_meta`.`podcast`
LEFT JOIN `programs` ON `podcast_meta`.`program` = `programs`.`id` LEFT JOIN `programs` ON `podcast_meta`.`program` = `programs`.`id`
WHERE `podcast_meta`.`active` = 1 AND `podcast_meta`.`public` = 1 WHERE `podcast_meta`.`active` = 1 AND `podcast_meta`.`title` <> '' AND `podcast_meta`.`content` <> ''
QUERY; QUERY;
/** /**
@@ -39,39 +37,6 @@ QUERY;
return $this->getPodcastList($request, null, []); return $this->getPodcastList($request, null, []);
} }
/**
* RSS-feed van alle podcasts
*/
public function rss(Request $request) {
$page = (int)$request->get('page', 1);
if($page <= 0) {
return abort(400);
}
$podcasts = $this->retrievePodcasts($page, $count = 20, $filter = null, $params = []);
$view = view('rss.podcasts')->with('podcasts', $podcasts)->with('url', $request->url())->with('page', $page);
return response($view)->header('Content-Type', 'application/xml');
}
/**
* RSS-feed van alle podcasts van een programma (bv. podcastserie)
*/
public function program_rss(Request $request, $program) {
$page = (int)$request->get('page', 1);
if($page <= 0) {
return abort(400);
}
$programQuery = app('db')->select('SELECT `programs`.`id` AS `id`, `programs`.`longname` AS `name`, `programs`.`description` AS `description`, `programs`.`tagline` AS `tagline`, `programs`.`description` AS `description`, `programs`.`email` FROM `programs` WHERE `programs`.`id` = :id', ['id' => $program]);
$programDetails = new \Model\Program($programQuery[0]);
$filter = '`podcast_meta`.`program` = :program';
$params = ['program' => (int)$program];
$podcasts = $this->retrievePodcasts($page, $count = 1000, $filter, $params);
$view = view('rss.podcasts')->with('program', $programDetails)->with('podcasts', $podcasts)->with('url', $request->url())->with('page', $page);
return response($view)->header('Content-Type', 'application/xml');
}
/** /**
* Lijst van alle podcasts voor een specifiek programma * Lijst van alle podcasts voor een specifiek programma
*/ */
@@ -105,17 +70,22 @@ QUERY;
public function findpodcast(Request $request, $query) { public function findpodcast(Request $request, $query) {
$page = (int)$request->get('pagina', 1); $page = (int)$request->get('pagina', 1);
$count = (int)$request->get('aantal', 15);
if($page <= 0) { if($page <= 0) {
return abort(400); return abort(400);
} }
$start = ($page - 1) * $count;
$query = strip_tags(urldecode($query)); $query = strip_tags(urldecode($query));
$searchRange = [
(new \DateTimeImmutable())->setDate(date('Y') + 1 - $page, 1, 1),
(new \DateTimeImmutable())->setDate(date('Y') + 2 - $page, 1, 1)];
$podcasts = app('db')->select(self::$BASE_SQL $podcasts = app('db')->select(self::$BASE_SQL
. ' AND MATCH(`podcast_meta`.`title`, `podcast_meta`.`content`) AGAINST(:query IN NATURAL LANGUAGE MODE)' . ' AND `podcast_meta`.`creationdt` >= :startRange AND `podcast_meta`.`creationdt` <= :endRange'
. ' AND MATCH(`podcast_meta`.`title`, `podcast_meta`.`content`) AGAINST(:query IN BOOLEAN MODE)'
. ' ORDER BY `creationdt` DESC' . ' ORDER BY `creationdt` DESC'
. ' LIMIT ' . $start . ', ' . $count, [ . ' LIMIT 0, 20', [
'startRange' => $searchRange[0]->format('Y-m-d'),
'endRange' => $searchRange[1]->format('Y-m-d'),
'query' => $query 'query' => $query
]); ]);
@@ -132,18 +102,12 @@ QUERY;
private function getPodcastList(Request $request, $filter, $params) private function getPodcastList(Request $request, $filter, $params)
{ {
$count = (int)$request->get('aantal', 15); $count = (int)$request->get('aantal', 15);
$page = (int)$request->get('pagina', 1); $page = (int)$request->get('pagina', 1);
if($count <= 0 || $page <= 0) { if($count <= 0 || $page <= 0) {
return abort(400); return abort(400);
} }
$result = $this->retrievePodcasts($page, $count, $filter, $params);
return response()->json(['page' => $page, 'count' => $count, 'podcasts' => $result]);
}
private function retrievePodcasts($page, $count, $filter, $params)
{
$start = ($page - 1) * $count; $start = ($page - 1) * $count;
$podcasts = app('db')->select(self::$BASE_SQL $podcasts = app('db')->select(self::$BASE_SQL
. ($filter ? ' AND (' . $filter . ')' : '') . ($filter ? ' AND (' . $filter . ')' : '')
@@ -156,7 +120,7 @@ QUERY;
$result[] = new \Model\Podcast($podcast); $result[] = new \Model\Podcast($podcast);
} }
return $result; return response()->json(['page' => $page, 'count' => $count, 'podcasts' => $result]);
} }
/** /**
@@ -176,7 +140,7 @@ QUERY;
} }
return response()->download($podcast->getSoundfile(), return response()->download($podcast->getSoundfile(),
'NH Gooi Gemist - ' . str_replace('/', '-', $podcast->title) . '.mp3'); '6FM Gemist - ' . str_replace('/', '-', $podcast->title) . '.mp3');
} }
/*** /***
@@ -210,7 +174,7 @@ QUERY;
public function latestNews(Request $request) { public function latestNews(Request $request) {
$filename = '/var/audio/regionieuws.mp3'; $filename = '/var/audio/regionieuws.mp3';
return response()->download($filename, return response()->download($filename,
'NH Gooi Regionieuws ' . date('d-m-Y') . '.mp3'); '6FM Regionieuws ' . date('d-m-Y') . '.mp3');
$size = filesize($filename); $size = filesize($filename);
$content = fread($file, $size); $content = fread($file, $size);
@@ -232,10 +196,14 @@ QUERY;
$files = []; $files = [];
$size = 0; $size = 0;
while($duration--) { while($duration--) {
$file = '/var/audio/uitzending/' . $currentHour->format('Ymd_Hi') . '.mp3'; $file = '/var/audio/uitzending/' . $currentHour->format('Ymd_Hi');
if(!file_exists($file)) { if(file_exists($file . '.mp3')) {
return abort(404); $file .= '.mp3';
} } else if(file_exists($file . '.MP3')) {
$file .= '.MP3';
} else {
return abort(404);
}
$size += ($filesize = filesize($file)); $size += ($filesize = filesize($file));
$files[] = [$file, $filesize]; $files[] = [$file, $filesize];