Skip to content

Commit

Permalink
fix announcement generation for wanted torrents #27
Browse files Browse the repository at this point in the history
  • Loading branch information
ghost committed Oct 23, 2023
1 parent 0d96cd3 commit b4c6a98
Showing 1 changed file with 27 additions and 37 deletions.
64 changes: 27 additions & 37 deletions src/Controller/TorrentController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2418,25 +2418,40 @@ private function filterYggdrasil(
?\Rhilip\Bencode\TorrentFile $file, bool $yggdrasil, string $regex = '/^0{0,1}[2-3][a-f0-9]{0,2}:/'
): ?\Rhilip\Bencode\TorrentFile
{
// Init trackers registry
$allTrackers = [];

// Get app trackers
$appTrackers = explode('|', $this->getParameter('app.trackers'));

// Append app trackers
foreach ($appTrackers as $appTracker)
{
$allTrackers[] = $appTracker;
}

// Get original file announcements
$announceList = $file->getAnnounceList();

// Append app trackers
foreach ($appTrackers as $appTracker)
// Append original file announcements
foreach ($announceList as $announce)
{
// Append application trackers
$announceList[0][] = $appTracker;
if (is_array($announce))
{
foreach ($announce as $value)
{
$allTrackers[] = $value;
}
}

// Append application re-trackers
$announceList[1][] = $appTracker;
else
{
$allTrackers[] = $value;
}
}

// Remove duplicated
$announceList[0] = array_unique($announceList[0]);
$announceList[1] = array_unique($announceList[1]);
// Remove duplicates
$allTrackers = array_unique($allTrackers);

// Yggdrasil-only mode
if ($yggdrasil)
Expand All @@ -2450,45 +2465,20 @@ private function filterYggdrasil(
}

// Remove non-Yggdrasil trackers from announcement list
foreach ($announceList[0] as $key => $value)
foreach ($allTrackers as $key => $value)
{
// trackers
if (!preg_match($regex, str_replace(['[',']'], false, parse_url($value, PHP_URL_HOST))))
{
unset($announceList[0][$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]);
unset($allTrackers[$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
$trackers = [];

foreach ($values as $value)
foreach ($allTrackers as $value)
{
$trackers[] = [$value];
}
Expand Down

0 comments on commit b4c6a98

Please sign in to comment.