OStatus: Improved duplicate check.
This commit is contained in:
		
					parent
					
						
							
								7e401ca199
							
						
					
				
			
			
				commit
				
					
						03214254ff
					
				
			
		
					 3 changed files with 73 additions and 18 deletions
				
			
		|  | @ -1138,7 +1138,6 @@ function diaspora_reshare($importer,$xml,$msg) { | ||||||
| 			$orig_created = $r[0]["created"]; | 			$orig_created = $r[0]["created"]; | ||||||
| 			$orig_plink = $r[0]["plink"]; | 			$orig_plink = $r[0]["plink"]; | ||||||
| 			$orig_uri = $r[0]["uri"]; | 			$orig_uri = $r[0]["uri"]; | ||||||
| 			$create_original_post = ($body != ""); |  | ||||||
| 			$object = $r[0]["object"]; | 			$object = $r[0]["object"]; | ||||||
| 			$objecttype = $r[0]["object-type"]; | 			$objecttype = $r[0]["object-type"]; | ||||||
| 		} | 		} | ||||||
|  | @ -1239,8 +1238,9 @@ function diaspora_reshare($importer,$xml,$msg) { | ||||||
| 		$datarray2['uid'] = 0; | 		$datarray2['uid'] = 0; | ||||||
| 		$datarray2['contact-id'] = get_contact($person['url'], 0); | 		$datarray2['contact-id'] = get_contact($person['url'], 0); | ||||||
| 		$datarray2['guid'] = $orig_guid; | 		$datarray2['guid'] = $orig_guid; | ||||||
| 		$datarray2['uri'] = $orig_uri; | 		$datarray2['uri'] = $datarray2['parent-uri'] = $orig_uri; | ||||||
| 		$datarray2['changed'] = $datarray2['created'] = $datarray2['edited'] = $datarray2['commented'] = $datarray2['received'] = datetime_convert('UTC','UTC',$orig_created); | 		$datarray2['changed'] = $datarray2['created'] = $datarray2['edited'] = $datarray2['commented'] = $datarray2['received'] = datetime_convert('UTC','UTC',$orig_created); | ||||||
|  | 		$datarray2['parent'] = 0; | ||||||
| 		$datarray2['plink'] = $orig_plink; | 		$datarray2['plink'] = $orig_plink; | ||||||
| 
 | 
 | ||||||
| 		$datarray2['author-name'] = $person['name']; | 		$datarray2['author-name'] = $person['name']; | ||||||
|  |  | ||||||
|  | @ -864,7 +864,7 @@ function get_atom_elements($feed, $item, $contact = array()) { | ||||||
| 			$conversation = array_shift($link["attribs"]); | 			$conversation = array_shift($link["attribs"]); | ||||||
| 
 | 
 | ||||||
| 			if ($conversation["rel"] == "ostatus:conversation") { | 			if ($conversation["rel"] == "ostatus:conversation") { | ||||||
| 				$res["ostatus_conversation"] = $conversation["href"]; | 				$res["ostatus_conversation"] = ostatus_convert_href($conversation["href"]); | ||||||
| 				logger('get_atom_elements: found conversation url '.$res["ostatus_conversation"]); | 				logger('get_atom_elements: found conversation url '.$res["ostatus_conversation"]); | ||||||
| 			} | 			} | ||||||
| 		}; | 		}; | ||||||
|  | @ -1090,6 +1090,14 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa | ||||||
| 		unset($arr['dsprsig']); | 		unset($arr['dsprsig']); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// Converting the plink
 | ||||||
|  | 	if ($arr['network'] == NETWORK_OSTATUS) { | ||||||
|  | 		if (isset($arr['plink'])) | ||||||
|  | 			$arr['plink'] = ostatus_convert_href($arr['plink']); | ||||||
|  | 		elseif (isset($arr['uri'])) | ||||||
|  | 			$arr['plink'] = ostatus_convert_href($arr['uri']); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// if an OStatus conversation url was passed in, it is stored and then
 | 	// if an OStatus conversation url was passed in, it is stored and then
 | ||||||
| 	// removed from the array.
 | 	// removed from the array.
 | ||||||
| 	$ostatus_conversation = null; | 	$ostatus_conversation = null; | ||||||
|  | @ -1115,7 +1123,7 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa | ||||||
| 
 | 
 | ||||||
| 	/* check for create  date and expire time */ | 	/* check for create  date and expire time */ | ||||||
| 	$uid = intval($arr['uid']); | 	$uid = intval($arr['uid']); | ||||||
| 	$r = q("SELECT expire FROM user WHERE uid = %d", $uid); | 	$r = q("SELECT expire FROM user WHERE uid = %d", intval($uid)); | ||||||
| 	if(count($r)) { | 	if(count($r)) { | ||||||
| 		$expire_interval = $r[0]['expire']; | 		$expire_interval = $r[0]['expire']; | ||||||
| 		if ($expire_interval>0) { | 		if ($expire_interval>0) { | ||||||
|  |  | ||||||
|  | @ -2,7 +2,30 @@ | ||||||
| define('OSTATUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes
 | define('OSTATUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes
 | ||||||
| define('OSTATUS_DEFAULT_POLL_TIMEFRAME', 1440); // given in minutes
 | define('OSTATUS_DEFAULT_POLL_TIMEFRAME', 1440); // given in minutes
 | ||||||
| 
 | 
 | ||||||
| function check_conversations() { | function ostatus_convert_href($href) { | ||||||
|  | 	$elements = explode(":",$href); | ||||||
|  | 
 | ||||||
|  | 	if ((count($elements) <= 2) OR ($elements[0] != "tag")) | ||||||
|  | 		return $href; | ||||||
|  | 
 | ||||||
|  | 	$server = explode(",", $elements[1]); | ||||||
|  | 	$conversation = explode("=", $elements[2]); | ||||||
|  | 
 | ||||||
|  | 	if ((count($elements) == 4) AND ($elements[2] == "post")) | ||||||
|  | 		return "http://".$server[0]."/notice/".$elements[3]; | ||||||
|  | 
 | ||||||
|  | 	if ((count($conversation) != 2) OR ($conversation[1] =="")) | ||||||
|  | 		return $href; | ||||||
|  | 
 | ||||||
|  | 	if ($elements[3] == "objectType=thread") | ||||||
|  | 		return "http://".$server[0]."/conversation/".$conversation[1]; | ||||||
|  | 	else | ||||||
|  | 		return "http://".$server[0]."/notice/".$conversation[1]; | ||||||
|  | 
 | ||||||
|  | 	return $href; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function check_conversations($override = false) { | ||||||
|         $last = get_config('system','ostatus_last_poll'); |         $last = get_config('system','ostatus_last_poll'); | ||||||
| 
 | 
 | ||||||
|         $poll_interval = intval(get_config('system','ostatus_poll_interval')); |         $poll_interval = intval(get_config('system','ostatus_poll_interval')); | ||||||
|  | @ -10,16 +33,16 @@ function check_conversations() { | ||||||
|                 $poll_interval = OSTATUS_DEFAULT_POLL_INTERVAL; |                 $poll_interval = OSTATUS_DEFAULT_POLL_INTERVAL; | ||||||
| 
 | 
 | ||||||
| 	// Don't poll if the interval is set negative
 | 	// Don't poll if the interval is set negative
 | ||||||
| 	if ($poll_interval < 0) | 	if (($poll_interval < 0) AND !$override) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
|         $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe')); |         $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe')); | ||||||
|         if(! $poll_timeframe) |         if (!$poll_timeframe) | ||||||
|                 $poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME; |                 $poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME; | ||||||
| 
 | 
 | ||||||
|         if($last) { |         if ($last AND !$override) { | ||||||
|                 $next = $last + ($poll_interval * 60); |                 $next = $last + ($poll_interval * 60); | ||||||
|                 if($next > time()) { |                 if ($next > time()) { | ||||||
|                         logger('poll interval not reached'); |                         logger('poll interval not reached'); | ||||||
|                         return; |                         return; | ||||||
|                 } |                 } | ||||||
|  | @ -36,7 +59,7 @@ function check_conversations() { | ||||||
|                 complete_conversation($id, $url); |                 complete_conversation($id, $url); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         logger(' cron_end'); |         logger('cron_end'); | ||||||
| 
 | 
 | ||||||
|         set_config('system','ostatus_last_poll', time()); |         set_config('system','ostatus_last_poll', time()); | ||||||
| } | } | ||||||
|  | @ -44,6 +67,8 @@ function check_conversations() { | ||||||
| function complete_conversation($itemid, $conversation_url, $only_add_conversation = false) { | function complete_conversation($itemid, $conversation_url, $only_add_conversation = false) { | ||||||
| 	global $a; | 	global $a; | ||||||
| 
 | 
 | ||||||
|  | 	$conversation_url = ostatus_convert_href($conversation_url); | ||||||
|  | 
 | ||||||
| 	if (intval(get_config('system','ostatus_poll_interval')) == -2) | 	if (intval(get_config('system','ostatus_poll_interval')) == -2) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
|  | @ -107,16 +132,24 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio | ||||||
| 	$items = array_reverse($items); | 	$items = array_reverse($items); | ||||||
| 
 | 
 | ||||||
| 	foreach ($items as $single_conv) { | 	foreach ($items as $single_conv) { | ||||||
| 		// status.net changed the format of the activity streams. This is a quick fix.
 | 		if (!isset($single_conv->id) AND isset($single_conv->object->id)) | ||||||
| 		if (@is_string($single_conv->object->id)) |  | ||||||
| 			$single_conv->id = $single_conv->object->id; | 			$single_conv->id = $single_conv->object->id; | ||||||
|  | 		elseif (!isset($single_conv->id) AND isset($single_conv->object->url)) | ||||||
|  | 			$single_conv->id = $single_conv->object->url; | ||||||
| 
 | 
 | ||||||
| 		if (@!$single_conv->id AND $single_conv->provider->url AND $single_conv->statusnet_notice_info->local_id) | 		$plink = ostatus_convert_href($single_conv->id); | ||||||
| 			$single_conv->id = $single_conv->provider->url."notice/".$single_conv->statusnet_notice_info->local_id; | 
 | ||||||
|  | 		if (isset($single_conv->provider->url) AND isset($single_conv->statusnet_notice_info->local_id)) | ||||||
|  | 			$plink = $single_conv->provider->url."notice/".$single_conv->statusnet_notice_info->local_id; | ||||||
|  | 		elseif (isset($single_conv->provider->url) AND isset($single_conv->statusnet->notice_info->local_id)) | ||||||
|  | 			$plink = $single_conv->provider->url."notice/".$single_conv->statusnet->notice_info->local_id; | ||||||
| 
 | 
 | ||||||
| 		if (@!$single_conv->id) | 		if (@!$single_conv->id) | ||||||
| 			continue; | 			continue; | ||||||
| 
 | 
 | ||||||
|  | 		//logger("OStatus conversation id ".$single_conv->id, LOGGER_DEBUG);
 | ||||||
|  | 		//logger("OStatus conversation data ".print_r($single_conv, true), LOGGER_DEBUG);
 | ||||||
|  | 
 | ||||||
| 		if ($first_id == "") { | 		if ($first_id == "") { | ||||||
| 			$first_id = $single_conv->id; | 			$first_id = $single_conv->id; | ||||||
| 
 | 
 | ||||||
|  | @ -136,8 +169,13 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio | ||||||
| 		else | 		else | ||||||
| 			$parent_uri = $parent["uri"]; | 			$parent_uri = $parent["uri"]; | ||||||
| 
 | 
 | ||||||
| 		$message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1", | 		$message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `plink` = '%s' LIMIT 1", | ||||||
|  | 							intval($message["uid"]), dbesc($plink)); | ||||||
|  | 
 | ||||||
|  | 		if (!$message_exists) | ||||||
|  | 			$message_exists = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' LIMIT 1", | ||||||
| 							intval($message["uid"]), dbesc($single_conv->id)); | 							intval($message["uid"]), dbesc($single_conv->id)); | ||||||
|  | 
 | ||||||
| 		if ($message_exists) { | 		if ($message_exists) { | ||||||
| 			if ($parent["id"] != 0) { | 			if ($parent["id"] != 0) { | ||||||
| 				$existing_message = $message_exists[0]; | 				$existing_message = $message_exists[0]; | ||||||
|  | @ -166,7 +204,7 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio | ||||||
| 		$arr = array(); | 		$arr = array(); | ||||||
| 		$arr["network"] = NETWORK_OSTATUS; | 		$arr["network"] = NETWORK_OSTATUS; | ||||||
| 		$arr["uri"] = $single_conv->id; | 		$arr["uri"] = $single_conv->id; | ||||||
| 		$arr["plink"] = $single_conv->id; | 		$arr["plink"] = $plink; | ||||||
| 		$arr["uid"] = $message["uid"]; | 		$arr["uid"] = $message["uid"]; | ||||||
| 		$arr["contact-id"] = $contact_id; | 		$arr["contact-id"] = $contact_id; | ||||||
| 		if ($parent["id"] != 0) | 		if ($parent["id"] != 0) | ||||||
|  | @ -190,9 +228,16 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio | ||||||
| 		$arr["author-link"] = $single_conv->actor->id; | 		$arr["author-link"] = $single_conv->actor->id; | ||||||
| 		$arr["author-avatar"] = $single_conv->actor->image->url; | 		$arr["author-avatar"] = $single_conv->actor->image->url; | ||||||
| 		$arr["body"] = html2bbcode($single_conv->content); | 		$arr["body"] = html2bbcode($single_conv->content); | ||||||
| 		$arr["app"] = strip_tags($single_conv->statusnet_notice_info->source); | 
 | ||||||
| 		if ($arr["app"] == "") | 		if (isset($single_conv->statusnet->notice_info->source)) | ||||||
|  | 			$arr["app"] = strip_tags($single_conv->statusnet->notice_info->source); | ||||||
|  | 		elseif (isset($single_conv->statusnet_notice_info->source)) | ||||||
|  | 			$arr["app"] = strip_tags($single_conv->statusnet_notice_info->source); | ||||||
|  | 		elseif (isset($single_conv->provider->displayName)) | ||||||
| 			$arr["app"] = $single_conv->provider->displayName; | 			$arr["app"] = $single_conv->provider->displayName; | ||||||
|  | 		else | ||||||
|  | 			$arr["app"] = "OStatus"; | ||||||
|  | 
 | ||||||
| 		$arr["verb"] = $parent["verb"]; | 		$arr["verb"] = $parent["verb"]; | ||||||
| 		$arr["visible"] = $parent["visible"]; | 		$arr["visible"] = $parent["visible"]; | ||||||
| 		$arr["location"] = $single_conv->location->displayName; | 		$arr["location"] = $single_conv->location->displayName; | ||||||
|  | @ -206,6 +251,8 @@ function complete_conversation($itemid, $conversation_url, $only_add_conversatio | ||||||
| 
 | 
 | ||||||
| 		$newitem = item_store($arr); | 		$newitem = item_store($arr); | ||||||
| 
 | 
 | ||||||
|  | 		logger('Stored new item '.$plink.' under id '.$newitem, LOGGER_DEBUG); | ||||||
|  | 
 | ||||||
| 		// Add the conversation entry (but don't fetch the whole conversation)
 | 		// Add the conversation entry (but don't fetch the whole conversation)
 | ||||||
| 		complete_conversation($newitem, $conversation_url, true); | 		complete_conversation($newitem, $conversation_url, true); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue