]> git.mxchange.org Git - friendica-addons.git/blobdiff - pumpio/pumpio.php
Merge remote-tracking branch 'upstream/master' into 1601-gcontact
[friendica-addons.git] / pumpio / pumpio.php
index 624674144f39033d8ca3b741c0b952f553f07cd1..0a5f50b967f9a2e66bac4c1ccdb504665be2f60c 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * Name: pump.io Post Connector
- * Description: Post to pump.io
+ * Description: Bidirectional (posting, relaying and reading) connector for pump.io.
  * Version: 0.2
  * Author: Michael Vogel <http://pirati.ca/profile/heluecht>
  */
@@ -68,8 +68,10 @@ function pumpio_registerclient(&$a, $host) {
        if ($application_name == "")
                $application_name = $a->get_hostname();
 
+       $adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
+
        $params["type"] = "client_associate";
-       $params["contacts"] = $a->config['admin_email'];
+       $params["contacts"] = $adminlist[0];
        $params["application_type"] = "native";
        $params["application_name"] = $application_name;
        $params["logo_url"] = $a->get_baseurl()."/images/friendica-256.png";
@@ -302,6 +304,7 @@ function pumpio_settings_post(&$a,&$b) {
                        set_pconfig(local_user(),'pumpio','mirror',false);
                        set_pconfig(local_user(),'pumpio','post_by_default',false);
                        set_pconfig(local_user(),'pumpio','lastdate', 0);
+                       set_pconfig(local_user(),'pumpio','last_id', '');
                } else {
                        // filtering the username if it is filled wrong
                        $user = $_POST['pumpio_user'];
@@ -433,9 +436,6 @@ function pumpio_send(&$a,&$b) {
 
                $title = trim($b['title']);
 
-               if ($title != '')
-                       $title = "<h4>".$title."</h4>";
-
                $content = bbcode($b['body'], false, false, 4);
 
                // Enhance the way, videos are displayed
@@ -454,7 +454,10 @@ function pumpio_send(&$a,&$b) {
                if (!$iscomment) {
                        $params["object"] = array(
                                                'objectType' => "note",
-                                               'content' => $title.$content);
+                                               'content' => $content);
+
+                       if ($title != "")
+                               $params["object"]["displayName"] = $title;
 
                        if (count($receiver["to"]))
                                $params["to"] = $receiver["to"];
@@ -472,10 +475,16 @@ function pumpio_send(&$a,&$b) {
                        $inReplyTo = array("id" => $orig_post["uri"],
                                        "objectType" => "note");
 
+                       if (($orig_post["object-type"] != "") AND (strstr($orig_post["object-type"], NAMESPACE_ACTIVITY_SCHEMA)))
+                               $inReplyTo["objectType"] = str_replace(NAMESPACE_ACTIVITY_SCHEMA, '', $orig_post["object-type"]);
+
                        $params["object"] = array(
                                                'objectType' => "comment",
-                                               'content' => $title.$content,
+                                               'content' => $content,
                                                'inReplyTo' => $inReplyTo);
+
+                       if ($title != "")
+                               $params["object"]["displayName"] = $title;
                }
 
                $client = new oauth_client_class;
@@ -490,9 +499,16 @@ function pumpio_send(&$a,&$b) {
                $username = $user.'@'.$host;
                $url = 'https://'.$host.'/api/user/'.$user.'/feed';
 
-               $success = $client->CallAPI($url, 'POST', $params, array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+               if (pumpio_reachable($url))
+                       $success = $client->CallAPI($url, 'POST', $params, array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+               else
+                       $success = false;
 
                if($success) {
+
+                       if ($user->generator->displayName)
+                               set_pconfig($b["uid"], "pumpio", "application_name", $user->generator->displayName);
+
                        $post_id = $user->object->id;
                        logger('pumpio_send '.$username.': success '.$post_id);
                        if($post_id AND $iscomment) {
@@ -518,7 +534,7 @@ function pumpio_send(&$a,&$b) {
        }
 }
 
-function pumpio_action(&$a, $uid, $uri, $action, $content) {
+function pumpio_action(&$a, $uid, $uri, $action, $content = "") {
 
        // Don't do likes and other stuff if you don't import the timeline
        if (!get_pconfig($uid,'pumpio','import'))
@@ -546,7 +562,9 @@ function pumpio_action(&$a, $uid, $uri, $action, $content) {
        else
                $uri = $orig_post["uri"];
 
-       if (strstr($uri, "/api/comment/"))
+       if (($orig_post["object-type"] != "") AND (strstr($orig_post["object-type"], NAMESPACE_ACTIVITY_SCHEMA)))
+               $objectType = str_replace(NAMESPACE_ACTIVITY_SCHEMA, '', $orig_post["object-type"]);
+       elseif (strstr($uri, "/api/comment/"))
                $objectType = "comment";
        elseif (strstr($uri, "/api/note/"))
                $objectType = "note";
@@ -570,7 +588,10 @@ function pumpio_action(&$a, $uid, $uri, $action, $content) {
 
        $url = 'https://'.$hostname.'/api/user/'.$username.'/feed';
 
-       $success = $client->CallAPI($url, 'POST', $params, array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+       if (pumpio_reachable($url))
+               $success = $client->CallAPI($url, 'POST', $params, array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+       else
+               $success = false;
 
        if($success)
                logger('pumpio_action '.$username.' '.$action.': success '.$uri);
@@ -588,8 +609,13 @@ function pumpio_action(&$a, $uid, $uri, $action, $content) {
        }
 }
 
+function pumpio_sync(&$a) {
+       $r = q("SELECT * FROM `addon` WHERE `installed` = 1 AND `name` = 'pumpio'",
+               $plugin);
+
+       if (!count($r))
+               return;
 
-function pumpio_cron(&$a,$b) {
        $last = get_config('pumpio','last_poll');
 
        $poll_interval = intval(get_config('pumpio','poll_interval'));
@@ -613,9 +639,23 @@ function pumpio_cron(&$a,$b) {
                }
        }
 
+       $abandon_days = intval(get_config('system','account_abandon_days'));
+       if ($abandon_days < 1)
+               $abandon_days = 0;
+
+       $abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400);
+
        $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'pumpio' AND `k` = 'import' AND `v` = '1' ORDER BY RAND() ");
        if(count($r)) {
                foreach($r as $rr) {
+                       if ($abandon_days != 0) {
+                               $user = q("SELECT `login_date` FROM `user` WHERE uid=%d AND `login_date` >= '%s'", $rr['uid'], $abandon_limit);
+                               if (!count($user)) {
+                                       logger('abandoned account: timeline from user '.$rr['uid'].' will not be imported');
+                                       continue;
+                               }
+                       }
+
                        logger('pumpio: importing timeline from user '.$rr['uid']);
                        pumpio_fetchinbox($a, $rr['uid']);
 
@@ -638,6 +678,11 @@ function pumpio_cron(&$a,$b) {
        set_config('pumpio','last_poll', time());
 }
 
+function pumpio_cron(&$a,$b) {
+       //pumpio_sync($a);
+       proc_run("php","addon/pumpio/pumpio_sync.php");
+}
+
 function pumpio_fetchtimeline(&$a, $uid) {
        $ckey    = get_pconfig($uid, 'pumpio', 'consumer_key');
        $csecret = get_pconfig($uid, 'pumpio', 'consumer_secret');
@@ -647,8 +692,12 @@ function pumpio_fetchtimeline(&$a, $uid) {
        $hostname = get_pconfig($uid, 'pumpio','host');
        $username = get_pconfig($uid, "pumpio", "user");
 
-       $application_name  = get_config('pumpio', 'application_name');
-
+       //  get the application name for the pump.io app
+       //  1st try personal config, then system config and fallback to the
+       //  hostname of the node if neither one is set.
+       $application_name  = get_pconfig( $uid, 'pumpio', 'application_name');
+       if ($application_name == "")
+               $application_name  = get_config('pumpio', 'application_name');
        if ($application_name == "")
                $application_name = $a->get_hostname();
 
@@ -670,7 +719,10 @@ function pumpio_fetchtimeline(&$a, $uid) {
 
        $username = $user.'@'.$host;
 
-       $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $user);
+       if (pumpio_reachable($url))
+               $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $user);
+       else
+               $success = false;
 
        if (!$success) {
                logger('pumpio: error fetching posts for user '.$uid." ".$username." ".print_r($user, true));
@@ -706,7 +758,7 @@ function pumpio_fetchtimeline(&$a, $uid) {
                                        if ($receiver->id == "http://activityschema.org/collection/public")
                                                $public = true;
 
-                       if ($public AND !strstr($post->generator->displayName, $application_name)) {
+                       if ($public AND !stristr($post->generator->displayName, $application_name)) {
                                require_once('include/html2bbcode.php');
 
                                $_SESSION["authenticated"] = true;
@@ -800,7 +852,8 @@ function pumpio_dounlike(&$a, $uid, $self, $post, $own_id) {
                logger("pumpio_dounlike: not found. User ".$own_id." ".$uid." Contact: ".$contactid." Url ".$orig_post['uri']);
 }
 
-function pumpio_dolike(&$a, $uid, $self, $post, $own_id) {
+function pumpio_dolike(&$a, $uid, $self, $post, $own_id, $threadcompletion = true) {
+       require_once('include/items.php');
 
        // Searching for the liked post
        // Two queries for speed issues
@@ -823,6 +876,10 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id) {
                        $orig_post = $r[0];
        }
 
+       // thread completion
+       if ($threadcompletion)
+               pumpio_fetchallcomments($a, $uid, $post->object->id);
+
        $contactid = 0;
 
        if(link_compare($post->actor->url, $own_id)) {
@@ -865,7 +922,6 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id) {
        $likedata['parent-uri'] = $orig_post["uri"];
        $likedata['contact-id'] = $contactid;
        $likedata['app'] = $post->generator->displayName;
-       $likedata['verb'] = ACTIVITY_LIKE;
        $likedata['author-name'] = $post->actor->displayName;
        $likedata['author-link'] = $post->actor->url;
        $likedata['author-avatar'] = $post->actor->image->url;
@@ -888,22 +944,36 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id) {
 
 function pumpio_get_contact($uid, $contact) {
 
-       $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
-               dbesc(normalise_link($contact->url)));
-
-       if (count($r) == 0)
-               q("INSERT INTO unique_contacts (url, name, nick, avatar) VALUES ('%s', '%s', '%s', '%s')",
-                       dbesc(normalise_link($contact->url)),
-                       dbesc($contact->displayName),
-                       dbesc($contact->preferredUsername),
-                       dbesc($contact->image->url));
-       else
-               q("UPDATE unique_contacts SET name = '%s', nick = '%s', avatar = '%s' WHERE url = '%s'",
-                       dbesc($contact->displayName),
-                       dbesc($contact->preferredUsername),
-                       dbesc($contact->image->url),
+       if (function_exists("update_gcontact"))
+               update_gcontact(array("url" => $contact->url, "network" => NETWORK_PUMPIO, "generation" => 2,
+                               "photo" => $contact->image->url, "name" => $contact->displayName,  "hide" => true,
+                               "nick" => $contact->preferredUsername, "location" => $contact->location->displayName,
+                               "about" => $contact->summary, "addr" => str_replace("acct:", "", $contact->id)));
+       else {
+               // Old Code
+               $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
                        dbesc(normalise_link($contact->url)));
 
+               if (count($r) == 0)
+                       q("INSERT INTO unique_contacts (url, name, nick, avatar) VALUES ('%s', '%s', '%s', '%s')",
+                               dbesc(normalise_link($contact->url)),
+                               dbesc($contact->displayName),
+                               dbesc($contact->preferredUsername),
+                               dbesc($contact->image->url));
+               else
+                       q("UPDATE unique_contacts SET name = '%s', nick = '%s', avatar = '%s' WHERE url = '%s'",
+                               dbesc($contact->displayName),
+                               dbesc($contact->preferredUsername),
+                               dbesc($contact->image->url),
+                               dbesc(normalise_link($contact->url)));
+
+               if (DB_UPDATE_VERSION >= "1177")
+                       q("UPDATE `unique_contacts` SET `location` = '%s', `about` = '%s' WHERE url = '%s'",
+                               dbesc($contact->location->displayName),
+                               dbesc($contact->summary),
+                               dbesc(normalise_link($contact->url)));
+       }
+
        $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
                intval($uid), dbesc($contact->url));
 
@@ -969,10 +1039,19 @@ function pumpio_get_contact($uid, $contact) {
                dbesc(datetime_convert()),
                intval($contact_id)
                );
+
+                if (DB_UPDATE_VERSION >= "1177")
+                       q("UPDATE `contact` SET `location` = '%s',
+                                               `about` = '%s'
+                                       WHERE `id` = %d",
+                               dbesc($contact->location->displayName),
+                               dbesc($contact->summary),
+                               intval($contact_id)
+                       );
        } else {
                // update profile photos once every two weeks as we have no notification of when they change.
-
-               $update_photo = (($r[0]['avatar-date'] < datetime_convert('','','now -14 days')) ? true : false);
+               //$update_photo = (($r[0]['avatar-date'] < datetime_convert('','','now -14 days')) ? true : false);
+                $update_photo = ($r[0]['avatar-date'] < datetime_convert('','','now -12 hours'));
 
                // check that we have all the photos, this has been known to fail on occasion
 
@@ -1001,6 +1080,15 @@ function pumpio_get_contact($uid, $contact) {
                        dbesc($contact->preferredUsername),
                        intval($r[0]['id'])
                        );
+
+                       if (DB_UPDATE_VERSION >= "1177")
+                               q("UPDATE `contact` SET `location` = '%s',
+                                                       `about` = '%s'
+                                               WHERE `id` = %d",
+                                       dbesc($contact->location->displayName),
+                                       dbesc($contact->summary),
+                                       intval($r[0]['id'])
+                               );
                }
 
        }
@@ -1028,7 +1116,7 @@ function pumpio_dodelete(&$a, $uid, $self, $post, $own_id) {
                return drop_item($r[0]["id"], $false);
 }
 
-function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcompletion = false) {
+function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcompletion = true) {
        require_once('include/items.php');
        require_once('include/html2bbcode.php');
 
@@ -1077,10 +1165,12 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
                                $public = true;
 
        $postarray = array();
+        $postarray['network'] = NETWORK_PUMPIO;
        $postarray['gravity'] = 0;
        $postarray['uid'] = $uid;
        $postarray['wall'] = 0;
        $postarray['uri'] = $post->object->id;
+       $postarray['object-type'] = NAMESPACE_ACTIVITY_SCHEMA.strtolower($post->object->objectType);
 
        if ($post->object->objectType != "comment") {
                $contact_id = pumpio_get_contact($uid, $post->actor);
@@ -1089,6 +1179,11 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
                        $contact_id = $self[0]['id'];
 
                $postarray['parent-uri'] = $post->object->id;
+
+               if (!$public) {
+                       $postarray['private'] = 1;
+                       $postarray['allow_cid'] = '<' . $self[0]['id'] . '>';
+               }
        } else {
                $contact_id = 0;
 
@@ -1134,7 +1229,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
                $reply->published = $post->object->inReplyTo->published;
                $reply->received = $post->object->inReplyTo->updated;
                $reply->url = $post->object->inReplyTo->url;
-               pumpio_dopost($a, $client, $uid, $self, $reply, $own_id);
+               pumpio_dopost($a, $client, $uid, $self, $reply, $own_id, false);
 
                $postarray['parent-uri'] = $post->object->inReplyTo->id;
        }
@@ -1162,16 +1257,13 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
 
        $postarray['created'] = datetime_convert('UTC','UTC',$post->published);
        $postarray['edited'] = datetime_convert('UTC','UTC',$post->received);
-       if (!$public) {
-               $postarray['private'] = 1;
-               $postarray['allow_cid'] = '<' . $self[0]['id'] . '>';
-       }
 
        if ($post->verb == "share") {
                if (!intval(get_config('system','wall-to-wall_share'))) {
                        $postarray['body'] = "[share author='".$post->object->author->displayName.
                                        "' profile='".$post->object->author->url.
                                        "' avatar='".$post->object->author->image->url.
+                                       "' posted='".datetime_convert('UTC','UTC',$post->object->created).
                                        "' link='".$post->links->self->href."']".$postarray['body']."[/share]";
                } else {
                        // Let shares look like wall-to-wall posts
@@ -1185,6 +1277,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
                return false;
 
        $top_item = item_store($postarray);
+       $postarray["id"] = $top_item;
 
        if (($top_item == 0) AND ($post->verb == "update")) {
                $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s' , `changed` = '%s' WHERE `uri` = '%s' AND `uid` = %d",
@@ -1238,7 +1331,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet
                                        'to_email'     => $user[0]['email'],
                                        'uid'          => $user[0]['uid'],
                                        'item'         => $postarray,
-                                       'link'             => $a->get_baseurl() . '/display/' . $user[0]['nickname'] . '/' . $top_item,
+                                       'link'         => $a->get_baseurl().'/display/'.urlencode(get_item_guid($top_item)),
                                        'source_name'  => $postarray['author-name'],
                                        'source_link'  => $postarray['author-link'],
                                        'source_photo' => $postarray['author-avatar'],
@@ -1271,6 +1364,13 @@ function pumpio_fetchinbox(&$a, $uid) {
        $self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
                intval($uid));
 
+       $lastitems = q("SELECT uri FROM `item` WHERE `network` = '%s' AND `uid` = %d AND
+                       `extid` != '' AND `id` = `parent`
+                       ORDER BY `commented` DESC LIMIT 10",
+                               dbesc(NETWORK_PUMPIO),
+                               intval($uid)
+                       );
+
        $client = new oauth_client_class;
        $client->oauth_version = '1.0a';
        $client->authorization_header = true;
@@ -1288,7 +1388,10 @@ function pumpio_fetchinbox(&$a, $uid) {
        if ($last_id != "")
                $url .= '?since='.urlencode($last_id);
 
-       $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $user);
+       if (pumpio_reachable($url))
+               $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $user);
+       else
+               $success = false;
 
        if ($user->items) {
            $posts = array_reverse($user->items);
@@ -1296,10 +1399,13 @@ function pumpio_fetchinbox(&$a, $uid) {
            if (count($posts))
                    foreach ($posts as $post) {
                            $last_id = $post->id;
-                           pumpio_dopost($a, $client, $uid, $self, $post, $own_id);
+                           pumpio_dopost($a, $client, $uid, $self, $post, $own_id, true);
                    }
        }
 
+       foreach ($lastitems AS $item)
+               pumpio_fetchallcomments($a, $uid, $item["uri"]);
+
        set_pconfig($uid,'pumpio','last_id', $last_id);
 }
 
@@ -1323,12 +1429,18 @@ function pumpio_getallusers(&$a, $uid) {
 
        $url = 'https://'.$hostname.'/api/user/'.$username.'/following';
 
-       $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $users);
+       if (pumpio_reachable($url))
+               $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $users);
+       else
+               $success = false;
 
        if ($users->totalItems > count($users->items)) {
                $url = 'https://'.$hostname.'/api/user/'.$username.'/following?count='.$users->totalItems;
 
-               $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $users);
+               if (pumpio_reachable($url))
+                       $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $users);
+               else
+                       $success = false;
        }
 
        foreach ($users->items AS $user)
@@ -1389,7 +1501,10 @@ function pumpio_queue_hook(&$a,&$b) {
                        $client->client_id = $consumer_key;
                        $client->client_secret = $consumer_secret;
 
-                       $success = $client->CallAPI($z['url'], 'POST', $z['post'], array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+                       if (pumpio_reachable($z['url']))
+                               $success = $client->CallAPI($z['url'], 'POST', $z['post'], array('FailOnAccessError'=>true, 'RequestContentType'=>'application/json'), $user);
+                       else
+                               $success = false;
 
                        if($success) {
                                $post_id = $user->object->id;
@@ -1507,33 +1622,23 @@ function pumpio_fetchallcomments(&$a, $uid, $id) {
        $hostname = get_pconfig($uid, 'pumpio','host');
        $username = get_pconfig($uid, "pumpio", "user");
 
-       $own_id = "https://".$hostname."/".$username;
+       logger("pumpio_fetchallcomments: completing comment for user ".$uid." post id ".$id);
 
-       logger("pumpio_fetchallcomments: completing comment for user ".$uid." url ".$url);
+       $own_id = "https://".$hostname."/".$username;
 
        $self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
                intval($uid));
 
-       // Fetching the original post - Two queries for speed issues
-       $r = q("SELECT extid FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
-                       dbesc($url),
+       // Fetching the original post
+       $r = q("SELECT `extid` FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `extid` != '' LIMIT 1",
+                       dbesc($id),
                        intval($uid)
                );
 
-       if (!count($r)) {
-               $r = q("SELECT extid FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
-                               dbesc($url),
-                               intval($uid)
-                       );
-
-               if (!count($r))
-                       return false;
-       }
+       if (!count($r))
+               return false;
 
-       if ($r[0]["extid"])
-               $url = $r[0]["extid"];
-       else
-               $url = $id;
+       $url = $r[0]["extid"];
 
        $client = new oauth_client_class;
        $client->oauth_version = '1.0a';
@@ -1547,11 +1652,30 @@ function pumpio_fetchallcomments(&$a, $uid, $id) {
 
        logger("pumpio_fetchallcomments: fetching comment for user ".$uid." url ".$url);
 
-       $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $item);
+       if (pumpio_reachable($url))
+               $success = $client->CallAPI($url, 'GET', array(), array('FailOnAccessError'=>true), $item);
+       else
+               $success = false;
 
        if (!$success)
                return;
 
+       if ($item->likes->totalItems != 0) {
+               foreach ($item->likes->items AS $post) {
+                       $like = new stdClass;
+                       $like->object = new stdClass;
+                       $like->object->id = $item->id;
+                       $like->actor = new stdClass;
+                       $like->actor->displayName = $item->displayName;
+                       $like->actor->preferredUsername = $item->preferredUsername;
+                       $like->actor->url = $item->url;
+                       $like->actor->image = $item->image;
+                       $like->generator = new stdClass;
+                       $like->generator->displayName = "pumpio";
+                       pumpio_dolike($a, $uid, $self, $post, $own_id, false);
+               }
+       }
+
        if ($item->replies->totalItems == 0)
                return;
 
@@ -1561,7 +1685,7 @@ function pumpio_fetchallcomments(&$a, $uid, $id) {
 
                // Checking if the comment already exists - Two queries for speed issues
                $r = q("SELECT extid FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
-                               dbesc($url),
+                               dbesc($item->id),
                                intval($uid)
                        );
 
@@ -1569,18 +1693,21 @@ function pumpio_fetchallcomments(&$a, $uid, $id) {
                        continue;
 
                $r = q("SELECT extid FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
-                               dbesc($url),
+                               dbesc($item->id),
                                intval($uid)
                        );
 
                if (count($r))
                        continue;
 
+               $post = new stdClass;
                $post->verb = "post";
                $post->actor = $item->author;
                $post->published = $item->published;
                $post->received = $item->updated;
+               $post->generator = new stdClass;
                $post->generator->displayName = "pumpio";
+               // To-Do: Check for public post
 
                unset($item->author);
                unset($item->published);
@@ -1588,17 +1715,19 @@ function pumpio_fetchallcomments(&$a, $uid, $id) {
 
                $post->object = $item;
 
-               logger("pumpio_fetchallcomments: posting comment ".$post->object->id);
+               logger("pumpio_fetchallcomments: posting comment ".$post->object->id." ".print_r($post, true));
                pumpio_dopost($a, $client, $uid, $self, $post, $own_id, false);
        }
 }
 
-/*
-Bugs:
- - refresh after post doesn't always happen
 
+function pumpio_reachable($url) {
+       $data = z_fetch_url($url, false, $redirects, array('timeout'=>10));
+       return(intval($data['return_code']) != 0);
+}
+
+/*
 To-Do:
  - edit own notes
  - delete own notes
-
 */