summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--classes/feeditem/atom.php6
-rwxr-xr-xclasses/feeds.php3
-rw-r--r--classes/pluginhost.php3
-rwxr-xr-xclasses/pref/feeds.php42
-rw-r--r--classes/rssutils.php63
-rw-r--r--include/functions.php4
-rw-r--r--plugins/af_comics/filters/af_comics_cad.php4
-rw-r--r--plugins/af_comics/filters/af_comics_comicclass.php4
-rw-r--r--plugins/af_comics/filters/af_comics_comicpress.php4
-rw-r--r--plugins/af_comics/filters/af_comics_darklegacy.php4
-rw-r--r--plugins/af_comics/filters/af_comics_dilbert.php2
-rw-r--r--plugins/af_comics/filters/af_comics_explosm.php4
-rw-r--r--plugins/af_comics/filters/af_comics_pa.php6
-rw-r--r--plugins/af_comics/filters/af_comics_pvp.php4
-rw-r--r--plugins/af_comics/filters/af_comics_tfd.php4
-rw-r--r--plugins/af_comics/filters/af_comics_twp.php4
-rw-r--r--plugins/af_comics/filters/af_comics_whomp.php4
-rw-r--r--plugins/af_comics/init.php4
-rw-r--r--plugins/af_fsckportal/init.php4
-rwxr-xr-xplugins/af_redditimgur/init.php64
-rw-r--r--plugins/af_zz_imgproxy/init.php4
21 files changed, 163 insertions, 78 deletions
diff --git a/classes/feeditem/atom.php b/classes/feeditem/atom.php
index 76d85b2a2..77cd448b8 100644
--- a/classes/feeditem/atom.php
+++ b/classes/feeditem/atom.php
@@ -69,7 +69,7 @@ class FeedItem_Atom extends FeedItem_Common {
$child = $content->childNodes->item($i);
if ($child->hasChildNodes()) {
- return $this->doc->saveXML($child);
+ return $this->doc->saveHTML($child);
}
}
}
@@ -89,7 +89,7 @@ class FeedItem_Atom extends FeedItem_Common {
$child = $content->childNodes->item($i);
if ($child->hasChildNodes()) {
- return $this->doc->saveXML($child);
+ return $this->doc->saveHTML($child);
}
}
}
@@ -197,4 +197,4 @@ class FeedItem_Atom extends FeedItem_Common {
return $encs;
}
-} \ No newline at end of file
+}
diff --git a/classes/feeds.php b/classes/feeds.php
index b0fa85f9e..99eb0fbf2 100755
--- a/classes/feeds.php
+++ b/classes/feeds.php
@@ -1530,7 +1530,6 @@ class Feeds extends Handler_Protected {
"SELECT id FROM ttrss_feeds
WHERE feed_url = '$url' AND owner_uid = ".$_SESSION["uid"]);
- $auth_pass_encrypted = 'false';
$auth_pass = db_escape_string($auth_pass);
if (db_num_rows($result) == 0) {
@@ -1538,7 +1537,7 @@ class Feeds extends Handler_Protected {
"INSERT INTO ttrss_feeds
(owner_uid,feed_url,title,cat_id, auth_login,auth_pass,update_method,auth_pass_encrypted)
VALUES ('".$_SESSION["uid"]."', '$url',
- '[Unknown]', $cat_qpart, '$auth_login', '$auth_pass', 0, $auth_pass_encrypted)");
+ '[Unknown]', $cat_qpart, '$auth_login', '$auth_pass', 0, false)");
$result = db_query(
"SELECT id FROM ttrss_feeds WHERE feed_url = '$url'
diff --git a/classes/pluginhost.php b/classes/pluginhost.php
index afe4da49e..571c30fb6 100644
--- a/classes/pluginhost.php
+++ b/classes/pluginhost.php
@@ -54,6 +54,7 @@ class PluginHost {
const HOOK_ENCLOSURE_ENTRY = 33;
const HOOK_FORMAT_ARTICLE = 34;
const HOOK_FORMAT_ARTICLE_CDM = 35;
+ const HOOK_FEED_BASIC_INFO = 36;
const KIND_ALL = 1;
const KIND_SYSTEM = 2;
@@ -436,4 +437,4 @@ class PluginHost {
function get_filter_actions() {
return $this->plugin_actions;
}
-} \ No newline at end of file
+}
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php
index b0f82e7e4..a86a1af94 100755
--- a/classes/pref/feeds.php
+++ b/classes/pref/feeds.php
@@ -634,16 +634,8 @@ class Pref_Feeds extends Handler_Protected {
((FORCE_ARTICLE_PURGE == 0) ? "" : 'disabled="1"'));
print "</div>";
- print "<div class=\"dlgSec\">".__("Authentication")."</div>";
- print "<div class=\"dlgSecCont\">";
$auth_login = htmlspecialchars($this->dbh->fetch_result($result, 0, "auth_login"));
-
- print "<input dojoType=\"dijit.form.TextBox\" id=\"feedEditDlg_login\"
- placeHolder=\"".__("Login")."\"
- autocomplete=\"new-password\"
- name=\"auth_login\" value=\"$auth_login\"><hr/>";
-
$auth_pass = $this->dbh->fetch_result($result, 0, "auth_pass");
if ($auth_pass_encrypted && function_exists("mcrypt_decrypt")) {
@@ -652,6 +644,18 @@ class Pref_Feeds extends Handler_Protected {
}
$auth_pass = htmlspecialchars($auth_pass);
+ $auth_enabled = $auth_login !== '' || $auth_pass !== '';
+
+ $auth_style = $auth_enabled ? '' : 'display: none';
+ print "<div id='feedEditDlg_loginContainer' style='$auth_style'>";
+ print "<div class=\"dlgSec\">".__("Authentication")."</div>";
+ print "<div class=\"dlgSecCont\">";
+
+ print "<input dojoType=\"dijit.form.TextBox\" id=\"feedEditDlg_login\"
+ placeHolder=\"".__("Login")."\"
+ autocomplete=\"new-password\"
+ name=\"auth_login\" value=\"$auth_login\"><hr/>";
+
print "<input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\"
autocomplete=\"new-password\"
@@ -662,7 +666,14 @@ class Pref_Feeds extends Handler_Protected {
".__('<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds.')."
</div>";
- print "</div>";
+ print "</div></div>";
+
+ $auth_checked = $auth_enabled ? 'checked' : '';
+ print "<div style=\"clear : both\">
+ <input type=\"checkbox\" $auth_checked name=\"need_auth\" dojoType=\"dijit.form.CheckBox\" id=\"feedEditDlg_loginCheck\"
+ onclick='checkboxToggleElement(this, \"feedEditDlg_loginContainer\")'>
+ <label for=\"feedEditDlg_loginCheck\">".
+ __('This feed requires authentication.')."</div>";
print '</div><div dojoType="dijit.layout.ContentPane" title="'.__('Options').'">';
@@ -971,7 +982,6 @@ class Pref_Feeds extends Handler_Protected {
$feed_language = $this->dbh->escape_string(trim($_POST["feed_language"]));
- $auth_pass_encrypted = 'false';
$auth_pass = $this->dbh->escape_string($auth_pass);
if (get_pref('ENABLE_FEED_CATS')) {
@@ -988,6 +998,10 @@ class Pref_Feeds extends Handler_Protected {
}
if (!$batch) {
+ if ($_POST["need_auth"] !== 'on') {
+ $auth_login = '';
+ $auth_pass = '';
+ }
$result = db_query("SELECT feed_url FROM ttrss_feeds WHERE id = " . $feed_id);
$orig_feed_url = db_fetch_result($result, 0, "feed_url");
@@ -1001,7 +1015,7 @@ class Pref_Feeds extends Handler_Protected {
purge_interval = '$purge_intl',
auth_login = '$auth_login',
auth_pass = '$auth_pass',
- auth_pass_encrypted = $auth_pass_encrypted,
+ auth_pass_encrypted = false,
private = $private,
cache_images = $cache_images,
hide_images = $hide_images,
@@ -1055,8 +1069,7 @@ class Pref_Feeds extends Handler_Protected {
break;
case "auth_pass":
- $qpart = "auth_pass = '$auth_pass' AND
- auth_pass_encrypted = $auth_pass_encrypted";
+ $qpart = "auth_pass = '$auth_pass', auth_pass_encrypted = false";
break;
case "private":
@@ -1857,7 +1870,6 @@ class Pref_Feeds extends Handler_Protected {
"SELECT id FROM ttrss_feeds
WHERE feed_url = '$feed' AND owner_uid = ".$_SESSION["uid"]);
- $auth_pass_encrypted = 'false';
$pass = $this->dbh->escape_string($pass);
if ($this->dbh->num_rows($result) == 0) {
@@ -1865,7 +1877,7 @@ class Pref_Feeds extends Handler_Protected {
"INSERT INTO ttrss_feeds
(owner_uid,feed_url,title,cat_id,auth_login,auth_pass,update_method,auth_pass_encrypted)
VALUES ('".$_SESSION["uid"]."', '$feed',
- '[Unknown]', $cat_qpart, '$login', '$pass', 0, $auth_pass_encrypted)");
+ '[Unknown]', $cat_qpart, '$login', '$pass', 0, false)");
}
$this->dbh->query("COMMIT");
diff --git a/classes/rssutils.php b/classes/rssutils.php
index 460709f05..d6dfc724e 100644
--- a/classes/rssutils.php
+++ b/classes/rssutils.php
@@ -205,9 +205,11 @@ class RSSUtils {
$feed = db_escape_string($feed);
- $result = db_query("SELECT feed_url,auth_pass,auth_login,auth_pass_encrypted
+ $result = db_query("SELECT owner_uid,feed_url,auth_pass,auth_login,auth_pass_encrypted
FROM ttrss_feeds WHERE id = '$feed'");
+ $owner_uid = db_fetch_result($result, 0, "owner_uid");
+
$auth_pass_encrypted = sql_bool_to_bool(db_fetch_result($result,
0, "auth_pass_encrypted"));
@@ -221,42 +223,59 @@ class RSSUtils {
$fetch_url = db_fetch_result($result, 0, "feed_url");
- $feed_data = fetch_file_contents($fetch_url, false,
- $auth_login, $auth_pass, false,
- FEED_FETCH_TIMEOUT,
- 0);
-
- global $fetch_curl_used;
+ $pluginhost = new PluginHost();
+ $user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
- if (!$fetch_curl_used) {
- $tmp = @gzdecode($feed_data);
+ $pluginhost->load(PLUGINS, PluginHost::KIND_ALL);
+ $pluginhost->load($user_plugins, PluginHost::KIND_USER, $owner_uid);
+ $pluginhost->load_data();
- if ($tmp) $feed_data = $tmp;
+ $basic_info = array();
+ foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_BASIC_INFO) as $plugin) {
+ $basic_info = $plugin->hook_feed_basic_info($basic_info, $fetch_url, $owner_uid, $feed, $auth_login, $auth_pass);
}
- $feed_data = trim($feed_data);
+ if (!$basic_info) {
+ $feed_data = fetch_file_contents($fetch_url, false,
+ $auth_login, $auth_pass, false,
+ FEED_FETCH_TIMEOUT,
+ 0);
- $rss = new FeedParser($feed_data);
- $rss->init();
+ global $fetch_curl_used;
- if (!$rss->error()) {
+ if (!$fetch_curl_used) {
+ $tmp = @gzdecode($feed_data);
+
+ if ($tmp) $feed_data = $tmp;
+ }
+
+ $feed_data = trim($feed_data);
+
+ $rss = new FeedParser($feed_data);
+ $rss->init();
+ if (!$rss->error()) {
+ $basic_info = array(
+ 'title' => db_escape_string(mb_substr($rss->get_title(), 0, 199)),
+ 'site_url' => db_escape_string(mb_substr(rewrite_relative_url($fetch_url, $rss->get_link()), 0, 245))
+ );
+ }
+ }
+
+ if ($basic_info && is_array($basic_info)) {
$result = db_query("SELECT title, site_url FROM ttrss_feeds WHERE id = '$feed'");
$registered_title = db_fetch_result($result, 0, "title");
$orig_site_url = db_fetch_result($result, 0, "site_url");
- $site_url = db_escape_string(mb_substr(rewrite_relative_url($fetch_url, $rss->get_link()), 0, 245));
- $feed_title = db_escape_string(mb_substr($rss->get_title(), 0, 199));
-
- if ($feed_title && (!$registered_title || $registered_title == "[Unknown]")) {
+ if ($basic_info['title'] && (!$registered_title || $registered_title == "[Unknown]")) {
db_query("UPDATE ttrss_feeds SET
- title = '$feed_title' WHERE id = '$feed'");
+ title = '${basic_info['title']}' WHERE id = '$feed'");
}
- if ($site_url && $orig_site_url != $site_url) {
+ if ($basic_info['site_url'] && $orig_site_url != $basic_info['site_url']) {
db_query("UPDATE ttrss_feeds SET
- site_url = '$site_url' WHERE id = '$feed'");
+ site_url = '${basic_info['site_url']}' WHERE id = '$feed'");
}
}
}
@@ -1520,4 +1539,4 @@ class RSSUtils {
-} \ No newline at end of file
+}
diff --git a/include/functions.php b/include/functions.php
index 8ea8719ca..203454747 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -575,9 +575,9 @@
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
- $base = $xpath->query('/html/head/base');
+ $base = $xpath->query('/html/head/base[@href]');
foreach ($base as $b) {
- $url = $b->getAttribute("href");
+ $url = rewrite_relative_url($url, $b->getAttribute("href"));
break;
}
diff --git a/plugins/af_comics/filters/af_comics_cad.php b/plugins/af_comics/filters/af_comics_cad.php
index 6846f3cb0..d2eb38caf 100644
--- a/plugins/af_comics/filters/af_comics_cad.php
+++ b/plugins/af_comics/filters/af_comics_cad.php
@@ -25,7 +25,7 @@ class Af_Comics_Cad extends Af_ComicFilter {
$basenode = $xpath->query('//div[@class="comicpage"]/a/img')->item(0);
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
}
@@ -36,4 +36,4 @@ class Af_Comics_Cad extends Af_ComicFilter {
return false;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_comics/filters/af_comics_comicclass.php b/plugins/af_comics/filters/af_comics_comicclass.php
index 56a5b9cf6..b4b3a962c 100644
--- a/plugins/af_comics/filters/af_comics_comicclass.php
+++ b/plugins/af_comics/filters/af_comics_comicclass.php
@@ -22,7 +22,7 @@ class Af_Comics_ComicClass extends Af_ComicFilter {
$basenode = $xpath->query('//div[@class="comic"]')->item(0);
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
}
@@ -31,4 +31,4 @@ class Af_Comics_ComicClass extends Af_ComicFilter {
return false;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_comics/filters/af_comics_comicpress.php b/plugins/af_comics/filters/af_comics_comicpress.php
index 81994d90b..51d9bab3b 100644
--- a/plugins/af_comics/filters/af_comics_comicpress.php
+++ b/plugins/af_comics/filters/af_comics_comicpress.php
@@ -27,7 +27,7 @@ class Af_Comics_ComicPress extends Af_ComicFilter {
$basenode = $xpath->query('//div[@id="comic"]')->item(0);
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
}
@@ -36,4 +36,4 @@ class Af_Comics_ComicPress extends Af_ComicFilter {
return false;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_comics/filters/af_comics_darklegacy.php b/plugins/af_comics/filters/af_comics_darklegacy.php
index 33c1eca5c..0882514d0 100644
--- a/plugins/af_comics/filters/af_comics_darklegacy.php
+++ b/plugins/af_comics/filters/af_comics_darklegacy.php
@@ -26,7 +26,7 @@ class Af_Comics_DarkLegacy extends Af_ComicFilter {
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
}
@@ -35,4 +35,4 @@ class Af_Comics_DarkLegacy extends Af_ComicFilter {
return false;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_comics/filters/af_comics_dilbert.php b/plugins/af_comics/filters/af_comics_dilbert.php
index 565b44657..a40f8a9ba 100644
--- a/plugins/af_comics/filters/af_comics_dilbert.php
+++ b/plugins/af_comics/filters/af_comics_dilbert.php
@@ -49,7 +49,7 @@ class Af_Comics_Dilbert extends Af_ComicFilter {
}
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
// Add comic title to article type if not empty (mostly Sunday strips)
diff --git a/plugins/af_comics/filters/af_comics_explosm.php b/plugins/af_comics/filters/af_comics_explosm.php
index 35a2edd41..c47014da4 100644
--- a/plugins/af_comics/filters/af_comics_explosm.php
+++ b/plugins/af_comics/filters/af_comics_explosm.php
@@ -16,7 +16,7 @@ class Af_Comics_Explosm extends Af_ComicFilter {
$basenode = $xpath->query('(//img[@id="main-comic"])')->item(0);
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
}
@@ -25,4 +25,4 @@ class Af_Comics_Explosm extends Af_ComicFilter {
return false;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_comics/filters/af_comics_pa.php b/plugins/af_comics/filters/af_comics_pa.php
index ae5cabec0..e6558d8de 100644
--- a/plugins/af_comics/filters/af_comics_pa.php
+++ b/plugins/af_comics/filters/af_comics_pa.php
@@ -19,7 +19,7 @@ class Af_Comics_Pa extends Af_ComicFilter {
$basenode = $xpath->query('(//div[@id="comicFrame"])')->item(0);
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
}
@@ -62,7 +62,7 @@ class Af_Comics_Pa extends Af_ComicFilter {
}
if ($basenode){
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
}
@@ -71,4 +71,4 @@ class Af_Comics_Pa extends Af_ComicFilter {
return false;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_comics/filters/af_comics_pvp.php b/plugins/af_comics/filters/af_comics_pvp.php
index 1a1ccab3d..cf0b79d78 100644
--- a/plugins/af_comics/filters/af_comics_pvp.php
+++ b/plugins/af_comics/filters/af_comics_pvp.php
@@ -19,7 +19,7 @@ class Af_Comics_Pvp extends Af_ComicFilter {
$basenode = $xpath->query('//section[@class="comic-art"]')->item(0);
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
}
@@ -28,4 +28,4 @@ class Af_Comics_Pvp extends Af_ComicFilter {
return false;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_comics/filters/af_comics_tfd.php b/plugins/af_comics/filters/af_comics_tfd.php
index 78792d254..376ec0714 100644
--- a/plugins/af_comics/filters/af_comics_tfd.php
+++ b/plugins/af_comics/filters/af_comics_tfd.php
@@ -21,7 +21,7 @@ class Af_Comics_Tfd extends Af_ComicFilter {
$basenode = $xpath->query('//img[contains(@src, ".gif")]')->item(0);
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
return true;
}
}
@@ -29,4 +29,4 @@ class Af_Comics_Tfd extends Af_ComicFilter {
return false;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_comics/filters/af_comics_twp.php b/plugins/af_comics/filters/af_comics_twp.php
index 712d54a1d..f53b89b63 100644
--- a/plugins/af_comics/filters/af_comics_twp.php
+++ b/plugins/af_comics/filters/af_comics_twp.php
@@ -17,7 +17,7 @@ class Af_Comics_Twp extends Af_ComicFilter {
$basenode = $xpath->query("//td/center/img")->item(0);
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
}
@@ -26,4 +26,4 @@ class Af_Comics_Twp extends Af_ComicFilter {
return false;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_comics/filters/af_comics_whomp.php b/plugins/af_comics/filters/af_comics_whomp.php
index 3c2e0b0c7..d574bf5d3 100644
--- a/plugins/af_comics/filters/af_comics_whomp.php
+++ b/plugins/af_comics/filters/af_comics_whomp.php
@@ -24,7 +24,7 @@ class Af_Comics_Whomp extends Af_ComicFilter {
$basenode = $xpath->query('//img[@id="cc-comic"]')->item(0);
if ($basenode) {
- $article["content"] = $doc->saveXML($basenode);
+ $article["content"] = $doc->saveHTML($basenode);
}
}
@@ -33,4 +33,4 @@ class Af_Comics_Whomp extends Af_ComicFilter {
return false;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_comics/init.php b/plugins/af_comics/init.php
index 09e903379..6bd3c23e2 100644
--- a/plugins/af_comics/init.php
+++ b/plugins/af_comics/init.php
@@ -127,7 +127,7 @@ class Af_Comics extends Plugin {
$tpl->setVariable('ARTICLE_LINK', $article_link, true);
$tpl->setVariable('ARTICLE_TITLE', date('l, F d, Y'), true);
$tpl->setVariable('ARTICLE_EXCERPT', '', true);
- $tpl->setVariable('ARTICLE_CONTENT', $doc->saveXML($node), true);
+ $tpl->setVariable('ARTICLE_CONTENT', $doc->saveHTML($node), true);
$tpl->setVariable('ARTICLE_AUTHOR', '', true);
$tpl->setVariable('ARTICLE_SOURCE_LINK', $site_url, true);
@@ -153,4 +153,4 @@ class Af_Comics extends Plugin {
return 2;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_fsckportal/init.php b/plugins/af_fsckportal/init.php
index 40ace5022..0fa58e9ed 100644
--- a/plugins/af_fsckportal/init.php
+++ b/plugins/af_fsckportal/init.php
@@ -37,7 +37,7 @@ class Af_Fsckportal extends Plugin {
}
}
- $article["content"] = $doc->saveXML();
+ $article["content"] = $doc->saveHTML();
}
@@ -48,4 +48,4 @@ class Af_Fsckportal extends Plugin {
return 2;
}
-} \ No newline at end of file
+}
diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php
index d08dfa7a6..8074894fd 100755
--- a/plugins/af_redditimgur/init.php
+++ b/plugins/af_redditimgur/init.php
@@ -79,6 +79,7 @@ class Af_RedditImgur extends Plugin {
private function inline_stuff($article, &$doc, $xpath, $debug = false) {
$entries = $xpath->query('(//a[@href]|//img[@src])');
+ $img_entries = $xpath->query("(//img[@src])");
$found = false;
@@ -146,6 +147,51 @@ class Af_RedditImgur extends Plugin {
}
}
+ if (!$found && preg_match("/https?:\/\/v\.redd\.it\/(.*)$/i", $entry->getAttribute("href"), $matches)) {
+
+ _debug("Handling as reddit inline video", $debug);
+
+ $img = $img_entries->item(0);
+
+ if ($img) {
+ $poster_url = $img->getAttribute("src");
+ } else {
+ $poster_url = false;
+ }
+
+ // Get original article URL from v.redd.it redirects
+ $source_article_url = $this->get_location($matches[0]);
+ _debug("Resolved ".$matches[0]." to ".$source_article_url, $debug);
+
+ $source_stream = false;
+
+ if ($source_article_url) {
+ $j = json_decode(fetch_file_contents($source_article_url.".json"), true);
+
+ if ($j) {
+ foreach ($j as $listing) {
+ foreach ($listing["data"]["children"] as $child) {
+ if ($child["data"]["url"] == $matches[0]) {
+ try {
+ $source_stream = $child["data"]["media"]["reddit_video"]["fallback_url"];
+ }
+ catch (Exception $e) {
+ }
+ break 2;
+ }
+ }
+ }
+ }
+ }
+
+ if (!$source_stream) {
+ $source_stream = "https://v.redd.it/" . $matches[1] . "/DASH_600_K";
+ }
+
+ $this->handle_as_video($doc, $entry, $source_stream, $poster_url);
+ $found = 1;
+ }
+
if (!$found && preg_match("/https?:\/\/(www\.)?streamable.com\//i", $entry->getAttribute("href"))) {
_debug("Handling as Streamable", $debug);
@@ -364,7 +410,7 @@ class Af_RedditImgur extends Plugin {
$node = $doc->getElementsByTagName('body')->item(0);
if ($node && $found) {
- $article["content"] = $doc->saveXML($node);
+ $article["content"] = $doc->saveHTML($node);
} else if ($content_link) {
$article = $this->readability($article, $content_link->getAttribute("href"), $doc, $xpath);
}
@@ -433,8 +479,8 @@ class Af_RedditImgur extends Plugin {
}
}
- private function get_content_type($url, $useragent = SELF_USER_AGENT) {
- $content_type = false;
+ private function get_header($url, $useragent = SELF_USER_AGENT, $header) {
+ $ret = false;
if (function_exists("curl_init") && !defined("NO_CURL")) {
$ch = curl_init($url);
@@ -446,10 +492,18 @@ class Af_RedditImgur extends Plugin {
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
@curl_exec($ch);
- $content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
+ $ret = curl_getinfo($ch, $header);
}
- return $content_type;
+ return $ret;
+ }
+
+ private function get_content_type($url, $useragent = SELF_USER_AGENT) {
+ return $this->get_header($url, $useragent, CURLINFO_CONTENT_TYPE);
+ }
+
+ private function get_location($url, $useragent = SELF_USER_AGENT) {
+ return $this->get_header($url, $useragent, CURLINFO_EFFECTIVE_URL);
}
/**
diff --git a/plugins/af_zz_imgproxy/init.php b/plugins/af_zz_imgproxy/init.php
index c3b3f7fd5..41fec4ac5 100644
--- a/plugins/af_zz_imgproxy/init.php
+++ b/plugins/af_zz_imgproxy/init.php
@@ -199,7 +199,7 @@ class Af_Zz_ImgProxy extends Plugin {
}
}
- if ($need_saving) $article["content"] = $doc->saveXML();
+ if ($need_saving) $article["content"] = $doc->saveHTML();
return $article;
}
@@ -257,4 +257,4 @@ class Af_Zz_ImgProxy extends Plugin {
function api_version() {
return 2;
}
-} \ No newline at end of file
+}