Fix directory mapping

This commit is contained in:
Ben Sarmiento
2023-10-25 17:59:32 +02:00
parent 800401729a
commit 9cffb9fc86
6 changed files with 112 additions and 42 deletions

View File

@@ -2,6 +2,7 @@ package config
import (
"regexp"
"sort"
"strings"
"gopkg.in/yaml.v3"
@@ -56,25 +57,38 @@ func (z *ZurgConfigV1) GetDirectories() []string {
func (z *ZurgConfigV1) GetGroupMap() map[string][]string {
var groupMap = make(map[string][]string)
var groupOrderMap = make(map[string]int) // To store GroupOrder for each group
// Populate the groupMap and groupOrderMap
for directory, val := range z.Directories {
groupMap[val.Group] = append(groupMap[val.Group], directory)
groupOrderMap[val.Group] = val.GroupOrder
}
// Sort the slice based on GroupOrder
for group, dirs := range groupMap {
sort.Slice(dirs, func(i, j int) bool {
return groupOrderMap[dirs[i]] < groupOrderMap[dirs[j]]
})
groupMap[group] = dirs
}
return groupMap
}
func (z *ZurgConfigV1) MeetsConditions(directory, fileID, torrentName string) bool {
func (z *ZurgConfigV1) MeetsConditions(directory, torrentID, torrentName string, fileNames []string) bool {
if _, ok := z.Directories[directory]; !ok {
return false
}
for _, filter := range z.Directories[directory].Filters {
if z.matchFilter(fileID, torrentName, filter) {
if z.matchFilter(torrentID, torrentName, fileNames, filter) {
return true
}
}
return false
}
func (z *ZurgConfigV1) matchFilter(fileID, torrentName string, filter *FilterConditionsV1) bool {
func (z *ZurgConfigV1) matchFilter(fileID, torrentName string, fileNames []string, filter *FilterConditionsV1) bool {
if filter.ID != "" && fileID == filter.ID {
return true
}
@@ -99,7 +113,7 @@ func (z *ZurgConfigV1) matchFilter(fileID, torrentName string, filter *FilterCon
if len(filter.And) > 0 {
andResult := true
for _, andFilter := range filter.And {
andResult = andResult && z.matchFilter(fileID, torrentName, andFilter)
andResult = andResult && z.matchFilter(fileID, torrentName, fileNames, andFilter)
if !andResult {
return false
}
@@ -108,7 +122,29 @@ func (z *ZurgConfigV1) matchFilter(fileID, torrentName string, filter *FilterCon
}
if len(filter.Or) > 0 {
for _, orFilter := range filter.Or {
if z.matchFilter(fileID, torrentName, orFilter) {
if z.matchFilter(fileID, torrentName, fileNames, orFilter) {
return true
}
}
}
if filter.FileInsideRegexStr != "" {
for _, filename := range fileNames {
regex := compilePattern(filter.FileInsideRegexStr)
if regex.MatchString(filename) {
return true
}
}
}
if filter.FileInsideContains != "" {
for _, filename := range fileNames {
if strings.Contains(strings.ToLower(filename), strings.ToLower(filter.FileInsideContains)) {
return true
}
}
}
if filter.FileInsideContainsStrict != "" {
for _, filename := range fileNames {
if strings.Contains(filename, filter.FileInsideContainsStrict) {
return true
}
}