Browse Source

implement recent uploads RSS

main
ghost 1 year ago
parent
commit
643d643f46
  1. 81
      src/Controller/TorrentController.php
  2. 4
      templates/default/activity/event/undefined.rss.twig
  3. 2
      templates/default/activity/list.rss.twig
  4. 2
      templates/default/torrent/list.html.twig
  5. 17
      templates/default/torrent/list.rss.twig

81
src/Controller/TorrentController.php

@ -460,6 +460,87 @@ class TorrentController extends AbstractController
]); ]);
} }
#[Route(
'/{_locale}/rss/torrents',
name: 'rss_torrents_recent',
defaults: [
'_locale' => '%app.locale%'
],
requirements: [
'_locale' => '%app.locales%'
],
methods:
[
'GET'
]
)]
public function rssRecent(
Request $request,
UserService $userService,
TorrentService $torrentService,
ActivityService $activityService
): Response
{
// Init user
$user = $this->initUser(
$request,
$userService,
$activityService
);
// Get total torrents
$total = $torrentService->findTorrentsTotal(
[],
$user->getLocales(),
!$user->isModerator() && $user->isSensitive() ? false : null, // hide on sensitive mode enabled or show all
!$user->isModerator() ? true : null // show approved content only for regular users
);
// Create torrents list
$torrents = [];
foreach ($torrentService->findTorrents(
[],
$user->getLocales(),
!$user->isModerator() && $user->isSensitive() ? false : null, // hide on sensitive mode enabled or show all
!$user->isModerator() ? true : null, // show approved content only for regular users
$this->getParameter('app.pagination'),
0
) as $torrent)
{
// Read file
if (!$file = $torrentService->readTorrentFileByTorrentId($torrent->getId()))
{
throw $this->createNotFoundException(); // @TODO exception
}
$torrents[] =
[
'id' => $torrent->getId(),
'added' => $torrent->getAdded(),
'file' =>
[
'name' => $file->getName(),
],
'user' =>
[
'id' => $torrent->getUserId(),
],
];
}
$response = new Response();
$response->headers->set('Content-Type', 'text/xml');
return $this->render(
'default/torrent/list.rss.twig',
[
'query' => $request->query->get('query'),
'torrents' => $torrents
],
$response
);
}
// Forms // Forms
#[Route( #[Route(
'/{_locale}/submit', '/{_locale}/submit',

4
templates/default/activity/event/undefined.rss.twig

@ -2,6 +2,6 @@
<title>{{ 'undefined event' | trans }} {{ 'by' | trans }} #{{ user.id }}</title> <title>{{ 'undefined event' | trans }} {{ 'by' | trans }} #{{ user.id }}</title>
<author>#{{ user.id }}</author> <author>#{{ user.id }}</author>
<pubDate>{{ added | date('D, d M Y h:i:s O') }}</pubDate> <pubDate>{{ added | date('D, d M Y h:i:s O') }}</pubDate>
<guid>{{ path('user_info', { userId : user.id }) }}#activity-{{ id }}</guid> <guid>{{ url('user_info', { userId : user.id }) }}#activity-{{ id }}</guid>
<link>{{ path('user_info', { userId : user.id }) }}#activity</link> <link>{{ url('user_info', { userId : user.id }) }}#activity</link>
</item> </item>

2
templates/default/activity/list.rss.twig

@ -2,7 +2,7 @@
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel> <channel>
<atom:link href="{{ url('torrent_recent') }}" rel="self" type="application/rss+xml"></atom:link> <atom:link href="{{ url('torrent_recent') }}" rel="self" type="application/rss+xml"></atom:link>
<title>{{ name }}</title> <title>{{ name }} - {{ 'Activity' | trans }}</title>
<link>{{ url('torrent_recent') }}</link> <link>{{ url('torrent_recent') }}</link>
{% for activity in activities %} {% for activity in activities %}
{{ render(controller( {{ render(controller(

2
templates/default/torrent/list.html.twig

@ -4,7 +4,7 @@
<div class="text-right"> <div class="text-right">
<h2>{{ 'Recent uploads' | trans }}</h2> <h2>{{ 'Recent uploads' | trans }}</h2>
<sub> <sub>
<a class="text-color-night margin-x-4-px" href="{{ path('rss_activity') }}" title="RSS"> <a class="text-color-night margin-x-4-px" href="{{ path('rss_torrents_recent') }}" title="RSS">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16">
<path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm1.5 2.5c5.523 0 10 4.477 10 10a1 1 0 1 1-2 0 8 8 0 0 0-8-8 1 1 0 0 1 0-2zm0 4a6 6 0 0 1 6 6 1 1 0 1 1-2 0 4 4 0 0 0-4-4 1 1 0 0 1 0-2zm.5 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/> <path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm1.5 2.5c5.523 0 10 4.477 10 10a1 1 0 1 1-2 0 8 8 0 0 0-8-8 1 1 0 0 1 0-2zm0 4a6 6 0 0 1 6 6 1 1 0 1 1-2 0 4 4 0 0 0-4-4 1 1 0 0 1 0-2zm.5 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/>
</svg> </svg>

17
templates/default/torrent/list.rss.twig

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<atom:link href="{{ url('torrent_recent') }}" rel="self" type="application/rss+xml"></atom:link>
<title>{{ name }} - {{ 'Torrents' | trans }}</title>
<link>{{ url('torrent_recent') }}</link>
{% for torrent in torrents %}
<item>
<title>{{ torrent.file.name }}</title>
<author>#{{ torrent.user.id }}</author>
<pubDate>{{ torrent.added | date('D, d M Y h:i:s O') }}</pubDate>
<guid>{{ url('torrent_info', { torrentId : torrent.id }) }}</guid>
<link>{{ url('torrent_info', { torrentId : torrent.id }) }}</link>
</item>
{% endfor %}
</channel>
</rss>
Loading…
Cancel
Save