Diaspora: support for sending native reshares. If a message from Diaspora is repeated, then it will be repeated as native reshare.

This commit is contained in:
Michael Vogel 2014-04-26 01:35:02 +02:00
parent 79da821c75
commit e75562cd6d
1 changed files with 72 additions and 11 deletions

View File

@ -2309,26 +2309,40 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
require_once('include/datetime.php'); require_once('include/datetime.php');
$created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d H:i:s \U\T\C'); $created = datetime_convert('UTC','UTC',$item['created'],'Y-m-d H:i:s \U\T\C');
// To-Do
// Detect a share element and do a reshare // Detect a share element and do a reshare
// see: https://github.com/Raven24/diaspora-federation/blob/master/lib/diaspora-federation/entities/reshare.rb // see: https://github.com/Raven24/diaspora-federation/blob/master/lib/diaspora-federation/entities/reshare.rb
$tpl = get_markup_template('diaspora_post.tpl'); if (!$item['private'] AND ($ret = diaspora_is_reshare($item["body"]))) {
$msg = replace_macros($tpl, array( $tpl = get_markup_template('diaspora_reshare.tpl');
'$body' => $body, $msg = replace_macros($tpl, array(
'$guid' => $item['guid'], '$root_handle' => xmlify($ret['root_handle']),
'$handle' => xmlify($myaddr), '$root_guid' => $ret['root_guid'],
'$public' => $public, '$guid' => $item['guid'],
'$created' => $created, '$handle' => xmlify($myaddr),
'$provider' => $item["app"] '$public' => $public,
)); '$created' => $created,
'$provider' => $item["app"]
));
} else {
$tpl = get_markup_template('diaspora_post.tpl');
$msg = replace_macros($tpl, array(
'$body' => $body,
'$guid' => $item['guid'],
'$handle' => xmlify($myaddr),
'$public' => $public,
'$created' => $created,
'$provider' => $item["app"]
));
}
logger('diaspora_send_status: ' . $owner['username'] . ' -> ' . $contact['name'] . ' base message: ' . $msg, LOGGER_DATA); logger('diaspora_send_status: '.$owner['username'].' -> '.$contact['name'].' base message: '.$msg, LOGGER_DATA);
$slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch))); $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)));
//$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch)); //$slap = 'xml=' . urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey'],$public_batch));
$return_code = diaspora_transmit($owner,$contact,$slap,$public_batch); $return_code = diaspora_transmit($owner,$contact,$slap,$public_batch);
logger('diaspora_send_status: guid: '.$item['guid'].' root_guid: '.$ret['root_guid'].' result '.$return_code, LOGGER_DEBUG);
if(count($images)) { if(count($images)) {
diaspora_send_images($item,$owner,$contact,$images,$public_batch); diaspora_send_images($item,$owner,$contact,$images,$public_batch);
} }
@ -2336,6 +2350,53 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
return $return_code; return $return_code;
} }
function diaspora_is_reshare($body) {
$body = trim($body);
// Skip if it isn't a pure repeated messages
// Does it start with a share?
if (strpos($body, "[share") > 0)
return(false);
// Does it end with a share?
if (strlen($body) > (strrpos($body, "[/share]") + 8))
return(false);
$attributes = preg_replace("/\[share(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism","$1",$body);
// Skip if there is no shared message in there
if ($body == $attributes)
return(false);
$profile = "";
preg_match("/profile='(.*?)'/ism", $attributes, $matches);
if ($matches[1] != "")
$profile = $matches[1];
preg_match('/profile="(.*?)"/ism', $attributes, $matches);
if ($matches[1] != "")
$profile = $matches[1];
$ret= array();
$ret["root_handle"] = preg_replace("=https?://(.*)/u/(.*)=ism", "$2@$1", $profile);
if ($ret["root_handle"] == $profile)
return(false);
$link = "";
preg_match("/link='(.*?)'/ism", $attributes, $matches);
if ($matches[1] != "")
$link = $matches[1];
preg_match('/link="(.*?)"/ism', $attributes, $matches);
if ($matches[1] != "")
$link = $matches[1];
$ret["root_guid"] = preg_replace("=https?://(.*)/posts/(.*)=ism", "$2", $link);
if ($ret["root_guid"] == $link)
return(false);
return($ret);
}
function diaspora_send_images($item,$owner,$contact,$images,$public_batch = false) { function diaspora_send_images($item,$owner,$contact,$images,$public_batch = false) {
$a = get_app(); $a = get_app();