From 01014778304c94deb9919c352ef51726d62ab049 Mon Sep 17 00:00:00 2001 From: Gustave Monce Date: Fri, 30 Aug 2024 20:42:37 +0200 Subject: [PATCH] fix: Handle empty flash part list This is used to clear the red flashing status we need to handle this differently for spec A --- .../LumiaUnlockBootloaderViewModel.cs | 71 ++++++++++--------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/WPinternals/ViewModels/LumiaUnlockBootloaderViewModel.cs b/WPinternals/ViewModels/LumiaUnlockBootloaderViewModel.cs index 8537074..7bc9fbc 100644 --- a/WPinternals/ViewModels/LumiaUnlockBootloaderViewModel.cs +++ b/WPinternals/ViewModels/LumiaUnlockBootloaderViewModel.cs @@ -2657,50 +2657,53 @@ namespace WPinternals UInt64 totalwritten = 0; int ProgressPercentage = 0; - foreach (FlashPart Part in FlashParts) + if (FlashParts != null) { - InputStreamLength += (ulong)Part.Stream.Length; - } - - foreach (FlashPart Part in FlashParts) - { - Stream InputStream = new DecompressedStream(Part.Stream); - - if (InputStream != null) + foreach (FlashPart Part in FlashParts) { - using (InputStream) + InputStreamLength += (ulong)Part.Stream.Length; + } + + foreach (FlashPart Part in FlashParts) + { + Stream InputStream = new DecompressedStream(Part.Stream); + + if (InputStream != null) { - const int FlashBufferSize = 0x200000; // Flash 8 GB phone -> buffersize 0x200000 = 11:45 min, buffersize 0x20000 = 12:30 min - byte[] FlashBuffer = new byte[FlashBufferSize]; - int BytesRead; - UInt64 i = 0; - do + using (InputStream) { - BytesRead = InputStream.Read(FlashBuffer, 0, FlashBufferSize); - - byte[] FlashBufferFinalSize; - if (BytesRead > 0) + const int FlashBufferSize = 0x200000; // Flash 8 GB phone -> buffersize 0x200000 = 11:45 min, buffersize 0x20000 = 12:30 min + byte[] FlashBuffer = new byte[FlashBufferSize]; + int BytesRead; + UInt64 i = 0; + do { - if (BytesRead == FlashBufferSize) + BytesRead = InputStream.Read(FlashBuffer, 0, FlashBufferSize); + + byte[] FlashBufferFinalSize; + if (BytesRead > 0) { - FlashBufferFinalSize = FlashBuffer; - } - else - { - FlashBufferFinalSize = new byte[BytesRead]; - Buffer.BlockCopy(FlashBuffer, 0, FlashBufferFinalSize, 0, BytesRead); + if (BytesRead == FlashBufferSize) + { + FlashBufferFinalSize = FlashBuffer; + } + else + { + FlashBufferFinalSize = new byte[BytesRead]; + Buffer.BlockCopy(FlashBuffer, 0, FlashBufferFinalSize, 0, BytesRead); + } + + FlashModel.FlashSectors((UInt32)(Part.StartSector + (i / 0x200)), FlashBufferFinalSize, ProgressPercentage); } - FlashModel.FlashSectors((UInt32)(Part.StartSector + (i / 0x200)), FlashBufferFinalSize, ProgressPercentage); + UpdateWorkingStatus(Part.ProgressText, null, (uint)ProgressPercentage, WPinternalsStatus.Flashing); + totalwritten += (UInt64)FlashBuffer.Length / 0x200; + ProgressPercentage = (int)((double)totalwritten / (InputStreamLength / 0x200) * 100); + + i += FlashBufferSize; } - - UpdateWorkingStatus(Part.ProgressText, null, (uint)ProgressPercentage, WPinternalsStatus.Flashing); - totalwritten += (UInt64)FlashBuffer.Length / 0x200; - ProgressPercentage = (int)((double)totalwritten / (InputStreamLength / 0x200) * 100); - - i += FlashBufferSize; + while (BytesRead == FlashBufferSize); } - while (BytesRead == FlashBufferSize); } } }