feat(filters): add priority (#166)

This commit is contained in:
Ludvig Lundgren 2022-03-05 22:44:29 +01:00 committed by GitHub
parent 1374dd150c
commit 2dc02a4c02
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 20 additions and 5 deletions

View file

@ -58,7 +58,7 @@ func (r *FilterRepo) FindByID(ctx context.Context, filterID int) (*domain.Filter
//r.db.lock.RLock() //r.db.lock.RLock()
//defer r.db.lock.RUnlock() //defer r.db.lock.RUnlock()
row := r.db.handler.QueryRowContext(ctx, "SELECT id, enabled, name, min_size, max_size, delay, match_releases, except_releases, use_regex, match_release_groups, except_release_groups, scene, freeleech, freeleech_percent, shows, seasons, episodes, resolutions, codecs, sources, containers, match_hdr, except_hdr, years, artists, albums, release_types_match, formats, quality, media, log_score, has_log, has_cue, perfect_flac, match_categories, except_categories, match_uploaders, except_uploaders, tags, except_tags, created_at, updated_at FROM filter WHERE id = ?", filterID) row := r.db.handler.QueryRowContext(ctx, "SELECT id, enabled, name, min_size, max_size, delay, priority, match_releases, except_releases, use_regex, match_release_groups, except_release_groups, scene, freeleech, freeleech_percent, shows, seasons, episodes, resolutions, codecs, sources, containers, match_hdr, except_hdr, years, artists, albums, release_types_match, formats, quality, media, log_score, has_log, has_cue, perfect_flac, match_categories, except_categories, match_uploaders, except_uploaders, tags, except_tags, created_at, updated_at FROM filter WHERE id = ?", filterID)
if err := row.Err(); err != nil { if err := row.Err(); err != nil {
return nil, err return nil, err
} }
@ -68,7 +68,7 @@ func (r *FilterRepo) FindByID(ctx context.Context, filterID int) (*domain.Filter
var useRegex, scene, freeleech, hasLog, hasCue, perfectFlac sql.NullBool var useRegex, scene, freeleech, hasLog, hasCue, perfectFlac sql.NullBool
var delay, logScore sql.NullInt32 var delay, logScore sql.NullInt32
if err := row.Scan(&f.ID, &f.Enabled, &f.Name, &minSize, &maxSize, &delay, &matchReleases, &exceptReleases, &useRegex, &matchReleaseGroups, &exceptReleaseGroups, &scene, &freeleech, &freeleechPercent, &shows, &seasons, &episodes, pq.Array(&f.Resolutions), pq.Array(&f.Codecs), pq.Array(&f.Sources), pq.Array(&f.Containers), pq.Array(&f.MatchHDR), pq.Array(&f.ExceptHDR), &years, &artists, &albums, pq.Array(&f.MatchReleaseTypes), pq.Array(&f.Formats), pq.Array(&f.Quality), pq.Array(&f.Media), &logScore, &hasLog, &hasCue, &perfectFlac, &matchCategories, &exceptCategories, &matchUploaders, &exceptUploaders, &tags, &exceptTags, &f.CreatedAt, &f.UpdatedAt); err != nil { if err := row.Scan(&f.ID, &f.Enabled, &f.Name, &minSize, &maxSize, &delay, &f.Priority, &matchReleases, &exceptReleases, &useRegex, &matchReleaseGroups, &exceptReleaseGroups, &scene, &freeleech, &freeleechPercent, &shows, &seasons, &episodes, pq.Array(&f.Resolutions), pq.Array(&f.Codecs), pq.Array(&f.Sources), pq.Array(&f.Containers), pq.Array(&f.MatchHDR), pq.Array(&f.ExceptHDR), &years, &artists, &albums, pq.Array(&f.MatchReleaseTypes), pq.Array(&f.Formats), pq.Array(&f.Quality), pq.Array(&f.Media), &logScore, &hasLog, &hasCue, &perfectFlac, &matchCategories, &exceptCategories, &matchUploaders, &exceptUploaders, &tags, &exceptTags, &f.CreatedAt, &f.UpdatedAt); err != nil {
log.Error().Stack().Err(err).Msgf("filter: %v : error scanning data to struct", filterID) log.Error().Stack().Err(err).Msgf("filter: %v : error scanning data to struct", filterID)
return nil, err return nil, err
} }
@ -117,6 +117,7 @@ func (r *FilterRepo) FindByIndexerIdentifier(indexer string) ([]domain.Filter, e
f.min_size, f.min_size,
f.max_size, f.max_size,
f.delay, f.delay,
f.priority,
f.match_releases, f.match_releases,
f.except_releases, f.except_releases,
f.use_regex, f.use_regex,
@ -157,7 +158,8 @@ func (r *FilterRepo) FindByIndexerIdentifier(indexer string) ([]domain.Filter, e
JOIN filter_indexer fi on f.id = fi.filter_id JOIN filter_indexer fi on f.id = fi.filter_id
JOIN indexer i on i.id = fi.indexer_id JOIN indexer i on i.id = fi.indexer_id
WHERE i.identifier = ? WHERE i.identifier = ?
AND f.enabled = true`, indexer) AND f.enabled = true
ORDER BY f.priority DESC`, indexer)
if err != nil { if err != nil {
log.Error().Stack().Err(err).Msg("error querying filter row") log.Error().Stack().Err(err).Msg("error querying filter row")
return nil, err return nil, err
@ -173,7 +175,7 @@ func (r *FilterRepo) FindByIndexerIdentifier(indexer string) ([]domain.Filter, e
var useRegex, scene, freeleech, hasLog, hasCue, perfectFlac sql.NullBool var useRegex, scene, freeleech, hasLog, hasCue, perfectFlac sql.NullBool
var delay, logScore sql.NullInt32 var delay, logScore sql.NullInt32
if err := rows.Scan(&f.ID, &f.Enabled, &f.Name, &minSize, &maxSize, &delay, &matchReleases, &exceptReleases, &useRegex, &matchReleaseGroups, &exceptReleaseGroups, &scene, &freeleech, &freeleechPercent, &shows, &seasons, &episodes, pq.Array(&f.Resolutions), pq.Array(&f.Codecs), pq.Array(&f.Sources), pq.Array(&f.Containers), pq.Array(&f.MatchHDR), pq.Array(&f.ExceptHDR), &years, &artists, &albums, pq.Array(&f.MatchReleaseTypes), pq.Array(&f.Formats), pq.Array(&f.Quality), pq.Array(&f.Media), &logScore, &hasLog, &hasCue, &perfectFlac, &matchCategories, &exceptCategories, &matchUploaders, &exceptUploaders, &tags, &exceptTags, &f.CreatedAt, &f.UpdatedAt); err != nil { if err := rows.Scan(&f.ID, &f.Enabled, &f.Name, &minSize, &maxSize, &delay, &f.Priority, &matchReleases, &exceptReleases, &useRegex, &matchReleaseGroups, &exceptReleaseGroups, &scene, &freeleech, &freeleechPercent, &shows, &seasons, &episodes, pq.Array(&f.Resolutions), pq.Array(&f.Codecs), pq.Array(&f.Sources), pq.Array(&f.Containers), pq.Array(&f.MatchHDR), pq.Array(&f.ExceptHDR), &years, &artists, &albums, pq.Array(&f.MatchReleaseTypes), pq.Array(&f.Formats), pq.Array(&f.Quality), pq.Array(&f.Media), &logScore, &hasLog, &hasCue, &perfectFlac, &matchCategories, &exceptCategories, &matchUploaders, &exceptUploaders, &tags, &exceptTags, &f.CreatedAt, &f.UpdatedAt); err != nil {
log.Error().Stack().Err(err).Msg("error scanning data to struct") log.Error().Stack().Err(err).Msg("error scanning data to struct")
return nil, err return nil, err
} }
@ -231,6 +233,7 @@ func (r *FilterRepo) Store(filter domain.Filter) (*domain.Filter, error) {
min_size, min_size,
max_size, max_size,
delay, delay,
priority,
match_releases, match_releases,
except_releases, except_releases,
use_regex, use_regex,
@ -266,12 +269,13 @@ func (r *FilterRepo) Store(filter domain.Filter) (*domain.Filter, error) {
has_cue, has_cue,
perfect_flac perfect_flac
) )
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39) ON CONFLICT DO NOTHING`, VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40) ON CONFLICT DO NOTHING`,
filter.Name, filter.Name,
filter.Enabled, filter.Enabled,
filter.MinSize, filter.MinSize,
filter.MaxSize, filter.MaxSize,
filter.Delay, filter.Delay,
filter.Priority,
filter.MatchReleases, filter.MatchReleases,
filter.ExceptReleases, filter.ExceptReleases,
filter.UseRegex, filter.UseRegex,
@ -333,6 +337,7 @@ func (r *FilterRepo) Update(ctx context.Context, filter domain.Filter) (*domain.
min_size = ?, min_size = ?,
max_size = ?, max_size = ?,
delay = ?, delay = ?,
priority = ?,
match_releases = ?, match_releases = ?,
except_releases = ?, except_releases = ?,
use_regex = ?, use_regex = ?,
@ -374,6 +379,7 @@ func (r *FilterRepo) Update(ctx context.Context, filter domain.Filter) (*domain.
filter.MinSize, filter.MinSize,
filter.MaxSize, filter.MaxSize,
filter.Delay, filter.Delay,
filter.Priority,
filter.MatchReleases, filter.MatchReleases,
filter.ExceptReleases, filter.ExceptReleases,
filter.UseRegex, filter.UseRegex,

View file

@ -68,6 +68,7 @@ CREATE TABLE filter
min_size TEXT, min_size TEXT,
max_size TEXT, max_size TEXT,
delay INTEGER, delay INTEGER,
priority INTEGER DEFAULT 0 NOT NULL,
match_releases TEXT, match_releases TEXT,
except_releases TEXT, except_releases TEXT,
use_regex BOOLEAN, use_regex BOOLEAN,
@ -340,6 +341,10 @@ var migrations = []string{
ALTER TABLE "filter" ALTER TABLE "filter"
ADD COLUMN media TEXT [] DEFAULT '{}'; ADD COLUMN media TEXT [] DEFAULT '{}';
`, `,
`
ALTER TABLE "filter"
ADD COLUMN priority INTEGER DEFAULT 0 NOT NULL;
`,
} }
func (db *SqliteDB) migrate() error { func (db *SqliteDB) migrate() error {

View file

@ -32,6 +32,7 @@ type Filter struct {
MinSize string `json:"min_size"` MinSize string `json:"min_size"`
MaxSize string `json:"max_size"` MaxSize string `json:"max_size"`
Delay int `json:"delay"` Delay int `json:"delay"`
Priority int32 `json:"priority"`
MatchReleases string `json:"match_releases"` MatchReleases string `json:"match_releases"`
ExceptReleases string `json:"except_releases"` ExceptReleases string `json:"except_releases"`
UseRegex bool `json:"use_regex"` UseRegex bool `json:"use_regex"`

View file

@ -245,6 +245,7 @@ export default function FilterDetails() {
min_size: filter.min_size, min_size: filter.min_size,
max_size: filter.max_size, max_size: filter.max_size,
delay: filter.delay, delay: filter.delay,
priority: filter.priority,
shows: filter.shows, shows: filter.shows,
years: filter.years, years: filter.years,
resolutions: filter.resolutions || [], resolutions: filter.resolutions || [],
@ -359,6 +360,7 @@ function General() {
<TextField name="min_size" label="Min size" columns={6} placeholder="" /> <TextField name="min_size" label="Min size" columns={6} placeholder="" />
<TextField name="max_size" label="Max size" columns={6} placeholder="" /> <TextField name="max_size" label="Max size" columns={6} placeholder="" />
<NumberField name="delay" label="Delay" placeholder="" /> <NumberField name="delay" label="Delay" placeholder="" />
<NumberField name="priority" label="Priority" placeholder="" />
</div> </div>
</div> </div>

View file

@ -7,6 +7,7 @@ interface Filter {
min_size: string; min_size: string;
max_size: string; max_size: string;
delay: number; delay: number;
priority: number;
match_releases: string; match_releases: string;
except_releases: string; except_releases: string;
use_regex: boolean; use_regex: boolean;