From 2350aa54ebae23394d9e36445247dcd2235e7173 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Wed, 30 Jan 2013 01:31:27 +0100 Subject: [PATCH] OStatus-Conversation auto completion works now. Some performance issues added as well. --- database.sql | 1 + include/ostatus_conversation.php | 72 +++++++++++++++----------------- mod/community.php | 3 +- mod/search.php | 5 ++- mods/readme.txt | 1 + 5 files changed, 40 insertions(+), 42 deletions(-) diff --git a/database.sql b/database.sql index cf060ebf49..da0d8c3aae 100644 --- a/database.sql +++ b/database.sql @@ -591,6 +591,7 @@ CREATE TABLE IF NOT EXISTS `item` ( KEY `uid_created` (`uid`, `created`), KEY `uid_unseen` (`uid`, `unseen`), KEY `mention` (`mention`), + KEY `resource-id` (`resource-id`), FULLTEXT KEY `title` (`title`), FULLTEXT KEY `body` (`body`), FULLTEXT KEY `allow_cid` (`allow_cid`), diff --git a/include/ostatus_conversation.php b/include/ostatus_conversation.php index 4bf80aa042..3d40d673d1 100644 --- a/include/ostatus_conversation.php +++ b/include/ostatus_conversation.php @@ -1,16 +1,4 @@ items); foreach ($items as $single_conv) { - //print_r($single_conv); - 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 AND ($itemid != $parent["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; } } @@ -72,33 +61,37 @@ function complete_conversation($itemid, $conversation_url) { else $parent_uri = $parent["uri"]; - $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) { - $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 ($parent["id"] != 0) { + $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) { + $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 - $arr["parent"] = $parent["id"]; + 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-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-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); @@ -120,21 +113,22 @@ function complete_conversation($itemid, $conversation_url) { // 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: changing parents to parent '.$newitem.' old parent: '.$parent["id"].' new uri: '.$arr["uri"]); + 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); + logger('complete_conversation: done changing parents to parent '.$newitem.' '.print_r($r, true));*/ } - //print_r($arr); } } } -/* -$id = 282481; -$conversation = "http://identi.ca/conversation/98268580"; - -complete_conversation($id, $conversation); -*/ ?> diff --git a/mod/community.php b/mod/community.php index aa5bb7268d..a7f5c9bf82 100644 --- a/mod/community.php +++ b/mod/community.php @@ -75,12 +75,13 @@ function community_content(&$a, $update = 0) { AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `item`.`private` = 0 AND `item`.`wall` = 1 AND `user`.`hidewall` = 0 - AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 group by `item`.`uri` + AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 ORDER BY `received` DESC LIMIT %d, %d ", intval($a->pager['start']), intval($a->pager['itemspage']) ); +// AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 group by `item`.`uri` if(! count($r)) { info( t('No results.') . EOL); diff --git a/mod/search.php b/mod/search.php index c6d5989fb5..b368deb49d 100644 --- a/mod/search.php +++ b/mod/search.php @@ -164,9 +164,10 @@ function search_content(&$a) { AND (( `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' AND `item`.`private` = 0 AND `user`.`hidewall` = 0) OR `item`.`uid` = %d ) AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 - $sql_extra group by `item`.`uri` ", + $sql_extra ", intval(local_user()) ); +// $sql_extra group by `item`.`uri` ", if(count($r)) $a->set_pager_total(count($r)); @@ -189,13 +190,13 @@ function search_content(&$a) { OR `item`.`uid` = %d ) AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 $sql_extra - group by `item`.`uri` ORDER BY `received` DESC LIMIT %d , %d ", intval(local_user()), intval($a->pager['start']), intval($a->pager['itemspage']) ); +// group by `item`.`uri` if(! count($r)) { info( t('No results.') . EOL); diff --git a/mods/readme.txt b/mods/readme.txt index 9e79f843fe..d74b846d00 100644 --- a/mods/readme.txt +++ b/mods/readme.txt @@ -3,3 +3,4 @@ Site speed can be improved when the following indexes are set. They cannot be se CREATE INDEX `uid_commented` ON `item` (`uid`, `commented`); CREATE INDEX `uid_created` ON `item` (`uid`, `created`); CREATE INDEX `uid_unseen` ON `item` (`uid`, `unseen`); +CREATE INDEX `resource-id` ON `item` (`resource-id`); -- 2.39.5