
12-21-2009, 03:14 PM
|
 |
|
|
Join Date: Jun 2005
Location: Sweden
Posts: 212
Благодарил(а): 0 раз(а)
Поблагодарили:
0 раз(а) в 0 сообщениях
|
|
This is the story:
My newsservers motherboard died in november, so I had to order a new one. This server has now been reinstalled from scratch so the Xref, which gateway.php uses is reset. Lastmsg in the nntp_groups-table therefore got useless, especially when the server resynched older posts again.
Fetching all posts again after resetting the lastmsg will result in duplicate messages. This has been fixed with a small patch.
Find the row:
$message =& $nntp['message'];
Add this code after that row:
PHP Code:
/* * Find duplicates by message-id against the forumid! * * Matching against forumid, so crosspostings to other groups * can proceed to posting. * */ $isduplicate = false; $msgid = $message['message-id']; $msgdupe = $db->query_first(" SELECT p.postid,p.threadid,p.msgid,t.forumid FROM post AS p INNER JOIN thread AS t ON p.threadid = t.threadid WHERE msgid = '".$db->escape_string($msgid)."' "); if ($group['forum'] == $msgdupe['forumid']) { $isduplicate = true; logging("Skip, Message-ID already found."); // No continue should be used here, since the lastmsg-counter must work //continue; }
Then go find the row for the post-insert (it?s actually the thread-insert), it should look like this:
$postid = insert_post($threadid, $forumid, $foruminfo, $subject, $from_name, $from_email, $date, $parentid);
Before that line, add?
PHP Code:
// If this isn't a duplicate if (!$isduplicate) {
Then, after the line ?
exec_send_notification($threadid, "0", $postid);
Add this:
PHP Code:
} // Isduplicate Finish
Right after this, you have to add similar code to the insertcode for posts, so directly after
} else {
?add this again:
PHP Code:
// If this isn't a duplicate if (!$isduplicate) {
?and finish this with an ending ?}? after the line
logging("'$subject' from ". $from_name . ". New thread.");
Now, the gateway should?nt post a message with the same Message-ID twice?
|