Skip to content

Commit b86cdb2

Browse files
committed
Add new UTF8 fields to dictionary in ToBDictionary
1 parent b058b78 commit b86cdb2

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed

BencodeNET.Tests/Torrents/TorrentTests.cs

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -418,15 +418,16 @@ public void ToBDictionary_CreationDate_DoesNotAddNull()
418418

419419
[Theory]
420420
[AutoMockedData]
421-
public void ToBDictionary_Info_SingleFile_AddsNameAndLength(long fileSize, string fileName)
421+
public void ToBDictionary_Info_SingleFile_AddsNameAndLength(long fileSize, string fileName, string fileNameUtf8)
422422
{
423423
// Arrange
424424
var torrent = new Torrent
425425
{
426426
File = new SingleFileInfo
427427
{
428428
FileSize = fileSize,
429-
FileName = fileName
429+
FileName = fileName,
430+
FileNameUtf8 = fileNameUtf8
430431
}
431432
};
432433

@@ -436,11 +437,12 @@ public void ToBDictionary_Info_SingleFile_AddsNameAndLength(long fileSize, strin
436437
// Assert
437438
info.Should().Contain(TorrentInfoFields.Length, (BNumber)fileSize);
438439
info.Should().Contain(TorrentInfoFields.Name, (BString)fileName);
440+
info.Should().Contain(TorrentInfoFields.NameUtf8, (BString)fileNameUtf8);
439441
}
440442

441443
[Theory]
442444
[AutoMockedData]
443-
public void ToBDictionary_Info_MultiFile_AddsFiles(string directoryName, long fileSize, IList<string> path)
445+
public void ToBDictionary_Info_MultiFile_AddsFiles(string directoryName, long fileSize, IList<string> path, IList<string> pathUtf8)
444446
{
445447
// Arrange
446448
var torrent = new Torrent
@@ -450,7 +452,8 @@ public void ToBDictionary_Info_MultiFile_AddsFiles(string directoryName, long fi
450452
new MultiFileInfo
451453
{
452454
FileSize = fileSize,
453-
Path = path
455+
Path = path,
456+
PathUtf8 = pathUtf8
454457
}
455458
}
456459
};
@@ -463,10 +466,27 @@ public void ToBDictionary_Info_MultiFile_AddsFiles(string directoryName, long fi
463466
info.Should().Contain(TorrentInfoFields.Name, (BString) directoryName);
464467
info.Should().ContainKey(TorrentInfoFields.Files);
465468
info[TorrentInfoFields.Files].Should().BeOfType<BList<BDictionary>>();
466-
files[0].Should().BeOfType<BDictionary>();
467-
files[0].Should().Contain(TorrentFilesFields.Length, (BNumber) fileSize);
468-
files[0].Should().ContainKey(TorrentFilesFields.Path);
469-
files[0].Get<BList>(TorrentFilesFields.Path).Should().HaveCount(path.Count);
469+
470+
var file = files[0];
471+
file.Should().BeOfType<BDictionary>();
472+
file.Should().Contain(TorrentFilesFields.Length, (BNumber) fileSize);
473+
file.Should().ContainKey(TorrentFilesFields.Path);
474+
file.Should().ContainKey(TorrentFilesFields.PathUtf8);
475+
476+
var list = file.Get<BList>(TorrentFilesFields.Path);
477+
var listUtf8 = file.Get<BList>(TorrentFilesFields.PathUtf8);
478+
list.Should().HaveCount(path.Count);
479+
listUtf8.Should().HaveCount(pathUtf8.Count);
480+
481+
for (var i = 0; i < list.Count; i++)
482+
{
483+
list[i].ToString().Should().Be(path[i]);
484+
}
485+
486+
for (var i = 0; i < listUtf8.Count; i++)
487+
{
488+
listUtf8[i].ToString().Should().Be(pathUtf8[i]);
489+
}
470490
}
471491

472492
[Theory]

BencodeNET/Torrents/Torrent.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,10 @@ protected virtual BDictionary CreateInfoDictionary(Encoding encoding)
295295
if (FileMode == TorrentFileMode.Single)
296296
{
297297
info[TorrentInfoFields.Name] = new BString(File.FileName, encoding);
298+
299+
if (File.FileNameUtf8 != null)
300+
info[TorrentInfoFields.NameUtf8] = new BString(File.FileNameUtf8, Encoding.UTF8);
301+
298302
info[TorrentInfoFields.Length] = (BNumber)File.FileSize;
299303

300304
if (File.Md5Sum != null)
@@ -305,6 +309,9 @@ protected virtual BDictionary CreateInfoDictionary(Encoding encoding)
305309
{
306310
info[TorrentInfoFields.Name] = new BString(Files.DirectoryName, encoding);
307311

312+
if (Files.DirectoryNameUtf8 != null)
313+
info[TorrentInfoFields.NameUtf8] = new BString(Files.DirectoryNameUtf8, Encoding.UTF8);
314+
308315
var files = new BList<BDictionary>();
309316
foreach (var file in Files)
310317
{
@@ -314,6 +321,9 @@ protected virtual BDictionary CreateInfoDictionary(Encoding encoding)
314321
[TorrentFilesFields.Path] = new BList(file.Path)
315322
};
316323

324+
if (file.PathUtf8 != null && file.PathUtf8.Any())
325+
fileDictionary[TorrentFilesFields.PathUtf8] = new BList(file.PathUtf8, Encoding.UTF8);
326+
317327
if (file.Md5Sum != null)
318328
fileDictionary[TorrentFilesFields.Md5Sum] = new BString(file.Md5Sum, encoding);
319329

0 commit comments

Comments
 (0)