Skip to content

Commit 3c96b5c

Browse files
committed
Handle nzb files containing zero segments.
1 parent 8b59c9b commit 3c96b5c

File tree

5 files changed

+7
-6
lines changed

5 files changed

+7
-6
lines changed

backend/Clients/CachingNntpClient.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public override async Task<YencHeader> GetSegmentYencHeaderAsync(string segmentI
2121

2222
public override async Task<long> GetFileSizeAsync(NzbFile file, CancellationToken cancellationToken)
2323
{
24+
if (file.Segments.Count == 0) return 0;
2425
var header = await GetSegmentYencHeaderAsync(file.Segments[0].MessageId, cancellationToken);
2526
return header.FileSize;
2627
}

backend/Clients/ThreadSafeNntpClient.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public async Task<YencHeader> GetSegmentYencHeaderAsync(string segmentId, Cancel
7676

7777
public async Task<long> GetFileSizeAsync(NzbFile file, CancellationToken cancellationToken)
7878
{
79+
if (file.Segments.Count == 0) return 0;
7980
var header = await GetSegmentYencHeaderAsync(file.Segments[0].MessageId.Value, cancellationToken);
8081
return header.FileSize;
8182
}

backend/Extensions/NzbFileExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public static async Task<string> GetHeaderFileName
4040
CancellationToken ct = default
4141
)
4242
{
43+
if (file.Segments.Count == 0) return "";
4344
var firstSegment = file.Segments[0].MessageId.Value;
4445
var header = await client.GetSegmentYencHeaderAsync(firstSegment, default);
4546
return header.FileName;

backend/Queue/FileProcessors/FileProcessor.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,11 @@ public static bool CanProcess(string filename)
2323
{
2424
try
2525
{
26-
var firstSegment = nzbFile.Segments[0].MessageId.Value;
27-
var header = await usenet.GetSegmentYencHeaderAsync(firstSegment, ct);
28-
2926
return new Result()
3027
{
3128
NzbFile = nzbFile,
3229
FileName = filename,
33-
FileSize = header.FileSize,
30+
FileSize = await usenet.GetFileSizeAsync(nzbFile, ct),
3431
};
3532
}
3633

backend/Queue/QueueItemProcessor.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,16 @@ private async Task ProcessQueueItemAsync(DateTime startTime)
8585
var documentBytes = Encoding.UTF8.GetBytes(queueItem.NzbContents);
8686
using var stream = new MemoryStream(documentBytes);
8787
var nzb = await NzbDocument.LoadAsync(stream);
88+
var nzbFiles = nzb.Files.Where(x => x.Segments.Count > 0).ToList();
8889

8990
// parse filenames for each nzb file
90-
var filenamesTaskDictionary = nzb.Files.ToDictionary(x => x, x => x.GetFileName(usenetClient));
91+
var filenamesTaskDictionary = nzbFiles.ToDictionary(x => x, x => x.GetFileName(usenetClient));
9192
var filenamesDictionary = new Dictionary<NzbFile, string>();
9293
foreach (var filenameTask in filenamesTaskDictionary)
9394
filenamesDictionary[filenameTask.Key] = await filenameTask.Value;
9495

9596
// start file processing tasks
96-
var fileProcessingTasks = nzb.Files
97+
var fileProcessingTasks = nzbFiles
9798
.DistinctBy(x => filenamesDictionary[x])
9899
.Select(x => GetFileProcessor(x, filenamesDictionary[x]))
99100
.Where(x => x is not null)

0 commit comments

Comments
 (0)