瀏覽代碼

Use async functions

1hitsong 2 年之前
父節點
當前提交
a50bdb4770

+ 2 - 2
Jellyfin.Api/Controllers/UserLibraryController.cs

@@ -397,7 +397,7 @@ namespace Jellyfin.Api.Controllers
         /// <returns>An <see cref="OkResult"/> containing the item's lyrics.</returns>
         /// <returns>An <see cref="OkResult"/> containing the item's lyrics.</returns>
         [HttpGet("Users/{userId}/Items/{itemId}/Lyrics")]
         [HttpGet("Users/{userId}/Items/{itemId}/Lyrics")]
         [ProducesResponseType(StatusCodes.Status200OK)]
         [ProducesResponseType(StatusCodes.Status200OK)]
-        public ActionResult<LyricResponse> GetLyrics([FromRoute, Required] Guid userId, [FromRoute, Required] Guid itemId)
+        public async Task<ActionResult<LyricResponse>> GetLyrics([FromRoute, Required] Guid userId, [FromRoute, Required] Guid itemId)
         {
         {
             var user = _userManager.GetUserById(userId);
             var user = _userManager.GetUserById(userId);
 
 
@@ -415,7 +415,7 @@ namespace Jellyfin.Api.Controllers
                 return NotFound();
                 return NotFound();
             }
             }
 
 
-            var result = _lyricManager.GetLyrics(item);
+            var result = await _lyricManager.GetLyrics(item).ConfigureAwait(false);
             if (result is not null)
             if (result is not null)
             {
             {
                 return Ok(result);
                 return Ok(result);

+ 3 - 2
MediaBrowser.Controller/Lyrics/ILyricManager.cs

@@ -1,3 +1,4 @@
+using System.Threading.Tasks;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
 
 
 namespace MediaBrowser.Controller.Lyrics;
 namespace MediaBrowser.Controller.Lyrics;
@@ -11,8 +12,8 @@ public interface ILyricManager
     /// Gets the lyrics.
     /// Gets the lyrics.
     /// </summary>
     /// </summary>
     /// <param name="item">The media item.</param>
     /// <param name="item">The media item.</param>
-    /// <returns>Lyrics for passed item.</returns>
-    LyricResponse? GetLyrics(BaseItem item);
+    /// <returns>A task representing found lyrics the passed item.</returns>
+    Task<LyricResponse?> GetLyrics(BaseItem item);
 
 
     /// <summary>
     /// <summary>
     /// Checks if requested item has a matching local lyric file.
     /// Checks if requested item has a matching local lyric file.

+ 3 - 2
MediaBrowser.Controller/Lyrics/ILyricProvider.cs

@@ -1,4 +1,5 @@
 using System.Collections.Generic;
 using System.Collections.Generic;
+using System.Threading.Tasks;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Resolvers;
 using MediaBrowser.Controller.Resolvers;
 
 
@@ -30,6 +31,6 @@ public interface ILyricProvider
     /// Gets the lyrics.
     /// Gets the lyrics.
     /// </summary>
     /// </summary>
     /// <param name="item">The media item.</param>
     /// <param name="item">The media item.</param>
-    /// <returns>If found, returns lyrics for passed item; otherwise, null.</returns>
-    LyricResponse? GetLyrics(BaseItem item);
+    /// <returns>A task representing found lyrics.</returns>
+    Task<LyricResponse?> GetLyrics(BaseItem item);
 }
 }

+ 17 - 6
MediaBrowser.Providers/Lyric/LrcLyricProvider.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Globalization;
 using System.Globalization;
 using System.IO;
 using System.IO;
 using System.Linq;
 using System.Linq;
+using System.Threading.Tasks;
 using LrcParser.Model;
 using LrcParser.Model;
 using LrcParser.Parser;
 using LrcParser.Parser;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
@@ -50,7 +51,7 @@ public class LrcLyricProvider : ILyricProvider
     /// </summary>
     /// </summary>
     /// <param name="item">The item to to process.</param>
     /// <param name="item">The item to to process.</param>
     /// <returns>If provider can determine lyrics, returns a <see cref="LyricResponse"/> with or without metadata; otherwise, null.</returns>
     /// <returns>If provider can determine lyrics, returns a <see cref="LyricResponse"/> with or without metadata; otherwise, null.</returns>
-    public LyricResponse? GetLyrics(BaseItem item)
+    public async Task<LyricResponse?> GetLyrics(BaseItem item)
     {
     {
         string? lyricFilePath = this.GetLyricFilePath(item.Path);
         string? lyricFilePath = this.GetLyricFilePath(item.Path);
 
 
@@ -60,7 +61,7 @@ public class LrcLyricProvider : ILyricProvider
         }
         }
 
 
         var fileMetaData = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
         var fileMetaData = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
-        string lrcFileContent = File.ReadAllText(lyricFilePath);
+        string lrcFileContent = await Task.FromResult(File.ReadAllText(lyricFilePath)).ConfigureAwait(false);
 
 
         Song lyricData;
         Song lyricData;
 
 
@@ -94,15 +95,15 @@ public class LrcLyricProvider : ILyricProvider
             // Remove square bracket before field name, and after field value
             // Remove square bracket before field name, and after field value
             // Example 1: [au: 1hitsong]
             // Example 1: [au: 1hitsong]
             // Example 2: [ar: Calabrese]
             // Example 2: [ar: Calabrese]
-            var metaDataFieldNameSpan = metaDataRow.AsSpan(1, index - 1).Trim();
-            var metaDataFieldValueSpan = metaDataRow.AsSpan(index + 1, metaDataRow.Length - index - 2).Trim();
+            var metaDataFieldName = GetMetadataFieldName(metaDataRow, index);
+            var metaDataFieldValue = GetMetadataValue(metaDataRow, index);
 
 
-            if (metaDataFieldValueSpan.IsEmpty || metaDataFieldValueSpan.IsEmpty)
+            if (string.IsNullOrEmpty(metaDataFieldName) || string.IsNullOrEmpty(metaDataFieldValue))
             {
             {
                 continue;
                 continue;
             }
             }
 
 
-            fileMetaData[metaDataFieldNameSpan.ToString()] = metaDataFieldValueSpan.ToString();
+            fileMetaData[metaDataFieldName.ToString()] = metaDataFieldValue.ToString();
         }
         }
 
 
         if (sortedLyricData.Count == 0)
         if (sortedLyricData.Count == 0)
@@ -197,4 +198,14 @@ public class LrcLyricProvider : ILyricProvider
 
 
         return lyricMetadata;
         return lyricMetadata;
     }
     }
+
+    private static string GetMetadataFieldName(string metaDataRow, int index)
+    {
+        return metaDataRow.AsSpan(1, index - 1).Trim().ToString();
+    }
+
+    private static string GetMetadataValue(string metaDataRow, int index)
+    {
+        return metaDataRow.AsSpan(index + 1, metaDataRow.Length - index - 2).Trim().ToString();
+    }
 }
 }

+ 3 - 2
MediaBrowser.Providers/Lyric/LyricManager.cs

@@ -1,5 +1,6 @@
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
+using System.Threading.Tasks;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Lyrics;
 using MediaBrowser.Controller.Lyrics;
 
 
@@ -22,11 +23,11 @@ public class LyricManager : ILyricManager
     }
     }
 
 
     /// <inheritdoc />
     /// <inheritdoc />
-    public LyricResponse? GetLyrics(BaseItem item)
+    public async Task<LyricResponse?> GetLyrics(BaseItem item)
     {
     {
         foreach (ILyricProvider provider in _lyricProviders)
         foreach (ILyricProvider provider in _lyricProviders)
         {
         {
-            var results = provider.GetLyrics(item);
+            var results = await provider.GetLyrics(item).ConfigureAwait(false);
             if (results is not null)
             if (results is not null)
             {
             {
                 return results;
                 return results;

+ 3 - 2
MediaBrowser.Providers/Lyric/TxtLyricProvider.cs

@@ -1,6 +1,7 @@
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.IO;
 using System.IO;
 using System.Linq;
 using System.Linq;
+using System.Threading.Tasks;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Lyrics;
 using MediaBrowser.Controller.Lyrics;
 using MediaBrowser.Controller.Resolvers;
 using MediaBrowser.Controller.Resolvers;
@@ -29,7 +30,7 @@ public class TxtLyricProvider : ILyricProvider
     /// </summary>
     /// </summary>
     /// <param name="item">The item to to process.</param>
     /// <param name="item">The item to to process.</param>
     /// <returns>If provider can determine lyrics, returns a <see cref="LyricResponse"/>; otherwise, null.</returns>
     /// <returns>If provider can determine lyrics, returns a <see cref="LyricResponse"/>; otherwise, null.</returns>
-    public LyricResponse? GetLyrics(BaseItem item)
+    public async Task<LyricResponse?> GetLyrics(BaseItem item)
     {
     {
         string? lyricFilePath = this.GetLyricFilePath(item.Path);
         string? lyricFilePath = this.GetLyricFilePath(item.Path);
 
 
@@ -38,7 +39,7 @@ public class TxtLyricProvider : ILyricProvider
             return null;
             return null;
         }
         }
 
 
-        string[] lyricTextLines = File.ReadAllLines(lyricFilePath);
+        string[] lyricTextLines = await Task.FromResult(File.ReadAllLines(lyricFilePath)).ConfigureAwait(false);
 
 
         if (lyricTextLines.Length == 0)
         if (lyricTextLines.Length == 0)
         {
         {