-
Notifications
You must be signed in to change notification settings - Fork 0
/
raiderio-addon-update.ps1
132 lines (111 loc) · 4.88 KB
/
raiderio-addon-update.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
$rio_gh_url = "https://github.com/RaiderIO/raiderio-addon/archive/master.zip"
$rio_gh_api_url = "https://api.github.com/repos/RaiderIO/raiderio-addon/commits"
$ErrorActionPreference = "Stop"
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
function ExitScript() {
Read-Host -Prompt "Press <enter> to exit or close this window"
exit
}
function Update_RaiderIO() {
Write-Output "Performing Addon update now to hash: $last_sha"
$temp_dir = New-Item -Force -Path $env:TEMP -Name "raiderio-db-update" -ItemType "directory"
$db_zip_file_path = Join-Path -Path $temp_dir.FullName -ChildPath "raiderio-addon-master.zip"
if ($temp_dir.GetFiles() -or $temp_dir.GetDirectories()) {
Write-Output "Removing and re-creating existing temp directory: $temp_dir"
$temp_dir.Delete($True)
$temp_dir = New-Item -Force -Path $env:TEMP -Name "raiderio-db-update" -ItemType "directory"
}
Write-Output "Downloading new database to: $db_zip_file_path"
try {
Invoke-WebRequest -uri $rio_gh_url -outfile $db_zip_file_path
} catch {
Write-Output "Error downloading source from GitHub: $rio_gh_url"
$temp_dir.Delete($True)
return
}
Write-Output "Extracting database to temp directory: $temp_dir"
Expand-Archive -literalpath $db_zip_file_path -destinationpath $temp_dir.FullName
Write-Output "Building new Addon locally in folder: $temp_dir"
Set-Location -Path $temp_dir
Remove-Item -Force $db_zip_file_path
Rename-Item -Path "raiderio-addon-master" -NewName "RaiderIO"
Move-Item -Path "RaiderIO\db\RaiderIO_DB_*" -Destination ".\"
Remove-Item "RaiderIO\*" -Include *.* -Exclude *.lua, *.toc, *.xml
if (Test-Path "RaiderIO\tools") { Remove-Item -Recurse -Force "RaiderIO\tools" }
if (Test-Path "RaiderIO\LICENSE") { Remove-Item "RaiderIO\LICENSE" }
$rio_ad_dir = Join-Path -Path $addons_dir -ChildPath "RaiderIO"
if (Test-Path $rio_ad_dir) {
Write-Output "Removing Live AddOn from WoW AddOns directory: $addons_dir"
Get-ChildItem "$addons_dir\RaiderIO*"
Remove-Item -Recurse -Force "$addons_dir\RaiderIO*"
}
Write-Output "Moving new Addon to AddOns directory: $addons_dir"
Move-Item -Path "$temp_dir\*" -Destination $addons_dir
Write-Output "Cleaning up temp directory: $temp_dir"
$temp_dir.Delete($True)
Write-Output "`nSuccess! Updated RaiderIO AddOn and Database to hash: $last_sha`n"
}
function Get_Latest_Sha() {
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Accept", "application/vnd.github.v3+json")
try {
$response = Invoke-RestMethod $rio_gh_api_url -Method 'GET' -Headers $headers
return $response[0].sha
} catch {
return $null
}
}
Write-Output "`nStarting the RaiderIO AddOn Update on $(Get-Date)`n"
$wow_dir_path = Join-Path -Path ${Env:ProgramFiles(x86)} -ChildPath "World of Warcraft"
if (Test-Path $wow_dir_path) {
$wow_dir = Get-Item $wow_dir_path
Write-Output "Found WoW installation directory: $wow_dir"
} else {
$wow_folder = New-Object System.Windows.Forms.FolderBrowserDialog
$wow_folder.Description = "Select your World of Warcraft installation directory..."
$wow_folder.rootfolder = "MyComputer"
if ($wow_folder.ShowDialog() -eq "OK") {
$wow_folder_path += $wow_folder.SelectedPath
} else {
Write-Output "No WoW directory selected, please try again."
ExitScript
}
$wow_dir = Get-Item $wow_folder_path
Write-Output "User selected WoW installation directory: $wow_dir"
}
$addons_dir = Join-Path -Path $wow_dir -ChildPath "_retail_\Interface\AddOns"
if (Test-Path $addons_dir) {
Write-Output "Found WoW AddOns directory: $addons_dir"
} else {
Write-Output "Error, WoW AddOns directory not found: $addons_dir"
ExitScript
}
$last_sha_check = Get_Latest_Sha
if ($last_sha_check -ne $null) {
$last_sha = $last_sha_check
} else {
Write-Output "Error checking GitHub API for latest version information."
Write-Output "Please try re-running the script again at a later time."
ExitScript
}
Update_RaiderIO
Write-Output "Will check for new updates every 30 minutes. You can leave this running..."
while ($True) {
Start-Sleep -Seconds 1800
Write-Host -NoNewline "$(Get-Date) - Checking for update... "
$new_sha_check = Get_Latest_Sha
if ($new_sha_check -ne $null) {
$new_sha = $new_sha_check
} else {
Write-Output "Error checking for update, will try again in 30 minutes."
}
if ($new_sha -ne $last_sha) {
$last_sha = $new_sha
Write-Output "Yes update found: $last_sha"
Update_RaiderIO
} else {
Write-Output "No update found: $last_sha"
}
}