From fb58801aa406d1dd250d614b02f63f0b72bae6b6 Mon Sep 17 00:00:00 2001
From: Friendika <info@friendika.com>
Date: Mon, 22 Nov 2010 15:30:52 -0800
Subject: [PATCH] schedule the queue re-delivery process

---
 include/notifier.php | 26 ++++++++++++++++++++++----
 include/poller.php   |  7 +++++++
 include/queue.php    |  2 +-
 3 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/include/notifier.php b/include/notifier.php
index bbc4f00474..dde538a6b1 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -258,7 +258,13 @@
 
 				if($deliver_status == (-1)) {
 					// queue message for redelivery
-
+					q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`)
+						VALUES ( %d, '%s', '%s', '%s') ",
+						intval($contact['id']),
+						dbesc(datetime_convert()),
+						dbesc(datetime_convert()),
+						dbesc($atom)
+					);
 				}
 
 				break;
@@ -269,6 +275,13 @@
 
 					if($deliver_status == (-1)) {
 						// queue message for redelivery
+						q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`)
+							VALUES ( %d, '%s', '%s', '%s') ",
+							intval($contact['id']),
+							dbesc(datetime_convert()),
+							dbesc(datetime_convert()),
+							dbesc($slap)
+						);
 
 					}
 
@@ -286,9 +299,13 @@
 								$deliver_status = slapper($owner,$contact['notify'],$slappy);
 								if($deliver_status == (-1)) {
 									// queue message for redelivery
-									// if not already in queue
-									// else if deliver_status ok and queued, remove from queue
-									
+									q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`)
+										VALUES ( %d, '%s', '%s', '%s') ",
+										intval($contact['id']),
+										dbesc(datetime_convert()),
+										dbesc(datetime_convert()),
+										dbesc($slappy)
+									);								
 								}
 							}
 						}
@@ -314,6 +331,7 @@
 			foreach($slaps as $slappy) {
 				if($url) {
 					$deliver_status = slapper($owner,$url,$slappy);
+					// TODO: redeliver/queue these items on failure, though there is no contact record
 				}
 			}
 		}
diff --git a/include/poller.php b/include/poller.php
index a34a1e01fd..a9c1a28cac 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -18,6 +18,13 @@
 
 	$a->set_baseurl(get_config('system','url'));
 
+
+		// run queue delivery process in the background
+
+		$php_path = ((strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
+		proc_close(proc_open("\"$php_path\" \"include/queue.php\" &", array(), $foo));
+
+
 	$force = false;
 	if(($argc > 1) && ($argv[1] == 'force'))
 		$force = true;
diff --git a/include/queue.php b/include/queue.php
index b7fb478b4e..7df510ef43 100644
--- a/include/queue.php
+++ b/include/queue.php
@@ -45,7 +45,7 @@ function remove_queue_item($id) {
 		q("DELETE FROM `queue` WHERE `created` < UTC_TIMESTAMP() - INTERVAL 3 DAY");
 	}
 		
-	$r = q("SELECT `id` FROM `queue` WHERE 1 ");
+	$r = q("SELECT `id` FROM `queue` WHERE `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ");
 
 	if(! count($r))
 		killme();