diff --git a/app/Models/Peer.php b/app/Models/Peer.php
index aa585799..6243e55c 100644
--- a/app/Models/Peer.php
+++ b/app/Models/Peer.php
@@ -11,7 +11,7 @@ class Peer extends NexusModel
protected $fillable = [
'torrent', 'peer_id', 'ip', 'port', 'uploaded', 'downloaded', 'to_go', 'seeder', 'started', 'last_action',
'prev_action', 'connectable', 'userid', 'agent', 'finishedat', 'downloadoffset', 'uploadedoffset', 'passkey',
- 'ipv4', 'ipv6',
+ 'ipv4', 'ipv6', 'is_seed_box'
];
const CONNECTABLE_YES = 'yes';
diff --git a/app/Repositories/SeedBoxRepository.php b/app/Repositories/SeedBoxRepository.php
index a29a8d7f..13666832 100644
--- a/app/Repositories/SeedBoxRepository.php
+++ b/app/Repositories/SeedBoxRepository.php
@@ -138,12 +138,20 @@ class SeedBoxRepository extends BaseRepository
}
foreach (Arr::wrap($ipArr) as $ip) {
if ((isIPV4($ip) || isIPV6($ip)) && $enableSeedBox && isIPSeedBox($ip, $uid)) {
- return '
';
+ return $this->getSeedBoxIcon();
}
}
return '';
}
+ public function getSeedBoxIcon($isSeedBox = true): string
+ {
+ if (!$isSeedBox) {
+ return '';
+ }
+ return '
';
+ }
+
private function clearCache()
{
return true;
diff --git a/app/Repositories/TrackerRepository.php b/app/Repositories/TrackerRepository.php
index 73edf972..251151be 100644
--- a/app/Repositories/TrackerRepository.php
+++ b/app/Repositories/TrackerRepository.php
@@ -841,11 +841,16 @@ class TrackerRepository extends BaseRepository
'agent' => $queries['user_agent'],
'connectable' => $this->getConnectable($queries['ip'], $queries['port'], $queries['user_agent'])
];
+ $isSeedBox = false;
if (!empty($queries['ipv4'])) {
$update['ipv4'] = $queries['ipv4'];
+ $isSeedBox = isIPSeedBox($queries['ipv4'], $peer->userid);
}
if (!empty($queries['ipv6'])) {
$update['ipv6'] = $queries['ipv6'];
+ if (!$isSeedBox) {
+ $isSeedBox = isIPSeedBox($queries['ipv6'], $peer->userid);
+ }
}
if ($peer->exists) {
@@ -865,6 +870,7 @@ class TrackerRepository extends BaseRepository
$update['last_action'] = $nowStr;
$update['uploaded'] = $queries['uploaded'];
$update['downloaded'] = $queries['downloaded'];
+ $update['is_seed_box'] = intval($isSeedBox);
$logData = json_encode(Arr::except($update, ['peer_id']));
if ($peer->exists) {
diff --git a/database/migrations/2022_09_12_181952_add_is_seed_box_to_peers_table.php b/database/migrations/2022_09_12_181952_add_is_seed_box_to_peers_table.php
new file mode 100644
index 00000000..fa574c69
--- /dev/null
+++ b/database/migrations/2022_09_12_181952_add_is_seed_box_to_peers_table.php
@@ -0,0 +1,32 @@
+tinyInteger('is_seed_box')->default(0);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('peers', function (Blueprint $table) {
+ $table->dropColumn('is_seed_box');
+ });
+ }
+};
diff --git a/include/constants.php b/include/constants.php
index d26c4885..17b6d75f 100644
--- a/include/constants.php
+++ b/include/constants.php
@@ -1,6 +1,6 @@
whereIn('torrent', $torrentIdArr)
- ->whereIn('userid', array_unique($ownerIdArr))
->where('seeder', 'yes')
- ->get(['torrent', 'ipv4', 'ipv6'])
+ ->where('is_seed_box', '1')
+ ->get(['torrent', 'is_seed_box'])
->keyBy('torrent');
}
@@ -3559,9 +3559,8 @@ foreach ($rows as $row)
$banned_torrent = ($row["banned"] == 'yes' ? " (".$lang_functions['text_banned'].")" : "");
$sp_torrent_sub = get_torrent_promotion_append_sub($row['sp_state'],"",true,$row['added'], $row['promotion_time_type'], $row['promotion_until'], $row['__ignore_global_sp_state'] ?? false);
$approvalStatusIcon = $torrentRep->renderApprovalStatus($row['approval_status']);
- if ($showSeedBoxIcon && $ownerPeerInfo->has($row['id'])) {
- $ownerPeer = $ownerPeerInfo->get($row['id']);
- $seedBoxIcon = $seedBoxRep->renderIcon([$ownerPeer->ipv4, $ownerPeer->ipv6], $row['owner']);
+ if ($showSeedBoxIcon && $seedBoxPeerInfo->has($row['id'])) {
+ $seedBoxIcon = $seedBoxRep->getSeedBoxIcon();
} else {
$seedBoxIcon = '';
}
diff --git a/public/announce.php b/public/announce.php
index 6430c311..37182ad4 100644
--- a/public/announce.php
+++ b/public/announce.php
@@ -332,7 +332,12 @@ if(isset($self) && empty($_GET['event']) && $self['prevts'] > (TIMENOW - $announ
$isSeedBoxRuleEnabled = get_setting('seed_box.enabled') == 'yes';
$isIPSeedBox = false;
if ($isSeedBoxRuleEnabled && !($az['class'] >= \App\Models\User::CLASS_VIP || $isDonor)) {
- $isIPSeedBox = isIPSeedBox($ip, $userid);
+ if (!empty($ipv4)) {
+ $isIPSeedBox = isIPSeedBox($ipv4, $userid);
+ }
+ if (!$isIPSeedBox && !empty($ipv6)) {
+ $isIPSeedBox = isIPSeedBox($ipv6, $userid);
+ }
}
$log .= ", [SEED_BOX], isSeedBoxRuleEnabled: $isSeedBoxRuleEnabled, isIPSeedBox: $isIPSeedBox";
@@ -537,7 +542,7 @@ elseif(isset($self))
$updateset[] = "times_completed = times_completed + 1";
}
- sql_query("UPDATE peers SET ip = ".sqlesc($ip).", port = $port, uploaded = $uploaded, downloaded = $downloaded, to_go = $left, prev_action = last_action, last_action = $dt, seeder = '$seeder', agent = ".sqlesc($agent)." $finished $peerIPV46 WHERE $selfwhere") or err("PL Err 1");
+ sql_query("UPDATE peers SET ip = ".sqlesc($ip).", port = $port, uploaded = $uploaded, downloaded = $downloaded, to_go = $left, prev_action = last_action, last_action = $dt, seeder = '$seeder', agent = ".sqlesc($agent).", is_seed_box = ". intval($isIPSeedBox) . " $finished $peerIPV46 WHERE $selfwhere") or err("PL Err 1");
if (mysql_affected_rows())
{
@@ -578,7 +583,7 @@ else
}
return 'no';
});
- $insertPeerSql = "INSERT INTO peers (torrent, userid, peer_id, ip, port, connectable, uploaded, downloaded, to_go, started, last_action, seeder, agent, downloadoffset, uploadoffset, passkey, ipv4, ipv6) VALUES ($torrentid, $userid, ".sqlesc($peer_id).", ".sqlesc($ip).", $port, '$connectable', $uploaded, $downloaded, $left, $dt, $dt, '$seeder', ".sqlesc($agent).", $downloaded, $uploaded, ".sqlesc($passkey).",".sqlesc($ipv4).",".sqlesc($ipv6).")";
+ $insertPeerSql = "INSERT INTO peers (torrent, userid, peer_id, ip, port, connectable, uploaded, downloaded, to_go, started, last_action, seeder, agent, downloadoffset, uploadoffset, passkey, ipv4, ipv6, is_seed_box) VALUES ($torrentid, $userid, ".sqlesc($peer_id).", ".sqlesc($ip).", $port, '$connectable', $uploaded, $downloaded, $left, $dt, $dt, '$seeder', ".sqlesc($agent).", $downloaded, $uploaded, ".sqlesc($passkey).", ".sqlesc($ipv4).", ".sqlesc($ipv6).", ".intval($isIPSeedBox).")";
do_log("[INSERT PEER] peer not exists for $selfwhere, do insert with $insertPeerSql");
try {
diff --git a/public/viewpeerlist.php b/public/viewpeerlist.php
index 585a438f..8337ec20 100644
--- a/public/viewpeerlist.php
+++ b/public/viewpeerlist.php
@@ -11,11 +11,11 @@ header("Content-Type: text/xml; charset=utf-8");
$id = intval($_GET['id'] ?? 0);
$seedBoxRep = new \App\Repositories\SeedBoxRepository();
-
-function get_location_column($e, $isStrongPrivacy, $canView): string
+function get_location_column($e, $isStrongPrivacy, $canView): array
{
global $enablelocation_tweak, $seedBoxRep, $lang_functions, $lang_viewpeerlist;
$address = $ips = [];
+ $isSeedBox = false;
//First, build the location
if ($enablelocation_tweak == 'yes') {
if (!empty($e['ipv4'])) {
@@ -39,10 +39,12 @@ function get_location_column($e, $isStrongPrivacy, $canView): string
$location = '