mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 21:22:40 +00:00
Partial icon handling skeleton
This commit is contained in:
parent
af675479b8
commit
c25782f98c
2 changed files with 32 additions and 6 deletions
|
@ -1226,7 +1226,7 @@ class Database {
|
||||||
[$cHashUC, $tHashUC, $vHashUC] = $this->generateIn($hashesUC, "str");
|
[$cHashUC, $tHashUC, $vHashUC] = $this->generateIn($hashesUC, "str");
|
||||||
[$cHashTC, $tHashTC, $vHashTC] = $this->generateIn($hashesTC, "str");
|
[$cHashTC, $tHashTC, $vHashTC] = $this->generateIn($hashesTC, "str");
|
||||||
// perform the query
|
// 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))",
|
"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',
|
'int',
|
||||||
$tId,
|
$tId,
|
||||||
|
@ -1236,6 +1236,22 @@ class Database {
|
||||||
)->run($feedID, $vId, $vHashUT, $vHashUC, $vHashTC);
|
)->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
|
/** 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
|
* 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
20
lib/Feed.php
|
@ -16,7 +16,9 @@ use PicoFeed\Scraper\Scraper;
|
||||||
|
|
||||||
class Feed {
|
class Feed {
|
||||||
public $data = null;
|
public $data = null;
|
||||||
public $favicon;
|
public $iconUrl;
|
||||||
|
public $iconType;
|
||||||
|
public $iconData;
|
||||||
public $resource;
|
public $resource;
|
||||||
public $modified = false;
|
public $modified = false;
|
||||||
public $lastModified;
|
public $lastModified;
|
||||||
|
@ -113,16 +115,24 @@ class Feed {
|
||||||
$this->resource->getContent(),
|
$this->resource->getContent(),
|
||||||
$this->resource->getEncoding()
|
$this->resource->getEncoding()
|
||||||
)->execute();
|
)->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) {
|
} catch (PicoFeedException $e) {
|
||||||
throw new Feed\Exception($this->resource->getUrl(), $e);
|
throw new Feed\Exception($this->resource->getUrl(), $e);
|
||||||
} catch (\GuzzleHttp\Exception\GuzzleException $e) { // @codeCoverageIgnore
|
} catch (\GuzzleHttp\Exception\GuzzleException $e) { // @codeCoverageIgnore
|
||||||
throw new Feed\Exception($this->resource->getUrl(), $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
|
// 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
|
// 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
|
// element is stupid. Many feeds are frankenstein mixtures of Atom and RSS, but
|
||||||
|
|
Loading…
Reference in a new issue