Files
managarr-demo/mock-htpc/prowlarr/Definitions/funfile.yml
T
Dark-Alex-17 f3ad44f7d7 Add a Readarr mock instance to the demo
Adds darkalex17/readarr-mock, built from ghcr.io/pennydreadful/bookshelf:softcover
(the maintained Readarr continuation; the LinuxServer image is discontinued and
its metadata endpoint no longer resolves). The captured config carries 6 authors,
327 books, 39 book files, 4 tags, 7 indexers, 193 history rows and one root
folder at /books, with minimal EPUBs under mock-htpc/books so the files show as
imported.

Prowlarr now registers Readarr as a synced application, so its config is
recaptured and the prowlarr-mock image must be rebuilt and pushed alongside.

The compose file, managarr config, justfile recipes and README gain the fourth
instance. The demo script needs no change; it fetches the compose file and
config from main at run time.

Requires a Managarr release with Readarr support, since the demo script runs
the published darkalex17/managarr image against these files.
2026-09-21 17:12:10 -06:00

157 lines
4.8 KiB
YAML

---
id: funfile
name: FunFile
description: "FunFile is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://www.funfile.org/
caps:
categorymappings:
- {id: 45, cat: Other, desc: "0Day"}
- {id: 44, cat: TV/Anime, desc: "Anime"}
- {id: 22, cat: PC, desc: "Applications"}
- {id: 43, cat: Audio/Audiobook, desc: "Audio Books"}
- {id: 27, cat: Books/EBook, desc: "Ebook"}
- {id: 4, cat: PC/Games, desc: "Games"}
- {id: 40, cat: Other/Misc, desc: "Miscellaneous"}
- {id: 19, cat: Movies, desc: "Movies"}
- {id: 6, cat: Audio, desc: "Music"}
- {id: 31, cat: PC/Mobile-Other, desc: "Portable"}
- {id: 49, cat: Other, desc: "Tutorials"}
- {id: 7, cat: TV, desc: "TV"}
- {id: 48, cat: XXX/Other, desc: "XXX 0Day"}
- {id: 46, cat: XXX, desc: "XXX Movies"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, genre]
movie-search: [q, imdbid, genre]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: info_activity
type: info
label: Account Inactivity
default: "User accounts that are inactive for more than 42 days (ie haven't logged into the site) and NOT PARKED are automatically AND irretrievably deleted. Those with Donor VIP status are immune to the 42 day purging up to 1 year."
- name: info_results
type: info
label: Results Per Page
default: "For best results, change the 'Torrents per page' setting to 100 in your profile."
login:
path: login.php
method: form
form: form[name="login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
returnto: ""
login: Login
captcha:
type: image
selector: img#captcha
input: captcha_code
error:
- selector: td.mf_content:has(h1:contains("Captcha Error"))
- selector: td.mf_content:contains("Incorrect Captcha")
- selector: td.mf_content:contains("Login failed")
- selector: td.mf_content:contains("Access denied")
- selector: td.mf_content:contains("remaining tries")
- selector: td.mf_content:contains("Security code")
- selector: td.mf_content:contains("Wrong Code")
test:
path: index.php
selector: a[href*="logout.php"]
search:
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ if .Query.Genre }}{{ .Query.Genre }} {{ else }}{{ end }}{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
cat: 0
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
showspam: 1
s_title: "{{ if or .Query.IMDBID .Query.Genre }}{{ else }}1{{ end }}"
s_desc: "{{ if .Query.IMDBID }}1{{ else }}{{ end }}"
s_tag: "{{ if .Query.Genre }}1{{ else }}{{ end }}"
rows:
selector: "table.mainframe table[cellpadding=\"2\"] > tbody > tr:has(a[href^=\"download.php\"]), table.mainframe table[cellpadding=\"2\"] > tbody > tr[id^=\"ka\"]"
after: 1
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
attribute: title
details:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["&hit=1", ""]
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td.row3:nth-child(4)
date:
selector: td.row3:nth-child(6)
filters:
- name: timeago
size:
selector: td.row3:nth-child(8)
grabs:
selector: td.row3:nth-child(9)
seeders:
selector: td.row3:nth-child(10)
leechers:
selector: td.row3:nth-child(11)
uploadvolumefactor:
selector: td.row2 table tr:nth-child(3) td:nth-child(1)
optional: true
default: 1
filters:
- name: replace
args: ["X", ""]
downloadvolumefactor:
selector: td.row2 table tr:nth-child(3) td:nth-child(2)
optional: true
default: 1
filters:
- name: replace
args: ["X", ""]
genre:
selector: td.row2 span[style="float:left"]
filters:
- name: validate
args: "action, adventure, animation, biography, comedy, crime, documentary, drama, family, fantasy, game-show, history, home_&_garden, home_and_garden, horror, music, musical, mystery, news, reality, reality-tv, romance, sci-fi, science-fiction, short, sport, talk-show, thriller, travel, war, western"
description:
text: "{{ .Result.genre }}"
minimumratio:
text: 1.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# TBDev