]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Only enqueue inbox-dependent transports after inboxes have been filled
authorEvan Prodromou <evan@controlyourself.ca>
Thu, 28 May 2009 22:19:22 +0000 (18:19 -0400)
committerEvan Prodromou <evan@controlyourself.ca>
Thu, 28 May 2009 22:19:22 +0000 (18:19 -0400)
classes/Notice.php
lib/util.php
scripts/inboxqueuehandler.php

index 771a4e715f3d51811240c341defc381dced3fe33..8dd14b3b73db33804bdd5bdcbddeb2ea02b3c2c6 100644 (file)
@@ -195,12 +195,12 @@ class Notice extends Memcached_DataObject
 
             $notice->saveReplies();
             $notice->saveTags();
-            $notice->saveGroups();
 
             if (common_config('queue', 'enabled')) {
                 $notice->addToAuthorInbox();
             } else {
                 $notice->addToInboxes();
+                $notice->saveGroups();
             }
 
             $notice->query('COMMIT');
index f862d7fcc261fc3c40260f11215edd8310211ec1..214c3327996316e0308e4232ed21d3409708de04 100644 (file)
@@ -879,7 +879,27 @@ function common_broadcast_notice($notice, $remote=false)
 
 function common_enqueue_notice($notice)
 {
-    $transports = array('omb', 'sms', 'twitter', 'facebook', 'ping');
+    $transports = array('twitter', 'facebook', 'ping');
+
+    // If inboxes are enabled, wait till inboxes are filled
+    // before doing inbox-dependent broadcasts
+
+    if (common_config('inboxes', 'enabled') === true ||
+        common_config('inboxes', 'enabled') === 'transitional') {
+        $transports[] = 'inbox';
+    } else {
+        $transports = array_merge($transports, common_post_inbox_transports());
+    }
+
+    foreach ($transports as $transport) {
+        common_enqueue_notice_transport($notice, $transport);
+    }
+    return $result;
+}
+
+function common_post_inbox_transports()
+{
+    $transports = array('omb', 'sms');
 
     if (common_config('xmpp', 'enabled')) {
         $transports = array_merge($transports, array('jabber', 'public'));
@@ -890,25 +910,23 @@ function common_enqueue_notice($notice)
         $transports[] = 'memcache';
     }
 
-    if (common_config('inboxes', 'enabled') === true ||
-        common_config('inboxes', 'enabled') === 'transitional') {
-        $transports[] = 'inbox';
-    }
+    return $transports;
+}
 
-    foreach ($transports as $transport) {
-        $qi = new Queue_item();
-        $qi->notice_id = $notice->id;
-        $qi->transport = $transport;
-        $qi->created = $notice->created;
-        $result = $qi->insert();
-        if (!$result) {
-            $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
-            common_log(LOG_ERR, 'DB error inserting queue item: ' . $last_error->message);
-            return false;
-        }
-        common_log(LOG_DEBUG, 'complete queueing notice ID = ' . $notice->id . ' for ' . $transport);
+function common_enqueue_notice_transport($notice, $transport)
+{
+    $qi = new Queue_item();
+    $qi->notice_id = $notice->id;
+    $qi->transport = $transport;
+    $qi->created = $notice->created;
+    $result = $qi->insert();
+    if (!$result) {
+        $last_error = &PEAR::getStaticProperty('DB_DataObject','lastError');
+        common_log(LOG_ERR, 'DB error inserting queue item: ' . $last_error->message);
+        throw new ServerException('DB error inserting queue item: ' . $last_error->message);
     }
-    return $result;
+    common_log(LOG_DEBUG, 'complete queueing notice ID = ' . $notice->id . ' for ' . $transport);
+    return true;
 }
 
 function common_real_broadcast($notice, $remote=false)
index 73d31e85426ec97cbf7e3d378bb1ef97d4abcc99..c7aab4fe16a855bedbf92bd8be14abaaf102a45d 100755 (executable)
@@ -41,7 +41,7 @@ class InboxQueueHandler extends QueueHandler
     }
 
        function start() {
-               $this->log(LOG_INFO, "INITIALIZE");
+               $this->log(LOG_INFO, "Initialize inbox queue handler");
                return true;
        }
 
@@ -49,11 +49,19 @@ class InboxQueueHandler extends QueueHandler
     {
         $this->log(LOG_INFO, "Distributing notice to inboxes for $notice->id");
         $notice->addToInboxes();
+        $notice->saveGroups();
         $notice->blowSubsCache();
+        $transports = common_post_inbox_transports();
+
+        foreach ($transports as $transport) {
+            common_enqueue_notice_transport($notice, $transport);
+        }
+
         return true;
     }
 
        function finish() {
+               $this->log(LOG_INFO, "Terminating inbox queue handler");
        }
 }