diff --git a/src/Model/GContact.php b/src/Model/GContact.php index 86b6bb94c..ae1bd665e 100644 --- a/src/Model/GContact.php +++ b/src/Model/GContact.php @@ -1303,7 +1303,7 @@ class GContact $gcid = $gcontact['id']; if (!empty($followers)) { // Clear the follower list, since it will be recreated in the next step - DBA::delete('gfollower', ['gcid' => $gcid]); + DBA::update('gfollower', ['deleted' => true], ['gcid' => $gcid]); } $contacts = array_unique(array_merge($followers, $followings)); @@ -1317,12 +1317,16 @@ class GContact $fields = ['gcid' => $gcontact['id'], 'follower-gcid' => $gcid]; } Logger::info('Set relation between contacts', $fields); - DBA::update('gfollower', $fields, $fields, true); + DBA::update('gfollower', ['deleted' => false], $fields, true); continue; } Logger::info('Discover new AP contact', ['url' => $contact]); Worker::add(PRIORITY_LOW, 'UpdateGContact', $contact); } + if (!empty($followers)) { + // Delete all followers that aren't undeleted + DBA::delete('gfollower', ['gcid' => $gcid, 'deleted' => true]); + } Logger::info('AP contacts discovery finished', ['url' => $url]); return; } diff --git a/static/dbstructure.config.php b/static/dbstructure.config.php index 11695b592..3c9bc50fb 100755 --- a/static/dbstructure.config.php +++ b/static/dbstructure.config.php @@ -495,6 +495,7 @@ return [ "fields" => [ "gcid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["gcontact" => "id"], "comment" => "global contact"], "follower-gcid" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "primary" => "1", "relation" => ["gcontact" => "id"], "comment" => "global contact of the follower"], + "deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => "1 indicates that the connection has been deleted"], ], "indexes" => [ "PRIMARY" => ["gcid", "follower-gcid"],