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;
+ }
+}