forked from friendica/friendica-addons
Merge pull request #1057 from annando/delayed-unprepared
IFTTT/Twitter: Support for delayed posts
This commit is contained in:
commit
c303e20254
|
@ -6,7 +6,6 @@
|
||||||
* Version: 0.1
|
* Version: 0.1
|
||||||
* Author: Michael Vogel <https://pirati.ca/profile/heluecht>
|
* Author: Michael Vogel <https://pirati.ca/profile/heluecht>
|
||||||
*/
|
*/
|
||||||
require_once 'mod/item.php';
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Content\PageInfo;
|
use Friendica\Content\PageInfo;
|
||||||
use Friendica\Core\Hook;
|
use Friendica\Core\Hook;
|
||||||
|
@ -15,6 +14,7 @@ use Friendica\Core\Protocol;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Item;
|
use Friendica\Model\Item;
|
||||||
|
use Friendica\Model\Post;
|
||||||
use Friendica\Util\Strings;
|
use Friendica\Util\Strings;
|
||||||
|
|
||||||
function ifttt_install()
|
function ifttt_install()
|
||||||
|
@ -161,25 +161,16 @@ function ifttt_message($uid, $item)
|
||||||
{
|
{
|
||||||
$a = DI::app();
|
$a = DI::app();
|
||||||
|
|
||||||
$_SESSION['authenticated'] = true;
|
$post = [];
|
||||||
$_SESSION['uid'] = $uid;
|
$post['uid'] = $uid;
|
||||||
|
$post['app'] = 'IFTTT';
|
||||||
unset($_REQUEST);
|
$post['title'] = '';
|
||||||
$_REQUEST['api_source'] = true;
|
$post['body'] = $item['msg'];
|
||||||
$_REQUEST['profile_uid'] = $uid;
|
//$post['date'] = $item['date'];
|
||||||
$_REQUEST['source'] = 'IFTTT';
|
//$post['uri'] = $item['url'];
|
||||||
$_REQUEST['title'] = '';
|
|
||||||
$_REQUEST['body'] = $item['msg'];
|
|
||||||
//$_REQUEST['date'] = $item['date'];
|
|
||||||
//$_REQUEST['uri'] = $item['url'];
|
|
||||||
|
|
||||||
if (!empty($item['url']) && strstr($item['url'], 'facebook.com')) {
|
|
||||||
$hash = hash('ripemd128', $item['url']);
|
|
||||||
$_REQUEST['extid'] = Protocol::FACEBOOK;
|
|
||||||
$_REQUEST['message_id'] = Item::newURI($uid, Protocol::FACEBOOK . ':' . $hash);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($item['type'] == 'link') {
|
if ($item['type'] == 'link') {
|
||||||
|
$link = $item['link'];
|
||||||
$data = PageInfo::queryUrl($item['link']);
|
$data = PageInfo::queryUrl($item['link']);
|
||||||
|
|
||||||
if (isset($item['title']) && (trim($item['title']) != '')) {
|
if (isset($item['title']) && (trim($item['title']) != '')) {
|
||||||
|
@ -190,10 +181,15 @@ function ifttt_message($uid, $item)
|
||||||
$data['text'] = $item['description'];
|
$data['text'] = $item['description'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$_REQUEST['body'] .= "\n" . PageInfo::getFooterFromData($data);
|
$post['body'] .= "\n" . PageInfo::getFooterFromData($data);
|
||||||
} elseif (($item['type'] == 'photo') && ($item['image'] != '')) {
|
} elseif (($item['type'] == 'photo') && ($item['image'] != '')) {
|
||||||
$_REQUEST['body'] .= "\n\n[img]" . $item['image'] . "[/img]\n";
|
$link = $item['image'];
|
||||||
|
$post['body'] .= "\n\n[img]" . $item['image'] . "[/img]\n";
|
||||||
|
} elseif (!empty($item['url'])) {
|
||||||
|
$link = $item['url'];
|
||||||
|
} else {
|
||||||
|
$link = hash('ripemd128', $item['msg']);
|
||||||
}
|
}
|
||||||
|
|
||||||
item_post($a);
|
Post\Delayed::add($link, $post, PRIORITY_MEDIUM, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,6 +83,7 @@ use Friendica\Model\Group;
|
||||||
use Friendica\Model\Item;
|
use Friendica\Model\Item;
|
||||||
use Friendica\Model\ItemContent;
|
use Friendica\Model\ItemContent;
|
||||||
use Friendica\Model\ItemURI;
|
use Friendica\Model\ItemURI;
|
||||||
|
use Friendica\Model\Post;
|
||||||
use Friendica\Model\Tag;
|
use Friendica\Model\Tag;
|
||||||
use Friendica\Model\User;
|
use Friendica\Model\User;
|
||||||
use Friendica\Protocol\Activity;
|
use Friendica\Protocol\Activity;
|
||||||
|
@ -1004,11 +1005,8 @@ function twitter_parse_link(App $a, array &$b)
|
||||||
*/
|
*/
|
||||||
function twitter_do_mirrorpost(App $a, $uid, $post)
|
function twitter_do_mirrorpost(App $a, $uid, $post)
|
||||||
{
|
{
|
||||||
$datarray['api_source'] = true;
|
$datarray['uid'] = $uid;
|
||||||
$datarray['profile_uid'] = $uid;
|
|
||||||
$datarray['extid'] = 'twitter::' . $post->id;
|
$datarray['extid'] = 'twitter::' . $post->id;
|
||||||
$datarray['protocol'] = Conversation::PARCEL_TWITTER;
|
|
||||||
$datarray['source'] = json_encode($post);
|
|
||||||
$datarray['title'] = '';
|
$datarray['title'] = '';
|
||||||
|
|
||||||
if (!empty($post->retweeted_status)) {
|
if (!empty($post->retweeted_status)) {
|
||||||
|
@ -1038,7 +1036,7 @@ function twitter_do_mirrorpost(App $a, $uid, $post)
|
||||||
$datarray['body'] = $item['body'];
|
$datarray['body'] = $item['body'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$datarray['source'] = $item['app'];
|
$datarray['app'] = $item['app'];
|
||||||
$datarray['verb'] = $item['verb'];
|
$datarray['verb'] = $item['verb'];
|
||||||
|
|
||||||
if (isset($item['location'])) {
|
if (isset($item['location'])) {
|
||||||
|
@ -1066,11 +1064,16 @@ function twitter_fetchtimeline(App $a, $uid)
|
||||||
$application_name = DI::baseUrl()->getHostname();
|
$application_name = DI::baseUrl()->getHostname();
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once 'mod/item.php';
|
|
||||||
require_once 'mod/share.php';
|
|
||||||
|
|
||||||
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
|
$connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
|
||||||
|
|
||||||
|
// Ensure to have the own contact
|
||||||
|
try {
|
||||||
|
twitter_fetch_own_contact($a, $uid);
|
||||||
|
} catch (TwitterOAuthException $e) {
|
||||||
|
Logger::warning('Error fetching own contact', ['uid' => $uid, 'message' => $e->getMessage()]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$parameters = ["exclude_replies" => true, "trim_user" => false, "contributor_details" => true, "include_rts" => true, "tweet_mode" => "extended", "include_ext_alt_text" => true];
|
$parameters = ["exclude_replies" => true, "trim_user" => false, "contributor_details" => true, "include_rts" => true, "tweet_mode" => "extended", "include_ext_alt_text" => true];
|
||||||
|
|
||||||
$first_time = ($lastid == "");
|
$first_time = ($lastid == "");
|
||||||
|
@ -1107,20 +1110,17 @@ function twitter_fetchtimeline(App $a, $uid)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!stristr($post->source, $application_name)) {
|
if (!stristr($post->source, $application_name)) {
|
||||||
$_SESSION["authenticated"] = true;
|
|
||||||
$_SESSION["uid"] = $uid;
|
|
||||||
|
|
||||||
Logger::info('Preparing mirror post', ['twitter-id' => $post->id_str, 'uid' => $uid]);
|
Logger::info('Preparing mirror post', ['twitter-id' => $post->id_str, 'uid' => $uid]);
|
||||||
|
|
||||||
$_REQUEST = twitter_do_mirrorpost($a, $uid, $post);
|
$mirrorpost = twitter_do_mirrorpost($a, $uid, $post);
|
||||||
|
|
||||||
if (empty($_REQUEST['body'])) {
|
if (empty($mirrorpost['body'])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger::info('Posting mirror post', ['twitter-id' => $post->id_str, 'uid' => $uid]);
|
Logger::info('Posting mirror post', ['twitter-id' => $post->id_str, 'uid' => $uid]);
|
||||||
|
|
||||||
item_post($a);
|
Post\Delayed::add($mirrorpost['extid'], $mirrorpost, PRIORITY_MEDIUM, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1237,12 +1237,16 @@ function twitter_fetch_contact($uid, $data, $create_user)
|
||||||
if (!empty($cid)) {
|
if (!empty($cid)) {
|
||||||
DBA::update('contact', $fields, ['id' => $cid]);
|
DBA::update('contact', $fields, ['id' => $cid]);
|
||||||
Contact::updateAvatar($cid, $avatar);
|
Contact::updateAvatar($cid, $avatar);
|
||||||
|
} else {
|
||||||
|
Logger::warning('No contact found', ['fields' => $fields]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$contact = DBA::selectFirst('contact', [], ['uid' => $uid, 'alias' => "twitter::" . $data->id_str]);
|
$contact = DBA::selectFirst('contact', [], ['uid' => $uid, 'alias' => "twitter::" . $data->id_str]);
|
||||||
if (!DBA::isResult($contact) && !$create_user) {
|
if (!DBA::isResult($contact) && empty($cid)) {
|
||||||
Logger::warning('User contact not found', ['uid' => $uid, 'twitter-id' => $data->id_str]);
|
Logger::warning('User contact not found', ['uid' => $uid, 'twitter-id' => $data->id_str]);
|
||||||
return 0;
|
return 0;
|
||||||
|
} elseif (!$create_user) {
|
||||||
|
return $cid;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DBA::isResult($contact)) {
|
if (!DBA::isResult($contact)) {
|
||||||
|
|
Loading…
Reference in a new issue