diff --git a/bridges/CubariBridge.php b/bridges/CubariBridge.php new file mode 100644 index 00000000..00a2a0ba --- /dev/null +++ b/bridges/CubariBridge.php @@ -0,0 +1,98 @@ + array( + 'name' => 'Gist/Raw Url', + 'type' => 'text', + 'required' => true, + 'exampleValue' => 'https://raw.githubusercontent.com/kurisumx/baka/main/ikedan' + ) + )); + + private $mangaTitle = ''; + + public function getName() + { + if (!empty($this->mangaTitle)) + return $this->mangaTitle . ' - ' . self::NAME; + else + return self::NAME; + } + + public function getURI() + { + if ($this->getInput('gist') != '') + return self::URI . '/read/gist/' . $this->getEncodedGist(); + else + return self::URI; + } + + /** + * The Cubari bridge. + * + * Cubari urls are base64 encodes of a given github raw or gist link described as below: + * https://cubari.moe/read/gist/${bаse64.url_encode(raw/)}/ + * https://cubari.moe/read/gist/${bаse64.url_encode(gist/)}/ + * https://cubari.moe/read/gist/${gitio shortcode} + * + * This bridge uses just the raw/gist and generates matching cubari urls. + */ + public function collectData() + { + $jsonSite = getContents($this->getInput('gist')); + $jsonFile = json_decode($jsonSite, true); + + $this->mangaTitle = $jsonFile['title']; + + $chapters = $jsonFile['chapters']; + + foreach ($chapters as $chapnum => $chapter) { + $item = $this->getItemFromChapter($chapnum, $chapter); + $this->items[] = $item; + } + + array_multisort(array_column($this->items, 'timestamp'), SORT_DESC, $this->items); + } + + protected function getEncodedGist() + { + $url = $this->getInput('gist'); + + preg_match('/\/([a-z]*)\.githubusercontent.com(.*)/', $url, $matches); + + // raw or gist is first match. + $unencoded = $matches[1] . $matches[2]; + + return base64_encode($unencoded); + } + + private function getSanitizedHash($string) + { + return hash('sha1', preg_replace('/[^a-zA-Z0-9\-\.]/', '', ucwords(strtolower($string)))); + } + + protected function getItemFromChapter($chapnum, $chapter) + { + $item = array(); + + $item['uri'] = $this->getURI() . '/' . $chapnum; + $item['title'] = 'Chapter ' . $chapnum . ' - ' . $chapter['title'] . ' - ' . $this->mangaTitle; + foreach ($chapter['groups'] as $key => $value) + $item['author'] = $key; + $item['timestamp'] = $chapter['last_updated']; + + $item['content'] = '

Manga: ' . $this->mangaTitle . '

+

Chapter Number: ' . $chapnum . '

+

Chapter Title: ' . $chapter['title'] . '

+

Group: ' . $item['author'] . '

'; + + $item['uid'] = $this->getSanitizedHash($item['title'] . $item['author']); + + return $item; + } +}