diff --git a/app/Models/User.php b/app/Models/User.php index 3ea4b07a..572928f8 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -222,7 +222,7 @@ class User extends Authenticatable implements FilamentUser, HasName 'id', 'username', 'email', 'class', 'status', 'added', 'avatar', 'uploaded', 'downloaded', 'seedbonus', 'seedtime', 'leechtime', 'invited_by', 'enabled', 'seed_points', 'last_access', 'invites', - 'lang', 'attendance_card', 'privacy', 'noad', 'downloadpos', 'donoruntil', 'donor', 'language' + 'lang', 'attendance_card', 'privacy', 'noad', 'downloadpos', 'donoruntil', 'donor', ]; public static function getDefaultUserAttributes(): array diff --git a/app/Repositories/TorrentRepository.php b/app/Repositories/TorrentRepository.php index 2d161b7e..d4f189d3 100644 --- a/app/Repositories/TorrentRepository.php +++ b/app/Repositories/TorrentRepository.php @@ -687,4 +687,28 @@ HTML; return $input; } + public function removeDuplicateSnatch() + { + $size = 2000; + $stickyPromotionExists = NexusDB::hasTable(''); + while (true) { + $snatchRes = NexusDB::select("select userid, torrentid, group_concat(id) as ids from snatched group by userid, torrentid having(count(*)) > 1 limit $size"); + if (empty($snatchRes)) { + break; + } + do_log("[DELETE_DUPLICATED_SNATCH], count: " . count($snatchRes)); + foreach ($snatchRes as $snatchRow) { + $torrentId = $snatchRow['torrentid']; + $userId = $snatchRow['userid']; + $idArr = explode(',', $snatchRow['ids']); + sort($idArr, SORT_NUMERIC); + $remainId = array_pop($idArr); + $delIdStr = implode(',', $idArr); + do_log("[DELETE_DUPLICATED_SNATCH], torrent: $torrentId, user: $userId, snatchIdStr: $delIdStr"); + NexusDB::statement("delete from snatched where id in ($delIdStr)"); + NexusDB::statement("update claims set snatched_id = $remainId where torrent_id = $torrentId and uid = $userId"); + } + } + } + } diff --git a/include/constants.php b/include/constants.php index 628371e2..553ba266 100644 --- a/include/constants.php +++ b/include/constants.php @@ -1,6 +1,6 @@