mirror of
https://github.com/rbalsleyMSFT/FFU.git
synced 2026-06-14 02:09:35 -06:00
Refactors application management to a new module
Moves ListView manipulation, BYO application import/export, and copy task logic from the main UI script and core UI module into a new `FFUUI.Core.Applications` module. This improves code organization and modularity for application-related features.
This commit is contained in:
@@ -474,119 +474,6 @@ function Update-WingetVersionFields {
|
||||
})
|
||||
}
|
||||
|
||||
# Function to update priorities sequentially in a ListView
|
||||
function Update-ListViewPriorities {
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
[System.Windows.Controls.ListView]$ListView
|
||||
)
|
||||
|
||||
$currentPriority = 1
|
||||
foreach ($item in $ListView.Items) {
|
||||
if ($null -ne $item -and $item.PSObject.Properties['Priority']) {
|
||||
$item.Priority = $currentPriority
|
||||
$currentPriority++
|
||||
}
|
||||
}
|
||||
$ListView.Items.Refresh()
|
||||
}
|
||||
|
||||
# Function to move selected item to the top
|
||||
function Move-ListViewItemTop {
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
[System.Windows.Controls.ListView]$ListView
|
||||
)
|
||||
|
||||
$selectedItem = $ListView.SelectedItem
|
||||
if ($null -eq $selectedItem) { return }
|
||||
|
||||
$currentIndex = $ListView.Items.IndexOf($selectedItem)
|
||||
if ($currentIndex -gt 0) {
|
||||
$ListView.Items.RemoveAt($currentIndex)
|
||||
$ListView.Items.Insert(0, $selectedItem)
|
||||
$ListView.SelectedItem = $selectedItem
|
||||
Update-ListViewPriorities -ListView $ListView
|
||||
}
|
||||
}
|
||||
|
||||
# Function to move selected item up one position
|
||||
function Move-ListViewItemUp {
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
[System.Windows.Controls.ListView]$ListView
|
||||
)
|
||||
|
||||
$selectedItem = $ListView.SelectedItem
|
||||
if ($null -eq $selectedItem) { return }
|
||||
|
||||
$currentIndex = $ListView.Items.IndexOf($selectedItem)
|
||||
if ($currentIndex -gt 0) {
|
||||
$ListView.Items.RemoveAt($currentIndex)
|
||||
$ListView.Items.Insert($currentIndex - 1, $selectedItem)
|
||||
$ListView.SelectedItem = $selectedItem
|
||||
Update-ListViewPriorities -ListView $ListView
|
||||
}
|
||||
}
|
||||
|
||||
# Function to move selected item down one position
|
||||
function Move-ListViewItemDown {
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
[System.Windows.Controls.ListView]$ListView
|
||||
)
|
||||
|
||||
$selectedItem = $ListView.SelectedItem
|
||||
if ($null -eq $selectedItem) { return }
|
||||
|
||||
$currentIndex = $ListView.Items.IndexOf($selectedItem)
|
||||
if ($currentIndex -lt ($ListView.Items.Count - 1)) {
|
||||
$ListView.Items.RemoveAt($currentIndex)
|
||||
$ListView.Items.Insert($currentIndex + 1, $selectedItem)
|
||||
$ListView.SelectedItem = $selectedItem
|
||||
Update-ListViewPriorities -ListView $ListView
|
||||
}
|
||||
}
|
||||
|
||||
# Function to move selected item to the bottom
|
||||
function Move-ListViewItemBottom {
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
[System.Windows.Controls.ListView]$ListView
|
||||
)
|
||||
|
||||
$selectedItem = $ListView.SelectedItem
|
||||
if ($null -eq $selectedItem) { return }
|
||||
|
||||
$currentIndex = $ListView.Items.IndexOf($selectedItem)
|
||||
if ($currentIndex -lt ($ListView.Items.Count - 1)) {
|
||||
$ListView.Items.RemoveAt($currentIndex)
|
||||
$ListView.Items.Add($selectedItem)
|
||||
$ListView.SelectedItem = $selectedItem
|
||||
Update-ListViewPriorities -ListView $ListView
|
||||
}
|
||||
}
|
||||
|
||||
# Function to update the enabled state of the Copy Apps button
|
||||
function Update-CopyButtonState {
|
||||
param(
|
||||
[psobject]$State
|
||||
)
|
||||
$listView = $State.Controls.lstApplications
|
||||
$copyButton = $State.Controls.btnCopyBYOApps
|
||||
if ($listView -and $copyButton) {
|
||||
$hasSource = $false
|
||||
foreach ($item in $listView.Items) {
|
||||
if ($null -ne $item -and $item.PSObject.Properties['Source'] -and -not [string]::IsNullOrWhiteSpace($item.Source)) {
|
||||
$hasSource = $true
|
||||
break
|
||||
}
|
||||
}
|
||||
$copyButton.IsEnabled = $hasSource
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$window.Add_Loaded({
|
||||
# Pass the state object to all initialization functions
|
||||
$script:uiState.Window = $window
|
||||
@@ -1763,100 +1650,6 @@ $window.Add_Loaded({
|
||||
|
||||
})
|
||||
|
||||
# Function to remove application and reorder priorities
|
||||
function Remove-Application {
|
||||
param(
|
||||
$priority,
|
||||
[psobject]$State
|
||||
)
|
||||
|
||||
$listView = $State.Controls.lstApplications
|
||||
|
||||
# Remove the item with the specified priority
|
||||
$itemToRemove = $listView.Items | Where-Object { $_.Priority -eq $priority } | Select-Object -First 1
|
||||
if ($itemToRemove) {
|
||||
$listView.Items.Remove($itemToRemove)
|
||||
# Reorder priorities for remaining items
|
||||
Update-ListViewPriorities -ListView $listView
|
||||
# Update the Copy Apps button state
|
||||
Update-CopyButtonState -State $State
|
||||
}
|
||||
}
|
||||
|
||||
# Function to save BYO applications to JSON
|
||||
function Save-BYOApplicationList {
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
[string]$Path,
|
||||
[Parameter(Mandatory)]
|
||||
[psobject]$State
|
||||
)
|
||||
|
||||
$listView = $State.Controls.lstApplications
|
||||
if (-not $listView -or $listView.Items.Count -eq 0) {
|
||||
[System.Windows.MessageBox]::Show("No applications to save.", "Save Applications", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information)
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
# Ensure items are sorted by current priority before saving
|
||||
# Exclude CopyStatus when saving
|
||||
$applications = $listView.Items | Sort-Object Priority | Select-Object Priority, Name, CommandLine, Arguments, Source
|
||||
$applications | ConvertTo-Json -Depth 5 | Set-Content -Path $Path -Force -Encoding UTF8
|
||||
[System.Windows.MessageBox]::Show("Applications saved successfully to `"$Path`".", "Save Applications", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information)
|
||||
}
|
||||
catch {
|
||||
[System.Windows.MessageBox]::Show("Failed to save applications: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
||||
}
|
||||
}
|
||||
|
||||
# Function to load BYO applications from JSON
|
||||
function Import-BYOApplicationList {
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
[string]$Path,
|
||||
[Parameter(Mandatory)]
|
||||
[psobject]$State
|
||||
)
|
||||
|
||||
if (-not (Test-Path $Path)) {
|
||||
[System.Windows.MessageBox]::Show("Application list file not found at `"$Path`".", "Import Applications", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
$applications = Get-Content -Path $Path -Raw | ConvertFrom-Json
|
||||
$listView = $State.Controls.lstApplications
|
||||
$listView.Items.Clear()
|
||||
|
||||
# Add items and sort by priority from the file
|
||||
$sortedApps = $applications | Sort-Object Priority
|
||||
foreach ($app in $sortedApps) {
|
||||
# Ensure all properties exist, add CopyStatus
|
||||
$appObject = [PSCustomObject]@{
|
||||
Priority = $app.Priority # Keep original priority for now
|
||||
Name = $app.Name
|
||||
CommandLine = $app.CommandLine
|
||||
Arguments = if ($app.PSObject.Properties['Arguments']) { $app.Arguments } else { "" } # Handle missing Arguments
|
||||
Source = $app.Source
|
||||
CopyStatus = "" # Initialize CopyStatus
|
||||
}
|
||||
$listView.Items.Add($appObject)
|
||||
}
|
||||
|
||||
# Reorder priorities sequentially after loading
|
||||
Update-ListViewPriorities -ListView $listView
|
||||
# Update the Copy Apps button state
|
||||
Update-CopyButtonState -State $State
|
||||
|
||||
[System.Windows.MessageBox]::Show("Applications imported successfully from `"$Path`".", "Import Applications", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information)
|
||||
}
|
||||
catch {
|
||||
[System.Windows.MessageBox]::Show("Failed to import applications: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
|
||||
}
|
||||
}
|
||||
|
||||
# Button: Build FFU
|
||||
$btnRun = $window.FindName('btnRun')
|
||||
|
||||
Reference in New Issue
Block a user