docs: server comments say what the code does, not how it came to be (#6277)
Comment blocks in cmd/minstrel and 30 smaller internal packages, rewritten
to rule 32's standard with each citation read in context: task, milestone
and rule ids go, and so do the stories they were attached to ("used to",
"Before #N", measurements from one install, quotes, pointers to Fabled
Librarian's records and to docs/superpowers files that are not in the
repo). Where a story wrapped a real constraint, the constraint stays as a
present-tense fact.
Comments that had gone stale are corrected:
- taste.Config: the tuned values are overlaid by internal/recsettings;
it is no longer "a later follow-up".
- StorageConfig: the data dir holds art, caches and the stream secret,
not only playlist covers.
- the Subsonic album list and getUser comments describe what they do
today rather than a milestone that would change it.
Checked: the non-comment token stream of every changed file matches
HEAD, and gofmt -l is empty.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,8 +10,7 @@ import (
|
||||
"git.fabledsword.com/bvandeusen/minstrel/internal/indexer"
|
||||
)
|
||||
|
||||
// Searching every source at once (M502 #5521), ported from Fabled Librarian
|
||||
// (#4182). A source that is down narrows a search rather than failing it: the
|
||||
// Searching every source at once. A source that is down narrows a search rather than failing it: the
|
||||
// results come back with the list of who did not answer.
|
||||
|
||||
// SourceFailure is one source that could not be reached.
|
||||
|
||||
@@ -16,12 +16,11 @@ import (
|
||||
"git.fabledsword.com/bvandeusen/minstrel/internal/release"
|
||||
)
|
||||
|
||||
// Taking a release (M502 #5521), ported from Fabled Librarian's grab.go and
|
||||
// rivals.go. One live grab per want: a second is tie-broken against the
|
||||
// download already running (FL #4470).
|
||||
// Taking a release. One live grab per want: a second is tie-broken against
|
||||
// the download already running.
|
||||
|
||||
// Tag goes on every torrent Minstrel adds, so the operator can tell them
|
||||
// from their own in the client.
|
||||
// Tag goes on every torrent Minstrel adds, so they can be told apart from
|
||||
// anything else in the client.
|
||||
const Tag = "minstrel"
|
||||
|
||||
// MissingClient is Taken.Missing when no download client is set up.
|
||||
@@ -211,9 +210,9 @@ func (s *Service) Grab(ctx context.Context, want Want, chosen *Candidate, all []
|
||||
}
|
||||
|
||||
// heldElsewhere reports whether a release the client says it already holds is
|
||||
// one it does not list for Minstrel: held under another category, from before
|
||||
// Minstrel took the downloads over (#6176). Recorded as a grab, it would read
|
||||
// as gone half an hour later and be taken again, every pass. A client that
|
||||
// one it does not list for Minstrel: held under another category. Recorded
|
||||
// as a grab, it would read as gone half an hour later and be taken again,
|
||||
// every pass. A client that
|
||||
// cannot answer now is given the benefit of the doubt, as the add was.
|
||||
func (s *Service) heldElsewhere(ctx context.Context, hash string) bool {
|
||||
if hash == "" {
|
||||
|
||||
@@ -20,13 +20,13 @@ import (
|
||||
const (
|
||||
BlockOperator = "operator"
|
||||
BlockFiles = "files"
|
||||
// BlockImport: the import found its files were not the album (#5522).
|
||||
// BlockImport: the import found its files were not the album.
|
||||
BlockImport = "import"
|
||||
// BlockStalled: given up on because it would not finish (#5523); held
|
||||
// BlockStalled: given up on because it would not finish; held
|
||||
// back until the block's expires_at.
|
||||
BlockStalled = "stalled"
|
||||
// BlockGone: its download client would not let Minstrel follow it, held
|
||||
// outside Minstrel's category or leaving the client twice (#6176); held
|
||||
// outside Minstrel's category or leaving the client twice; held
|
||||
// back for GoneBlock.
|
||||
BlockGone = "gone"
|
||||
)
|
||||
|
||||
@@ -8,8 +8,7 @@ import (
|
||||
"git.fabledsword.com/bvandeusen/minstrel/internal/indexer"
|
||||
)
|
||||
|
||||
// SearchPace is the one Pacer every search shares, ported from Fabled
|
||||
// Librarian (#4448). Process-wide because a Fanout is built fresh for each
|
||||
// SearchPace is the one Pacer every search shares. Process-wide because a Fanout is built fresh for each
|
||||
// search; a Pacer per Fanout would start empty and pace nothing.
|
||||
var SearchPace = &Pacer{}
|
||||
|
||||
@@ -19,7 +18,7 @@ const holdWithoutRetryAfter = 10 * time.Minute
|
||||
|
||||
// Pacer spaces the searches sent to each source by its searches_per_hour: a
|
||||
// spacing, not a burst bucket, because Prowlarr answers 429 to a few requests
|
||||
// in quick succession (FL #4304). Every search spends, the schedule's and a
|
||||
// in quick succession. Every search spends, the schedule's and a
|
||||
// person's alike; only the schedule waits.
|
||||
type Pacer struct {
|
||||
// Now and Sleep are the clock, replaceable in tests.
|
||||
|
||||
@@ -12,8 +12,8 @@ import (
|
||||
"git.fabledsword.com/bvandeusen/minstrel/internal/release"
|
||||
)
|
||||
|
||||
// One search for one want, and what could be done about each result (M502
|
||||
// #5521), ported from Fabled Librarian's internal/acquire. internal/release
|
||||
// One search for one want, and what could be done about each result.
|
||||
// internal/release
|
||||
// says whether a name is the album and what quality it is; this package
|
||||
// asks in the right order and says why in words a person can act on.
|
||||
|
||||
@@ -51,7 +51,7 @@ const (
|
||||
CodeNoSeeders = "no_seeders"
|
||||
CodeDoubt = "doubt"
|
||||
// CodeNotBetter: the album, but no better than the copy the library
|
||||
// holds, for a want that is an upgrade (#5524).
|
||||
// holds, for a want that is an upgrade.
|
||||
CodeNotBetter = "not_better"
|
||||
)
|
||||
|
||||
@@ -68,7 +68,7 @@ type Want struct {
|
||||
ID pgtype.UUID
|
||||
release.Want
|
||||
// Floor is the tier of the copy the library holds, for an album wanted
|
||||
// for a better one (#5524): a release must rank above it. "" for an
|
||||
// for a better one: a release must rank above it. "" for an
|
||||
// album not held, and for a video rip, which any clean copy beats.
|
||||
Floor release.Tier
|
||||
// Held says the floor in words: "MP3, about 192 kbps".
|
||||
|
||||
@@ -219,7 +219,7 @@ func TestGrab_AClientThatAlreadyHasItCounts(t *testing.T) {
|
||||
}
|
||||
|
||||
// A duplicate the client does not list for Minstrel sits under another
|
||||
// category, where it would read as gone half an hour later (#6176). It is set
|
||||
// category, where it would read as gone half an hour later. It is set
|
||||
// aside rather than taken; forced, it is refused with the client's reason.
|
||||
func TestGrab_ADuplicateHeldOutsideMinstrelIsNotTaken(t *testing.T) {
|
||||
client := &fakeClient{addErr: fmt.Errorf("%w: already downloading Ohio Players (lidarr)", downloader.ErrDuplicate), elsewhere: true}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
// Package acquire turns the operator's configured indexers and download
|
||||
// clients into working clients (M502 #5518). Ported from Fabled Librarian's
|
||||
// internal/acquire.
|
||||
// Package acquire turns the configured indexers and download clients into
|
||||
// working clients.
|
||||
//
|
||||
// ONE BUILDER PER KIND. SourceFor makes a search source from a row and
|
||||
// DownloadClient makes a download client, path mapping included. The grab,
|
||||
@@ -60,7 +59,7 @@ type addable struct {
|
||||
perHour int32
|
||||
}
|
||||
|
||||
// catalogue is every protocol the operator can add. Exchange starts unpaced
|
||||
// catalogue is every protocol an admin can add. Exchange starts unpaced
|
||||
// (it searches its own database); the others at 120 searches an hour, which
|
||||
// keeps a Prowlarr's indexers under the rate most trackers allow.
|
||||
var catalogue = map[string]addable{
|
||||
@@ -70,7 +69,7 @@ var catalogue = map[string]addable{
|
||||
ProtocolExchange: {kind: KindDownload, label: "FabledExchange", category: DefaultCategory, timeoutMs: 30000, perHour: 0},
|
||||
}
|
||||
|
||||
// Addable says whether protocol is one the operator can add.
|
||||
// Addable says whether protocol is one an admin can add.
|
||||
func Addable(protocol string) bool {
|
||||
_, ok := catalogue[protocol]
|
||||
return ok
|
||||
|
||||
@@ -19,7 +19,7 @@ var ErrNotFound = errors.New("no such service")
|
||||
// ErrTooMany is a twenty-first row of one protocol.
|
||||
var ErrTooMany = errors.New("there are already twenty of these")
|
||||
|
||||
// InvalidError is a setting the operator has to change, in words for the
|
||||
// InvalidError is a setting an admin has to change, in words for the
|
||||
// settings card.
|
||||
type InvalidError struct {
|
||||
Field string
|
||||
|
||||
Reference in New Issue
Block a user