Browse Source

Partial icon handling skeleton

rpm
J. King 4 years ago
parent
commit
c25782f98c
  1. 18
      lib/Database.php
  2. 20
      lib/Feed.php

18
lib/Database.php

@ -1226,7 +1226,7 @@ class Database {
[$cHashUC, $tHashUC, $vHashUC] = $this->generateIn($hashesUC, "str");
[$cHashTC, $tHashTC, $vHashTC] = $this->generateIn($hashesTC, "str");
// perform the query
return $articles = $this->db->prepare(
return $this->db->prepare(
"SELECT id, edited, guid, url_title_hash, url_content_hash, title_content_hash FROM arsse_articles WHERE feed = ? and (guid in($cId) or url_title_hash in($cHashUT) or url_content_hash in($cHashUC) or title_content_hash in($cHashTC))",
'int',
$tId,
@ -1236,6 +1236,22 @@ class Database {
)->run($feedID, $vId, $vHashUT, $vHashUC, $vHashTC);
}
protected function iconList(string $user, bool $withData = true): Db\Result {
$data = $withData ? "data" : "null as data";
$out = $this->db->prepare("SELECT id, url, type, $data, next_fetch from arsse_icons")->run()->getRow();
if (!$out) {}
return $out;
}
protected function iconGet($id, bool $withData = true, bool $byUrl = false): array {
$field = $byUrl ? "url" : "id";
$type = $byUrl ? "str" : "int";
$data = $withData ? "data" : "null as data";
$out = $this->db->prepare("SELECT id, url, type, $data, next_fetch from arsse_icons where $field = ?", $type)->run($id)->getRow();
if (!$out) {}
return $out;
}
/** Returns an associative array of result column names and their SQL computations for article queries
*
* This is used for whitelisting and defining both output column and order-by columns, as well as for resolution of some context options

20
lib/Feed.php

@ -16,7 +16,9 @@ use PicoFeed\Scraper\Scraper;
class Feed {
public $data = null;
public $favicon;
public $iconUrl;
public $iconType;
public $iconData;
public $resource;
public $modified = false;
public $lastModified;
@ -113,16 +115,24 @@ class Feed {
$this->resource->getContent(),
$this->resource->getEncoding()
)->execute();
// Grab the favicon for the feed; returns an empty string if it cannot find one.
// Some feeds might use a different domain (eg: feedburner), so the site url is
// used instead of the feed's url.
$this->favicon = (new Favicon)->find($feed->siteUrl);
} catch (PicoFeedException $e) {
throw new Feed\Exception($this->resource->getUrl(), $e);
} catch (\GuzzleHttp\Exception\GuzzleException $e) { // @codeCoverageIgnore
throw new Feed\Exception($this->resource->getUrl(), $e); // @codeCoverageIgnore
}
// Grab the favicon for the feed, or null if no valid icon is found
// Some feeds might use a different domain (eg: feedburner), so the site url is
// used instead of the feed's url.
$icon = new Favicon;
$this->iconUrl = $icon->find($feed->siteUrl);
$this->iconData = $icon->getContent();
if (strlen($this->iconData)) {
$this->iconType = $icon->getType();
} else {
$this->iconUrl = $this->iconData = null;
}
// PicoFeed does not provide valid ids when there is no id element. Its solution
// of hashing the url, title, and content together for the id if there is no id
// element is stupid. Many feeds are frankenstein mixtures of Atom and RSS, but

Loading…
Cancel
Save