]> git.mxchange.org Git - friendica.git/blobdiff - include/ostatus.php
Make sure that we only quit when we are sure we can
[friendica.git] / include / ostatus.php
index 4f84c123d962d75352e19fadcff9ae1c03b4659b..2c4b677a53af99bf5316cc9ca8caa8a512ac5802 100644 (file)
@@ -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)) {
@@ -523,7 +523,9 @@ class ostatus {
                                $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s'",
                                        intval($importer["uid"]), dbesc($item["parent-uri"]));
 
-                               if (!$r AND ($related != "")) {
+                               // Only fetch missing stuff if it is a comment or reshare.
+                               if (in_array($item["verb"], array(ACTIVITY_POST, ACTIVITY_SHARE)) AND
+                                       !dbm::is_result($r) AND ($related != "")) {
                                        $reply_path = str_replace("/notice/", "/api/statuses/show/", $related).".atom";
 
                                        if ($reply_path != $related) {
@@ -596,21 +598,25 @@ class ostatus {
                $last = get_config('system','ostatus_last_poll');
 
                $poll_interval = intval(get_config('system','ostatus_poll_interval'));
-               if(! $poll_interval)
-                       $poll_interval = OSTATUS_DEFAULT_POLL_INTERVAL;
+               if (!$poll_interval) {
+                       $poll_interval = self::OSTATUS_DEFAULT_POLL_INTERVAL;
+               }
 
                // Don't poll if the interval is set negative
-               if (($poll_interval < 0) AND !$override)
+               if (($poll_interval < 0) AND !$override) {
                        return;
+               }
 
                if (!$mentions) {
                        $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
-                       if (!$poll_timeframe)
-                               $poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME;
+                       if (!$poll_timeframe) {
+                               $poll_timeframe = self::OSTATUS_DEFAULT_POLL_TIMEFRAME;
+                       }
                } else {
                        $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
-                       if (!$poll_timeframe)
-                               $poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS;
+                       if (!$poll_timeframe) {
+                               $poll_timeframe = self::OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS;
+                       }
                }
 
 
@@ -626,15 +632,16 @@ class ostatus {
 
                $start = date("Y-m-d H:i:s", time() - ($poll_timeframe * 60));
 
-               if ($mentions)
+               if ($mentions) {
                        $conversations = q("SELECT `term`.`oid`, `term`.`url`, `term`.`uid` FROM `term`
                                                STRAIGHT_JOIN `thread` ON `thread`.`iid` = `term`.`oid` AND `thread`.`uid` = `term`.`uid`
                                                WHERE `term`.`type` = 7 AND `term`.`term` > '%s' AND `thread`.`mention`
                                                GROUP BY `term`.`url`, `term`.`uid` ORDER BY `term`.`term` DESC", dbesc($start));
-               else
+               } else {
                        $conversations = q("SELECT `oid`, `url`, `uid` FROM `term`
                                                WHERE `type` = 7 AND `term` > '%s'
                                                GROUP BY `url`, `uid` ORDER BY `term` DESC", dbesc($start));
+               }
 
                foreach ($conversations AS $conversation) {
                        self::completion($conversation['url'], $conversation['uid']);
@@ -1801,10 +1808,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 +1819,35 @@ class ostatus {
                        $item['follow'] = $contact['alias'];
                }
 
+               $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 {
+                       $connect_id = 0;
+               }
+
                if ($item['verb'] == ACTIVITY_FOLLOW) {
-                       $message = t('<a href="%s">%s</> is now following <a href="%s">%s</>.');
+                       $message = t('%s is now following %s.');
+                       $title = t('following');
+                       $action = "subscription";
                } else {
-                       $message = t('<a href="%s">%s</> stopped following <a href="%s">%s</>.');
+                       $message = t('%s stopped following %s.');
+                       $title = t('stopped following');
+                       $action = "unfollow";
                }
 
-               $item["body"] = sprintf($message, $owner["url"], $owner["nick"], $contact["url"], $contact["nick"]);
+               $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'];
 
-               $title = self::entry_header($doc, $entry, $owner, $toplevel);
+               $item["body"] = sprintf($message, $owner["nick"], $contact["nick"]);
 
-               self::entry_content($doc, $entry, $item, $owner, "");
+               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 +1949,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 +2000,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 +2011,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 +2048,7 @@ class ostatus {
 
                self::get_attachment($doc, $entry, $item);
 
-               if ($complete) {
+               if ($complete AND ($item["id"] > 0)) {
                        $app = $item["app"];
                        if ($app == "")
                                $app = "web";
@@ -2058,7 +2074,7 @@ class ostatus {
         *
         * @return string XML feed
         */
-       public static function feed(&$a, $owner_nick, $last_update) {
+       public static function feed(App $a, $owner_nick, $last_update) {
 
                $r = q("SELECT `contact`.*, `user`.`nickname`, `user`.`timezone`, `user`.`page-flags`
                                FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`