From 6528cd3ae2cb8263b830cb08cb96921f74d5595f Mon Sep 17 00:00:00 2001 From: Dale Davies Date: Mon, 21 Feb 2022 10:58:20 +0000 Subject: [PATCH] Add global defaults to sites.json (icon and nofollow) --- jumpapp/classes/Site.php | 23 +++++++-- jumpapp/classes/Sites.php | 25 ++++++++-- jumpapp/sites/icons/bitwarden.png | Bin 418 -> 389 bytes jumpapp/sites/icons/gitea.png | Bin 4351 -> 2259 bytes jumpapp/sites/icons/my-default-icon.png | Bin 0 -> 5336 bytes jumpapp/sites/icons/nextcloud.png | Bin 706 -> 686 bytes jumpapp/sites/icons/paperless.jpg | Bin 7819 -> 7025 bytes jumpapp/sites/sites.json | 59 +++++++++++++----------- 8 files changed, 70 insertions(+), 37 deletions(-) create mode 100644 jumpapp/sites/icons/my-default-icon.png diff --git a/jumpapp/classes/Site.php b/jumpapp/classes/Site.php index 0de8bf9..692b1d1 100644 --- a/jumpapp/classes/Site.php +++ b/jumpapp/classes/Site.php @@ -17,19 +17,34 @@ class Site { public string $icon; public string $url; - public function __construct(Config $config, array $sitearray) { + public function __construct(Config $config, array $sitearray, array $default) { $this->config = $config; + $this->defaults = $default; if (!isset($sitearray['name'], $sitearray['url'])) { throw new \Exception('The array passed to Site() must contain the keys "name" and "url"!'); } $this->name = $sitearray['name']; $this->url = $sitearray['url']; - $this->nofollow = isset($sitearray['nofollow']) ? $sitearray['nofollow'] : false; + $this->nofollow = isset($sitearray['nofollow']) ? $sitearray['nofollow'] : (isset($this->defaults['nofollow']) ? $this->defaults['nofollow'] : false); $this->icon = isset($sitearray['icon']) ? $this->get_favicon_datauri($sitearray['icon']) : $this->get_favicon_datauri(); } + /** + * Return a data uri for a given icon, or a site's favicon if an icon + * is not provided. + * + * @param string|null $icon File name of a given icon to retrieve. + * @return string Base 64 encoded datauri for the icon image. + */ public function get_favicon_datauri(?string $icon = null): string { + // Use the applications own default icon unless one is supplied via the sites.json file. + $defaulticon = $this->config->get('defaulticonpath'); + if (isset($this->defaults['icon'])) { + $defaulticon = $this->config->get('sitesdir').'/icons/'.$this->defaults['icon']; + } + // Did we have a supplied icon or are we going to try retrieving the favicon? if ($icon === null) { + // Go get the favicon, if there isnt one then use the default icon. $favicon = new \Favicon\Favicon(); $favicon->cache([ 'dir' => $this->config->get('cachedir').'/icons/', @@ -37,7 +52,7 @@ class Site { ]); $rawimage = $favicon->get($this->url, \Favicon\FaviconDLType::RAW_IMAGE); if (!$rawimage) { - $rawimage = file_get_contents($this->config->get('defaulticonpath')); + $rawimage = file_get_contents($defaulticon); } } else { $rawimage = file_get_contents($this->config->get('sitesdir').'/icons/'.$icon); @@ -46,4 +61,4 @@ class Site { return 'data:'.$mimetype.';base64,'.base64_encode($rawimage); } -} \ No newline at end of file +} diff --git a/jumpapp/classes/Sites.php b/jumpapp/classes/Sites.php index f6357f8..c0ac904 100644 --- a/jumpapp/classes/Sites.php +++ b/jumpapp/classes/Sites.php @@ -15,6 +15,7 @@ class Sites { private Cache $cache; private Config $config; + private array $default; private string $sitesfilelocation; private array $loadedsites; @@ -26,6 +27,10 @@ class Sites { $this->loadedsites = []; $this->sitesfilelocation = $this->config->get('sitesfile'); $this->cache = $cache; + $this->default = [ + 'icon' => null, + 'nofollow' => false + ]; $this->load_sites_from_json(); } @@ -48,13 +53,23 @@ class Sites { if ($rawjson === '') { throw new Exception('The sites.json file is empty'); } - $decodedjson = json_decode($rawjson, true); - if (!is_array($decodedjson)) { - throw new Exception('Provided sites json does not contain a top-level array'); + // Do some checks to see if the JSON decodes into something + // like what we expect to see... + $decodedjson = json_decode($rawjson); + if (is_array($decodedjson)) { + $sites = $decodedjson; } - foreach ($decodedjson as $array) { - $sites[] = new Site($this->config, $array); + if (isset($decodedjson->sites) && is_array($decodedjson->sites)) { + $sites = $decodedjson->sites; + $this->default = (array) $decodedjson->default; } + // Walk over the sites array and instantiate an actual Site() object + // for each element. + array_walk($sites, function(&$item, $key, $default) { + $item = new Site($this->config, (array) $item, $default); + }, $this->default); + // Return the array of Site() objects, note we are in a callback + // so the return is not from the outer function. return $sites; }); } diff --git a/jumpapp/sites/icons/bitwarden.png b/jumpapp/sites/icons/bitwarden.png index f10836cab38749c1de955290b985ecfa8605f0ae..83773dfc8e728a56718a71f2b7c6e61cf5fcf1ef 100644 GIT binary patch delta 374 zcmZ3)+{!#bqMn7Bfq@~yJ?AZuk_hk#adj{7sjaQ8K?OjO@MpUMfNI!Fg8YIRUhJP2 zFJCjcNZ}y^1EZ*?i(`n#@wZcV^Bpqaan;SRQf_>~#c^dSYpJfz8rC`nwj(kQU%nU4 zHQ|5M(30?a?xY`Ij+HGEVOX$2xxR{FWxRW+(1mVhZ>Dea8{)0cMEO>-bFLM-*T`(u zer{p$kM_gc9lACr|8R?ZkkBxN-JpD>+(wn;MqNKG(=(P14_^89>&sjaDZKtzmffVA znPYww^OI)_kG_>q_$s95l<<1V1J#9$TD6b1-eteG^=(u9iY;fiTCdn=-LQbak53_= zi(ld2vo{a!Xl3%HKRvecv#x^Q!p5^qjl8_)J}g?q$~W`#;o>Fhd#`L?%){`Cmq}|M z$73`9D;ts+JkDO-J?+4$kWG&sD}*$Dl}QTHofR&i{$a|o{71dVU#R|L`Ck60@EDtr RB{0+&JYD@<);T3K0RXf_qXz&0 delta 404 zcmZo=Uc@{>qMn19fq`M}_Qp3rN+Q4~#I?4z*1f<7NYiNmrl|?45u8BkK`iG#-YJiR z1RMVMrZ7w~4OrHotbd|kr-gHY9^(XtKdu)T-v8X##Jkqcude<*G1C|vZ_x@tMu=xg~NZ!lW?hdjVHv$S>PTh!S zJe=qBe~rV{Sms*R6Y`xU`OF{UgeUY?3IFgryu)x(-+Sg`c{2|Gc2My#Z`;qX>+s|Y slK+G(^5rGYpUX|~XB1zY|CV{KG>_w|_{F@7fMLqu>FVdQ&MBb@0H3U+)&Kwi diff --git a/jumpapp/sites/icons/gitea.png b/jumpapp/sites/icons/gitea.png index dcd4edb1a30bf93049fd24c31317e3344e08d95b..f8a2c9cdc4259aba877ca6fdaa388a9cb17957d8 100644 GIT binary patch literal 2259 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 diff --git a/jumpapp/sites/icons/my-default-icon.png b/jumpapp/sites/icons/my-default-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..90cfe40265b670dcf0bef4c644ebaa56d155d3f1 GIT binary patch literal 5336 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 BJ1GDF diff --git a/jumpapp/sites/icons/paperless.jpg b/jumpapp/sites/icons/paperless.jpg index 2a4c54ad5816d86ff615fea749829df660fe6bc7..bb4413af57c3c31a9187b2c80c449543a1d180a7 100644 GIT binary patch literal 7025 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 g9wBp%Sy+w8A90zVQU