--- a +++ b/installer/download-installer.ps1 @@ -0,0 +1,203 @@ +# Specify the downloads folder +$downloads_folder = (New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path + +$ErrorActionPreference = 'SilentlyContinue' +$ProgressPreference = 'SilentlyContinue' # adds increased downloading speed + +# Set the path for the DNAnalyzer directory in the downloads folder +$dir_path = "$downloads_folder/DNAnalyzer" + +try { + # Check if the directory already exists + if ([System.IO.Directory]::Exists($dir_path)) { + Write-Host "The directory already exists." + } else { + # Try to create the directory for DNAnalyzer in the downloads folder + New-Item -Path "$downloads_folder/DNAnalyzer/" -ItemType Directory + } +} catch [System.Exception] { + # Catch any errors and print a message + Write-Host "Something went wrong..." -ForegroundColor Red + Write-Error $_.Exception.Message +} + +# Set the URL for the latest release and the source code +$url = 'https://github.com/VerisimilitudeX/DNAnalyzer/releases/latest' +$alt_url = 'https://github.com/VerisimilitudeX/DNAnalyzer/archive/refs/tags/' + +# Make a request to the URL and get the response +$request = [System.Net.WebRequest]::Create($url) +$response = $request.GetResponse() + +# Get the original URL of the response +$realTagUrl = $response.ResponseUri.OriginalString + +# Split the URL by '/' and get the last element, then remove the 'v' prefix +$version = $realTagUrl.split('/')[-1].Trim('v') + +# Set the published asset download URL and the source code download URL +$realDownloadUrl = "$realTagUrl/download/DNAnalyzer-$version.zip" +$Alt_realDownloadUrl = "$alt_url" + 'v' + "$version.zip" + +Function Installation { + param($version, $Download_URL, $dir_path, $fileName, $Live_URL) + + Write-Host "Attempting to fetch file, please wait..." + + try { + # Download the file from the specified URL + Invoke-WebRequest -Uri $Download_URL[$Live_URL] -OutFile "$($dir_path)/$($fileName[$Live_URL]).zip" + } catch { + # Catch any errors and print a message + Write-Host "Fetch Failed," "StatusCode:" $Error -ForegroundColor Red + Pause + } + + # Check if the file was successfully downloaded + if ([System.IO.File]::Exists("$($dir_path)/$($fileName[$Live_URL]).zip")) { + Write-Host "Fetch Sucessful!" -ForegroundColor Green + Write-Host "Version:" -ForegroundColor Green $version + + try { + # Uncompress the archive + Expand-Archive -Path "$($dir_path)/$($fileName[$Live_URL]).zip" -DestinationPath "$($dir_path)/$($fileName[$Live_URL])" + } catch { + # Catch any errors and print a message + Write-Host "Failed to uncomperess archieve!" + } + } +} + +function Before_installation_checks { + param($version, $dir_path, $Download_URL, $fileName, $Live_URL) + + # Check if already installed + if ([System.IO.File]::Exists("$($dir_path)/$($fileName[$Live_URL])")) { + Write-Host ("Latest verison already installed") -ForegroundColor Green + Write-Host "Version:" -ForegroundColor Green $version + Pause + } + # Check if the zipped file for the correct version exists, but the folder does not + elseif ([System.IO.File]::Exists("$($dir_path)/$($fileName[$Live_URL]).zip")) { + Write-Host 'Trying to uncompress archieve...' + try { + # Attempt to expand the zip file + Expand-Archive -Path "$($dir_path)/$($fileName[$Live_URL]).zip" -DestinationPath "$($dir_path)/$($fileName[$Live_URL])" + } catch { + Write-Host "Failed to uncomperss archieve!" -ForegroundColor Red + Pause + } else { + try { + # Attempt to remove the zip file + Remove-Item "$($dir_path)/$($fileName[$Live_URL]).zip" + } catch { + Write-Host 'Failed to remove zipped folder.' -ForegroundColor Red + Write-Host 'Permisson Error?' + } else { + # Check if the folder for the correct version already exists + if ([System.IO.File]::Exists("$($dir_path)/$($fileName[$Live_URL])")) { + Write-Host ("Latest verison sucessfully unzipped!") -ForegroundColor Green + Write-Host "Location:" $dir_path/$fileName[$Live_URL] -ForegroundColor Green + } + } + } + } + if (-not (Test-Path -Path ("$($dir_path)/$($fileName[$Live_URL]).zip")) -and -not (Test-Path -Path "$($dir_path)/$($fileName[$Live_URL])")) { + # If neither zipped file or folder exists with the correct version, start installation + Write-Host 'File/Folder not already found on system.' + Installation $version $Download_URL $dir_path $fileName $Live_URL # Call installation process function + } +} + +## Introduction + +# Store the URLs in an array +$Download_URL = @("$realDownloadUrl", "$Alt_realDownloadUrl") + +try { + # Check the content type of the source code asset and published asset + $alt_response = Invoke-WebRequest -Method Head -Uri $Download_URL[1] -UseBasicParsing + $alt_content = $alt_response.Headers."Content-Type" + # $alt_content source code + + $response = Invoke-WebRequest -Method Head -Uri $Download_URL[0] -UseBasicParsing + $content = $response.Headers."Content-Type" + # $content actual release +} +catch [System.Net.WebException] { + if ($null -eq $content -and $null -eq $alt_content) { + Write-Host 'Internet error maybe?' -ForegroundColor Red + Pause + } +} +catch { + # Catch any other errors and print a message + Write-Host 'Something went wrong...' -ForegroundColor Red + $Error +} + +finally { + # If the 'actual release' content type is a zip file, proceed with installation + + $fileName = @("DNAnalyzer-$version", "DNAnalyzer-$version-BETA_SOURCE") + + if ($content -eq 'application/zip') { + # Actual Release + $Live_URL = 0 + Before_installation_checks $version $dir_path $Download_URL $fileName $Live_URL + } + + # If the 'source code' content type is a zip file, proceed with installation + elseif ($alt_content -eq 'application/zip') { + # Source code + $Live_URL = 1 + Before_installation_checks $version $dir_path $Download_URL $fileName $Live_URL + } + + else { + # If the content type is not a zip file, print an error message + Write-Host 'Something went wrong...' -ForegroundColor Red + $Error + Pause + } + +} + +# Clean up and compilation +if ([System.IO.File]::Exists("$($dir_path)/$($fileName[$Live_URL]).zip")) { # if zipped file exists + # Remove the zip file + try { + # Attempt to remove the zip file + Remove-Item "$($dir_path)/$($fileName[$Live_URL]).zip" + } + catch { + Write-Host 'Failed to remove zipped folder.' -ForegroundColor Red + $Error + } + $subfolder_location = Get-ChildItem -Path "$($dir_path)/$($fileName[$Live_URL])/" -Filter "*DNAnalyzer*" -Directory + $items = Get-ChildItem -Path "$($dir_path)/$($fileName[$Live_URL])/$($subfolder_location)" + $items | ForEach-Object { + Move-Item -Path $_.FullName -Destination "$($dir_path)/$($fileName[$Live_URL])" + } + + if (Test-Path "$($dir_path)/$($fileName[$Live_URL])/$($fileName[0])") { + Remove-Item -Path "$($dir_path)/$($fileName[$Live_URL])/$($fileName[0])" -Recurse + } +} + +# Change the location to the unzipped folder +Set-Location -Path "$($dir_path)/$($fileName[$Live_URL])/$($subfolder_location)" +$installer_location = Get-Location +explorer "$installer_location" +# Runs the gradle build and run commands +try { + ./gradlew build + ./gradlew run --args="--gui assets/dna/random/dnalong.fa" +} +catch { # prints the error + Write-Host ($Error) -ForegroundColor Red +} + +# Print a success message +Write-Host ("Installation Complete!") -ForegroundColor Green +Write-Host "Version:" -ForegroundColor Green $version