functions/Setup.ps1
|
function Initialize-EmojiTools { <# .SYNOPSIS Runs the EmojiTools first-time setup. .DESCRIPTION Initializes default emoji collections and aliases. This runs automatically on first module import, but can be run manually to reset or re-initialize. .PARAMETER Force Force re-initialization even if setup was already completed .PARAMETER SkipCollections Skip initializing default collections .PARAMETER SkipAliases Skip initializing default aliases .EXAMPLE Initialize-EmojiTools Runs the setup process .EXAMPLE Initialize-EmojiTools -Force Re-runs setup and overwrites existing data .EXAMPLE Initialize-EmojiTools -SkipCollections Only initializes aliases, skips collections #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = 'Function initializes the entire module with multiple components, plural is semantically correct')] [CmdletBinding()] param( [Parameter()] [switch]$Force, [Parameter()] [switch]$SkipCollections, [Parameter()] [switch]$SkipAliases ) $setupPath = $Script:EmojiToolsConfig.SetupCompletePath if ((Test-Path $setupPath) -and -not $Force) { Write-Host "✅ EmojiTools is already initialized." -ForegroundColor Green Write-Host " Use -Force to re-initialize and overwrite existing data." -ForegroundColor Yellow return } Write-Host "`n🎉 Initializing EmojiTools..." -ForegroundColor Cyan $initialized = @() try { # Initialize default collections if (-not $SkipCollections) { if (Get-Command Initialize-EmojiCollections -ErrorAction SilentlyContinue) { Write-Host " 📁 Creating default emoji collections..." -ForegroundColor Gray Initialize-EmojiCollections -ErrorAction SilentlyContinue $initialized += "Collections" } } else { Write-Host " ⏭️ Skipping collections (as requested)" -ForegroundColor Gray } # Initialize default aliases if (-not $SkipAliases) { if (Get-Command Initialize-DefaultEmojiAliases -ErrorAction SilentlyContinue) { Write-Host " 🔖 Setting up emoji aliases..." -ForegroundColor Gray if ($Force) { Initialize-DefaultEmojiAliases -Force -ErrorAction SilentlyContinue } else { Initialize-DefaultEmojiAliases -ErrorAction SilentlyContinue } $initialized += "Aliases" } } else { Write-Host " ⏭️ Skipping aliases (as requested)" -ForegroundColor Gray } # Mark setup as complete New-Item -ItemType File -Path $setupPath -Force | Out-Null Write-Host "`n✅ Initialization complete!" -ForegroundColor Green if ($initialized.Count -gt 0) { Write-Host " Initialized: $($initialized -join ', ')" -ForegroundColor White } Write-Host "`n💡 Quick Start:" -ForegroundColor Cyan Write-Host " Get-EmojiAlias -List # View all shortcuts" -ForegroundColor White Write-Host " Get-EmojiAlias -Alias 'fire' # Get emoji by alias" -ForegroundColor White Write-Host " Get-EmojiCollection # View collections" -ForegroundColor White Write-Host " Show-EmojiPicker # Open interactive picker`n" -ForegroundColor White } catch { Write-Error "Initialization failed: $_" Write-Host "`nYou can manually run:" -ForegroundColor Yellow Write-Host " Initialize-EmojiCollections" -ForegroundColor White Write-Host " Initialize-DefaultEmojiAliases" -ForegroundColor White } } function Reset-EmojiTools { <# .SYNOPSIS Resets EmojiTools to default state. .DESCRIPTION Removes all custom data (aliases, collections, statistics) and re-initializes with defaults. Use with caution as this will delete your customizations. .PARAMETER IncludeStats Also clear statistics data .PARAMETER Force Skip confirmation prompt .EXAMPLE Reset-EmojiTools Resets collections and aliases with confirmation .EXAMPLE Reset-EmojiTools -IncludeStats -Force Resets everything including stats without confirmation #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = 'Function resets the entire module with multiple components, plural is semantically correct')] [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')] param( [Parameter()] [switch]$IncludeStats, [Parameter()] [switch]$Force ) $dataPath = Join-Path $PSScriptRoot "..\data" $itemsToRemove = @( @{ Path = Join-Path $dataPath "collections.json"; Name = "Collections" } @{ Path = Join-Path $dataPath "aliases.json"; Name = "Aliases" } @{ Path = $Script:EmojiToolsConfig.SetupCompletePath; Name = "Setup marker" } ) if ($IncludeStats) { $itemsToRemove += @{ Path = Join-Path $dataPath "stats.json"; Name = "Statistics" } } if (-not $Force -and -not $PSCmdlet.ShouldProcess("EmojiTools data", "Reset to defaults")) { return } Write-Host "`n🔄 Resetting EmojiTools..." -ForegroundColor Yellow foreach ($item in $itemsToRemove) { if (Test-Path $item.Path) { try { Remove-Item $item.Path -Force Write-Host " ✅ Removed $($item.Name)" -ForegroundColor Gray } catch { Write-Warning "Failed to remove $($item.Name): $_" } } } Write-Host "`n🎉 Re-initializing with defaults..." -ForegroundColor Cyan Initialize-EmojiTools -Force } function Get-EmojiToolsInfo { <# .SYNOPSIS Displays information about the EmojiTools module. .DESCRIPTION Shows module version, statistics, and status information. .EXAMPLE Get-EmojiToolsInfo Displays module information #> [CmdletBinding()] param() $dataPath = Join-Path $PSScriptRoot "..\data" # Count data $aliasCount = 0 $aliasPath = Join-Path $dataPath "aliases.json" if (Test-Path $aliasPath) { $aliases = Get-Content $aliasPath -Encoding UTF8 | ConvertFrom-Json $aliasCount = ($aliases.PSObject.Properties | Measure-Object).Count } $collectionCount = 0 $collectionPath = Join-Path $dataPath "collections.json" if (Test-Path $collectionPath) { $collections = Get-Content $collectionPath -Encoding UTF8 | ConvertFrom-Json $collectionCount = ($collections.PSObject.Properties | Measure-Object).Count } $statsExist = Test-Path (Join-Path $dataPath "stats.json") $setupComplete = Test-Path $Script:EmojiToolsConfig.SetupCompletePath # Get module info $module = Get-Module EmojiTools Write-Host "`n📊 EmojiTools Module Information" -ForegroundColor Cyan Write-Host ("=" * 60) -ForegroundColor Cyan Write-Host "`nModule Details:" -ForegroundColor Yellow Write-Host (" Version: {0}" -f $module.Version) -ForegroundColor White Write-Host (" Exported Functions: {0}" -f $module.ExportedFunctions.Count) -ForegroundColor White Write-Host (" Module Path: {0}" -f $module.ModuleBase) -ForegroundColor White Write-Host "`nData Status:" -ForegroundColor Yellow Write-Host (" Setup Complete: {0}" -f $(if ($setupComplete) { "✅ Yes" } else { "❌ No" })) -ForegroundColor White Write-Host (" Emojis Loaded: {0}" -f $Script:EmojiData.Count) -ForegroundColor White Write-Host (" Aliases Defined: {0}" -f $aliasCount) -ForegroundColor White Write-Host (" Collections: {0}" -f $collectionCount) -ForegroundColor White Write-Host (" Statistics: {0}" -f $(if ($statsExist) { "✅ Available" } else { "❌ None" })) -ForegroundColor White Write-Host "`nConfiguration:" -ForegroundColor Yellow Write-Host (" Auto-Update Check: {0}" -f $Script:EmojiToolsConfig.AutoUpdateCheck) -ForegroundColor White # Display AutoInitialize features $autoInitDisplay = if ($Script:EmojiToolsConfig.AutoInitialize.Count -eq 0) { "Disabled" } elseif ($Script:EmojiToolsConfig.AutoInitialize -contains 'All') { "All features" } else { $Script:EmojiToolsConfig.AutoInitialize -join ', ' } Write-Host (" Auto-Initialize: {0}" -f $autoInitDisplay) -ForegroundColor White Write-Host (" Update Interval: {0} days" -f $Script:EmojiToolsConfig.UpdateInterval) -ForegroundColor White if (Test-Path $Script:EmojiDataPath) { $dataAge = (Get-Date) - (Get-Item $Script:EmojiDataPath).LastWriteTime Write-Host (" Dataset Age: {0} days" -f [math]::Round($dataAge.TotalDays, 1)) -ForegroundColor White } Write-Host "`n💡 Quick Commands:" -ForegroundColor Cyan Write-Host " Get-EmojiAlias -List # View all aliases" -ForegroundColor Gray Write-Host " Get-EmojiCollection # View collections" -ForegroundColor Gray Write-Host " Get-EmojiStats # View usage stats" -ForegroundColor Gray Write-Host " Show-EmojiPicker # Open picker" -ForegroundColor Gray Write-Host " Initialize-EmojiTools -Force # Re-initialize" -ForegroundColor Gray Write-Host "`n" } |