From d6ad7332475f1cc4ab45d55fc04ef491d5f3999d Mon Sep 17 00:00:00 2001
From: Brion Vibber <brion@pobox.com>
Date: Tue, 23 Feb 2010 21:47:14 +0000
Subject: [PATCH] OStatus: fixes for link/id and text extraction gets import of
 Buzz feeds working.

---
 plugins/OStatus/OStatusPlugin.php           | 24 +++++++++++----------
 plugins/OStatus/classes/Ostatus_profile.php | 17 ++++++++++++---
 2 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
index 3a9e77c2a6..724634924d 100644
--- a/plugins/OStatus/OStatusPlugin.php
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -287,13 +287,19 @@ class OStatusPlugin extends Plugin
     function onStartNoticeSourceLink($notice, &$name, &$url, &$title)
     {
         if ($notice->source == 'ostatus') {
-            $bits = parse_url($notice->uri);
-            $domain = $bits['host'];
+            if ($notice->url) {
+                $bits = parse_url($notice->url);
+                $domain = $bits['host'];
+                if (substr($domain, 0, 4) == 'www.') {
+                    $name = substr($domain, 4);
+                } else {
+                    $name = $domain;
+                }
 
-            $name = $domain;
-            $url = $notice->uri;
-            $title = sprintf(_m("Sent from %s via OStatus"), $domain);
-            return false;
+                $url = $notice->url;
+                $title = sprintf(_m("Sent from %s via OStatus"), $domain);
+                return false;
+            }
         }
     }
 
@@ -509,12 +515,8 @@ class OStatusPlugin extends Plugin
         $oprofile = Ostatus_profile::staticGet('group_id', $group->id);
         if ($oprofile) {
             // Drop the PuSH subscription if there are no other subscribers.
+            $oprofile->garbageCollect();
 
-            $members = $group->getMembers(0, 1);
-            if ($members->N == 0) {
-                common_log(LOG_INFO, "Unsubscribing from now-unused group feed $oprofile->feeduri");
-                $oprofile->unsubscribe();
-            }
 
             $member = Profile::staticGet($user->id);
 
diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php
index 91b957fa23..4998809bc8 100644
--- a/plugins/OStatus/classes/Ostatus_profile.php
+++ b/plugins/OStatus/classes/Ostatus_profile.php
@@ -556,17 +556,28 @@ class Ostatus_profile extends Memcached_DataObject
 
         if ($activity->object->link) {
             $sourceUrl = $activity->object->link;
+        } else if ($activity->link) {
+            $sourceUrl = $activity->link;
         } else if (preg_match('!^https?://!', $activity->object->id)) {
             $sourceUrl = $activity->object->id;
         }
 
-        // @fixme sanitize and save HTML content if available
+        // Get (safe!) HTML and text versions of the content
 
-        $content = $activity->object->title;
+        require_once(INSTALLDIR.'/extlib/HTMLPurifier/HTMLPurifier.auto.php');
+
+        $html = $activity->object->content;
+
+        $purifier = new HTMLPurifier();
+
+        $rendered = $purifier->purify($html);
+
+        $content = html_entity_decode(strip_tags($rendered));
 
         $params = array('is_local' => Notice::REMOTE_OMB,
                         'url' => $sourceUrl,
-                        'uri' => $sourceUri);
+                        'uri' => $sourceUri,
+                        'rendered' => $rendered);
 
         $location = $activity->context->location;