Bläddra i källkod

Merge pull request #7567 from cvium/fix_xmltv_caching

(cherry picked from commit 385a0b94373606983051ff7662dfbe1e5514d4bc)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
Cody Robibero 3 år sedan
förälder
incheckning
435fc7ade9
1 ändrade filer med 13 tillägg och 2 borttagningar
  1. 13 2
      Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs

+ 13 - 2
Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs

@@ -8,6 +8,7 @@ using System.Globalization;
 using System.IO;
 using System.Linq;
 using System.Net.Http;
+using System.Security.Cryptography;
 using System.Threading;
 using System.Threading.Tasks;
 using Jellyfin.Extensions;
@@ -124,7 +125,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
         {
             using (var stream = File.OpenRead(file))
             {
-                string tempFolder = Path.Combine(_config.ApplicationPaths.TempDirectory, Guid.NewGuid().ToString());
+                string tempFolder = GetTempFolderPath(stream);
                 Directory.CreateDirectory(tempFolder);
 
                 _zipClient.ExtractFirstFileFromGz(stream, tempFolder, "data.xml");
@@ -137,7 +138,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
         {
             using (var stream = File.OpenRead(file))
             {
-                string tempFolder = Path.Combine(_config.ApplicationPaths.TempDirectory, Guid.NewGuid().ToString());
+                string tempFolder = GetTempFolderPath(stream);
                 Directory.CreateDirectory(tempFolder);
 
                 _zipClient.ExtractAllFromGz(stream, tempFolder, true);
@@ -146,6 +147,16 @@ namespace Emby.Server.Implementations.LiveTv.Listings
             }
         }
 
+        private string GetTempFolderPath(Stream stream)
+        {
+#pragma warning disable CA5351
+            using var md5 = MD5.Create();
+#pragma warning restore CA5351
+            var checksum = Convert.ToHexString(md5.ComputeHash(stream));
+            stream.Position = 0;
+            return Path.Combine(_config.ApplicationPaths.TempDirectory, checksum);
+        }
+
         private string FindXmlFile(string directory)
         {
             return _fileSystem.GetFiles(directory, true)