aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade
diff options
context:
space:
mode:
authorwinter2025-01-14 21:39:11 +0000
committerwinter2025-01-14 21:39:11 +0000
commit85038ca07c9909eb6503d5b0e529a2cc080d2a06 (patch)
treeb21b955f28d1d9245d53ad630a2ed1eedb63ebce /Digitigrade
parent27d0d594695f77f3280f587cf5d7ae41317dc7c5 (diff)
fix bugs in note federation
Diffstat (limited to 'Digitigrade')
-rw-r--r--Digitigrade/Model.php8
-rw-r--r--Digitigrade/Model/Actor.php4
-rw-r--r--Digitigrade/Model/Note.php6
3 files changed, 14 insertions, 4 deletions
diff --git a/Digitigrade/Model.php b/Digitigrade/Model.php
index be664cb..71cfa5c 100644
--- a/Digitigrade/Model.php
+++ b/Digitigrade/Model.php
@@ -287,4 +287,12 @@ abstract class Model {
$db->exec("DELETE FROM $tableName WHERE $where");
}
+
+ /**
+ * Converts the model to an opaque string, to be used for equality checking or debugging purposes only.
+ * @return string
+ */
+ public function __tostring(): string {
+ return '<Model:' . static::class . '[' . $this->getUpdateWhereClause(Db::getInstance()->getPdo()) . ']>';
+ }
} \ No newline at end of file
diff --git a/Digitigrade/Model/Actor.php b/Digitigrade/Model/Actor.php
index c8cc25e..0f87ed3 100644
--- a/Digitigrade/Model/Actor.php
+++ b/Digitigrade/Model/Actor.php
@@ -215,6 +215,10 @@ class Actor extends PushableModel implements RpcReceiver {
}
public function findHomeInstance(): Instance {
+ if ($this->isLocal) {
+ // can't do this because we don't keep track of ourself in the instance table
+ throw new \RuntimeException("attempted to find the instance of a local actor");
+ }
return Instance::findByHostname(hostname_from_uri($this->uri));
}
diff --git a/Digitigrade/Model/Note.php b/Digitigrade/Model/Note.php
index 0aa29bd..71b25ae 100644
--- a/Digitigrade/Model/Note.php
+++ b/Digitigrade/Model/Note.php
@@ -153,10 +153,8 @@ class Note extends PushableModel implements TimelineIncludeable {
$recipientActors[] = $this->threadApex->author;
$recipientActors = array_unique($recipientActors);
- $instances = array_map(function (Actor $a) {
- return $a->findHomeInstance();
- }, $recipientActors);
- return array_unique($instances);
+ $instances = array_map(fn(Actor $a) => $a->isLocal ? null : $a->findHomeInstance(), $recipientActors);
+ return array_unique(array_filter($instances, fn(?Instance $i) => $i != null));
}
/**