diff options
author | Friendika <info@friendika.com> | 2011-06-03 01:16:17 -0700 |
---|---|---|
committer | Friendika <info@friendika.com> | 2011-06-03 01:16:17 -0700 |
commit | a27391c33a6b2d3828182ca5f8e8b65998cf47a7 (patch) | |
tree | c49d6ddd2e5689a3493cda27dadcc549748e12ee /addon/facebook/facebook.php | |
parent | f2bdcb19e7f2748d3c368ab11deeb98d63fedca7 (diff) | |
download | volse-hubzilla-a27391c33a6b2d3828182ca5f8e8b65998cf47a7.tar.gz volse-hubzilla-a27391c33a6b2d3828182ca5f8e8b65998cf47a7.tar.bz2 volse-hubzilla-a27391c33a6b2d3828182ca5f8e8b65998cf47a7.zip |
facebook queueing on failure, sync update.php with boot.php update version to avoid race condition
Diffstat (limited to 'addon/facebook/facebook.php')
-rw-r--r-- | addon/facebook/facebook.php | 84 |
1 files changed, 73 insertions, 11 deletions
diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php index 3cc40330c..7ee2b1b08 100644 --- a/addon/facebook/facebook.php +++ b/addon/facebook/facebook.php @@ -335,18 +335,20 @@ function facebook_content(&$a) { } function facebook_install() { - register_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); - register_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); - register_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); - register_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); + register_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); + register_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); + register_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); + register_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); + register_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook'); } function facebook_uninstall() { - unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); - unregister_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); - unregister_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); - unregister_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); + unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); + unregister_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); + unregister_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); + unregister_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); + unregister_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook'); } @@ -635,9 +637,19 @@ function facebook_post_hook(&$a,&$b) { ); } else { - // FIXME queue the message so we can attempt to redeliver, see include/notifier.php and include/queue.php - if(! $likes) - notice( t('Facebook delivery failed.') . EOL); + if(! $likes) { + $s = serialize(array('url' => $url, 'item' => $b, 'post' => $postvars)); + q("INSERT INTO `queue` ( `network`, `cid`, `created`, `last`, `content`) + VALUES ( '%s', '%s', '%s', '%s') ", + dbesc(NETWORK_FACEBOOK), + intval($a->contact), + dbesc(datetime_convert()), + dbesc(datetime_convert()), + dbesc($s) + ); + + notice( t('Facebook post failed. Queued for retry.') . EOL); + } } logger('Facebook post returns: ' . $x, LOGGER_DEBUG); @@ -648,6 +660,56 @@ function facebook_post_hook(&$a,&$b) { } +function fb_queue_hook(&$a,&$b) { + + require_once('include/queue_fn.php'); + if((! is_array($b)) || (! count($b))) + return; + foreach($b as $x) { + if($b['network'] !== NETWORK_FACEBOOK) + continue; + $r = q("SELECT `user`.* FROM `user` LEFT JOIN `contact` on `contact`.`uid` = `user`.`uid` + WHERE `contact`.`self` = 1 AND `contact`.`id` = %d LIMIT 1", + intval($x['cid']) + ); + if(! count($r)) + continue; + + $user = $r[0]; + + $appid = get_config('facebook', 'appid' ); + $secret = get_config('facebook', 'appsecret' ); + + if($appid && $secret) { + $fb_post = intval(get_pconfig($user['uid'],'facebook','post')); + $fb_token = get_pconfig($user['uid'],'facebook','access_token'); + + if($fb_post && $fb_token) { + logger('facebook_queue: able to post'); + require_once('library/facebook.php'); + + $z = unserialize($x['content']); + $item = $z['item']; + $j = post_url($z['url'],$z['post']); + + $retj = json_decode($j); + if($retj->id) { + q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d LIMIT 1", + dbesc('fb::' . $retj->id), + intval($item['id']) + ); + logger('facebook queue: success: ' . $j); + remove_queue_item($x['id']); + } + else { + logger('facebook_queue: failed: ' . $j); + update_queue_time($x['id']); + } + } + } + } +} + function fb_consume_all($uid) { require_once('include/items.php'); |