fixed faulty regex detection and concurrent data accessing (#16)
This commit is contained in:
@@ -185,7 +185,7 @@ services:
|
||||
example* // file name starts with "example"
|
||||
*example* // file name has "example" in the name
|
||||
example // file name is exactly the word "example"
|
||||
<ANY_REGEX> // regex
|
||||
regex:<ANY_REGEX> // regex that needs to be marked at the start of the line with "regex:"
|
||||
```
|
||||
5. Multiple Sonarr/Radarr instances can be specified using this format, where `<NUMBER>` starts from 0:
|
||||
```
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Diagnostics;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Diagnostics;
|
||||
using System.Text.RegularExpressions;
|
||||
using Common.Configuration.ContentBlocker;
|
||||
using Domain.Enums;
|
||||
@@ -15,9 +16,9 @@ public sealed class BlocklistProvider
|
||||
|
||||
public BlocklistType BlocklistType { get; }
|
||||
|
||||
public List<string> Patterns { get; } = [];
|
||||
public ConcurrentBag<string> Patterns { get; } = [];
|
||||
|
||||
public List<Regex> Regexes { get; } = [];
|
||||
public ConcurrentBag<Regex> Regexes { get; } = [];
|
||||
|
||||
public BlocklistProvider(
|
||||
ILogger<BlocklistProvider> logger,
|
||||
@@ -75,9 +76,18 @@ public sealed class BlocklistProvider
|
||||
|
||||
long startTime = Stopwatch.GetTimestamp();
|
||||
ParallelOptions options = new() { MaxDegreeOfParallelism = 5 };
|
||||
const string regexId = "regex:";
|
||||
|
||||
Parallel.ForEach(patterns, options, pattern =>
|
||||
{
|
||||
if (!pattern.StartsWith(regexId))
|
||||
{
|
||||
Patterns.Add(pattern);
|
||||
return;
|
||||
}
|
||||
|
||||
pattern = pattern[regexId.Length..];
|
||||
|
||||
try
|
||||
{
|
||||
Regex regex = new(pattern, RegexOptions.Compiled);
|
||||
@@ -85,7 +95,7 @@ public sealed class BlocklistProvider
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
Patterns.Add(pattern);
|
||||
_logger.LogWarning("invalid regex | {pattern}", pattern);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user