From 4ce63c88aae24466c6990fa23b73f8ad74dbe3af Mon Sep 17 00:00:00 2001
From: mrtnvgr <48406064+mrtnvgr@users.noreply.github.com>
Date: Wed, 19 Jul 2023 01:48:29 +0700
Subject: [PATCH] Add DoujinStyleBridge (#3549)
* v1
* improve title
* search support
* random support
* fix categories
* add metadata to content
* fix linter errors
* i'm sorry
---
bridges/DoujinStyleBridge.php | 148 ++++++++++++++++++++++++++++++++++
1 file changed, 148 insertions(+)
create mode 100644 bridges/DoujinStyleBridge.php
diff --git a/bridges/DoujinStyleBridge.php b/bridges/DoujinStyleBridge.php
new file mode 100644
index 00000000..84469739
--- /dev/null
+++ b/bridges/DoujinStyleBridge.php
@@ -0,0 +1,148 @@
+ [],
+ 'Randomly selected items' => [],
+ 'From search results' => [
+ 'query' => [
+ 'name' => 'Search query',
+ 'required' => true,
+ 'exampleValue' => 'FELT',
+ ],
+ 'flac' => [
+ 'name' => 'Include FLAC',
+ 'type' => 'checkbox',
+ 'defaultValue' => false,
+ ],
+ 'mp3' => [
+ 'name' => 'Include MP3',
+ 'type' => 'checkbox',
+ 'defaultValue' => false,
+ ],
+ 'tta' => [
+ 'name' => 'Include TTA',
+ 'type' => 'checkbox',
+ 'defaultValue' => false,
+ ],
+ 'opus' => [
+ 'name' => 'Include Opus',
+ 'type' => 'checkbox',
+ 'defaultValue' => false,
+ ],
+ 'ogg' => [
+ 'name' => 'Include OGG',
+ 'type' => 'checkbox',
+ 'defaultValue' => false,
+ ]
+ ]
+ ];
+
+ public function collectData()
+ {
+ $html = getSimpleHTMLDOM($this->getURI());
+ $html = defaultLinkTo($html, $this->getURI());
+
+ $submissions = $html->find('.gridBox .gridDetails');
+ foreach ($submissions as $submission) {
+ $item = [];
+
+ $item['uri'] = $submission->find('a', 0)->href;
+
+ $content = getSimpleHTMLDOM($item['uri']);
+ $content = defaultLinkTo($content, $this->getURI());
+
+ $title = $content->find('h2', 0)->plaintext;
+
+ $cover = $content->find('#imgClick a', 0);
+ if (is_null($cover)) {
+ $cover = $content->find('.coverWrap', 0)->src;
+ } else {
+ $cover = $cover->href;
+ }
+
+ $item['content'] = "
";
+
+ $keys = [];
+ foreach ($content->find('.pageWrap .pageSpan') as $key) {
+ $keys[] = $key->plaintext;
+ }
+
+ $values = $content->find('.pageWrap .pageSpan2');
+ $metadata = array_combine($keys, $values);
+
+ $format = 'Unknown';
+
+ foreach ($metadata as $key => $value) {
+ switch ($key) {
+ case 'Artist':
+ $artist = $value->find('a', 0)->plaintext;
+ $item['title'] = "$artist - $title";
+ $item['content'] .= "
Artist: $artist";
+ break;
+ case 'Tags:':
+ $item['categories'] = [];
+ foreach ($value->find('a') as $tag) {
+ $tag = str_replace('-', '-', $tag->plaintext);
+ $item['categories'][] = $tag;
+ }
+
+ $item['content'] .= '
Tags: ' . join(', ', $item['categories']);
+ break;
+ case 'Format:':
+ $item['content'] .= "
Format: $value->plaintext";
+ break;
+ case 'Date Added:':
+ $item['timestamp'] = $value->plaintext;
+ break;
+ case 'Provided By:':
+ $item['author'] = $value->find('a', 0)->plaintext;
+ break;
+ }
+ }
+
+ $this->items[] = $item;
+ }
+ }
+
+ public function getURI()
+ {
+ $url = self::URI;
+
+ switch ($this->queriedContext) {
+ case 'From search results':
+ $url .= '?p=search&type=blanket';
+ $url .= '&result=' . $this->getInput('query');
+
+ if ($this->getInput('flac') == 1) {
+ $url .= '&format0=on';
+ }
+ if ($this->getInput('mp3') == 1) {
+ $url .= '&format1=on';
+ }
+ if ($this->getInput('tta') == 1) {
+ $url .= '&format2=on';
+ }
+ if ($this->getInput('opus') == 1) {
+ $url .= '&format3=on';
+ }
+ if ($this->getInput('ogg') == 1) {
+ $url .= '&format4=on';
+ }
+ break;
+ case 'Randomly selected items':
+ $url .= '?p=random';
+ break;
+ }
+
+ return $url;
+ }
+}