From a8e80ef0a61d5c6984e1fc4c8060a82a6ca26601 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 18 Dec 2016 20:02:13 +0000 Subject: [PATCH 1/2] Ostatus: The follow/unfollow XML should now be even more compliant. --- include/ostatus.php | 51 ++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/include/ostatus.php b/include/ostatus.php index 4f84c123d9..b38ad91d47 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -1801,10 +1801,8 @@ class ostatus { private function follow_entry($doc, $item, $owner, $toplevel) { $item["id"] = $item["parent"] = 0; - $item['guid'] = get_guid(32); - $item["uri"] = $item['parent-uri'] = $item['thr-parent'] = 'urn:X-dfrn:'.get_app()->get_hostname() . ':follow:'.$item['guid']; - $item["created"] = $item["edited"] = datetime_convert('UTC','UTC', 'now', ATOM_TIME); - $item["app"] = "activity"; + $item["created"] = $item["edited"] = date("c"); + $item["private"] = true; $contact = Probe::uri($item['follow']); @@ -1814,17 +1812,35 @@ class ostatus { $item['follow'] = $contact['alias']; } - if ($item['verb'] == ACTIVITY_FOLLOW) { - $message = t('%s is now following %s.'); + $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s'", + intval($owner['uid']), dbesc(normalise_link($contact["url"]))); + + if (dbm::is_result($r)) { + $connect_id = $r[0]['id']; } else { - $message = t('%s stopped following %s.'); + $connect_id = 0; } - $item["body"] = sprintf($message, $owner["url"], $owner["nick"], $contact["url"], $contact["nick"]); + if ($item['verb'] == ACTIVITY_FOLLOW) { + $message = t('%s is now following %s.'); + $title = t('following'); + $action = "subscription"; + } else { + $message = t('%s stopped following %s.'); + $title = t('stopped following'); + $action = "unfollow"; + } - $title = self::entry_header($doc, $entry, $owner, $toplevel); + $item["uri"] = $item['parent-uri'] = $item['thr-parent'] = + 'tag:'.get_app()->get_hostname(). + ','.date('Y-m-d').':'.$action.':'.$owner['uid']. + ':person:'.$connect_id.':'.$item['created']; - self::entry_content($doc, $entry, $item, $owner, ""); + $item["body"] = sprintf($message, $owner["nick"], $contact["nick"]); + + self::entry_header($doc, $entry, $owner, $toplevel); + + self::entry_content($doc, $entry, $item, $owner, $title); $object = self::add_person_object($doc, $owner, $contact); $entry->appendChild($object); @@ -1926,7 +1942,7 @@ class ostatus { xml::add_element($doc, $entry, "link", "", array("rel" => "alternate", "type" => "text/html", "href" => App::get_baseurl()."/display/".$item["guid"])); - if ($complete) + if ($complete AND ($item["id"] > 0)) xml::add_element($doc, $entry, "status_net", "", array("notice_id" => $item["id"])); xml::add_element($doc, $entry, "activity:verb", $verb); @@ -1977,13 +1993,10 @@ class ostatus { if (intval($item["parent"]) > 0) { $conversation = App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"]; - } else { - $conversation = "urn:X-dfrn:".App::get_baseurl().":conversation:".$item["guid"]; + xml::add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation", "href" => $conversation)); + xml::add_element($doc, $entry, "ostatus:conversation", $conversation); } - xml::add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation", "href" => $conversation)); - xml::add_element($doc, $entry, "ostatus:conversation", $conversation); - $tags = item_getfeedtags($item); if(count($tags)) @@ -1991,10 +2004,6 @@ class ostatus { if ($t[0] == "@") $mentioned[$t[1]] = $t[1]; - if (isset($item['follow'])) { - $mentioned[$item['follow']] = $item['follow']; - } - // Make sure that mentions are accepted (GNU Social has problems with mixing HTTP and HTTPS) $newmentions = array(); foreach ($mentioned AS $mention) { @@ -2032,7 +2041,7 @@ class ostatus { self::get_attachment($doc, $entry, $item); - if ($complete) { + if ($complete AND ($item["id"] > 0)) { $app = $item["app"]; if ($app == "") $app = "web"; From 3f6fd4bf8480e10594058b3deff1d527020c8d91 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 18 Dec 2016 20:34:34 +0000 Subject: [PATCH 2/2] Mastodon: Hopefully we can now detect reshares better --- include/ostatus.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ostatus.php b/include/ostatus.php index b38ad91d47..f9911bfaab 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -467,7 +467,7 @@ class ostatus { } // Is it a repeated post? - if ($repeat_of != "") { + if (($repeat_of != "") OR ($item["verb"] == ACTIVITY_SHARE)) { $activityobjects = $xpath->query('activity:object', $entry)->item(0); if (is_object($activityobjects)) {