]> git.mxchange.org Git - friendica.git/commitdiff
ostatus completion of threads now works with longer threads well.
authorMichael Vogel <icarus@dabo.de>
Sat, 8 Jun 2013 10:28:19 +0000 (12:28 +0200)
committerMichael Vogel <icarus@dabo.de>
Sat, 8 Jun 2013 10:28:19 +0000 (12:28 +0200)
include/ostatus_conversation.php
mod/contacts.php

index f430d9e47aba4c6085469e05c2c6f0761e94c943..c63acfadcdd4b0cb4cf07400e1efef08fdab8af0 100644 (file)
@@ -75,116 +75,131 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio
        require_once('include/items.php');
 
        $conv = str_replace("/conversation/", "/api/statusnet/conversation/", $conversation_url).".as";
+       $pageno = 1;
+       $items = array();
 
        logger('complete_conversation: fetching conversation url '.$conv.' for '.$itemid);
-       $conv_as = fetch_url($conv);
 
-       if ($conv_as) {
+       do {
+               $conv_as = file_get_contents($conv."?page=".$pageno);
                $conv_as = str_replace(',"statusnet:notice_info":', ',"statusnet_notice_info":', $conv_as);
                $conv_as = json_decode($conv_as);
 
-               $first_id = "";
+               if (@is_array($conv_as->items))
+                       $items = array_merge($items, $conv_as->items);
+               else
+                       break;
 
-                if (!is_array($conv_as->items))
-                    return;
-               $items = array_reverse($conv_as->items);
+               $pageno++;
 
-               foreach ($items as $single_conv) {
-                       if (@!$single_conv->id AND $single_conv->provider->url AND $single_conv->statusnet_notice_info->local_id)
-                               $single_conv->id = $single_conv->provider->url."notice/".$single_conv->statusnet_notice_info->local_id;
+       } while (true);
 
-                       if (@!$single_conv->id)
-                               continue;
+       if (!sizeof($items))
+               return;
+
+       $items = array_reverse($items);
+
+       foreach ($items as $single_conv) {
+               if (@!$single_conv->id AND $single_conv->provider->url AND $single_conv->statusnet_notice_info->local_id)
+                       $single_conv->id = $single_conv->provider->url."notice/".$single_conv->statusnet_notice_info->local_id;
+
+               if (@!$single_conv->id)
+                       continue;
 
-                       if ($first_id == "") {
-                               $first_id = $single_conv->id;
+               if ($first_id == "") {
+                       $first_id = $single_conv->id;
 
-                               $new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
-                                       intval($message["uid"]), dbesc($first_id));
-                               if ($new_parents) {
-                                       $parent = $new_parents[0];
-                                       logger('complete_conversation: adopting new parent '.$parent["id"].' for '.$itemid);
-                               } else {
-                                       $parent["id"] = 0;
-                                       $parent["uri"] = $first_id;
-                               }
+                       $new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
+                               intval($message["uid"]), dbesc($first_id));
+                       if ($new_parents) {
+                               $parent = $new_parents[0];
+                               logger('complete_conversation: adopting new parent '.$parent["id"].' for '.$itemid);
+                       } else {
+                               $parent["id"] = 0;
+                               $parent["uri"] = $first_id;
                        }
+               }
 
-                       if (isset($single_conv->context->inReplyTo->id))
-                               $parent_uri = $single_conv->context->inReplyTo->id;
-                       else
-                               $parent_uri = $parent["uri"];
+               if (isset($single_conv->context->inReplyTo->id))
+                       $parent_uri = $single_conv->context->inReplyTo->id;
+               else
+                       $parent_uri = $parent["uri"];
 
-                       $message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
+               $message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1",
                                                        intval($message["uid"]), dbesc($single_conv->id));
-                       if ($message_exists) {
-                               if ($parent["id"] != 0) {
-                                       $existing_message = $message_exists[0];
-                                       $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `thr-parent` = '%s' WHERE `id` = %d LIMIT 1",
-                                               intval($parent["id"]),
-                                               dbesc($parent["uri"]),
-                                               dbesc($parent_uri),
-                                               intval($existing_message["id"]));
-                               }
-                               continue;
+               if ($message_exists) {
+                       if ($parent["id"] != 0) {
+                               $existing_message = $message_exists[0];
+                               $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `thr-parent` = '%s' WHERE `id` = %d LIMIT 1",
+                                       intval($parent["id"]),
+                                       dbesc($parent["uri"]),
+                                       dbesc($parent_uri),
+                                       intval($existing_message["id"]));
                        }
+                       continue;
+               }
 
-                       $arr = array();
-                       $arr["uri"] = $single_conv->id;
-                       $arr["plink"] = $single_conv->id;
-                       $arr["uid"] = $message["uid"];
-                       $arr["contact-id"] = $parent["contact-id"]; // To-Do
-                       if ($parent["id"] != 0)
-                               $arr["parent"] = $parent["id"];
-                       $arr["parent-uri"] = $parent["uri"];
-                       $arr["thr-parent"] = $parent_uri;
-                       $arr["created"] = $single_conv->published;
-                       $arr["edited"] = $single_conv->published;
-                       //$arr["owner-name"] = $single_conv->actor->contact->displayName;
-                       $arr["owner-name"] = $single_conv->actor->contact->preferredUsername;
-                       $arr["owner-link"] = $single_conv->actor->id;
-                       $arr["owner-avatar"] = $single_conv->actor->image->url;
-                       //$arr["author-name"] = $single_conv->actor->contact->displayName;
-                       $arr["author-name"] = $single_conv->actor->contact->preferredUsername;
-                       $arr["author-link"] = $single_conv->actor->id;
-                       $arr["author-avatar"] = $single_conv->actor->image->url;
-                       $arr["body"] = html2bbcode($single_conv->content);
-                       $arr["app"] = strip_tags($single_conv->statusnet_notice_info->source);
-                       if ($arr["app"] == "")
-                               $arr["app"] = $single_conv->provider->displayName;
-                       $arr["verb"] = $parent["verb"];
-                       $arr["visible"] = $parent["visible"];
-                       $arr["location"] = $single_conv->location->displayName;
-                       $arr["coord"] = trim($single_conv->location->lat." ".$single_conv->location->lon);
-
-                       if ($arr["location"] == "")
-                               unset($arr["location"]);
-
-                       if ($arr["coord"] == "")
-                               unset($arr["coord"]);
-
-                       $newitem = item_store($arr);
-
-                       // Add the conversation entry (but don't fetch the whole conversation)
-                       complete_conversation($newitem, $conversation_url, true);
-
-                       // If the newly created item is the top item then change the parent settings of the thread
-                       if ($newitem AND ($arr["uri"] == $first_id)) {
-                               logger('complete_conversation: setting new parent to id '.$newitem);
-                               $new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1",
-                                       intval($message["uid"]), intval($newitem));
-                               if ($new_parents) {
-                                       $parent = $new_parents[0];
-                                       logger('complete_conversation: done changing parents to parent '.$newitem);
-                               }
-
-                               /*logger('complete_conversation: changing parents to parent '.$newitem.' old parent: '.$parent["id"].' new uri: '.$arr["uri"]);
-                               $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s' WHERE `parent` = %d",
-                                       intval($newitem),
-                                       dbesc($arr["uri"]),
-                                       intval($parent["id"]));
-                               logger('complete_conversation: done changing parents to parent '.$newitem.' '.print_r($r, true));*/
+               $arr = array();
+               $arr["uri"] = $single_conv->id;
+               $arr["plink"] = $single_conv->id;
+               $arr["uid"] = $message["uid"];
+               $arr["contact-id"] = $parent["contact-id"]; // To-Do
+               if ($parent["id"] != 0)
+                       $arr["parent"] = $parent["id"];
+               $arr["parent-uri"] = $parent["uri"];
+               $arr["thr-parent"] = $parent_uri;
+               $arr["created"] = $single_conv->published;
+               $arr["edited"] = $single_conv->published;
+               //$arr["owner-name"] = $single_conv->actor->contact->displayName;
+               $arr["owner-name"] = $single_conv->actor->contact->preferredUsername;
+               if ($arr["owner-name"] == '')
+                       $arr["owner-name"] = $single_conv->actor->portablecontacts_net->preferredUsername;
+               if ($arr["owner-name"] == '')
+                       $arr["owner-name"] =  $single_conv->actor->displayName;
+
+               $arr["owner-link"] = $single_conv->actor->id;
+               $arr["owner-avatar"] = $single_conv->actor->image->url;
+               //$arr["author-name"] = $single_conv->actor->contact->displayName;
+               //$arr["author-name"] = $single_conv->actor->contact->preferredUsername;
+               $arr["author-name"] = $arr["owner-name"];
+               $arr["author-link"] = $single_conv->actor->id;
+               $arr["author-avatar"] = $single_conv->actor->image->url;
+               $arr["body"] = html2bbcode($single_conv->content);
+               $arr["app"] = strip_tags($single_conv->statusnet_notice_info->source);
+               if ($arr["app"] == "")
+                       $arr["app"] = $single_conv->provider->displayName;
+               $arr["verb"] = $parent["verb"];
+               $arr["visible"] = $parent["visible"];
+               $arr["location"] = $single_conv->location->displayName;
+               $arr["coord"] = trim($single_conv->location->lat." ".$single_conv->location->lon);
+
+               if ($arr["location"] == "")
+                       unset($arr["location"]);
+
+               if ($arr["coord"] == "")
+                       unset($arr["coord"]);
+
+               $newitem = item_store($arr);
+
+               // Add the conversation entry (but don't fetch the whole conversation)
+               complete_conversation($newitem, $conversation_url, true);
+
+               // If the newly created item is the top item then change the parent settings of the thread
+               if ($newitem AND ($arr["uri"] == $first_id)) {
+                       logger('complete_conversation: setting new parent to id '.$newitem);
+                       $new_parents = q("SELECT `id`, `uri`, `contact-id`, `type`, `verb`, `visible` FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1",
+                               intval($message["uid"]), intval($newitem));
+                       if ($new_parents) {
+                               $parent = $new_parents[0];
+                               logger('complete_conversation: done changing parents to parent '.$newitem);
                        }
+
+                       /*logger('complete_conversation: changing parents to parent '.$newitem.' old parent: '.$parent["id"].' new uri: '.$arr["uri"]);
+                       $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s' WHERE `parent` = %d",
+                               intval($newitem),
+                               dbesc($arr["uri"]),
+                               intval($parent["id"]));
+                       logger('complete_conversation: done changing parents to parent '.$newitem.' '.print_r($r, true));*/
                }
        }
 }
index 0ddcac70f43ac7a5abca92200b908543a2bc6d82..a405cedbc6329b6d80cf937a8788b0b67c39d9c7 100644 (file)
@@ -34,7 +34,7 @@ function contacts_init(&$a) {
                                '$photo' => $a->data['contact']['photo']
                        ));
                        $follow_widget = '';
-       }       
+       }
        else {
                $vcard_widget = '';
                $follow_widget = follow_widget();