]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Initial switch of public timeline stream to use timestamps for internal sorting
authorBrion Vibber <brion@pobox.com>
Fri, 17 Dec 2010 20:38:38 +0000 (12:38 -0800)
committerBrion Vibber <brion@pobox.com>
Fri, 17 Dec 2010 20:38:38 +0000 (12:38 -0800)
classes/Notice.php

index 079f56dcf9f2ee229f2f955c469b3afadf8663b0..b5a1b45971156296a28aa34719083278a84b2427 100644 (file)
@@ -654,7 +654,7 @@ class Notice extends Memcached_DataObject
         $notice->selectAdd(); // clears it
         $notice->selectAdd('id');
 
-        $notice->orderBy('id DESC');
+        $notice->orderBy('created DESC, id DESC');
 
         if (!is_null($offset)) {
             $notice->limit($offset, $limit);
@@ -668,12 +668,14 @@ class Notice extends Memcached_DataObject
             $notice->whereAdd('is_local !='. Notice::GATEWAY);
         }
 
-        if ($since_id != 0) {
-            $notice->whereAdd('id > ' . $since_id);
+        $since = Notice::getAsTimestamp($since_id);
+        if ($since) {
+            $notice->whereAdd(sprintf("(created = '%s' and id > %d) or (created > '%s')", $since, $since_id, $since));
         }
 
-        if ($max_id != 0) {
-            $notice->whereAdd('id <= ' . $max_id);
+        $max = Notice::getAsTimestamp($max_id);
+        if ($max) {
+            $notice->whereAdd(sprintf("(created < '%s') or (created = '%s' and id <= %d)", $max, $max, $max_id));
         }
 
         $ids = array();
@@ -1988,16 +1990,20 @@ class Notice extends Memcached_DataObject
      */
     public static function getAsTimestamp($id)
     {
+        if (!$id) {
+            return false;
+        }
+
         $notice = Notice::staticGet('id', $id);
         if ($notice) {
             return $notice->created;
-        } else {
-            $deleted = Deleted_notice::staticGet('id', $id);
-            if ($deleted) {
-                return $deleted->created;
-            } else {
-                return false;
-            }
         }
+
+        $deleted = Deleted_notice::staticGet('id', $id);
+        if ($deleted) {
+            return $deleted->created;
+        }
+
+        return false;
     }
 }