mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2025-06-28 09:04:47 -05:00
Refactor preferChocolatey system to handle other package managers easier (#3296)
* Easier to add more package managers changes * style fixes
This commit is contained in:
59
functions/private/Get-WinUtilSelectedPackages.ps1
Normal file
59
functions/private/Get-WinUtilSelectedPackages.ps1
Normal file
@ -0,0 +1,59 @@
|
||||
function Get-WinUtilSelectedPackages
|
||||
{
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Sorts given packages based on installer preference and availability.
|
||||
|
||||
.OUTPUTS
|
||||
Hashtable. Key = Package Manager, Value = ArrayList of packages to install
|
||||
#>
|
||||
param (
|
||||
[Parameter(Mandatory=$true)]
|
||||
$PackageList,
|
||||
[Parameter(Mandatory=$true)]
|
||||
[PackageManagers]$Preference
|
||||
)
|
||||
|
||||
if ($PackageList.count -eq 1) {
|
||||
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
|
||||
} else {
|
||||
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
|
||||
}
|
||||
|
||||
$packages = [System.Collections.Hashtable]::new()
|
||||
$packagesWinget = [System.Collections.ArrayList]::new()
|
||||
$packagesChoco = [System.Collections.ArrayList]::new()
|
||||
$packages[[PackageManagers]::Winget] = $packagesWinget
|
||||
$packages[[PackageManagers]::Choco] = $packagesChoco
|
||||
|
||||
Write-Debug "Checking packages using Preference '$($Preference)'"
|
||||
|
||||
foreach ($package in $PackageList) {
|
||||
switch ($Preference) {
|
||||
"Choco" {
|
||||
if ($package.choco -eq "na") {
|
||||
Write-Debug "$($package.content) has no Choco value."
|
||||
$packagesWinget.add($package.winget)
|
||||
Write-Host "Queueing $($package.winget) for Winget"
|
||||
} else {
|
||||
$null = $packagesChoco.add($package.choco)
|
||||
Write-Host "Queueing $($package.choco) for Chocolatey"
|
||||
}
|
||||
break
|
||||
}
|
||||
"Winget" {
|
||||
if ($package.winget -eq "na") {
|
||||
Write-Debug "$($package.content) has no Winget value."
|
||||
$packagesChoco.add($package.choco)
|
||||
Write-Host "Queueing $($package.choco) for Chocolatey"
|
||||
} else {
|
||||
$null = $packagesWinget.add($($package.winget))
|
||||
Write-Host "Queueing $($package.winget) for Winget"
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $packages
|
||||
}
|
45
functions/private/Set-PackageManagerPreference.ps1
Normal file
45
functions/private/Set-PackageManagerPreference.ps1
Normal file
@ -0,0 +1,45 @@
|
||||
function Set-PackageManagerPreference {
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Sets the currently selected package manager to global "ManagerPreference" in sync.
|
||||
Also persists preference across Winutil restarts via preference.ini.
|
||||
|
||||
Reads from preference.ini if no argument sent.
|
||||
|
||||
.PARAMETER preferedPackageManager
|
||||
The PackageManager that was selected.
|
||||
#>
|
||||
param(
|
||||
[Parameter(Position=0, Mandatory=$false)]
|
||||
[PackageManagers]$preferedPackageManager
|
||||
)
|
||||
|
||||
$preferencePath = "$env:LOCALAPPDATA\winutil\preferences.ini"
|
||||
$oldChocoPath = "$env:LOCALAPPDATA\winutil\preferChocolatey.ini"
|
||||
|
||||
#Try loading from file if no argument given.
|
||||
if ($null -eq $preferedPackageManager) {
|
||||
# Backwards compat for preferChocolatey.ini
|
||||
if (Test-Path -Path $oldChocoPath) {
|
||||
$preferedPackageManager = [PackageManagers]::Choco
|
||||
Remove-Item -Path $oldChocoPath
|
||||
}
|
||||
else {
|
||||
$potential = Get-Content -Path $preferencePath -TotalCount 1
|
||||
if ($potential)
|
||||
{$preferedPackageManager = [PackageManagers]$potential}
|
||||
}
|
||||
}
|
||||
|
||||
#If no preference argument, .ini file bad read, and $sync empty then default to winget.
|
||||
if ($null -eq $preferedPackageManager -and $null -eq $sync["ManagerPreference"])
|
||||
{ $preferedPackageManager = [PackageManagers]::Winget }
|
||||
|
||||
|
||||
$sync["ManagerPreference"] = [PackageManagers]::$preferedPackageManager
|
||||
Write-Debug "Manager Preference changed to '$($sync["ManagerPreference"])'"
|
||||
|
||||
|
||||
# Write preference to file to persist across restarts.
|
||||
Out-File -FilePath $preferencePath -InputObject $sync["ManagerPreference"]
|
||||
}
|
Reference in New Issue
Block a user