diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Bridge.php | 36 | ||||
-rw-r--r-- | src/F2M.php | 12 |
2 files changed, 23 insertions, 25 deletions
diff --git a/src/Bridge.php b/src/Bridge.php index 7f8996c..719e91c 100644 --- a/src/Bridge.php +++ b/src/Bridge.php @@ -88,43 +88,41 @@ class Bridge { return $this->db->lastInsertId(); } - public function registerMessage($postId, $messageId, $inReplyTo) { + public function registerByEditId($editId, $messageId, $inReplyTo) { throw_if_null($messageId); - $sql = 'INSERT IGNORE INTO posts ' . - '(post_id, message_id, in_reply_to) ' . - 'VALUES (' . ($postId === null ? 'NULL' : $postId) . ', ' - . $this->db->quote($messageId) . ', ' - . $this->quote($inReplyTo) . ')'; + $sql = 'UPDATE posts SET ' . + 'message_id = ' . $this->db->quote($messageId) . ', ' . + 'in_reply_to = ' . $this->quote($inReplyTo) . ') ' . + 'WHERE edit_id = ' . $editId; $count = $this->db->exec($sql); return $count == 1; } - public function unregisterMessage($messageId) { + public function registerByMessageId($messageId, $inReplyTo) { throw_if_null($messageId); - $sql = 'DELETE FROM posts WHERE message_id = ' . - $this->db->quote($messageId); + $sql = 'INSERT IGNORE INTO posts ' . + '(message_id, in_reply_to) ' . + 'VALUES (' . + $this->db->quote($messageId) . ', ' . + $this->quote($inReplyTo) . + ')' $count = $this->db->exec($sql); - - if ($count != 1) { - throw new Exception('Failed to delete message id: ' . $messageId); - } + return $count == 1 ? $this->db->lastInsertId() : false; } - public function unregisterPost($postId) { - throw_if_null($postId); + public function unregisterMessage($editId) { + throw_if_null($messageId); -# FIXME: this might need adjusting now that there can be more than one -# message id per post id. - $sql = 'DELETE FROM posts WHERE post_id = ' . $postId; + $sql = 'DELETE FROM posts WHERE edit_id = ' . $editId; $count = $this->db->exec($sql); if ($count != 1) { - throw new Exception('Failed to delete post id: ' . $postId); + throw new Exception('Failed to delete edit id: ' . $editId); } } diff --git a/src/F2M.php b/src/F2M.php index 74d0725..68d2a12 100644 --- a/src/F2M.php +++ b/src/F2M.php @@ -53,7 +53,6 @@ function send_post_to_lists($config, $user, $mode, $data, $post_data) { } $date = date(DATE_RFC2822, $time); - $messageId = build_message_id($time, $postId, $_SERVER['SERVER_NAME']); $inReplyTo = null; $references = null; @@ -172,13 +171,14 @@ EOF; $body = $msg['body']; } - $mailer = Mail::factory('sendmail'); + $editId = $bridge->reserveEditId($postId); + $messageId = build_message_id($postId, $editId, + $time, $_SERVER['SERVER_NAME']); -# FIXME: Message-id should include the edit_id. To do that, we have to -# register BEFORE creating the Message-id + $mailer = Mail::factory('sendmail'); # Register the message - $seen = !$bridge->registerMessage($postId, $messageId, $inReplyTo); + $seen = !$bridge->registerByEditId($editId, $messageId, $inReplyTo); if ($seen) { throw new Exception('message id already seen: ' . $messageId); } @@ -192,7 +192,7 @@ EOF; } catch (Exception $e) { # Bridging failed, unregister message. - $bridge->unregisterMessage($messageId); + $bridge->unregisterMessage($editId); throw $e; } } |