Skip to content

Commit 718d813

Browse files
Merge pull request #23 from orbitalteapot/develop
release 2.0.2
2 parents af99473 + 909c2b7 commit 718d813

9 files changed

+229
-111
lines changed

AudioFileSorter/AudioFileSorter.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="CsvHelper" Version="30.1.0" />
12+
<PackageReference Include="CsvHelper" Version="33.0.1" />
1313
</ItemGroup>
1414

1515
</Project>

AudioFileSorter/CsvParser.cs

+15-3
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,31 @@
33
using AudioFileSorter.Model;
44
using CsvHelper;
55
using CsvHelper.Configuration;
6+
using System.Linq;
7+
68

79
namespace AudioFileSorter;
810

911
public class CsvParser
1012
{
11-
public async Task<List<OpenAudible>> ParseDataCsv(string fullPath, CancellationToken token)
13+
public async Task<List<OpenAudible>> ParseDataCsv(string? fullPath, CancellationToken token)
1214
{
13-
using var reader = new StreamReader(fullPath);
15+
using var reader = new StreamReader(fullPath ?? throw new ArgumentNullException(nameof(fullPath)));
1416
using var csv = new CsvReader(reader, CultureInfo.InvariantCulture);
1517
try
1618
{
19+
var result = new List<OpenAudible>();
1720
csv.Context.RegisterClassMap<AudiobookMap>();
18-
return await csv.GetRecordsAsync<OpenAudible>(token).ToListAsync(token);
21+
await foreach (var openAudible in csv.GetRecordsAsync<OpenAudible>(token))
22+
{
23+
result.Add(openAudible);
24+
}
25+
return result;
26+
}
27+
catch (CsvHelperException ex)
28+
{
29+
Console.WriteLine($"CSV Parsing Error: {ex.Message}");
30+
throw;
1931
}
2032
finally
2133
{

AudioFileSorter/Model/AudiobookMap.cs

+16-10
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
using CsvHelper.Configuration;
2+
using CsvHelper.TypeConversion;
23

34
namespace AudioFileSorter.Model;
45

56
public sealed class AudiobookMap : ClassMap<OpenAudible>
67
{
78
public AudiobookMap()
89
{
9-
// Basic mappings
10-
Map(m => m.Key).Name("Key");
10+
// Mandatory Fields
11+
Map(m => m.Key).Name("Key").Optional();
1112
Map(m => m.Title).Name("Title");
1213
Map(m => m.Author).Name("Author");
14+
Map(m => m.Filename).Name("File name");
15+
Map(m => m.FilePaths).Name("File Paths");
16+
Map(m => m.AudibleAAX).Name("Audible (AAX)").Optional();
17+
18+
// Optional Fields
1319
Map(m => m.NarratedBy).Name("Narrated By").Optional();
14-
Map(m => m.PurchaseDate).Name("Purchase Date").TypeConverterOption.Format("yyyy-MM-dd");
20+
Map(m => m.PurchaseDate).Name("Purchase Date").TypeConverterOption.Format("yyyy-MM-dd", "MM/dd/yyyy", "M/d/yyyy");
1521
Map(m => m.Duration).Name("Duration").Optional();
16-
Map(m => m.ReleaseDate).Name("Release Date").TypeConverterOption.Format("yyyy-MM-dd");
22+
Map(m => m.ReleaseDate).Name("Release Date").TypeConverterOption.Format("yyyy-MM-dd", "MM/dd/yyyy", "M/d/yyyy");
1723
Map(m => m.AveRating).Name("Ave. Rating").Optional();
1824
Map(m => m.Genre).Name("Genre").Optional();
1925
Map(m => m.SeriesName).Name("Series Name").Optional();
@@ -23,25 +29,25 @@ public AudiobookMap()
2329
Map(m => m.BookURL).Name("Book URL").Optional();
2430
Map(m => m.Summary).Name("Summary").Optional();
2531
Map(m => m.Description).Name("Description").Optional();
26-
Map(m => m.RatingCount).Name("Rating Count").Optional();
2732
Map(m => m.Publisher).Name("Publisher").Optional();
2833
Map(m => m.ShortTitle).Name("Short Title").Optional();
2934
Map(m => m.Copyright).Name("Copyright").Optional();
3035
Map(m => m.AuthorURL).Name("Author URL").Optional();
31-
Map(m => m.Filename).Name("File name");
3236
Map(m => m.SeriesURL).Name("Series URL").Optional();
3337
Map(m => m.Abridged).Name("Abridged").Optional();
3438
Map(m => m.Language).Name("Language").Optional();
3539
Map(m => m.PDFURL).Name("PDF URL").Optional();
3640
Map(m => m.ImageURL).Name("Image URL").Optional();
3741
Map(m => m.Region).Name("Region").Optional();
38-
Map(m => m.FilePaths).Name("File Paths");
39-
Map(m => m.AYCE).Name("AYCE").Optional();
40-
Map(m => m.ReadStatus).Name("Read Status");
42+
Map(m => m.ReadStatus).Name("Read Status").Optional();
4143
Map(m => m.UserID).Name("User ID").Optional();
42-
Map(m => m.AudibleAAX).Name("Audible (AAX)");
4344
Map(m => m.Image).Name("Image").Optional();
4445
Map(m => m.M4B).Name("M4B").Optional();
4546
Map(m => m.MP3).Name("MP3").Optional();
47+
Map(m => m.AYCE).Name("AYCE").TypeConverter<BooleanConverter>().Optional();
48+
Map(m => m.RatingCount).Name("Rating Count").TypeConverter<Int32Converter>().Optional();
49+
50+
// **Newly Added Field**
51+
Map(m => m.PDF).Name("PDF").Optional();
4652
}
4753
}

AudioFileSorter/Model/OpenAudible.cs

+8-7
Original file line numberDiff line numberDiff line change
@@ -3,39 +3,40 @@
33
public class OpenAudible
44
{
55
public string? Key { get; set; }
6-
public string Title { get; set; }
7-
public string Author { get; set; }
6+
public string? Title { get; set; }
7+
public string? Author { get; set; }
88
public string? NarratedBy { get; set; }
99
public DateTime PurchaseDate { get; set; }
1010
public string? Duration { get; set; }
1111
public DateTime ReleaseDate { get; set; }
1212
public double AveRating { get; set; }
1313
public string? Genre { get; set; }
14-
public string SeriesName { get; set; }
15-
public string SeriesSequence { get; set; }
14+
public string? SeriesName { get; set; }
15+
public string? SeriesSequence { get; set; }
1616
public string? ProductID { get; set; }
1717
public string? ASIN { get; set; }
1818
public string? BookURL { get; set; }
1919
public string? Summary { get; set; }
2020
public string? Description { get; set; }
2121
public int RatingCount { get; set; }
2222
public string? Publisher { get; set; }
23-
public string ShortTitle { get; set; }
23+
public string? ShortTitle { get; set; }
2424
public string? Copyright { get; set; }
2525
public string? AuthorURL { get; set; }
26-
public string Filename { get; set; }
26+
public string? Filename { get; set; }
2727
public string? SeriesURL { get; set; }
2828
public string? Abridged { get; set; }
2929
public string? Language { get; set; }
3030
public string? PDFURL { get; set; }
3131
public string? ImageURL { get; set; }
3232
public string? Region { get; set; }
33-
public string FilePaths { get; set; }
33+
public string? FilePaths { get; set; }
3434
public bool AYCE { get; set; }
3535
public string? ReadStatus { get; set; }
3636
public string? UserID { get; set; }
3737
public string? AudibleAAX { get; set; }
3838
public string? Image { get; set; }
3939
public string? M4B { get; set; }
4040
public string? MP3 { get; set; }
41+
public string? PDF { get; set; }
4142
}

0 commit comments

Comments
 (0)