Skip to content

Commit

Permalink
added album artwork to rss reviews feed
Browse files Browse the repository at this point in the history
  • Loading branch information
RocketMan committed Jan 29, 2025
1 parent 786419b commit 7dbb94b
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 3 deletions.
10 changes: 9 additions & 1 deletion controllers/RSS.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* Zookeeper Online
*
* @author Jim Mason <[email protected]>
* @copyright Copyright (C) 1997-2023 Jim Mason <[email protected]>
* @copyright Copyright (C) 1997-2025 Jim Mason <[email protected]>
* @link https://zookeeper.ibinx.com/
* @license GPL-3.0
*
Expand All @@ -25,6 +25,7 @@
namespace ZK\Controllers;

use ZK\Engine\Engine;
use ZK\Engine\IArtwork;
use ZK\Engine\IChart;
use ZK\Engine\ILibrary;
use ZK\Engine\IReview;
Expand Down Expand Up @@ -102,12 +103,19 @@ public function recentReviews() {

$limit = $_REQUEST['limit'] ?? 50;
$results = Engine::api(IReview::class)->getRecentReviews('', 0, $limit);
// coalesce albums into one array for artwork injection
// use foreach, as reference passing does not work with array_map
$albums = [];
foreach($results as &$review)
$albums[] = &$review["album"];
Engine::api(IArtwork::class)->injectAlbumArt($albums);
foreach($results as &$row) {
$reviews = Engine::api(IReview::class)->getReviews($row['album']['tag'], 0, $row['user']);
if(count($reviews))
$row['review'] = $reviews[0]['review'];
}

$this->params['GENRES'] = ILibrary::GENRES;
$this->params['reviews'] = $results;
}

Expand Down
16 changes: 15 additions & 1 deletion controllers/RSS.xslt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Zookeeper Online (C) 1997-2021 Jim Mason <[email protected]> | @source: https://zookeeper.ibinx.com/ | @license: magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3.0 -->
<!-- Zookeeper Online (C) 1997-2025 Jim Mason <[email protected]> | @source: https://zookeeper.ibinx.com/ | @license: magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3.0 -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:zk="http://zookeeper.ibinx.com/zkns"
Expand All @@ -20,6 +20,12 @@ h2 {
.rss-channel > .rss-item {
padding: 2px 0px;
}
.rss-item:has(.album-thumb) {
min-height: 180px;
}
.rss-item .album-thumb img {
border-radius: 5px;
}
]]>
</xsl:text>
</style>
Expand Down Expand Up @@ -67,6 +73,8 @@ function fixup() {
</xsl:template>
<xsl:template match="item">
<div class="rss-item">
<div>
<xsl:apply-templates select="zk:albumart"/>
<h3>
<a class="nav" href="{link}">
<xsl:value-of select="title"/>
Expand All @@ -75,7 +83,13 @@ function fixup() {
<xsl:value-of select="zk:subtitle"/>
</span>
</h3>
</div>
<p class="description" data-description="{description}"/>
</div>
</xsl:template>
<xsl:template match="zk:albumart">
<div class='album-thumb pull-right'>
<img src="{.}"/>
</div>
</xsl:template>
</xsl:stylesheet>
8 changes: 8 additions & 0 deletions controllers/templates/default/rss/reviews.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@
<source url="{{ app.baseUrl }}zkrss.php?feed=reviews">{{ app.station_title }} Album Reviews</source>
<pubDate>{{ review.reviewed | date("r") }}</pubDate>
<zk:subtitle>Reviewed {{ review.reviewed | date(dateSpec) }}</zk:subtitle>
<zk:reviewid>{{ review.rid }}</zk:reviewid>
<zk:category>{{ GENRES[review.album.category] }}</zk:category>
<zk:albumid>{{ review.album.tag }}</zk:albumid>
<zk:album>{{ review.album.album }}</zk:album>
<zk:artist>{{ artist }}</zk:artist>
{% if review.album.image_url %}
<zk:albumart>{{ app.baseUrl ~ review.album.image_url }}</zk:albumart>
{% endif %}
</item>
{% endfor %}
</channel>
Expand Down
8 changes: 7 additions & 1 deletion engine/IArtwork.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* Zookeeper Online
*
* @author Jim Mason <[email protected]>
* @copyright Copyright (C) 1997-2023 Jim Mason <[email protected]>
* @copyright Copyright (C) 1997-2025 Jim Mason <[email protected]>
* @link https://zookeeper.ibinx.com/
* @license GPL-3.0
*
Expand Down Expand Up @@ -37,4 +37,10 @@ function deleteAlbumArt($tag);
function deleteArtistArt($artist);
function expireCache($days=10, $expireAlbums=false);
function expireEmpty($days=1);
/**
* Add `image_url` and/or `info_url` properties for each album with artwork
*
* @param $albums target album array (in/out)
*/
function injectAlbumArt(array &$albums): void;
}
32 changes: 32 additions & 0 deletions engine/impl/ArtworkImpl.php
Original file line number Diff line number Diff line change
Expand Up @@ -299,4 +299,36 @@ public function expireEmpty($days=1) {

return $success ? $stmt->rowCount() + $count : false;
}

public function injectAlbumArt(array &$albums): void {
$chain = [];
$tags = [];

for($i = 0; $i < count($albums); $i++) {
$tag = $albums[$i]["tag"] ?? 0;
if($tag && is_numeric($tag)) {
if(array_key_exists($tag, $tags))
$chain[$i] = $tags[$tag];

$tags[$tag] = $i;
}
}

if(count($tags) == 0)
return;

$query = "SELECT tag, image_uuid, info_url FROM albummap a " .
"LEFT JOIN artwork i ON a.image_id = i.id " .
"WHERE tag IN (" . implode(',', array_keys($tags)) . ")";
$stmt = $this->prepare($query);
$stmt->execute();
while($row = $stmt->fetch()) {
for($next = $tags[$row["tag"]]; $next >= 0; $next = $chain[$next] ?? -1) {
if($row["image_uuid"])
$albums[$next]["image_url"] = $this->getCachePath($row["image_uuid"]);
if($row["info_url"])
$albums[$next]["info_url"] = $row["info_url"];
}
}
}
}

0 comments on commit 7dbb94b

Please sign in to comment.