]> git.mxchange.org Git - friendica.git/commitdiff
give post a chance to arrive before rejecting photos from Diaspora
authorZach Prezkuta <fermion@gmx.com>
Sat, 12 Jan 2013 13:52:15 +0000 (06:52 -0700)
committerZach Prezkuta <fermion@gmx.com>
Sat, 12 Jan 2013 13:52:15 +0000 (06:52 -0700)
boot.php
database.sql
include/diaspora.php
include/dsprphotoq.php [new file with mode: 0644]
include/poller.php
update.php

index 7d02ba9e041435ddb19e2199e4059eb09660f752..61479bc93ef6b1417ab62785667c1598351a3392 100644 (file)
--- 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',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
index 369637fe60c4a938d1bb458ab66d263ab739e719..28a7c931e77b97f3360313b06f9209411480ca71 100644 (file)
@@ -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`
 --
index 3b681e9918457e135a8b4bf195cea0c17e3dc253..4b81efef8172faac9bed6384f5924be1770d4bc9 100755 (executable)
@@ -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 (file)
index 0000000..06e733d
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+require_once("boot.php");
+require_once('include/diaspora.php');
+
+function dsprphotoq_run($argv, $argc){
+       global $a, $db;
+
+       if(is_null($a)){
+               $a = new App;
+       }
+  
+       if(is_null($db)){
+               @include(".htconfig.php");
+               require_once("include/dba.php");
+               $db = new dba($db_host, $db_user, $db_pass, $db_data);
+               unset($db_host, $db_user, $db_pass, $db_data);
+       };
+
+       logger("diaspora photo queue: running", LOGGER_DEBUG);
+
+       $r = q("SELECT * FROM dsprphotoq");
+       if(!$r)
+               return;
+
+       $dphotos = $r;
+
+       logger("diaspora photo queue: processing " . count($dphotos) . " photos");
+
+       foreach($dphotos as $dphoto) {
+
+               $r = q("SELECT * FROM user WHERE uid = %d",
+                       intval($dphoto['uid'])
+               );
+               if(!$r) {
+                       logger("diaspora photo queue: user " . $dphoto['uid'] . " not found");
+                       return;
+               }
+
+               $ret = diaspora_dispatch($r[0],unserialize($dphoto['msg']),$dphoto['attempt']);
+               q("DELETE FROM dsprphotoq WHERE id = %d",
+                  intval($dphoto['id'])
+               );
+       }
+}
+
+
+if (array_search(__file__,get_included_files())===0){
+  dsprphotoq_run($argv,$argc);
+  killme();
+}
index 7df59f727a9cf2e09111beb96ce051deee0bca37..692335aab2f3cd3038cb306387bb96c4683a4267 100644 (file)
@@ -62,6 +62,10 @@ function poller_run(&$argv, &$argc){
 
        proc_run('php',"include/queue.php");
        
+       // run diaspora photo queue process in the background
+
+       proc_run('php',"include/dsprphotoq.php");
+       
        // expire any expired accounts
 
        q("UPDATE user SET `account_expired` = 1 where `account_expired` = 0 
index b29afdb74105187cc73a87ea779fa98112cb44ca..1bea71f4d7ded1d63e7692200439115f88d709a0 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-define( 'UPDATE_VERSION' , 1157 );
+define( 'UPDATE_VERSION' , 1158 );
 
 /**
  *
@@ -1369,3 +1369,20 @@ ADD INDEX ( `datasize` ) ");
        if(!$r) return UPDATE_FAILED;
        return UPDATE_SUCCESS;
 }
+
+function update_1157() {
+       $r = q("CREATE TABLE  IF NOT EXISTS `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"
+       );
+
+       if($r)
+               return UPDATE_SUCCESS;
+
+       return UPDATE_FAILED;
+}
+