]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Queue_item.php
Twitter-compatible API - since_id and before_id were polluting the cache and generati...
[quix0rs-gnu-social.git] / classes / Queue_item.php
index 4a7aeebe2822710c6a97a79989be8190e959118a..8ba3281de39cf30846b57eb61d4403f9099cb22b 100644 (file)
@@ -2,23 +2,54 @@
 /**
  * Table Definition for queue_item
  */
-require_once 'DB/DataObject.php';
+require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
 
-class Queue_item extends DB_DataObject
+class Queue_item extends Memcached_DataObject 
 {
     ###START_AUTOCODE
     /* the code below is auto generated do not remove the above tag */
 
     public $__table = 'queue_item';                      // table name
     public $notice_id;                       // int(4)  primary_key not_null
+    public $transport;                       // varchar(8)  primary_key not_null
     public $created;                         // datetime()   not_null
-    public $claimed;                         // datetime()
+    public $claimed;                         // datetime()  
 
     /* Static get */
-    function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Queue_item',$k,$v); }
+    function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Queue_item',$k,$v); }
 
     /* the code above is auto generated do not remove the tag below */
     ###END_AUTOCODE
 
     function sequenceKey() { return array(false, false); }
+       
+       static function top($transport) {
+
+               $qi = new Queue_item();
+               $qi->transport = $transport;
+               $qi->orderBy('created');
+               $qi->whereAdd('claimed is NULL');
+
+               $qi->limit(1);
+
+               $cnt = $qi->find(TRUE);
+
+               if ($cnt) {
+                       # XXX: potential race condition
+                       # can we force it to only update if claimed is still NULL
+                       # (or old)?
+                       common_log(LOG_INFO, 'claiming queue item = ' . $qi->notice_id . ' for transport ' . $transport);
+                       $orig = clone($qi);
+                       $qi->claimed = common_sql_now();
+                       $result = $qi->update($orig);
+                       if ($result) {
+                               common_log(LOG_INFO, 'claim succeeded.');
+                               return $qi;
+                       } else {
+                               common_log(LOG_INFO, 'claim failed.');
+                       }
+               }
+               $qi = NULL;
+               return NULL;
+       }
 }