]> git.mxchange.org Git - friendica.git/blobdiff - include/diaspora.php
prevent duplicate @ tags
[friendica.git] / include / diaspora.php
index aa6ee96701d211db5e8e71482a03d870607cd9b9..ac78beb2f9e58a9d2037307d01e19e577a71a7ac 100644 (file)
@@ -4,6 +4,7 @@ require_once('include/crypto.php');
 require_once('include/items.php');
 require_once('include/bb2diaspora.php');
 require_once('include/contact_selectors.php');
+require_once('include/queue_fn.php');
 
 
 function diaspora_dispatch_public($msg) {
@@ -91,12 +92,14 @@ function find_diaspora_person_by_handle($handle) {
                dbesc($handle)
        );
        if(count($r)) {
+               logger('find_diaspora_person_by handle: in cache ' . print_r($r,true), LOGGER_DEBUG);
                // update record occasionally so it doesn't get stale
                $d = strtotime($r[0]['updated'] . ' +00:00');
                if($d > strtotime('now - 14 days'))
                        return $r[0];
                $update = true;
        }
+       logger('find_diaspora_person_by_handle: refresh',LOGGER_DEBUG);
        require_once('include/Scrape.php');
        $r = probe_url($handle, PROBE_DIASPORA);
        if((count($r)) && ($r['network'] === NETWORK_DIASPORA)) {
@@ -448,13 +451,14 @@ function diaspora_request($importer,$xml) {
 
        $batch = (($ret['batch']) ? $ret['batch'] : implode('/', array_slice(explode('/',$ret['url']),0,3)) . '/receive/public');
 
-       $r = q("INSERT INTO `contact` (`uid`, `network`,`addr`,`created`,`url`,`batch`,`name`,`nick`,`photo`,`pubkey`,`notify`,`poll`,`blocked`,`priority`)
-               VALUES ( %d, '%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s','%s',%d,%d) ",
+       $r = q("INSERT INTO `contact` (`uid`, `network`,`addr`,`created`,`url`,`nurl`,`batch`,`name`,`nick`,`photo`,`pubkey`,`notify`,`poll`,`blocked`,`priority`)
+               VALUES ( %d, '%s', '%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s','%s',%d,%d) ",
                intval($importer['uid']),
                dbesc($ret['network']),
                dbesc($ret['addr']),
                datetime_convert(),
                dbesc($ret['url']),
+               dbesc(normalise_link($ret['url'])),
                dbesc($batch),
                dbesc($ret['name']),
                dbesc($ret['nick']),
@@ -570,6 +574,10 @@ function diaspora_post($importer,$xml) {
        $datarray['tag'] = $str_tags;
        $datarray['app']  = 'Diaspora';
 
+       // if empty content it might be a photo that hasn't arrived yet. If a photo arrives, we'll make it visible.
+
+       $datarray['visible'] = ((strlen($body)) ? 1 : 0);
+
        $message_id = item_store($datarray);
 
        if($message_id) {
@@ -585,16 +593,19 @@ function diaspora_post($importer,$xml) {
 
 function diaspora_reshare($importer,$xml) {
 
+       logger('diaspora_reshare: init: ' . print_r($xml,true));
+
        $a = get_app();
        $guid = notags(unxmlify($xml->guid));
        $diaspora_handle = notags(unxmlify($xml->diaspora_handle));
 
+
        $contact = diaspora_get_contact_by_handle($importer['uid'],$diaspora_handle);
        if(! $contact)
                return;
 
        if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { 
-               logger('diaspora_reshare: Ignoring this author.');
+               logger('diaspora_reshare: Ignoring this author: ' . $diaspora_handle . ' ' . print_r($xml,true));
                return 202;
        }
 
@@ -620,15 +631,23 @@ function diaspora_reshare($importer,$xml) {
                logger('diaspora_reshare: unable to fetch source url ' . $source_url);
                return;
        }
+       logger('diaspora_reshare: source: ' . $x);
+
        $x = str_replace(array('<activity_streams-photo>','</activity_streams-photo>'),array('<asphoto>','</asphoto>'),$x);
        $source_xml = parse_xml_string($x,false);
 
-       if(strlen($source_xml->asphoto->objectId) && ($source_xml->asphoto->objectId != 0) && ($source_xml->asphoto->image_url))
-               $body = '[url=' . notags(unxmlify($source_xml->asphoto->image_url)) . '][img]' . notags(unxmlify($source_xml->asphoto->objectId)) . '[/img][/url]' . "\n";
-       elseif($source_xml->asphoto->image_url)
-               $body = '[img]' . notags(unxmlify($source_xml->asphoto->image_url)) . '[/img]' . "\n";
-       elseif($source_xml->status_message) {
-               $body = diaspora2bb($source_xml->status_message->raw_message);
+       if(strlen($source_xml->post->asphoto->objectId) && ($source_xml->post->asphoto->objectId != 0) && ($source_xml->post->asphoto->image_url)) {
+               $body = '[url=' . notags(unxmlify($source_xml->post->asphoto->image_url)) . '][img]' . notags(unxmlify($source_xml->post->asphoto->objectId)) . '[/img][/url]' . "\n";
+               $body = scale_diaspora_images($body,false);
+       }
+       elseif($source_xml->post->asphoto->image_url) {
+               $body = '[img]' . notags(unxmlify($source_xml->post->asphoto->image_url)) . '[/img]' . "\n";
+               $body = scale_diaspora_images($body);
+       }
+       elseif($source_xml->post->status_message) {
+               $body = diaspora2bb($source_xml->post->status_message->raw_message);
+               $body = scale_diaspora_images($body);
+
        }
        else {
                logger('diaspora_reshare: no reshare content found: ' . print_r($source_xml,true));
@@ -664,8 +683,6 @@ function diaspora_reshare($importer,$xml) {
        $created = unxmlify($xml->created_at);
        $private = ((unxmlify($xml->public) == 'false') ? 1 : 0);
 
-       $body = diaspora2bb($xml->raw_message);
-
        $datarray = array();
 
        $str_tags = '';
@@ -761,16 +778,19 @@ function diaspora_asphoto($importer,$xml) {
        $created = unxmlify($xml->created_at);
        $private = ((unxmlify($xml->public) == 'false') ? 1 : 0);
 
-       if(strlen($xml->objectId) && ($xml->objectId != 0) && ($xml->image_url))
+       if(strlen($xml->objectId) && ($xml->objectId != 0) && ($xml->image_url)) {
                $body = '[url=' . notags(unxmlify($xml->image_url)) . '][img]' . notags(unxmlify($xml->objectId)) . '[/img][/url]' . "\n";
-       elseif($xml->image_url)
+               $body = scale_diaspora_images($body,false);
+       }
+       elseif($xml->image_url) {
                $body = '[img]' . notags(unxmlify($xml->image_url)) . '[/img]' . "\n";
+               $body = scale_diaspora_images($body);
+       }
        else {
                logger('diaspora_asphoto: no photo url found.');
                return;
        }
 
-
        $datarray = array();
 
        
@@ -939,7 +959,10 @@ function diaspora_comment($importer,$xml,$msg) {
        $datarray['author-avatar'] = ((x($person,'thumb')) ? $person['thumb'] : $person['photo']);
        $datarray['body'] = $body;
        $datarray['tag'] = $str_tags;
-       $datarray['app']  = 'Diaspora';
+
+       // We can't be certain what the original app is if the message is relayed.
+       if(($parent_item['origin']) && (! $parent_author_signature)) 
+               $datarray['app']  = 'Diaspora';
 
        $message_id = item_store($datarray);
 
@@ -950,7 +973,7 @@ function diaspora_comment($importer,$xml,$msg) {
                );
        }
 
-       if(! $parent_author_signature) {
+       if(($parent_item['origin']) && (! $parent_author_signature)) {
                q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
                        intval($message_id),
                        dbesc($author_signed_data),
@@ -1006,8 +1029,10 @@ function diaspora_photo($importer,$xml,$msg) {
 
        $link_text = '[img]' . $remote_photo_path . $remote_photo_name . '[/img]' . "\n";
 
+       $link_text = scale_diaspora_images($link_text);
+
        if(strpos($parent_item['body'],$link_text) === false) {
-               $r = q("update item set `body` = '%s' where `id` = %d and `uid` = %d limit 1",
+               $r = q("update item set `body` = '%s', `visible` = 1 where `id` = %d and `uid` = %d limit 1",
                        dbesc($link_text . $parent_item['body']),
                        intval($parent_item['id']),
                        intval($parent_item['uid'])
@@ -1155,9 +1180,9 @@ EOT;
        $arr['parent'] = $parent_item['id'];
        $arr['parent-uri'] = $parent_item['uri'];
 
-       $arr['owner-name'] = $contact['name'];
-       $arr['owner-link'] = $contact['url'];
-       $arr['owner-avatar'] = $contact['thumb'];
+       $arr['owner-name'] = $parent_item['name'];
+       $arr['owner-link'] = $parent_item['url'];
+       $arr['owner-avatar'] = $parent_item['thumb'];
 
        $arr['author-name'] = $person['name'];
        $arr['author-link'] = $person['url'];
@@ -1199,9 +1224,9 @@ EOT;
 
        // if the message isn't already being relayed, notify others
        // the existence of parent_author_signature means the parent_author or owner
-       // is already relaying.
+       // is already relaying. The parent_item['origin'] indicates the message was created on our system
 
-       if(! $parent_author_signature)
+       if(($parent_item['origin']) && (! $parent_author_signature))
                proc_run('php','include/notifier.php','comment',$message_id);
 
        return;
@@ -1368,6 +1393,14 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
 
        $body = $item['body'];
 
+/*
+       // We're trying to match Diaspora's split message/photo protocol but
+       // all the photos are displayed on D* as links and not img's - even
+       // though we're sending pretty much precisely what they send us when
+       // doing the same operation.  
+       // Commented out for now, we'll use bb2diaspora to convert photos to markdown
+       // which seems to get through intact.
+
        $cnt = preg_match_all('|\[img\](.*?)\[\/img\]|',$body,$matches,PREG_SET_ORDER);
        if($cnt) {
                foreach($matches as $mtch) {
@@ -1378,12 +1411,24 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
                        $detail['guid'] = $item['guid'];
                        $detail['handle'] = $myaddr;
                        $images[] = $detail;
-                       $body = str_replace($detail['str'],t('link'),$body);
+                       $body = str_replace($detail['str'],$mtch[1],$body);
                }
        }       
+*/
 
        $body = xmlify(html_entity_decode(bb2diaspora($body)));
 
+       if($item['attach']) {
+               $cnt = preg_match_all('/href=\"(.*?)\"(.*?)title=\"(.*?)\"/ism',$item['attach'],$matches,PREG_SET_ORDER);
+               if(cnt) {
+                       $body .= "\n" . t('Attachments:') . "\n";
+                       foreach($matches as $mtch) {
+                               $body .= '[' . $mtch[3] . '](' . $mtch[1] . ')' . "\n";
+                       }
+               }
+       }       
+
+
        $public = (($item['private']) ? 'false' : 'true');
 
        require_once('include/datetime.php');
@@ -1640,14 +1685,7 @@ function diaspora_transmit($owner,$contact,$slap,$public_batch) {
        if((! $return_code) || (($curl_stat == 503) && (stristr($a->get_curl_headers(),'retry-after')))) {
                logger('diaspora_transmit: queue message');
                // queue message for redelivery
-               q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`,`batch`)
-                       VALUES ( %d, '%s', '%s', '%s', %d) ",
-                       intval($contact['id']),
-                       dbesc(datetime_convert()),
-                       dbesc(datetime_convert()),
-                       dbesc($slap),
-                       intval($public_batch)
-               );
+               add_to_queue($contact['id'],NETWORK_DIASPORA,$slap,$public_batch);
        }