]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Notice.php
OStatus cleanup...
[quix0rs-gnu-social.git] / classes / Notice.php
index 90e3e76ef33c471fd999a5cff5b54ae819bf8cd8..fca1c599ce39830993f8304397a11cefb8470799 100644 (file)
@@ -140,7 +140,7 @@ class Notice extends Memcached_DataObject
         foreach(array_unique($hashtags) as $hashtag) {
             /* elide characters we don't want in the tag */
             $this->saveTag($hashtag);
-            self::blow('profile:notice_ids_tagged:%d:%s', $this->profile_id, $tag->tag);
+            self::blow('profile:notice_ids_tagged:%d:%s', $this->profile_id, $hashtag);
         }
         return true;
     }
@@ -326,13 +326,7 @@ class Notice extends Memcached_DataObject
         # XXX: someone clever could prepend instead of clearing the cache
         $notice->blowOnInsert();
 
-        if (common_config('queue', 'inboxes')) {
-            $qm = QueueManager::get();
-            $qm->enqueue($notice, 'distrib');
-        } else {
-            $handler = new DistribQueueHandler();
-            $handler->handle($notice);
-        }
+        $notice->distribute();
 
         return $notice;
     }
@@ -1182,6 +1176,10 @@ class Notice extends Memcached_DataObject
         // Figure out who that is.
 
         $sender = Profile::staticGet('id', $profile_id);
+        if (empty($sender)) {
+            return null;
+        }
+
         $recipient = common_relative_profile($sender, $nickname, common_sql_now());
 
         if (empty($recipient)) {
@@ -1447,4 +1445,52 @@ class Notice extends Memcached_DataObject
 
         $gi->free();
     }
+
+    function distribute()
+    {
+        if (common_config('queue', 'inboxes')) {
+            // If there's a failure, we want to _force_
+            // distribution at this point.
+            try {
+                $qm = QueueManager::get();
+                $qm->enqueue($this, 'distrib');
+            } catch (Exception $e) {
+                // If the exception isn't transient, this
+                // may throw more exceptions as DQH does
+                // its own enqueueing. So, we ignore them!
+                try {
+                    $handler = new DistribQueueHandler();
+                    $handler->handle($this);
+                } catch (Exception $e) {
+                    common_log(LOG_ERR, "emergency redistribution resulted in " . $e->getMessage());
+                }
+                // Re-throw so somebody smarter can handle it.
+                throw $e;
+            }
+        } else {
+            $handler = new DistribQueueHandler();
+            $handler->handle($this);
+        }
+    }
+
+    function insert()
+    {
+        $result = parent::insert();
+
+        if ($result) {
+            // Profile::hasRepeated() abuses pkeyGet(), so we
+            // have to clear manually
+            if (!empty($this->repeat_of)) {
+                $c = self::memcache();
+                if (!empty($c)) {
+                    $ck = self::multicacheKey('Notice',
+                                              array('profile_id' => $this->profile_id,
+                                                    'repeat_of' => $this->repeat_of));
+                    $c->delete($ck);
+                }
+            }
+        }
+
+        return $result;
+    }
 }