Created dedicated radarr and prowlarr demo images and pushed them up to DockerHub, and updated the script to be a true one liner
This commit is contained in:
@@ -15,19 +15,31 @@ To run this demo, simply run the [demo script](./managarr-demo.sh):
|
||||
./managarr-demo.sh
|
||||
```
|
||||
|
||||
## Cleanup
|
||||
This demo will download a handful of docker images. To clean up after this demo, run the following command:
|
||||
|
||||
```shell
|
||||
docker image rm lscr.io/linuxserver/radarr &&\
|
||||
docker image rm lscr.io/linuxserver/prowlarr &&\
|
||||
rm -rf /tmp/managarr*
|
||||
```
|
||||
|
||||
## Limitations
|
||||
This demo has no download functionality. It is an eventual goal to have a mock API for one of the BitTorrent clients like Transmission
|
||||
to emulate this functionality for a full demo experience.
|
||||
|
||||
## Building
|
||||
To build and push both the [prowlarr](./prowlarr.Dockerfile) and [radarr](./radarr.Dockerfile) images, it is easiest to just use the [build script](./build.sh):
|
||||
|
||||
```shell
|
||||
./build.sh
|
||||
```
|
||||
|
||||
## Running directly with docker compose
|
||||
If you wish to run the demo directly from the [docker-compose.yml](./docker-compose.yml),
|
||||
you can either run it simply with
|
||||
|
||||
```shell
|
||||
docker compose run --rm managarr
|
||||
```
|
||||
|
||||
which will use the [default managarr configuration file](./mock-htpc/managarr/config.yml), or you can specify it manually with the `MANAGARR_CONFIG` environment variable:
|
||||
|
||||
```shell
|
||||
MANAGARR_CONFIG=/tmp/managarr.yml docker compose run --rm managarr
|
||||
```
|
||||
|
||||
## Creator
|
||||
* [Alex Clarke](https://github.com/Dark-Alex-17)
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
docker build -f radarr.Dockerfile -t darkalex17/radarr-mock:latest .
|
||||
docker push darkalex17/radarr-mock:latest
|
||||
|
||||
docker build -f prowlarr.Dockerfile -t darkalex17/prowlarr-mock:latest .
|
||||
docker push darkalex17/prowlarr-mock:latest
|
||||
+3
-22
@@ -1,32 +1,13 @@
|
||||
---
|
||||
services:
|
||||
radarr:
|
||||
image: lscr.io/linuxserver/radarr:latest
|
||||
image: darkalex17/radarr-mock:latest
|
||||
container_name: radarr
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Etc/UTC
|
||||
volumes:
|
||||
- ./mock-htpc/movies:/movies
|
||||
- ./mock-htpc/films:/films
|
||||
- ./mock-htpc/downloads:/downloads
|
||||
- ./mock-htpc/radarr:/config
|
||||
ports:
|
||||
- 7878:7878
|
||||
restart: unless-stopped
|
||||
|
||||
prowlarr:
|
||||
image: lscr.io/linuxserver/prowlarr:latest
|
||||
image: darkalex17/prowlarr-mock:latest
|
||||
container_name: prowlarr
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Etc/UTC
|
||||
volumes:
|
||||
- ./mock-htpc/prowlarr:/config
|
||||
ports:
|
||||
- 9696:9696
|
||||
restart: unless-stopped
|
||||
|
||||
managarr:
|
||||
@@ -34,7 +15,7 @@ services:
|
||||
stdin_open: true
|
||||
tty: true
|
||||
volumes:
|
||||
- ./mock-htpc/managarr:/root/.config/managarr/
|
||||
- "${MANAGARR_CONFIG:-./mock-htpc/managarr/config.yml}:/root/.config/managarr/config.yml:ro"
|
||||
depends_on:
|
||||
radarr:
|
||||
condition: service_started
|
||||
|
||||
+24
-8
@@ -1,21 +1,37 @@
|
||||
#!/bin/bash
|
||||
|
||||
DEMO_TEMP_DIR=/tmp/managarr-demo
|
||||
DEMO_TEMP_COMPOSE_FILE=/tmp/docker-compose.yml
|
||||
DEMO_TEMP_CONFIG_FILE=/tmp/config.yml
|
||||
|
||||
cleanup() {
|
||||
docker compose -f "$DEMO_TEMP_COMPOSE_FILE" down
|
||||
|
||||
docker rmi -f $(docker images | grep "darkalex17" | awk '{print $3}')
|
||||
|
||||
rm -f "$DEMO_TEMP_COMPOSE_FILE"
|
||||
rm -f "$DEMO_TEMP_CONFIG_FILE"
|
||||
rm -f /tmp/managarr-demo.sh
|
||||
}
|
||||
|
||||
fail() {
|
||||
result=$?
|
||||
cleanup
|
||||
if [ "$result" != "0" ]; then
|
||||
echo "Fail to run the Managarr demo"
|
||||
echo "Failed to run the Managarr demo"
|
||||
fi
|
||||
exit $result
|
||||
}
|
||||
|
||||
main() {
|
||||
[ -f "$DEMO_TEMP_COMPOSE_FILE" ] || curl https://raw.githubusercontent.com/Dark-Alex-17/managarr-demo/main/docker-compose.yml > "$DEMO_TEMP_COMPOSE_FILE"
|
||||
[ -f "$DEMO_TEMP_CONFIG_FILE" ] || curl https://raw.githubusercontent.com/Dark-Alex-17/managarr-demo/main/mock-htpc/managarr/config.yml > "$DEMO_TEMP_CONFIG_FILE"
|
||||
|
||||
MANAGARR_CONFIG="$DEMO_TEMP_CONFIG_FILE" docker compose -f "$DEMO_TEMP_COMPOSE_FILE" run --rm managarr
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
trap "fail" EXIT
|
||||
set -e
|
||||
main
|
||||
|
||||
[ -d "$DEMO_TEMP_DIR" ] || git clone git@github.com:Dark-Alex-17/managarr-demo.git "$DEMO_TEMP_DIR"
|
||||
|
||||
docker compose -f "$DEMO_TEMP_DIR/docker-compose.yml" run --rm managarr &&\
|
||||
docker compose -f "$DEMO_TEMP_DIR/docker-compose.yml" down &&\
|
||||
docker image rm darkalex17/managarr &&\
|
||||
rm -rf /tmp/managarr-demo.sh
|
||||
|
||||
@@ -7,6 +7,7 @@ type: private
|
||||
encoding: UTF-8
|
||||
requestDelay: 2
|
||||
links:
|
||||
- https://www.agsvpt.com/
|
||||
- https://abroad.agsvpt.com/
|
||||
|
||||
caps:
|
||||
@@ -80,9 +81,8 @@ settings:
|
||||
default: "Account retention rules:<ol><li>Elite User and above will not have their account deleted after parking (in the Control Panel)</li><li>Users who do not log in for 400 consecutive days will be disabled.</li><li>Users with a parked account will be disabled if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e., uploading/downloading data is 0) within 7 days of new registration will be disabled</li><li>Users with no traffic (i.e. both upload/download data is 0) who do not log in for 30 consecutive days will be disabled.</li></ol>"
|
||||
|
||||
login:
|
||||
path: agsvpt
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
secret: ""
|
||||
username: "{{ .Config.username }}"
|
||||
|
||||
@@ -157,5 +157,5 @@ search:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
minimumratio:
|
||||
text: 0.4
|
||||
text: 1.0
|
||||
# json UNIT3D 7.0.3
|
||||
|
||||
@@ -102,6 +102,10 @@ settings:
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Anzahl der Torrents beim Durchsuchen:</b> setting to <b>60</b> on your Control Panel. The default is <i>15</i>.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Inactive accounts will be deactivated after 7 weeks and deleted after another 3 weeks."
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
---
|
||||
id: h-p2p
|
||||
name: H-P2P
|
||||
description: "H-P2P is a Private Torrent Tracker for OnlyFans XXX"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://h-p2p.cam/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 6, cat: XXX/WEB-DL, desc: "OnlyFans"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Token by accessing your <a href=\"https://h-p2p.cam/\" target=\"_blank\">H-P2P</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: created_at
|
||||
options:
|
||||
created_at: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://github.com/HDInnovations/UNIT3D-Community-Edition/wiki/Torrent-API-(UNIT3D-v7.0.0)
|
||||
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php#L349
|
||||
- path: "/api/torrents/filter"
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title:
|
||||
selector: name
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
infohash:
|
||||
selector: info_hash
|
||||
poster:
|
||||
selector: poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
files:
|
||||
selector: num_file
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
downloadvolumefactor:
|
||||
# api returns 0%, 25%, 50%, 75%, 100%
|
||||
selector: freeleech
|
||||
case:
|
||||
0%: 1 # not free
|
||||
25%: 0.75
|
||||
50%: 0.5
|
||||
75%: 0.25
|
||||
100%: 0 # freeleech
|
||||
"*": 0 # catch errors
|
||||
uploadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: double_upload
|
||||
case:
|
||||
0: 1 # normal
|
||||
1: 2 # double
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 7 days (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 6.3.0
|
||||
@@ -10,13 +10,14 @@ links:
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 10, cat: Movies, desc: "MOVIES"}
|
||||
- {id: 1, cat: Movies, desc: "MOVIES"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: PC, desc: "APPZ"}
|
||||
- {id: 3, cat: TV/Foreign, desc: "TV-FOREIGN"}
|
||||
- {id: 4, cat: PC, desc: "APPS"}
|
||||
- {id: 5, cat: Audio, desc: "MUSIC"}
|
||||
- {id: 8, cat: XXX, desc: "XXX"}
|
||||
- {id: 12, cat: Books, desc: "EBOOKS"}
|
||||
- {id: 9, cat: Console, desc: "GAMES"}
|
||||
- {id: 6, cat: XXX, desc: "XXX"}
|
||||
- {id: 7, cat: Console, desc: "GAMES"}
|
||||
- {id: 8, cat: Books, desc: "EBOOKS"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
@@ -144,6 +144,7 @@ caps:
|
||||
- {id: 252, cat: Books, desc: "Yachting, sailing, boating-Projects, design, construction"}
|
||||
- {id: 251, cat: Books, desc: "Diving"}
|
||||
- {id: 177, cat: Books, desc: "Shipmodeling"}
|
||||
- {id: 352, cat: Books, desc: "Shipmodeling-Paper models"}
|
||||
- {id: 293, cat: Books, desc: "Shipmodeling-Radio controlled models"}
|
||||
- {id: 292, cat: Books, desc: "Shipmodeling-Marine Modelling Magazines"}
|
||||
- {id: 291, cat: Books, desc: "Shipmodeling-Drawings and models of ships (CAD, 3D)"}
|
||||
@@ -159,6 +160,7 @@ caps:
|
||||
- {id: 280, cat: Books, desc: "Marine History-Historic ships"}
|
||||
- {id: 279, cat: Books, desc: "Marine History-Marine vessels"}
|
||||
- {id: 278, cat: Books, desc: "Marine History-Warships"}
|
||||
- {id: 351, cat: Books, desc: "Marine History-Battleships"}
|
||||
- {id: 259, cat: Books, desc: "Marine History-Shipbuilding history"}
|
||||
- {id: 277, cat: Books, desc: "Marine History-Wars at Sea"}
|
||||
- {id: 276, cat: Books, desc: "Marine History-War at sea (World War I)"}
|
||||
|
||||
@@ -6,6 +6,8 @@ language: el-GR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://oldgreektracker.xyz/
|
||||
legacylinks:
|
||||
- http://oldgreektracker.xyz/
|
||||
|
||||
caps:
|
||||
@@ -134,6 +136,16 @@ login:
|
||||
path: index.php
|
||||
selector: a[href*="/logout.php?logouthash="]
|
||||
|
||||
download:
|
||||
before:
|
||||
path: takethanks.php
|
||||
method: post
|
||||
inputs:
|
||||
torrentid: "{{ .DownloadUri.Query.id }}"
|
||||
selectors:
|
||||
- selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
@@ -154,28 +166,28 @@ search:
|
||||
order: "{{ if .Config.freeleech }}asc{{ else }}{{ .Config.type }}{{ end }}"
|
||||
|
||||
rows:
|
||||
selector: "table.sortable tr:has(a[href*=\"/download-torrent-\"]){{ if .Config.freeleech }}:has(img[src$=\"/freedownload.gif\"]){{ else }}{{ end }}"
|
||||
selector: "table.sortable tr:has(a[href*=\"/download.php?id=\"]){{ if .Config.freeleech }}:has(img[src$=\"/freedownload.gif\"]){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="/torrent-category-"]
|
||||
selector: a[href*="/browse.php?category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: /torrent-category-(.+?)/
|
||||
- name: querystring
|
||||
args: category
|
||||
title_default:
|
||||
# is usually abbreaviated
|
||||
selector: a[href*="/torrent-details-"]
|
||||
selector: a[href*="/details.php?id="]
|
||||
title:
|
||||
# while still abbreviated, is usually longer than the default
|
||||
selector: div.tooltip-content div
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="/torrent-details-"]
|
||||
selector: a[href*="/details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="/download-torrent-"]
|
||||
selector: a[href*="/details.php?id="]
|
||||
attribute: href
|
||||
magnet:
|
||||
selector: a[href^="magnet:?xt="]
|
||||
@@ -184,11 +196,15 @@ search:
|
||||
selector: img[src*="/torrents/images/"]
|
||||
attribute: src
|
||||
date:
|
||||
selector: td:nth-child(2) > div:last-child
|
||||
selector: td:nth-child(2)
|
||||
# auto adjusted by site account profile
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(\\d{1,2}(?:st|nd|rd|th):\\w{3,9}:\\d{4} \\d{2}:\\d{2})"
|
||||
- name: re_replace
|
||||
args: ["^(\\d{1,2})(?:st|nd|rd|th):", "$1:"]
|
||||
- name: dateparse
|
||||
args: "dd-MM-yyyy HH:mm"
|
||||
args: "d:MMMM:yyyy HH:mm"
|
||||
size:
|
||||
selector: td:nth-last-child(5)
|
||||
grabs:
|
||||
|
||||
@@ -5,6 +5,8 @@ description: "sharewood is a Semi-Private FRENCH Torrent Tracker for GENERAL"
|
||||
language: fr-FR
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
certificates:
|
||||
- 023A091295E81813D040DFA0FA842DF9892BF0F5 # expired 10-March-2024 note: despite a new CA issued this one still pops up occasionally
|
||||
links:
|
||||
- https://www.sharewood.tv/
|
||||
|
||||
|
||||
@@ -200,6 +200,8 @@ search:
|
||||
":contains(\"Divers\"):contains(\"1080p\")": "5GB"
|
||||
":contains(\"Divers\"):contains(\"720p\")": "4GB"
|
||||
"*": ""
|
||||
date:
|
||||
text: now
|
||||
download:
|
||||
selector: div.download-item > a
|
||||
attribute: href
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
FROM lscr.io/linuxserver/prowlarr:latest
|
||||
|
||||
ENV PUID=1000
|
||||
ENV PGID=1000
|
||||
ENV TZ=Etc/UTC
|
||||
|
||||
COPY ./mock-htpc/prowlarr/ /config
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
FROM lscr.io/linuxserver/radarr:latest
|
||||
|
||||
ENV PUID=1000
|
||||
ENV PGID=1000
|
||||
ENV TZ=Etc/UTC
|
||||
|
||||
COPY ./mock-htpc/radarr/ /config
|
||||
COPY ./mock-htpc/movies /movies
|
||||
COPY ./mock-htpc/films /films
|
||||
|
||||
Reference in New Issue
Block a user