Add manual subreddit/YouTube channel configuration (manage.php)
Browser-based feed selection layered on top of config/feeds.php: - manage.php (password + CSRF gated, session based): add subreddits (name / r/name / URL) and YouTube channels (@handle / UC id / URL, handle resolved to channel_id once, youtube.com only); enable/disable toggles; remove manual feeds; config feeds are hidden, not deleted. - New feeds are validated with one immediate fetch (bypassing the per-refresh host cap): HTTP 404 rejects the entry, 429 keeps it for a later refresh. YouTube labels adopt the real channel title. - feeds table gains origin (config|manual) and enabled columns, with a guarded ALTER migration for existing databases. - Only enabled feeds are refreshed and served: getItems/countItems filter by feed_url in enabled feeds, so deselected feeds' cached stories are hidden, not deleted; re-adding a URL re-enables it. - Dashboard header gets a Manage link; manage page styled with the existing design tokens; README documents the feature.
This commit is contained in:
+5
-2
@@ -39,8 +39,9 @@ final class FeedService
|
||||
];
|
||||
|
||||
$hostCounts = [];
|
||||
$activeFeeds = $this->repository->enabledFeeds();
|
||||
|
||||
foreach ($this->repository->staleFeeds($this->feeds, $this->ttlSeconds, $this->errorRetryTtlSeconds) as $feed) {
|
||||
foreach ($this->repository->staleFeeds($activeFeeds, $this->ttlSeconds, $this->errorRetryTtlSeconds) as $feed) {
|
||||
$url = (string) $feed['url'];
|
||||
$host = (string) parse_url($url, PHP_URL_HOST);
|
||||
|
||||
@@ -100,12 +101,14 @@ final class FeedService
|
||||
}
|
||||
|
||||
/**
|
||||
* Sources that currently have at least one enabled feed.
|
||||
*
|
||||
* @return array<int, string>
|
||||
*/
|
||||
public function sources(): array
|
||||
{
|
||||
$sources = [];
|
||||
foreach ($this->feeds as $feed) {
|
||||
foreach ($this->repository->enabledFeeds() as $feed) {
|
||||
$sources[(string) $feed['source']] = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user