Skip to content

Commit

Permalink
[MicroWin] ISO Downloader Enhancements (#2787)
Browse files Browse the repository at this point in the history
* Avoid duplicating items in lang list and fix issue

- Changed the first item in the language list to show "System language". Then we determine it and download it
- Fixed an issue where the entire contents of `gci` were being passed to the variable, which causes the rest to fail

* Add spaces for consistent indentation

* Modify current dir command to automatic variable

Thanks  @ruxunderscore  for suggesting

* Move downloaded ISO to user-specified path

* Indentation fixes for comments

* Update functions/public/Invoke-WPFGetIso.ps1

Co-authored-by: Luka Momčilović <[email protected]>

* Modify first language item and add error handling

---------

Co-authored-by: Luka Momčilović <[email protected]>
  • Loading branch information
CodingWonders and momcilovicluka authored Sep 23, 2024
1 parent b9d7619 commit 102231c
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 7 deletions.
53 changes: 50 additions & 3 deletions functions/public/Invoke-WPFGetIso.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -77,17 +77,64 @@ function Invoke-WPFGetIso {
return
}
} elseif ($sync["ISOdownloader"].IsChecked) {
# Create folder browsers for user-specified locations
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
$isoDownloaderFBD = New-Object System.Windows.Forms.FolderBrowserDialog
$isoDownloaderFBD.Description = "Please specify the path to download the ISO file to:"
$isoDownloaderFBD.ShowNewFolderButton = $true
if ($isoDownloaderFBD.ShowDialog() -ne [System.Windows.Forms.DialogResult]::OK)
{
return
}

# Grab the location of the selected path
$targetFolder = $isoDownloaderFBD.SelectedPath

# Auto download newest ISO
# Credit: https://github.com/pbatard/Fido
$fidopath = "$env:temp\Fido.ps1"
$originalLocation = Get-Location
$originalLocation = $PSScriptRoot

Invoke-WebRequest "https://github.com/pbatard/Fido/raw/master/Fido.ps1" -OutFile $fidopath

Set-Location -Path $env:temp
& $fidopath -Win 'Windows 11' -Rel $sync["ISORelease"].SelectedItem -Arch "x64" -Lang $sync["ISOLanguage"].SelectedItem -Ed "Windows 11 Home/Pro/Edu"
# Detect if the first option ("System language") has been selected and get a Fido-approved language from the current culture
$lang = if ($sync["ISOLanguage"].SelectedIndex -eq 0) {
Get-FidoLangFromCulture -langName (Get-Culture).Name
} else {
$sync["ISOLanguage"].SelectedItem
}

& $fidopath -Win 'Windows 11' -Rel $sync["ISORelease"].SelectedItem -Arch "x64" -Lang $lang -Ed "Windows 11 Home/Pro/Edu"
if (-not $?)
{
Write-Host "Could not download the ISO file. Look at the output of the console for more information."
$msg = "The ISO file could not be downloaded"
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
return
}
Set-Location $originalLocation
$filePath = Get-ChildItem -Path "$env:temp" -Filter "Win11*.iso" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
# Use the FullName property to only grab the file names. Using this property is necessary as, without it, you're passing the usual output of Get-ChildItem
# to the variable, and let's be honest, that does NOT exist in the file system
$filePath = (Get-ChildItem -Path "$env:temp" -Filter "Win11*.iso").FullName | Sort-Object LastWriteTime -Descending | Select-Object -First 1
$fileName = [IO.Path]::GetFileName("$filePath")

if (($targetFolder -ne "") -and (Test-Path "$targetFolder"))
{
try
{
# "Let it download to $env:TEMP and then we **move** it to the file path." - CodingWonders
$destinationFilePath = "$targetFolder\$fileName"
Write-Host "Moving ISO file. Please wait..."
Move-Item -Path "$filePath" -Destination "$destinationFilePath" -Force
$filePath = $destinationFilePath
}
catch
{
Write-Host "Unable to move the ISO file to the location you specified. The downloaded ISO is in the `"$env:TEMP`" folder"
Write-Host "Error information: $($_.Exception.Message)" -ForegroundColor Yellow
}
}
}

Write-Host "File path $($filePath)"
Expand Down
6 changes: 2 additions & 4 deletions scripts/main.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -415,9 +415,7 @@ $sync["ISORelease"].Items.Add("22H2") | Out-Null
$sync["ISORelease"].Items.Add("21H2") | Out-Null
$sync["ISORelease"].SelectedItem = "23H2"

$currentCulture = Get-FidoLangFromCulture -langName (Get-Culture).Name

$sync["ISOLanguage"].Items.Add($currentCulture) | Out-Null
$sync["ISOLanguage"].Items.Add("System Language ($(Get-FidoLangFromCulture -langName $((Get-Culture).Name)))") | Out-Null
if ($currentCulture -ne "English International") {
$sync["ISOLanguage"].Items.Add("English International") | Out-Null
}
Expand All @@ -427,7 +425,7 @@ if ($currentCulture -ne "English") {
if ($sync["ISOLanguage"].Items.Count -eq 1) {
$sync["ISOLanguage"].IsEnabled = $false
}
$sync["ISOLanguage"].SelectedItem = $currentCulture
$sync["ISOLanguage"].SelectedIndex = 0


# Load Checkboxes and Labels outside of the Filter function only once on startup for performance reasons
Expand Down

0 comments on commit 102231c

Please sign in to comment.