Browse Source

Clamp Pixi file PreviewImage loading for recent opened files

Xiphereal 3 years ago
parent
commit
e1be6533b7

+ 3 - 1
PixiEditor/Models/DataHolders/RecentlyOpenedDocument.cs

@@ -87,7 +87,9 @@ namespace PixiEditor.Models.DataHolders
                     return null;
                 }
 
-                return BitmapUtils.GeneratePreviewBitmap(serializableDocument.Layers, serializableDocument.Width, serializableDocument.Height, 80, 50);
+                return PixiFileMaxSizeChecker.IsFileUnderMaxSize(serializableDocument) ?
+                    BitmapUtils.GeneratePreviewBitmap(serializableDocument.Layers, serializableDocument.Width, serializableDocument.Height, 80, 50)
+                    : null;
             }
             else if (FileExtension == ".png" || FileExtension == ".jpg" || FileExtension == ".jpeg")
             {

+ 15 - 0
PixiEditor/Models/IO/PixiFileMaxSizeChecker.cs

@@ -0,0 +1,15 @@
+using PixiEditor.Parser;
+
+namespace PixiEditor.Models.IO
+{
+    internal static class PixiFileMaxSizeChecker
+    {
+        // Result of 1080 (Width) * 1080 (Height) * 5 (Layers count).
+        private const int MaxBitCountAllowed = 5832000;
+
+        public static bool IsFileUnderMaxSize(SerializableDocument fileToCheck)
+        {
+            return fileToCheck.Height * fileToCheck.Width * fileToCheck.Layers.Count < MaxBitCountAllowed;
+        }
+    }
+}

+ 32 - 0
PixiEditorTests/ModelsTests/DataHoldersTests/RecentlyOpenedDocumentTests.cs

@@ -0,0 +1,32 @@
+using PixiEditor.Models.DataHolders;
+using System;
+using Xunit;
+
+namespace PixiEditorTests.ModelsTests.DataHoldersTests
+{
+    [Collection("Application collection")]
+    public class RecentlyOpenedDocumentTests
+    {
+        [Fact]
+        public void TestThatForBigPixiFilesPreviewImageIsNotLoaded()
+        {
+            string bigFilePath = $@"{Environment.CurrentDirectory}\..\..\..\ModelsTests\IO\BigPixiFile.pixi";
+            RecentlyOpenedDocument recentlyOpenedDocument = new RecentlyOpenedDocument(bigFilePath);
+
+            var bigFilePreviewImage = recentlyOpenedDocument.PreviewBitmap;
+
+            Assert.Null(bigFilePreviewImage);
+        }
+
+        [Fact]
+        public void TestThatForSmallEnoughPixiFilesPreviewImageIsLoaded()
+        {
+            string smallEnoughFilePath = $@"{Environment.CurrentDirectory}\..\..\..\ModelsTests\IO\SmallEnoughPixiFile.pixi";
+            RecentlyOpenedDocument recentlyOpenedDocument = new RecentlyOpenedDocument(smallEnoughFilePath);
+
+            var smallEnoughFilePreviewImage = recentlyOpenedDocument.PreviewBitmap;
+
+            Assert.NotNull(smallEnoughFilePreviewImage);
+        }
+    }
+}

BIN
PixiEditorTests/ModelsTests/IO/BigPixiFile.pixi


BIN
PixiEditorTests/ModelsTests/IO/SmallEnoughPixiFile.pixi