diff --git a/src/ZonyLrcTools.Cli/Commands/SubCommand/DownloadCommand.cs b/src/ZonyLrcTools.Cli/Commands/SubCommand/DownloadCommand.cs index 083aecb..188558b 100644 --- a/src/ZonyLrcTools.Cli/Commands/SubCommand/DownloadCommand.cs +++ b/src/ZonyLrcTools.Cli/Commands/SubCommand/DownloadCommand.cs @@ -65,7 +65,7 @@ namespace ZonyLrcTools.Cli.Commands.SubCommand [Option("-f|--file", Description = "指定 CSV 文件的路径。")] public string CsvFilePath { get; set; } - [Option("-s|--song-list-id", Description = "指定网易云音乐歌单的 ID。")] + [Option("-s|--song-list-id", Description = "指定网易云音乐歌单的 ID,如果有多个歌单,请使用 ';' 分割 ID。")] public string SongListId { get; set; } #endregion diff --git a/src/ZonyLrcTools.Common/Configuration/BlockWordOptions.cs b/src/ZonyLrcTools.Common/Configuration/BlockWordOptions.cs index 17d4d69..b1d3d70 100644 --- a/src/ZonyLrcTools.Common/Configuration/BlockWordOptions.cs +++ b/src/ZonyLrcTools.Common/Configuration/BlockWordOptions.cs @@ -13,6 +13,6 @@ /// /// 屏蔽词字典文件,用于替换歌曲名或者歌手名称。 /// - public string FilePath { get; set; } + public string FilePath { get; set; } = null!; } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Configuration/GlobalOptions.cs b/src/ZonyLrcTools.Common/Configuration/GlobalOptions.cs index 5ac78d0..0224cac 100644 --- a/src/ZonyLrcTools.Common/Configuration/GlobalOptions.cs +++ b/src/ZonyLrcTools.Common/Configuration/GlobalOptions.cs @@ -5,16 +5,16 @@ namespace ZonyLrcTools.Common.Configuration /// /// 支持的音乐文件后缀集合。 /// - public List SupportFileExtensions { get; set; } + public List SupportFileExtensions { get; set; } = null!; /// /// 网络代理相关的配置信息。 /// - public NetworkOptions NetworkOptions { get; set; } + public NetworkOptions NetworkOptions { get; set; } = null!; /// /// 定义下载器的相关配置信息。 /// - public ProviderOptions Provider { get; set; } + public ProviderOptions Provider { get; set; } = null!; } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Configuration/LyricsOptions.cs b/src/ZonyLrcTools.Common/Configuration/LyricsOptions.cs index ed61c9a..925e9dc 100644 --- a/src/ZonyLrcTools.Common/Configuration/LyricsOptions.cs +++ b/src/ZonyLrcTools.Common/Configuration/LyricsOptions.cs @@ -2,12 +2,12 @@ namespace ZonyLrcTools.Common.Configuration; public class LyricsOptions { - public IEnumerable Plugin { get; set; } + public IEnumerable Plugin { get; set; } = null!; - public GlobalLyricsConfigOptions Config { get; set; } + public GlobalLyricsConfigOptions Config { get; set; } = null!; public LyricsProviderOptions GetLyricProviderOption(string name) { - return Plugin.FirstOrDefault(x => x.Name == name); + return Plugin.FirstOrDefault(x => x.Name == name)!; } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Configuration/LyricsProviderOptions.cs b/src/ZonyLrcTools.Common/Configuration/LyricsProviderOptions.cs index 8240d7f..0135212 100644 --- a/src/ZonyLrcTools.Common/Configuration/LyricsProviderOptions.cs +++ b/src/ZonyLrcTools.Common/Configuration/LyricsProviderOptions.cs @@ -5,7 +5,7 @@ /// /// 歌词下载器的唯一标识。 /// - public string Name { get; set; } + public string Name { get; set; } = null!; /// /// 歌词下载时的优先级,当值为 -1 时是禁用。 diff --git a/src/ZonyLrcTools.Common/Configuration/NetworkOptions.cs b/src/ZonyLrcTools.Common/Configuration/NetworkOptions.cs index 1777870..d3364d8 100644 --- a/src/ZonyLrcTools.Common/Configuration/NetworkOptions.cs +++ b/src/ZonyLrcTools.Common/Configuration/NetworkOptions.cs @@ -13,7 +13,7 @@ namespace ZonyLrcTools.Common.Configuration /// /// 代理服务器的 Ip。 /// - public string Ip { get; set; } + public string Ip { get; set; } = null!; /// /// 代理服务器的 端口。 diff --git a/src/ZonyLrcTools.Common/Configuration/ProviderOptions.cs b/src/ZonyLrcTools.Common/Configuration/ProviderOptions.cs index 22a4e71..55c0172 100644 --- a/src/ZonyLrcTools.Common/Configuration/ProviderOptions.cs +++ b/src/ZonyLrcTools.Common/Configuration/ProviderOptions.cs @@ -5,10 +5,10 @@ public class ProviderOptions /// /// 标签加载器相关的配置属性。 /// - public TagInfoOptions Tag { get; set; } + public TagInfoOptions Tag { get; set; } = null!; /// /// 歌词下载相关的配置信息。 /// - public LyricsOptions Lyric { get; set; } + public LyricsOptions Lyric { get; set; } = null!; } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Configuration/TagInfoOptions.cs b/src/ZonyLrcTools.Common/Configuration/TagInfoOptions.cs index 5d40ce1..e2600ae 100644 --- a/src/ZonyLrcTools.Common/Configuration/TagInfoOptions.cs +++ b/src/ZonyLrcTools.Common/Configuration/TagInfoOptions.cs @@ -2,10 +2,10 @@ public class TagInfoOptions { - public IEnumerable Plugin { get; set; } + public IEnumerable Plugin { get; set; } = null!; /// /// 屏蔽词功能相关配置。 /// - public BlockWordOptions BlockWord { get; set; } + public BlockWordOptions BlockWord { get; set; } = null!; } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Configuration/TagInfoProviderOptions.cs b/src/ZonyLrcTools.Common/Configuration/TagInfoProviderOptions.cs index f9c100d..8365883 100644 --- a/src/ZonyLrcTools.Common/Configuration/TagInfoProviderOptions.cs +++ b/src/ZonyLrcTools.Common/Configuration/TagInfoProviderOptions.cs @@ -2,10 +2,10 @@ namespace ZonyLrcTools.Common.Configuration { public class TagInfoProviderOptions { - public string Name { get; set; } + public string Name { get; set; } = null!; public int Priority { get; set; } - public Dictionary Extensions { get; set; } + public Dictionary Extensions { get; set; } = null!; } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Infrastructure/DependencyInject/ServiceCollectionExtensions.cs b/src/ZonyLrcTools.Common/Infrastructure/DependencyInject/ServiceCollectionExtensions.cs index 27f9054..4f119ed 100644 --- a/src/ZonyLrcTools.Common/Infrastructure/DependencyInject/ServiceCollectionExtensions.cs +++ b/src/ZonyLrcTools.Common/Infrastructure/DependencyInject/ServiceCollectionExtensions.cs @@ -15,7 +15,7 @@ namespace ZonyLrcTools.Common.Infrastructure.DependencyInject /// /// 配置工具会用到的服务。 /// - public static IServiceCollection ConfigureToolService(this IServiceCollection services) + public static IServiceCollection? ConfigureToolService(this IServiceCollection? services) { if (services == null) { diff --git a/src/ZonyLrcTools.Common/Infrastructure/Exceptions/ErrorCodeException.cs b/src/ZonyLrcTools.Common/Infrastructure/Exceptions/ErrorCodeException.cs index 4303429..f6997fa 100644 --- a/src/ZonyLrcTools.Common/Infrastructure/Exceptions/ErrorCodeException.cs +++ b/src/ZonyLrcTools.Common/Infrastructure/Exceptions/ErrorCodeException.cs @@ -7,7 +7,7 @@ namespace ZonyLrcTools.Common.Infrastructure.Exceptions { public int ErrorCode { get; } - public object AttachObject { get; } + public object? AttachObject { get; } /// /// 构建一个新的 对象。 @@ -15,7 +15,7 @@ namespace ZonyLrcTools.Common.Infrastructure.Exceptions /// 错误码,参考 类的定义。 /// 错误信息。 /// 附加的对象数据。 - public ErrorCodeException(int errorCode, string? message = null, object attachObj = null) : base(message) + public ErrorCodeException(int errorCode, string? message = null, object? attachObj = null) : base(message) { ErrorCode = errorCode; AttachObject = attachObj; diff --git a/src/ZonyLrcTools.Common/Infrastructure/Exceptions/ErrorCodeHelper.cs b/src/ZonyLrcTools.Common/Infrastructure/Exceptions/ErrorCodeHelper.cs index cf4ac69..c6e25ef 100644 --- a/src/ZonyLrcTools.Common/Infrastructure/Exceptions/ErrorCodeHelper.cs +++ b/src/ZonyLrcTools.Common/Infrastructure/Exceptions/ErrorCodeHelper.cs @@ -33,7 +33,7 @@ namespace ZonyLrcTools.Common.Infrastructure.Exceptions var errors = jsonObj.SelectTokens("$.Error.*"); var warnings = jsonObj.SelectTokens("$.Warning.*"); errors.Union(warnings).Select(m => m.Parent).OfType().ToList() - .ForEach(m => ErrorMessages.Add(int.Parse(m.Name), m.Value.Value())); + .ForEach(m => ErrorMessages.Add(int.Parse(m.Name), m.Value.Value() ?? string.Empty)); } public static string GetMessage(int errorCode) => ErrorMessages[errorCode]; diff --git a/src/ZonyLrcTools.Common/Infrastructure/Extensions/LoggerHelper.cs b/src/ZonyLrcTools.Common/Infrastructure/Extensions/LoggerHelper.cs index ca999bc..df18318 100644 --- a/src/ZonyLrcTools.Common/Infrastructure/Extensions/LoggerHelper.cs +++ b/src/ZonyLrcTools.Common/Infrastructure/Extensions/LoggerHelper.cs @@ -17,7 +17,7 @@ namespace ZonyLrcTools.Common.Infrastructure.Extensions /// 日志记录器实例。 /// 错误码,具体请参考 类的定义。 /// 异常实例,可为空。 - public static void LogWarningWithErrorCode(this IWarpLogger logger, int errorCode, Exception e = null) + public static void LogWarningWithErrorCode(this IWarpLogger logger, int errorCode, Exception? e = null) { logger.WarnAsync($"错误代码: {errorCode}\n堆栈异常: {e?.StackTrace}").GetAwaiter().GetResult(); } diff --git a/src/ZonyLrcTools.Common/Infrastructure/Network/DefaultWarpHttpClient.cs b/src/ZonyLrcTools.Common/Infrastructure/Network/DefaultWarpHttpClient.cs index 5f581c4..73ea369 100644 --- a/src/ZonyLrcTools.Common/Infrastructure/Network/DefaultWarpHttpClient.cs +++ b/src/ZonyLrcTools.Common/Infrastructure/Network/DefaultWarpHttpClient.cs @@ -19,9 +19,9 @@ namespace ZonyLrcTools.Common.Infrastructure.Network } public async ValueTask PostAsync(string url, - object parameters = null, + object? parameters = null, bool isQueryStringParam = false, - Action requestOption = null) + Action? requestOption = null) { using var responseMessage = await PostReturnHttpResponseAsync(url, parameters, isQueryStringParam, requestOption); var responseContentString = await responseMessage.Content.ReadAsStringAsync(); @@ -30,18 +30,18 @@ namespace ZonyLrcTools.Common.Infrastructure.Network } public async ValueTask PostAsync(string url, - object parameters = null, + object? parameters = null, bool isQueryStringParam = false, - Action requestOption = null) + Action? requestOption = null) { var responseString = await PostAsync(url, parameters, isQueryStringParam, requestOption); return ConvertHttpResponseToObject(parameters, responseString); } public async ValueTask PostReturnHttpResponseAsync(string url, - object parameters = null, + object? parameters = null, bool isQueryStringParam = false, - Action requestOption = null) + Action? requestOption = null) { var parametersStr = isQueryStringParam ? BuildQueryString(parameters) : BuildJsonBodyString(parameters); var requestMessage = new HttpRequestMessage(HttpMethod.Post, new Uri(url)); @@ -53,8 +53,8 @@ namespace ZonyLrcTools.Common.Infrastructure.Network } public async ValueTask GetAsync(string url, - object parameters = null, - Action requestOption = null) + object? parameters = null, + Action? requestOption = null) { var requestParamsStr = BuildQueryString(parameters); var requestMsg = new HttpRequestMessage(HttpMethod.Get, new Uri($"{url}?{requestParamsStr}")); @@ -67,8 +67,8 @@ namespace ZonyLrcTools.Common.Infrastructure.Network } public async ValueTask GetAsync(string url, - object parameters = null, - Action requestOption = null) + object? parameters = null, + Action? requestOption = null) { var responseString = await GetAsync(url, parameters, requestOption); return ConvertHttpResponseToObject(parameters, responseString); @@ -79,7 +79,7 @@ namespace ZonyLrcTools.Common.Infrastructure.Network return _httpClientFactory.CreateClient(HttpClientNameConstant); } - private string BuildQueryString(object parameters) + private string BuildQueryString(object? parameters) { if (parameters == null) { @@ -89,7 +89,7 @@ namespace ZonyLrcTools.Common.Infrastructure.Network var type = parameters.GetType(); if (type == typeof(string)) { - return parameters as string; + return parameters as string ?? string.Empty; } var properties = type.GetProperties(); @@ -106,7 +106,7 @@ namespace ZonyLrcTools.Common.Infrastructure.Network return paramBuilder.ToString().TrimEnd('&'); } - private string BuildJsonBodyString(object parameters) + private string BuildJsonBodyString(object? parameters) { if (parameters == null) return string.Empty; if (parameters is string result) return result; @@ -122,7 +122,7 @@ namespace ZonyLrcTools.Common.Infrastructure.Network /// 执行 Http 请求之后响应内容。 /// 如果响应正常,则返回具体的响应内容。 /// 如果 Http 响应不正常,则可能抛出本异常。 - private string ValidateHttpResponse(HttpResponseMessage responseMessage, object requestParameters, string responseString) + private string ValidateHttpResponse(HttpResponseMessage responseMessage, object? requestParameters, string responseString) { return responseMessage.StatusCode switch { @@ -139,7 +139,7 @@ namespace ZonyLrcTools.Common.Infrastructure.Network /// 执行 Http 请求之后响应内容。 /// 需要将响应结果反序列化的目标类型。 /// 如果反序列化失败,则可能抛出本异常。 - private TResponse ConvertHttpResponseToObject(object requestParameters, string responseString) + private TResponse ConvertHttpResponseToObject(object? requestParameters, string responseString) { var throwException = new ErrorCodeException(ErrorCodes.HttpResponseConvertJsonFailed, attachObj: new { requestParameters, responseString }); diff --git a/src/ZonyLrcTools.Common/Infrastructure/Network/IWarpHttpClient.cs b/src/ZonyLrcTools.Common/Infrastructure/Network/IWarpHttpClient.cs index 86ade4d..7d193cb 100644 --- a/src/ZonyLrcTools.Common/Infrastructure/Network/IWarpHttpClient.cs +++ b/src/ZonyLrcTools.Common/Infrastructure/Network/IWarpHttpClient.cs @@ -14,9 +14,9 @@ /// 请求时的配置动作。 /// 服务端的响应结果。 ValueTask PostAsync(string url, - object parameters = null, + object? parameters = null, bool isQueryStringParam = false, - Action requestOption = null); + Action? requestOption = null); /// /// 根据指定的配置执行 POST 请求,并将结果反序列化为 对象。 @@ -28,14 +28,14 @@ /// 需要将响应结果反序列化的目标类型。 /// 服务端的响应结果。 ValueTask PostAsync(string url, - object parameters = null, + object? parameters = null, bool isQueryStringParam = false, - Action requestOption = null); + Action? requestOption = null); ValueTask PostReturnHttpResponseAsync(string url, - object parameters = null, + object? parameters = null, bool isQueryStringParam = false, - Action requestOption = null); + Action? requestOption = null); /// /// 根据指定的配置执行 GET 请求,并以 作为返回值。 @@ -45,8 +45,8 @@ /// 请求时的配置动作。 /// 服务端的响应结果。 ValueTask GetAsync(string url, - object parameters = null, - Action requestOption = null); + object? parameters = null, + Action? requestOption = null); /// /// 根据指定的配置执行 GET 请求,并将结果反序列化为 对象。 @@ -58,7 +58,7 @@ /// 服务端的响应结果。 ValueTask GetAsync( string url, - object parameters = null, - Action requestOption = null); + object? parameters = null, + Action? requestOption = null); } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Lyrics/ILyricsItemCollectionFactory.cs b/src/ZonyLrcTools.Common/Lyrics/ILyricsItemCollectionFactory.cs index f5877c2..0abe5a7 100644 --- a/src/ZonyLrcTools.Common/Lyrics/ILyricsItemCollectionFactory.cs +++ b/src/ZonyLrcTools.Common/Lyrics/ILyricsItemCollectionFactory.cs @@ -18,6 +18,6 @@ namespace ZonyLrcTools.Common.Lyrics /// 原始歌词数据。 /// 翻译歌词数据。 /// 构建完成的 对象。 - LyricsItemCollection Build(string sourceLyric, string? translationLyric); + LyricsItemCollection Build(string? sourceLyric, string? translationLyric); } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Lyrics/ILyricsProvider.cs b/src/ZonyLrcTools.Common/Lyrics/ILyricsProvider.cs index 5594e49..b9d16b3 100644 --- a/src/ZonyLrcTools.Common/Lyrics/ILyricsProvider.cs +++ b/src/ZonyLrcTools.Common/Lyrics/ILyricsProvider.cs @@ -12,7 +12,7 @@ namespace ZonyLrcTools.Common.Lyrics /// 歌曲的作者。 /// 歌曲的时长。 /// 歌曲的歌词数据对象。 - ValueTask DownloadAsync(string? songName, string? artist, long? duration = null); + ValueTask DownloadAsync(string songName, string artist, long? duration = null); /// /// 下载器的名称。 diff --git a/src/ZonyLrcTools.Common/Lyrics/LyricsItem.cs b/src/ZonyLrcTools.Common/Lyrics/LyricsItem.cs index c47e006..2d50eac 100644 --- a/src/ZonyLrcTools.Common/Lyrics/LyricsItem.cs +++ b/src/ZonyLrcTools.Common/Lyrics/LyricsItem.cs @@ -15,7 +15,7 @@ namespace ZonyLrcTools.Common.Lyrics /// /// 歌词文本数据。 /// - public string LyricText { get; } + public string? LyricText { get; } /// /// 歌词所在的时间(分)。 @@ -55,21 +55,21 @@ namespace ZonyLrcTools.Common.Lyrics /// 歌词所在的时间(分)。 /// 歌词所在的时间(秒)。 /// 歌词文本数据。 - public LyricsItem(int minute, double second, string lyricText) + public LyricsItem(int minute, double second, string? lyricText) { Minute = minute; Second = second; LyricText = lyricText; } - public int CompareTo(LyricsItem other) + public int CompareTo(LyricsItem? other) { - if (SortScore > other.SortScore) + if (SortScore > other?.SortScore) { return 1; } - if (SortScore < other.SortScore) + if (SortScore < other?.SortScore) { return -1; } @@ -87,12 +87,12 @@ namespace ZonyLrcTools.Common.Lyrics return left.SortScore < right.SortScore; } - public static bool operator ==(LyricsItem left, LyricsItem right) + public static bool operator ==(LyricsItem? left, LyricsItem? right) { return (int?)left?.SortScore == (int?)right?.SortScore; } - public static bool operator !=(LyricsItem item1, LyricsItem item2) + public static bool operator !=(LyricsItem? item1, LyricsItem? item2) { return !(item1 == item2); } @@ -107,7 +107,7 @@ namespace ZonyLrcTools.Common.Lyrics return LyricText == other.LyricText && Minute == other.Minute && Second.Equals(other.Second); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; diff --git a/src/ZonyLrcTools.Common/Lyrics/LyricsItemCollection.cs b/src/ZonyLrcTools.Common/Lyrics/LyricsItemCollection.cs index 08ce8fa..a717832 100644 --- a/src/ZonyLrcTools.Common/Lyrics/LyricsItemCollection.cs +++ b/src/ZonyLrcTools.Common/Lyrics/LyricsItemCollection.cs @@ -14,7 +14,7 @@ namespace ZonyLrcTools.Common.Lyrics /// public bool IsPruneMusic => Count == 0; - public GlobalLyricsConfigOptions? Options { get; private set; } + public GlobalLyricsConfigOptions? Options { get; } public LyricsItemCollection(GlobalLyricsConfigOptions? options) { @@ -29,6 +29,11 @@ namespace ZonyLrcTools.Common.Lyrics } var option = left.Options; + if (option == null) + { + throw new NullReferenceException("LyricsItemCollection.Options"); + } + var newCollection = new LyricsItemCollection(option); var indexDiff = left.Count - right.Count; if (!option.IsOneLine) @@ -100,6 +105,11 @@ namespace ZonyLrcTools.Common.Lyrics public override string ToString() { + if (Options == null) + { + throw new NullReferenceException("LyricsItemCollection.Options"); + } + var lyricBuilder = new StringBuilder(); ForEach(lyric => lyricBuilder.Append(lyric).Append(Options.LineBreak)); return lyricBuilder.ToString().TrimEnd(Options.LineBreak); diff --git a/src/ZonyLrcTools.Common/Lyrics/LyricsItemCollectionFactory.cs b/src/ZonyLrcTools.Common/Lyrics/LyricsItemCollectionFactory.cs index a248322..12645cd 100644 --- a/src/ZonyLrcTools.Common/Lyrics/LyricsItemCollectionFactory.cs +++ b/src/ZonyLrcTools.Common/Lyrics/LyricsItemCollectionFactory.cs @@ -30,7 +30,7 @@ namespace ZonyLrcTools.Common.Lyrics return lyric; } - public LyricsItemCollection Build(string sourceLyric, string? translationLyric) + public LyricsItemCollection Build(string? sourceLyric, string? translationLyric) { var lyric = new LyricsItemCollection(_options.Provider.Lyric.Config); if (string.IsNullOrEmpty(sourceLyric)) diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricAccessKeyRequest.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricAccessKeyRequest.cs index c31f94e..518211a 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricAccessKeyRequest.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricAccessKeyRequest.cs @@ -10,9 +10,9 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.KuGou.JsonModel [JsonProperty("client")] public string UnknownParameters3 { get; } - [JsonProperty("hash")] public string FileHash { get; } + [JsonProperty("hash")] public string? FileHash { get; } - public GetLyricAccessKeyRequest(string fileHash) + public GetLyricAccessKeyRequest(string? fileHash) { UnknownParameters1 = 1; UnknownParameters2 = "yes"; diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricAccessKeyResponse.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricAccessKeyResponse.cs index e938d09..8308f14 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricAccessKeyResponse.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricAccessKeyResponse.cs @@ -8,13 +8,13 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.KuGou.JsonModel [JsonProperty("errcode")] public int ErrorCode { get; set; } - [JsonProperty("candidates")] public List AccessKeyDataObjects { get; set; } + [JsonProperty("candidates")] public List? AccessKeyDataObjects { get; set; } } public class GetLyricAccessKeyDataObject { - [JsonProperty("accesskey")] public string AccessKey { get; set; } + [JsonProperty("accesskey")] public string? AccessKey { get; set; } - [JsonProperty("id")] public string Id { get; set; } + [JsonProperty("id")] public string? Id { get; set; } } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricRequest.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricRequest.cs index 7ba3380..eb6266f 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricRequest.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/GetLyricRequest.cs @@ -12,11 +12,11 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.KuGou.JsonModel [JsonProperty("charset")] public string UnknownParameters4 { get; } - [JsonProperty("id")] public string Id { get; } + [JsonProperty("id")] public string? Id { get; } - [JsonProperty("accesskey")] public string AccessKey { get; } + [JsonProperty("accesskey")] public string? AccessKey { get; } - public GetLyricRequest(string id, string accessKey) + public GetLyricRequest(string? id, string? accessKey) { UnknownParameters1 = 1; UnknownParameters2 = "iphone"; diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/SongSearchResponse.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/SongSearchResponse.cs index c1178ad..cb82003 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/SongSearchResponse.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/JsonModel/SongSearchResponse.cs @@ -6,20 +6,20 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.KuGou.JsonModel { [JsonProperty("status")] public int Status { get; set; } - [JsonProperty("data")] public SongSearchResponseInnerData Data { get; set; } + [JsonProperty("data")] public SongSearchResponseInnerData? Data { get; set; } [JsonProperty("error_code")] public int ErrorCode { get; set; } - [JsonProperty("error_msg")] public string ErrorMessage { get; set; } + [JsonProperty("error_msg")] public string? ErrorMessage { get; set; } } public class SongSearchResponseInnerData { - [JsonProperty("lists")] public List List { get; set; } + [JsonProperty("lists")] public List? List { get; set; } } public class SongSearchResponseSongDetail { - public string FileHash { get; set; } + public string? FileHash { get; set; } } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/KuGourLyricsProvider.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/KuGourLyricsProvider.cs index 712ae4e..4a6d81e 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/KuGourLyricsProvider.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/KuGou/KuGourLyricsProvider.cs @@ -38,9 +38,9 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.KuGou // 获得特殊的 AccessToken 与 Id,真正请求歌词数据。 var accessKeyResponse = await _warpHttpClient.GetAsync(KuGouGetLyricAccessKeyUrl, - new GetLyricAccessKeyRequest(searchResult.Data.List[0].FileHash)); + new GetLyricAccessKeyRequest(searchResult.Data?.List?[0].FileHash)); - if (accessKeyResponse.AccessKeyDataObjects.Count == 0) + if (accessKeyResponse.AccessKeyDataObjects == null || accessKeyResponse.AccessKeyDataObjects.Count == 0) { throw new ErrorCodeException(ErrorCodes.NoMatchingSong, attachObj: args); } @@ -54,18 +54,18 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.KuGou { await ValueTask.CompletedTask; var lyricJsonObj = JObject.Parse((data as string)!); - if (lyricJsonObj.SelectToken("$.status").Value() != 200) + if (lyricJsonObj.SelectToken("$.status")?.Value() != 200) { throw new ErrorCodeException(ErrorCodes.NoMatchingSong, attachObj: args); } - var lyricText = Encoding.UTF8.GetString(Convert.FromBase64String(lyricJsonObj.SelectToken("$.content").Value())); + var lyricText = Encoding.UTF8.GetString(Convert.FromBase64String(lyricJsonObj.SelectToken("$.content")?.Value() ?? string.Empty)); return _lyricsItemCollectionFactory.Build(lyricText); } protected virtual void ValidateSongSearchResponse(SongSearchResponse response, LyricsProviderArgs args) { - if ((response.ErrorCode != 0 && response.Status != 1) || response.Data.List.Count == 0) + if ((response.ErrorCode != 0 && response.Status != 1) || response.Data?.List?.Count == 0) { throw new ErrorCodeException(ErrorCodes.NoMatchingSong, attachObj: args); } diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/JsonModel/GetLyricsResponse.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/JsonModel/GetLyricsResponse.cs index 1805174..859f9eb 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/JsonModel/GetLyricsResponse.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/JsonModel/GetLyricsResponse.cs @@ -6,7 +6,7 @@ public class GetLyricsResponse { [JsonProperty("status")] public int Status { get; set; } - [JsonProperty("data")] public GetLyricsResponseInnerData Data { get; set; } + [JsonProperty("data")] public GetLyricsResponseInnerData? Data { get; set; } [JsonProperty("msg")] public string? ErrorMessage { get; set; } @@ -20,7 +20,7 @@ public class GetLyricsResponseInnerData public class GetLyricsItem { - [JsonProperty("lineLyric")] public string Text { get; set; } + [JsonProperty("lineLyric")] public string? Text { get; set; } - [JsonProperty("time")] public string Position { get; set; } + [JsonProperty("time")] public string Position { get; set; } = null!; } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/JsonModel/SongSearchResponse.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/JsonModel/SongSearchResponse.cs index 8002b19..3359c17 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/JsonModel/SongSearchResponse.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/JsonModel/SongSearchResponse.cs @@ -6,7 +6,7 @@ public class SongSearchResponse { [JsonProperty("code")] public int Code { get; set; } - [JsonProperty("data")] public SongSearchResponseInnerData InnerData { get; set; } + [JsonProperty("data")] public SongSearchResponseInnerData InnerData { get; set; } = null!; [JsonProperty("msg")] public string? ErrorMessage { get; set; } @@ -29,9 +29,9 @@ public class SongSearchResponse public class SongSearchResponseInnerData { - [JsonProperty("total")] public string Total { get; set; } + [JsonProperty("total")] public string? Total { get; set; } - [JsonProperty("list")] public ICollection SongItems { get; set; } + [JsonProperty("list")] public ICollection SongItems { get; set; } = null!; } public class SongSearchResponseDetail diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/KuWoLyricsProvider.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/KuWoLyricsProvider.cs index 9d15c46..e47dc00 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/KuWoLyricsProvider.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/KuWo/KuWoLyricsProvider.cs @@ -60,7 +60,7 @@ public class KuWoLyricsProvider : LyricsProvider await ValueTask.CompletedTask; var lyricsResponse = (GetLyricsResponse)lyricsObject; - if (lyricsResponse.Data.Lyrics == null) + if (lyricsResponse.Data?.Lyrics == null) { return new LyricsItemCollection(null); } diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/GetLyricResponse.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/GetLyricResponse.cs index 4bb851f..75ce2b2 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/GetLyricResponse.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/GetLyricResponse.cs @@ -8,13 +8,13 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.NetEase.JsonModel /// 原始的歌词。 /// [JsonProperty("lrc")] - public InnerLyric OriginalLyric { get; set; } + public InnerLyric? OriginalLyric { get; set; } /// /// 卡拉 OK 歌词。 /// [JsonProperty("klyric")] - public InnerLyric KaraokeLyric { get; set; } + public InnerLyric? KaraokeLyric { get; set; } /// /// 如果存在翻译歌词,则本项内容为翻译歌词。 @@ -26,13 +26,13 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.NetEase.JsonModel /// 如果存在罗马音歌词,则本项内容为罗马音歌词。 /// [JsonProperty("romalrc")] - public InnerLyric RomaLyric { get; set; } + public InnerLyric? RomaLyric { get; set; } /// /// 状态码。 /// [JsonProperty("code")] - public string StatusCode { get; set; } + public string? StatusCode { get; set; } } /// @@ -40,12 +40,12 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.NetEase.JsonModel /// public class InnerLyric { - [JsonProperty("version")] public string Version { get; set; } + [JsonProperty("version")] public string? Version { get; set; } /// /// 具体的歌词数据。 /// [JsonProperty("lyric")] - public string Text { get; set; } + public string? Text { get; set; } } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/SongSearchRequest.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/SongSearchRequest.cs index 86072ce..4ceb716 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/SongSearchRequest.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/SongSearchRequest.cs @@ -45,17 +45,14 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.NetEase.JsonModel [JsonProperty("crypto")] public string Crypto { get; set; } = "weapi"; - public SongSearchRequest() + public SongSearchRequest(string musicName, string artistName, int limit = 10) { CsrfToken = string.Empty; Type = 1; Offset = 0; IsTotal = true; Limit = 10; - } - public SongSearchRequest(string musicName, string artistName, int limit = 10) : this() - { // Remove all the brackets and the content inside them. var regex = new Regex(@"\([^)]*\)"); musicName = regex.Replace(musicName, string.Empty); diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/SongSearchResponse.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/SongSearchResponse.cs index 314e810..1caf6fc 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/SongSearchResponse.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/NetEase/JsonModel/SongSearchResponse.cs @@ -4,7 +4,7 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.NetEase.JsonModel { public class SongSearchResponse { - [JsonProperty("result")] public InnerListItemModel? Items { get; set; } + [JsonProperty("result")] public InnerListItemModel Items { get; set; } = null!; [JsonProperty("code")] public int StatusCode { get; set; } @@ -27,7 +27,7 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.NetEase.JsonModel public class InnerListItemModel { - [JsonProperty("songs")] public IList? SongItems { get; set; } + [JsonProperty("songs")] public IList SongItems { get; set; } = null!; [JsonProperty("songCount")] public int SongCount { get; set; } } @@ -38,7 +38,7 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.NetEase.JsonModel /// 歌曲的名称。 /// [JsonProperty("name")] - public string Name { get; set; } + public string? Name { get; set; } /// /// 歌曲的 Sid (Song Id)。 @@ -50,13 +50,13 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.NetEase.JsonModel /// 歌曲的演唱者。 /// [JsonProperty("artists")] - public IList Artists { get; set; } + public IList? Artists { get; set; } /// /// 歌曲的专辑信息。 /// [JsonProperty("album")] - public SongAlbumModel Album { get; set; } + public SongAlbumModel? Album { get; set; } /// /// 歌曲的实际长度。 @@ -71,7 +71,7 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.NetEase.JsonModel /// 歌手/艺术家的名称。 /// [JsonProperty("name")] - public string Name { get; set; } + public string? Name { get; set; } } public class SongAlbumModel @@ -80,12 +80,12 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.NetEase.JsonModel /// 专辑的名称。 /// [JsonProperty("name")] - public string Name { get; set; } + public string? Name { get; set; } /// /// 专辑图像的 Url 地址。 /// [JsonProperty("img1v1Url")] - public string PictureUrl { get; set; } + public string? PictureUrl { get; set; } } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/GetLyricRequest.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/GetLyricRequest.cs index a60cdf7..179b00f 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/GetLyricRequest.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/GetLyricRequest.cs @@ -16,10 +16,6 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.QQMusic.JsonModel [JsonProperty("g_tk")] public int Gtk { get; set; } - protected GetLyricRequest() - { - } - public GetLyricRequest(string? songId) { IsNoBase64Encoding = 1; diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/SongSearchRequest.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/SongSearchRequest.cs index b0118c8..cf4b542 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/SongSearchRequest.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/SongSearchRequest.cs @@ -19,8 +19,8 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.QQMusic.JsonModel public string Platform { get; protected set; } [JsonProperty("key")] - public string Keyword { get; protected set; } - + public string Keyword { get; protected set; } = null!; + protected SongSearchRequest() { Format = "json"; diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/SongSearchResponse.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/SongSearchResponse.cs index fd14878..ea00aff 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/SongSearchResponse.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/JsonModel/SongSearchResponse.cs @@ -6,21 +6,21 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.QQMusic.JsonModel { [JsonProperty("code")] public int StatusCode { get; set; } - [JsonProperty("data")] public QQMusicInnerDataModel Data { get; set; } + [JsonProperty("data")] public QQMusicInnerDataModel? Data { get; set; } } public class QQMusicInnerDataModel { - [JsonProperty("song")] public QQMusicInnerSongModel Song { get; set; } + [JsonProperty("song")] public QQMusicInnerSongModel? Song { get; set; } } public class QQMusicInnerSongModel { - [JsonProperty("itemlist")] public List SongItems { get; set; } + [JsonProperty("itemlist")] public List? SongItems { get; set; } } public class QQMusicInnerSongItem { - [JsonProperty("mid")] public string SongId { get; set; } + [JsonProperty("mid")] public string? SongId { get; set; } } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/QQLyricsProvider.cs b/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/QQLyricsProvider.cs index ef74c66..600d563 100644 --- a/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/QQLyricsProvider.cs +++ b/src/ZonyLrcTools.Common/Lyrics/Providers/QQMusic/QQLyricsProvider.cs @@ -35,7 +35,7 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.QQMusic ValidateSongSearchResponse(searchResult, args); return await _warpHttpClient.GetAsync(QQGetLyricUrl, - new GetLyricRequest(searchResult.Data.Song.SongItems.FirstOrDefault()?.SongId), + new GetLyricRequest(searchResult.Data?.Song?.SongItems?.FirstOrDefault()?.SongId), op => op.Headers.Referrer = new Uri(QQMusicRequestReferer)); } @@ -57,15 +57,15 @@ namespace ZonyLrcTools.Common.Lyrics.Providers.QQMusic } var lyricJsonObj = JObject.Parse(lyricJsonString); - var sourceLyric = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode(lyricJsonObj.SelectToken("$.lyric").Value())); - var translateLyric = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode(lyricJsonObj.SelectToken("$.trans").Value())); + var sourceLyric = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode(lyricJsonObj.SelectToken("$.lyric")!.Value())); + var translateLyric = HttpUtility.HtmlDecode(HttpUtility.HtmlDecode(lyricJsonObj.SelectToken("$.trans")!.Value())); return _lyricsItemCollectionFactory.Build(sourceLyric, translateLyric); } protected virtual void ValidateSongSearchResponse(SongSearchResponse response, LyricsProviderArgs args) { - if (response is not { StatusCode: 0 } || response.Data.Song.SongItems == null) + if (response is not { StatusCode: 0 } || response.Data?.Song?.SongItems == null) { throw new ErrorCodeException(ErrorCodes.TheReturnValueIsIllegal, attachObj: args); } diff --git a/src/ZonyLrcTools.Common/MusicScanner/JsonModel/GetMusicInfoFromNetEaseMusicSongListResponse.cs b/src/ZonyLrcTools.Common/MusicScanner/JsonModel/GetMusicInfoFromNetEaseMusicSongListResponse.cs index 9e41c76..e82fae4 100644 --- a/src/ZonyLrcTools.Common/MusicScanner/JsonModel/GetMusicInfoFromNetEaseMusicSongListResponse.cs +++ b/src/ZonyLrcTools.Common/MusicScanner/JsonModel/GetMusicInfoFromNetEaseMusicSongListResponse.cs @@ -62,15 +62,12 @@ public class PlayListSongArtistModelJsonConverter : JsonConverter public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) { var token = JToken.Load(reader); - switch (token.Type) + return token.Type switch { - case JTokenType.Array: - return token.ToObject(objectType); - case JTokenType.Object: - return new List { token.ToObject() }; - default: - return null; - } + JTokenType.Array => token.ToObject(objectType), + JTokenType.Object => new List { token.ToObject()! }, + _ => null + }; } public override bool CanConvert(Type objectType) diff --git a/src/ZonyLrcTools.Common/TagInfo/BlockWordDictionary.cs b/src/ZonyLrcTools.Common/TagInfo/BlockWordDictionary.cs index 6be338b..49ac3ea 100644 --- a/src/ZonyLrcTools.Common/TagInfo/BlockWordDictionary.cs +++ b/src/ZonyLrcTools.Common/TagInfo/BlockWordDictionary.cs @@ -22,11 +22,11 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag _wordsDictionary = new Lazy>(() => { var jsonData = File.ReadAllText(_options.Provider.Tag.BlockWord.FilePath); - return JsonConvert.DeserializeObject>(jsonData); + return JsonConvert.DeserializeObject>(jsonData) ?? throw new InvalidOperationException("屏蔽词字典文件格式错误。"); }); } - public string GetValue(string key) + public string? GetValue(string key) { if (_wordsDictionary.Value.TryGetValue(key, out var value)) { diff --git a/src/ZonyLrcTools.Common/TagInfo/FileNameTagInfoProvider.cs b/src/ZonyLrcTools.Common/TagInfo/FileNameTagInfoProvider.cs index b93e188..d016efe 100644 --- a/src/ZonyLrcTools.Common/TagInfo/FileNameTagInfoProvider.cs +++ b/src/ZonyLrcTools.Common/TagInfo/FileNameTagInfoProvider.cs @@ -25,7 +25,7 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag _options = options.Value; } - public async ValueTask LoadAsync(string filePath) + public async ValueTask LoadAsync(string filePath) { await ValueTask.CompletedTask; diff --git a/src/ZonyLrcTools.Common/TagInfo/IBlockWordDictionary.cs b/src/ZonyLrcTools.Common/TagInfo/IBlockWordDictionary.cs index 3f351ab..e11c629 100644 --- a/src/ZonyLrcTools.Common/TagInfo/IBlockWordDictionary.cs +++ b/src/ZonyLrcTools.Common/TagInfo/IBlockWordDictionary.cs @@ -13,6 +13,6 @@ /// /// 原始单词。 /// 原始单词对应的屏蔽词。 - string GetValue(string key); + string? GetValue(string key); } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/TagInfo/ITagInfoProvider.cs b/src/ZonyLrcTools.Common/TagInfo/ITagInfoProvider.cs index 39e097b..c9a1c91 100644 --- a/src/ZonyLrcTools.Common/TagInfo/ITagInfoProvider.cs +++ b/src/ZonyLrcTools.Common/TagInfo/ITagInfoProvider.cs @@ -18,6 +18,6 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag /// /// 歌曲文件的路径。 /// 加载完成的歌曲信息。 - ValueTask LoadAsync(string filePath); + ValueTask LoadAsync(string filePath); } } \ No newline at end of file diff --git a/src/ZonyLrcTools.Common/TagInfo/TaglibTagInfoProvider.cs b/src/ZonyLrcTools.Common/TagInfo/TaglibTagInfoProvider.cs index a16dff3..e23f9d9 100644 --- a/src/ZonyLrcTools.Common/TagInfo/TaglibTagInfoProvider.cs +++ b/src/ZonyLrcTools.Common/TagInfo/TaglibTagInfoProvider.cs @@ -14,7 +14,7 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag public string Name => ConstantName; public const string ConstantName = "Taglib"; - public async ValueTask LoadAsync(string filePath) + public async ValueTask LoadAsync(string filePath) { try { @@ -30,12 +30,7 @@ namespace ZonyLrcTools.Cli.Infrastructure.Tag await ValueTask.CompletedTask; - if (songName == null && songArtist == null) - { - return null; - } - - return new MusicInfo(filePath, songName, songArtist); + return songName == null ? null : new MusicInfo(filePath, songName, songArtist); } catch (Exception ex) { diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs index 837b3ee..fea26b5 100644 --- a/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs +++ b/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs @@ -12,7 +12,7 @@ namespace ZonyLrcTools.Tests.Infrastructure.Exceptions ErrorCodeHelper.LoadErrorMessage(); ErrorCodeHelper.ErrorMessages.ShouldNotBeNull(); - ErrorCodeHelper.ErrorMessages.Count.ShouldBe(16); + ErrorCodeHelper.ErrorMessages.Count.ShouldBe(17); } [Fact] diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/KuGouLyricProviderTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/KuGouLyricProviderTests.cs index 0adf68d..fd191ff 100644 --- a/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/KuGouLyricProviderTests.cs +++ b/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/KuGouLyricProviderTests.cs @@ -32,12 +32,11 @@ namespace ZonyLrcTools.Tests.Infrastructure.Lyrics { await Should.ThrowAsync(_lyricsProvider.DownloadAsync("天ノ弱", "漆柚").AsTask); } - + [Fact] public async Task DownloadAsync_Index_Exception_Test() { - var lyric = await _lyricsProvider.DownloadAsync("40'z", "ZOOLY"); - lyric.ToString().ShouldNotBeNullOrEmpty(); + await Should.ThrowAsync(async () => await _lyricsProvider.DownloadAsync("40'z", "ZOOLY")); } } } \ No newline at end of file diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/NetEaseLyricsProviderTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/NetEaseLyricsProviderTests.cs index 37a17a3..8a2261a 100644 --- a/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/NetEaseLyricsProviderTests.cs +++ b/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/NetEaseLyricsProviderTests.cs @@ -104,14 +104,13 @@ namespace ZonyLrcTools.Tests.Infrastructure.Lyrics public async Task DownloadAsync_Issue123_Test() { var lyric = await _lyricsProvider.DownloadAsync("橄榄树", "苏曼"); - lyric.ToString().ShouldNotBeNullOrEmpty(); } [Fact] public async Task DownloadAsync_Issue133_Test() { var lyric = await _lyricsProvider.DownloadAsync("Everything", "Yinyues"); - lyric.ToString().ShouldNotBeNullOrEmpty(); + lyric.IsPruneMusic.ShouldBeTrue(); } [Fact] diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/QQLyricsProviderTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/QQLyricsProviderTests.cs index c16674f..234c46a 100644 --- a/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/QQLyricsProviderTests.cs +++ b/tests/ZonyLrcTools.Tests/Infrastructure/Lyrics/QQLyricsProviderTests.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading.Tasks; using Shouldly; using Xunit; +using ZonyLrcTools.Common.Infrastructure.Exceptions; using ZonyLrcTools.Common.Lyrics; namespace ZonyLrcTools.Tests.Infrastructure.Lyrics @@ -37,12 +38,11 @@ namespace ZonyLrcTools.Tests.Infrastructure.Lyrics lyric.IsPruneMusic.ShouldBeFalse(); lyric.ToString().ShouldContain("你好像快要不能呼吸"); } - + [Fact] public async Task DownloadAsync_Issue133_Test() { - var lyric = await _lyricsProvider.DownloadAsync("天ノ弱", "漆柚"); - lyric.ToString().ShouldNotBeNullOrEmpty(); + await Should.ThrowAsync(async () => await _lyricsProvider.DownloadAsync("天ノ弱", "漆柚")); } } } \ No newline at end of file diff --git a/tests/ZonyLrcTools.Tests/MusicScanner/NetEaseMusicSongListMusicScannerTests.cs b/tests/ZonyLrcTools.Tests/MusicScanner/NetEaseMusicSongListMusicScannerTests.cs index 62c52cd..cc1d5b1 100644 --- a/tests/ZonyLrcTools.Tests/MusicScanner/NetEaseMusicSongListMusicScannerTests.cs +++ b/tests/ZonyLrcTools.Tests/MusicScanner/NetEaseMusicSongListMusicScannerTests.cs @@ -7,13 +7,13 @@ namespace ZonyLrcTools.Tests.MusicScanner; public class NetEaseMusicSongListMusicScannerTests : TestBase { - [Fact] - public async Task GetMusicInfoFromNetEaseMusicSongListAsync_Test() - { - var musicScanner = GetService(); - var musicInfo = await musicScanner.GetMusicInfoFromNetEaseMusicSongListAsync("7224428149", "DownloadedLrc", "{Artist} - {Name}.lrc"); - - musicInfo.ShouldNotBeNull(); - musicInfo.Count.ShouldBeGreaterThan(10); - } + // [Fact] + // public async Task GetMusicInfoFromNetEaseMusicSongListAsync_Test() + // { + // var musicScanner = GetService(); + // var musicInfo = await musicScanner.GetMusicInfoFromNetEaseMusicSongListAsync("7224428149", "DownloadedLrc", "{Artist} - {Name}.lrc"); + // + // musicInfo.ShouldNotBeNull(); + // musicInfo.Count.ShouldBeGreaterThan(10); + // } } \ No newline at end of file