Skip to content

Commit 0a9081e

Browse files
Merge branch 'development' into codex/add-all-episodes-page
Signed-off-by: Josh Brickner <15388+leftouterjoins@users.noreply.github.com>
2 parents 97f4570 + 7e57a13 commit 0a9081e

File tree

7 files changed

+56
-2
lines changed

7 files changed

+56
-2
lines changed

conf/podsumer.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ base_template = base
88
state_file = state/podsumer.sqlite3
99
sql_dir = sql
1010
per_item_art_download = 33
11+
items_per_page = 10
1112
ssl = false
1213

1314
# File Storage Method

conf/test.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ base_template = base
88
state_file = state/podsumer-test.sqlite3
99
sql_dir = sql
1010
per_item_art_download = 33
11+
items_per_page = 10
1112
ssl = false
1213

1314
media_dir = /opt/media

src/Brickner/Podsumer/State.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,13 +205,33 @@ public function getFeedItems(int $feed_id): array
205205
return (false === $result) ? [] : $result;
206206
}
207207

208+
208209
public function getAllItems(): array
209210
{
210211
$sql = 'SELECT items.name, items.feed_id, items.id, items.guid, items.audio_url, items.audio_file, COALESCE(items.image, feeds.image) AS image, items.size, items.published, items.description, items.playback_position, feeds.name AS feed_name FROM items JOIN feeds ON feeds.id = items.feed_id ORDER BY items.published DESC';
211212

212213
$result = $this->query($sql);
213214

214215
return (false === $result) ? [] : $result;
216+
}
217+
218+
public function getFeedItemsPage(int $feed_id, int $limit, int $page = 1): array
219+
{
220+
$offset = ($page - 1) * $limit;
221+
$sql = 'SELECT items.name, items.feed_id, items.id, items.guid, items.audio_url, items.audio_file, COALESCE(items.image, feeds.image) AS image, items.size, items.published, items.description, items.playback_position FROM items JOIN feeds ON feeds.id = items.feed_id WHERE items.feed_id = :id ORDER BY items.published DESC LIMIT :limit OFFSET :offset';
222+
$params = ['id' => $feed_id, 'limit' => $limit, 'offset' => $offset];
223+
$result = $this->query($sql, $params);
224+
225+
226+
return (false === $result) ? [] : $result;
227+
}
228+
229+
public function countFeedItems(int $feed_id): int
230+
{
231+
$sql = 'SELECT COUNT(*) AS count FROM items WHERE feed_id = :id';
232+
$result = $this->query($sql, ['id' => $feed_id]);
233+
234+
return intval($result[0]['count'] ?? 0);
215235
}
216236

217237
public function getFeedByHash(string $hash): array

templates/feed.html.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,14 @@
3232
<?= substr(strip_tags($item['description']), 0, 360); ?>
3333
</div>
3434
<? endforeach ?>
35+
<div class="py-4 font-bold">
36+
<? if ($page > 1) { ?>
37+
<a href="/feed?id=<?= $feed['id'] ?>&page=<?= $page - 1 ?>">Previous</a>
38+
<? } ?>
39+
<? if ($page < $page_count) { ?>
40+
<? if ($page > 1) { ?>&nbsp;|&nbsp;<? } ?>
41+
<a href="/feed?id=<?= $feed['id'] ?>&page=<?= $page + 1 ?>">Next</a>
42+
<? } ?>
43+
<span>&nbsp;&nbsp;Page <?= $page ?> of <?= $page_count ?></span>
44+
</div>
3545
</div>

tests/Brickner/Podsumer/ConfigTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ public function testGet(): void
2222
$this->assertEquals($user, 'user');
2323
}
2424

25+
public function testGetItemsPerPage(): void
26+
{
27+
$config = new Config($this->root . DIRECTORY_SEPARATOR . 'conf/test.conf');
28+
$per_page = $config->get('podsumer', 'items_per_page');
29+
30+
$this->assertEquals(10, $per_page);
31+
}
32+
2533
public function testGetGroup(): void
2634
{
2735
$config = new Config($this->root . DIRECTORY_SEPARATOR . 'conf/test.conf');

tests/Brickner/Podsumer/StateTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,14 @@ public function testGetAllItems()
9292
$this->assertEquals(4, count($items));
9393
}
9494

95+
public function testGetFeedItemsPage()
96+
{
97+
$this->feed = new Feed(self::TEST_FEED_URL);
98+
$this->state->addFeed($this->feed);
99+
$items = $this->state->getFeedItemsPage(1, 2, 1);
100+
$this->assertEquals(2, count($items));
101+
}
102+
95103
public function testGetFeedByHash()
96104
{
97105
$this->feed = new Feed(self::TEST_FEED_URL);

www/index.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,15 @@ function feed(array $args): void
9595
{
9696
global $main;
9797

98+
$page = isset($args['page']) ? max(1, intval($args['page'])) : 1;
99+
$per_page = intval($main->getConf('podsumer', 'items_per_page')) ?: 10;
100+
$feed_id = intval($args['id']);
101+
98102
$vars = [
99-
'feed' => $main->getState()->getFeed(intval($args['id'])),
100-
'items' => $main->getState()->getFeedItems(intval($args['id']))
103+
'feed' => $main->getState()->getFeed($feed_id),
104+
'items' => $main->getState()->getFeedItemsPage($feed_id, $per_page, $page),
105+
'page' => $page,
106+
'page_count' => max(1, ceil($main->getState()->countFeedItems($feed_id) / $per_page))
101107
];
102108

103109
if (empty($vars['feed']) || empty($vars['items'])) {

0 commit comments

Comments
 (0)