From da2349bb6a85d13f0aa29046bef3021cf0c884ba Mon Sep 17 00:00:00 2001 From: friendica Date: Thu, 12 Feb 2015 17:45:25 -0800 Subject: provide relief to sites that are severely impacted by the slow ITEM_UNSEEN searches. This does not incorporate any other flag optimisations as that will require a major DB update and possibly involve significant downtime. This is just to bite off a little chunk now and provide some much needed relief. --- include/ItemObject.php | 2 +- include/api.php | 5 +---- include/attach.php | 4 +++- include/diaspora.php | 4 ++-- include/items.php | 9 ++++----- include/notify.php | 2 +- 6 files changed, 12 insertions(+), 14 deletions(-) (limited to 'include') diff --git a/include/ItemObject.php b/include/ItemObject.php index c429a0131..136e08eb7 100644 --- a/include/ItemObject.php +++ b/include/ItemObject.php @@ -612,7 +612,7 @@ class Item extends BaseObject { if((! visible_activity($child->data)) || array_key_exists('author_blocked',$child->data)) { continue; } - if($child->data['item_flags'] & ITEM_UNSEEN) + if(intval($child->data['item_unseen'])) $total ++; } } diff --git a/include/api.php b/include/api.php index d00cdcf8a..d5c2a429c 100644 --- a/include/api.php +++ b/include/api.php @@ -1004,10 +1004,7 @@ require_once('include/items.php'); // at the network timeline just mark everything seen. if (api_user() == $user_info['uid']) { - $r = q("UPDATE `item` SET item_flags = ( item_flags & ~%d ) - WHERE (item_flags & %d)>0 and uid = %d", - intval(ITEM_UNSEEN), - intval(ITEM_UNSEEN), + $r = q("UPDATE `item` SET item_unseen = 0 where item_unseen = 1 and uid = %d", intval($user_info['uid']) ); } diff --git a/include/attach.php b/include/attach.php index 5ed2cf6d2..3350a591e 100644 --- a/include/attach.php +++ b/include/attach.php @@ -998,7 +998,8 @@ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, $objtype = ACTIVITY_OBJ_FILE; - $item_flags = ITEM_WALL|ITEM_ORIGIN|ITEM_UNSEEN; + $item_flags = ITEM_WALL|ITEM_ORIGIN; +; $private = (($allow_cid || $allow_gid || $deny_cid || $deny_gid) ? 1 : 0); @@ -1038,6 +1039,7 @@ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, $arr['mid'] = $u_mid; $arr['parent_mid'] = $u_mid; $arr['item_flags'] = $item_flags; + $arr['item_unseen'] = 1; $arr['author_xchan'] = $poster['xchan_hash']; $arr['owner_xchan'] = $poster['xchan_hash']; $arr['title'] = ''; diff --git a/include/diaspora.php b/include/diaspora.php index 4280d9d77..559a9d14d 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -923,8 +923,8 @@ function diaspora_post($importer,$xml,$msg) { $datarray['app'] = $app; - $datarray['item_flags'] = ITEM_UNSEEN|ITEM_THREAD_TOP; - + $datarray['item_flags'] = ITEM_THREAD_TOP; + $datarray['item_unseen'] = 1; $result = item_store($datarray); return; diff --git a/include/items.php b/include/items.php index 91fa1d70a..717a4bf71 100755 --- a/include/items.php +++ b/include/items.php @@ -2043,13 +2043,12 @@ function item_store($arr,$allow_exec = false) { $arr['comment_policy'] = ((x($arr,'comment_policy')) ? notags(trim($arr['comment_policy'])) : 'contacts' ); - $arr['item_flags'] = $arr['item_flags'] | ITEM_UNSEEN; + $arr['item_unseen'] = ((array_key_exists('item_unseen',$arr)) ? intval($arr['item_unseen']) : 1); if($arr['comment_policy'] == 'none') $arr['item_flags'] = $arr['item_flags'] | ITEM_NOCOMMENT; - // handle time travelers // Allow a bit of fudge in case somebody just has a slightly slow/fast clock @@ -2332,8 +2331,8 @@ function item_store_update($arr,$allow_exec = false) { // override the unseen flag with the original - if($arr['item_flags'] & ITEM_UNSEEN) - $arr['item_flags'] = $arr['item_flags'] ^ ITEM_UNSEEN; + if(intval($arr['item_flags'])) + $arr['item_unseen'] = 0; if($orig[0]['item_flags'] & ITEM_VERIFIED) $orig[0]['item_flags'] = $orig[0]['item_flags'] ^ ITEM_VERIFIED; @@ -4562,7 +4561,7 @@ function items_fetch($arr,$channel = null,$observer_hash = null,$client_mode = C } } - $simple_update = (($client_mode & CLIENT_MODE_UPDATE) ? " and ( item.item_flags & " . intval(ITEM_UNSEEN) . " )>0 " : ''); + $simple_update = (($client_mode & CLIENT_MODE_UPDATE) ? " and ( item.item_unseen = 1 ) " : ''); if($client_mode & CLIENT_MODE_LOAD) $simple_update = ''; diff --git a/include/notify.php b/include/notify.php index aa96fa279..eef838664 100644 --- a/include/notify.php +++ b/include/notify.php @@ -32,7 +32,7 @@ function format_notification($item) { 'url' => $item['author']['xchan_url'], 'photo' => $item['author']['xchan_photo_s'], 'when' => relative_date($item['created']), - 'class' => (($item['item_flags'] & ITEM_UNSEEN) ? 'notify-unseen' : 'notify-seen'), + 'class' => (intval($item['item_unseen']) ? 'notify-unseen' : 'notify-seen'), 'message' => strip_tags(bbcode($itemem_text)) ); -- cgit v1.2.3