From 1507ec37a4f6c35aebb9c50cbbade2b7d5682225 Mon Sep 17 00:00:00 2001 From: Zach Prezkuta Date: Sat, 12 Jan 2013 06:52:15 -0700 Subject: [PATCH 1/2] give post a chance to arrive before rejecting photos from Diaspora --- boot.php | 2 +- database.sql | 14 ++++++++++++ include/diaspora.php | 33 ++++++++++++++++++---------- include/dsprphotoq.php | 50 ++++++++++++++++++++++++++++++++++++++++++ include/poller.php | 4 ++++ update.php | 19 +++++++++++++++- 6 files changed, 108 insertions(+), 14 deletions(-) create mode 100644 include/dsprphotoq.php diff --git a/boot.php b/boot.php index 7d02ba9e04..61479bc93e 100644 --- a/boot.php +++ b/boot.php @@ -14,7 +14,7 @@ require_once('include/features.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_VERSION', '3.1.1584' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1157 ); +define ( 'DB_UPDATE_VERSION', 1158 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index 369637fe60..28a7c931e7 100644 --- a/database.sql +++ b/database.sql @@ -241,6 +241,20 @@ CREATE TABLE IF NOT EXISTS `deliverq` ( -- -------------------------------------------------------- +-- +-- Table structure for table `dsprphotoq` +-- + +CREATE TABLE `dsprphotoq` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL, + `msg` mediumtext NOT NULL, + `attempt` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + -- -- Table structure for table `event` -- diff --git a/include/diaspora.php b/include/diaspora.php index 3b681e9918..4b81efef81 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -16,7 +16,9 @@ function diaspora_dispatch_public($msg) { return; } - $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN ( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' ) AND `account_expired` = 0 AND `account_removed` = 0 ", + $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN + ( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' ) + AND `account_expired` = 0 AND `account_removed` = 0 ", dbesc(NETWORK_DIASPORA), dbesc($msg['author']) ); @@ -32,7 +34,7 @@ function diaspora_dispatch_public($msg) { -function diaspora_dispatch($importer,$msg) { +function diaspora_dispatch($importer,$msg,$attempt=1) { $ret = 0; @@ -88,7 +90,7 @@ function diaspora_dispatch($importer,$msg) { $ret = diaspora_signed_retraction($importer,$xmlbase->relayable_retraction,$msg); } elseif($xmlbase->photo) { - $ret = diaspora_photo($importer,$xmlbase->photo,$msg); + $ret = diaspora_photo($importer,$xmlbase->photo,$msg,$attempt); } elseif($xmlbase->conversation) { $ret = diaspora_conversation($importer,$xmlbase->conversation,$msg); @@ -1655,7 +1657,7 @@ function diaspora_message($importer,$xml,$msg) { } -function diaspora_photo($importer,$xml,$msg) { +function diaspora_photo($importer,$xml,$msg,$attempt=1) { $a = get_app(); @@ -1693,7 +1695,14 @@ function diaspora_photo($importer,$xml,$msg) { dbesc($status_message_guid) ); if(! count($r)) { - logger('diaspora_photo: parent item not found: parent: ' . $parent_guid . ' item: ' . $guid); + if($attempt <= 3) { + q("INSERT INTO dsprphotoq (uid, msg, attempt) VALUES (%d, '%s', %d)", + intval($importer['uid']), + dbesc(serialize($msg)), + intval($attempt + 1) + ); + } + logger('diaspora_photo: attempt = ' . $attempt . '; status message not found: ' . $status_message_guid . ' for photo: ' . $guid); return; } @@ -2197,7 +2206,7 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) { $images = array(); $title = $item['title']; - $body = $item['body']; + $body = fix_private_photos($item['body'], $owner['uid'], $item, $contact['id']); /* // We're trying to match Diaspora's split message/photo protocol but @@ -2320,12 +2329,12 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) { // $theiraddr = $contact['addr']; // Diaspora doesn't support threaded comments - /*if($item['thr-parent']) { + if($item['verb'] === ACTIVITY_LIKE && $item['thr-parent']) { $p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1", dbesc($item['thr-parent']) ); } - else {*/ + else { // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent. // The only item with `parent` and `id` as the parent id is the parent item. @@ -2333,7 +2342,7 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) { intval($item['parent']), intval($item['parent']) ); - //} + } if(count($p)) $parent = $p[0]; else @@ -2396,12 +2405,12 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) { $text = html_entity_decode(bb2diaspora($body)); // Diaspora doesn't support threaded comments - /*if($item['thr-parent']) { + if($item['verb'] === ACTIVITY_LIKE && $item['thr-parent']) { $p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1", dbesc($item['thr-parent']) ); } - else {*/ + else { // The first item in the `item` table with the parent id is the parent. However, MySQL doesn't always // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent. // The only item with `parent` and `id` as the parent id is the parent item. @@ -2409,7 +2418,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) { intval($item['parent']), intval($item['parent']) ); - //} + } if(count($p)) $parent = $p[0]; else diff --git a/include/dsprphotoq.php b/include/dsprphotoq.php new file mode 100644 index 0000000000..06e733d79c --- /dev/null +++ b/include/dsprphotoq.php @@ -0,0 +1,50 @@ + Date: Sat, 12 Jan 2013 06:56:45 -0700 Subject: [PATCH 2/2] fix leak --- include/diaspora.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/include/diaspora.php b/include/diaspora.php index 4b81efef81..18d37c243e 100755 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -2206,7 +2206,7 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) { $images = array(); $title = $item['title']; - $body = fix_private_photos($item['body'], $owner['uid'], $item, $contact['id']); + $body = $item['body']; /* // We're trying to match Diaspora's split message/photo protocol but @@ -2328,7 +2328,9 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) { $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); // $theiraddr = $contact['addr']; - // Diaspora doesn't support threaded comments + // Diaspora doesn't support threaded comments, but some + // versions of Diaspora (i.e. Diaspora-pistos) support + // likes on comments if($item['verb'] === ACTIVITY_LIKE && $item['thr-parent']) { $p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1", dbesc($item['thr-parent']) @@ -2404,7 +2406,9 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) { $body = $item['body']; $text = html_entity_decode(bb2diaspora($body)); - // Diaspora doesn't support threaded comments + // Diaspora doesn't support threaded comments, but some + // versions of Diaspora (i.e. Diaspora-pistos) support + // likes on comments if($item['verb'] === ACTIVITY_LIKE && $item['thr-parent']) { $p = q("select guid, type, uri, `parent-uri` from item where uri = '%s' limit 1", dbesc($item['thr-parent'])