Browse Source

af_readability: fix HOOK_GET_FULL_TEXT not being installed because plugin init() is called before load_data()

Andrew Dolgov 1 year ago
parent
commit
fda475bd93
2 changed files with 19 additions and 22 deletions
  1. 0 12
      classes/article.php
  2. 19 10
      plugins/af_readability/init.php

+ 0 - 12
classes/article.php

@@ -100,18 +100,6 @@ class Article extends Handler_Protected {
 			$pluginhost->load_all(PluginHost::KIND_ALL, $owner_uid);
 			$pluginhost->load_data();
 
-			/*$af_readability = $pluginhost->get_plugin("Af_Readability");
-
-			if ($af_readability) {
-				$enable_share_anything = $pluginhost->get($af_readability, "enable_share_anything");
-
-				if ($enable_share_anything) {
-					$extracted_content = $af_readability->extract_content($url);
-
-					if ($extracted_content) $content = $extracted_content;
-				}
-			}*/
-
 			foreach ($pluginhost->get_hooks(PluginHost::HOOK_GET_FULL_TEXT) as $p) {
 				$extracted_content = $p->hook_get_full_text($url);
 

+ 19 - 10
plugins/af_readability/init.php

@@ -38,12 +38,9 @@ class Af_Readability extends Plugin {
 		$host->add_hook($host::HOOK_PREFS_EDIT_FEED, $this);
 		$host->add_hook($host::HOOK_PREFS_SAVE_FEED, $this);
 
-		$enable_share_anything = $this->host->get($this, "enable_share_anything");
-
-		// provide full text services to external code
-		// TODO: option that controls this needs a better caption
-		if ($enable_share_anything)
-			$host->add_hook($host::HOOK_GET_FULL_TEXT, $this);
+		// Note: we have to install the hook even if disabled because init() is being run before plugin data has loaded
+		// so we can't check for our storage-set options here
+		$host->add_hook($host::HOOK_GET_FULL_TEXT, $this);
 
 		$host->add_filter_action($this, "action_inline", __("Inline content"));
 	}
@@ -176,7 +173,7 @@ class Af_Readability extends Plugin {
 		if ($tmp && mb_strlen($tmp) < 1024 * 500) {
 			$tmpdoc = new DOMDocument("1.0", "UTF-8");
 
-			if (!$tmpdoc->loadHTML($tmp))
+			if (!@$tmpdoc->loadHTML($tmp))
 				return false;
 
 			// this is the worst hack yet :(
@@ -244,10 +241,22 @@ class Af_Readability extends Plugin {
 
 	}
 
-	function hook_get_full_text($link) {
-		$extracted_content = $this->extract_content($link);
+	function hook_get_full_text($link)
+	{
+		$enable_share_anything = $this->host->get($this, "enable_share_anything");
+
+		if ($enable_share_anything) {
+			$extracted_content = $this->extract_content($link);
 
-		return trim(strip_tags(sanitize($extracted_content)));
+			# let's see if there's anything of value in there
+			$content_test = trim(strip_tags(sanitize($extracted_content)));
+
+			if ($content_test) {
+				return $extracted_content;
+			}
+		}
+
+		return false;
 	}
 
 	function api_version() {