Browse Source

fix announcement generation for wanted torrents #27

main 2.2.0
ghost 1 year ago
parent
commit
b4c6a98d49
  1. 64
      src/Controller/TorrentController.php

64
src/Controller/TorrentController.php

@ -2418,25 +2418,40 @@ class TorrentController extends AbstractController
?\Rhilip\Bencode\TorrentFile $file, bool $yggdrasil, string $regex = '/^0{0,1}[2-3][a-f0-9]{0,2}:/' ?\Rhilip\Bencode\TorrentFile $file, bool $yggdrasil, string $regex = '/^0{0,1}[2-3][a-f0-9]{0,2}:/'
): ?\Rhilip\Bencode\TorrentFile ): ?\Rhilip\Bencode\TorrentFile
{ {
// Init trackers registry
$allTrackers = [];
// Get app trackers // Get app trackers
$appTrackers = explode('|', $this->getParameter('app.trackers')); $appTrackers = explode('|', $this->getParameter('app.trackers'));
// Append app trackers
foreach ($appTrackers as $appTracker)
{
$allTrackers[] = $appTracker;
}
// Get original file announcements // Get original file announcements
$announceList = $file->getAnnounceList(); $announceList = $file->getAnnounceList();
// Append app trackers // Append original file announcements
foreach ($appTrackers as $appTracker) foreach ($announceList as $announce)
{ {
// Append application trackers if (is_array($announce))
$announceList[0][] = $appTracker; {
foreach ($announce as $value)
{
$allTrackers[] = $value;
}
}
// Append application re-trackers else
$announceList[1][] = $appTracker; {
$allTrackers[] = $value;
}
} }
// Remove duplicated // Remove duplicates
$announceList[0] = array_unique($announceList[0]); $allTrackers = array_unique($allTrackers);
$announceList[1] = array_unique($announceList[1]);
// Yggdrasil-only mode // Yggdrasil-only mode
if ($yggdrasil) if ($yggdrasil)
@ -2450,45 +2465,20 @@ class TorrentController extends AbstractController
} }
// Remove non-Yggdrasil trackers from announcement list // Remove non-Yggdrasil trackers from announcement list
foreach ($announceList[0] as $key => $value) foreach ($allTrackers as $key => $value)
{ {
// trackers // trackers
if (!preg_match($regex, str_replace(['[',']'], false, parse_url($value, PHP_URL_HOST)))) if (!preg_match($regex, str_replace(['[',']'], false, parse_url($value, PHP_URL_HOST))))
{ {
unset($announceList[0][$key]); unset($allTrackers[$key]);
}
}
// Remove non-Yggdrasil re-trackers from announcement list
foreach ($announceList[1] as $key => $value)
{
// trackers
if (!preg_match($regex, str_replace(['[',']'], false, parse_url($value, PHP_URL_HOST))))
{
unset($announceList[1][$key]);
} }
} }
} }
// Remove duplicates in list
$values = [];
foreach ($announceList[0] as $value)
{
$values[] = $value;
}
foreach ($announceList[1] as $value)
{
$values[] = $value;
}
$values = array_unique($values);
// Format announce list // Format announce list
$trackers = []; $trackers = [];
foreach ($values as $value) foreach ($allTrackers as $value)
{ {
$trackers[] = [$value]; $trackers[] = [$value];
} }

Loading…
Cancel
Save