mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 08:49:13 +00:00
feat(filters): add priority (#166)
This commit is contained in:
parent
1374dd150c
commit
2dc02a4c02
5 changed files with 20 additions and 5 deletions
|
@ -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,
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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"`
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
1
web/src/types/Filter.d.ts
vendored
1
web/src/types/Filter.d.ts
vendored
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue