Compare commits
266 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
2fe4fa4592 | ||
|
531a1c1e34 | ||
|
5814336814 | ||
|
6af8eba6c6 | ||
|
ba106c1783 | ||
|
3d710854b3 | ||
|
f9b56c91af | ||
|
3ddc958e0b | ||
|
536b549114 | ||
|
94c0273304 | ||
|
e92a074544 | ||
|
9b1935e7a7 | ||
|
3bd245b277 | ||
|
9d42aefe24 | ||
|
ef5947f54c | ||
|
f38a0e054d | ||
|
5e31ff3b45 | ||
|
c602b59f21 | ||
|
042b126634 | ||
|
0976297348 | ||
|
ddbfb39e87 | ||
|
14b2643cbf | ||
|
0eccafa9ea | ||
|
b2d353b0bb | ||
|
c5de2e6886 | ||
|
73669e16ea | ||
|
ffa645c991 | ||
|
e642161206 | ||
|
568d17e3fa | ||
|
08dfef1498 | ||
|
2670a04542 | ||
|
e36005558d | ||
|
da1dbca8f6 | ||
|
2fd34f5576 | ||
|
bc7875c512 | ||
|
2dea7f8138 | ||
|
07ef29d807 | ||
|
c59bb90032 | ||
|
b3bf4f7026 | ||
|
0f48d64121 | ||
|
984044f1b0 | ||
|
a8479cd577 | ||
|
12b946fdf0 | ||
|
651992285c | ||
|
4afa77abca | ||
|
bc418aaef6 | ||
|
3291f7c460 | ||
|
50c422b701 | ||
|
24529a59e7 | ||
|
c8eaeebbde | ||
|
df8099e3d0 | ||
|
5364fa250c | ||
|
90a3aacce0 | ||
|
55cf52df26 | ||
|
802340e418 | ||
|
a42b9b624d | ||
|
0ac90790b8 | ||
|
8d3bc22af7 | ||
|
f58334c8a4 | ||
|
eca073fab3 | ||
|
c186afa8b4 | ||
|
daca8d5b9a | ||
|
a76a09051b | ||
|
0fc0b9eead | ||
|
a64d3ab4bc | ||
|
b395ab2d81 | ||
|
2ca1bd5408 | ||
|
29e35dbec0 | ||
|
1ad1d0f8f8 | ||
|
5619de376a | ||
|
21dc22965d | ||
|
5cae428440 | ||
|
f931169ebe | ||
|
1d690c738d | ||
|
ca89e1c94d | ||
|
ac5fc1cd5e | ||
|
ff2e7e63de | ||
|
f6acde934e | ||
|
b6d2c18b31 | ||
|
86009c2d88 | ||
|
18c8419495 | ||
|
4b7980d138 | ||
|
3210028469 | ||
|
101ea5843a | ||
|
d7306150e8 | ||
|
023f452b26 | ||
|
af4b9238be | ||
|
f78d68211c | ||
|
217a088f1e | ||
|
8fff6b1500 | ||
|
84ab3faf5e | ||
|
83552b7c7d | ||
|
723ae1ce7f | ||
|
50d56aa638 | ||
|
3af40df9da | ||
|
e718dd9410 | ||
|
ecc2512bba | ||
|
cd93b126e2 | ||
|
dd87771004 | ||
|
cac16d7ce4 | ||
|
b0ed8963df | ||
|
541d1b4bca | ||
|
c490df56d0 | ||
|
59809bf9ec | ||
|
07d8649bb2 | ||
|
81840fe0e8 | ||
|
2c8833f424 | ||
|
b5119182a0 | ||
|
e41d68ee73 | ||
|
4b5819a39b | ||
|
fb17b6daa8 | ||
|
3adf64eda4 | ||
|
7dd664773b | ||
|
c8f7e149f5 | ||
|
73bfbb4bda | ||
|
a32a66062c | ||
|
a98c56e6cd | ||
|
068d5de355 | ||
|
43a3f99d1b | ||
|
fcaccea7c4 | ||
|
926a03d19b | ||
|
d935a710b6 | ||
|
cc14b94a03 | ||
|
8b1bf15047 | ||
|
dc1b4c41b7 | ||
|
441e595f22 | ||
|
6b75302b3f | ||
|
c42416bb99 | ||
|
cdec7c1188 | ||
|
34a7b806e9 | ||
|
0aef0daf07 | ||
|
abe65a5d38 | ||
|
d338be8652 | ||
|
583d542029 | ||
|
84613264b4 | ||
|
60d0dae5d4 | ||
|
74ad681a11 | ||
|
e79a5c978c | ||
|
2ac3118d92 | ||
|
0135092ba2 | ||
|
3e63ccbd31 | ||
|
d38e575ed2 | ||
|
b7f0ce2fbf | ||
|
60ba394f48 | ||
|
44bf5ff322 | ||
|
fea9f80001 | ||
|
46a9bf099b | ||
|
af1f9fbfea | ||
|
c87a3790ce | ||
|
a38be7119b | ||
|
9f141b96e7 | ||
|
fa231bfce3 | ||
|
83583ecb8e | ||
|
4e7d10a712 | ||
|
41229db92e | ||
|
7c6e2feb06 | ||
|
febdcbae58 | ||
|
a8dde0c008 | ||
|
72390bc78e | ||
|
2b03f1efde | ||
|
4d73114e8a | ||
|
4cf7b066c2 | ||
|
ff11222c36 | ||
|
8b9df336be | ||
|
761669aa5f | ||
|
89eebf2f43 | ||
|
509e262f95 | ||
|
1b32911711 | ||
|
928a53faed | ||
|
b9c2682e43 | ||
|
9536c668ea | ||
|
9af0e9c44a | ||
|
3ef9747c76 | ||
|
fec2d7dcdc | ||
|
6a2a988e9f | ||
|
39e2f72d17 | ||
|
f8da8eb6a9 | ||
|
904c4c235e | ||
|
2c6913da24 | ||
|
114743c9dd | ||
|
b6cd6a0514 | ||
|
405d14c7ce | ||
|
29f4b9ca05 | ||
|
d6b082fcff | ||
|
72e3174905 | ||
|
98014ef50b | ||
|
3533737c79 | ||
|
cec79b18a1 | ||
|
58673b587b | ||
|
92cbacd6f2 | ||
|
aa273fb72a | ||
|
98c0035d18 | ||
|
7d0c62cab7 | ||
|
16e76794d5 | ||
|
ddfed530cc | ||
|
00287c77a0 | ||
|
f5f0d1fc44 | ||
|
76fa6197e7 | ||
|
7f267ffa3c | ||
|
5cd243fd19 | ||
|
64a49b7dde | ||
|
f06d0591f9 | ||
|
041ed1ed10 | ||
|
0c5a19adad | ||
|
a18635c280 | ||
|
6051983e81 | ||
|
6ce735c983 | ||
|
e43178a774 | ||
|
d608284d3c | ||
|
9daa74335d | ||
|
88f106b345 | ||
|
f403be8c08 | ||
|
5aafc1b6a4 | ||
|
c389321273 | ||
|
3f9627e072 | ||
|
c8b7226b0d | ||
|
da0643bbcc | ||
|
968ccfea78 | ||
|
ccef7be1c7 | ||
|
a3a8fd511d | ||
|
2036847802 | ||
|
41d7f226f1 | ||
|
28a5d3c3f7 | ||
|
efb9262c2e | ||
|
8490c54df2 | ||
|
2453b05f1c | ||
|
1300a8ab0c | ||
|
128434f1f7 | ||
|
ec18671b4f | ||
|
401a2a0be6 | ||
|
51e8706bee | ||
|
0dccd546ee | ||
|
c9c8e53c4d | ||
|
523f5d1a09 | ||
|
66276643c5 | ||
|
fdea54711e | ||
|
fd97986631 | ||
|
66b832a283 | ||
|
77637d1d8a | ||
|
6efa834935 | ||
|
7b004a8bda | ||
|
0cffceec40 | ||
|
aa825de124 | ||
|
6d9ab20e14 | ||
|
75c558b8c2 | ||
|
43fe5c4117 | ||
|
4e654eebf6 | ||
|
25153e6998 | ||
|
c000acf098 | ||
|
df04a2002f | ||
|
9973bf5d3e | ||
|
be9f76879c | ||
|
c91573cff9 | ||
|
d8cce87b63 | ||
|
8f3075b2eb | ||
|
64cefd87f3 | ||
|
114b283715 | ||
|
50d5fd6991 | ||
|
cc0201cfb5 | ||
|
75c7e2bec8 | ||
|
f4bb25f94a | ||
|
617bdb82de | ||
|
6032a9f03c | ||
|
2d6135443f | ||
|
abbab087e0 | ||
|
6c21ecc39d |
103
.gitignore
vendored
103
.gitignore
vendored
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
# Created by https://www.gitignore.io/api/csharp,visualstudio
|
# Created by https://www.gitignore.io/api/rider,csharp,windows,visualstudio
|
||||||
# Edit at https://www.gitignore.io/?templates=csharp,visualstudio
|
# Edit at https://www.gitignore.io/?templates=rider,csharp,windows,visualstudio
|
||||||
|
|
||||||
### Csharp ###
|
### Csharp ###
|
||||||
## Ignore Visual Studio temporary files, build results, and
|
## Ignore Visual Studio temporary files, build results, and
|
||||||
@ -73,7 +73,6 @@ StyleCopReport.xml
|
|||||||
*_p.c
|
*_p.c
|
||||||
*_h.h
|
*_h.h
|
||||||
*.ilk
|
*.ilk
|
||||||
*.meta
|
|
||||||
*.obj
|
*.obj
|
||||||
*.iobj
|
*.iobj
|
||||||
*.pch
|
*.pch
|
||||||
@ -353,6 +352,102 @@ healthchecksdb
|
|||||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
MigrationBackup/
|
MigrationBackup/
|
||||||
|
|
||||||
|
### Rider ###
|
||||||
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
|
||||||
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||||
|
|
||||||
|
# User-specific stuff
|
||||||
|
.idea/**/workspace.xml
|
||||||
|
.idea/**/tasks.xml
|
||||||
|
.idea/**/usage.statistics.xml
|
||||||
|
.idea/**/dictionaries
|
||||||
|
.idea/**/shelf
|
||||||
|
|
||||||
|
# Generated files
|
||||||
|
.idea/**/contentModel.xml
|
||||||
|
|
||||||
|
# Sensitive or high-churn files
|
||||||
|
.idea/**/dataSources/
|
||||||
|
.idea/**/dataSources.ids
|
||||||
|
.idea/**/dataSources.local.xml
|
||||||
|
.idea/**/sqlDataSources.xml
|
||||||
|
.idea/**/dynamic.xml
|
||||||
|
.idea/**/uiDesigner.xml
|
||||||
|
.idea/**/dbnavigator.xml
|
||||||
|
|
||||||
|
# Gradle
|
||||||
|
.idea/**/gradle.xml
|
||||||
|
.idea/**/libraries
|
||||||
|
|
||||||
|
# Gradle and Maven with auto-import
|
||||||
|
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||||
|
# since they will be recreated, and may cause churn. Uncomment if using
|
||||||
|
# auto-import.
|
||||||
|
# .idea/modules.xml
|
||||||
|
# .idea/*.iml
|
||||||
|
# .idea/modules
|
||||||
|
# *.iml
|
||||||
|
# *.ipr
|
||||||
|
|
||||||
|
# CMake
|
||||||
|
cmake-build-*/
|
||||||
|
|
||||||
|
# Mongo Explorer plugin
|
||||||
|
.idea/**/mongoSettings.xml
|
||||||
|
|
||||||
|
# File-based project format
|
||||||
|
*.iws
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
out/
|
||||||
|
|
||||||
|
# mpeltonen/sbt-idea plugin
|
||||||
|
.idea_modules/
|
||||||
|
|
||||||
|
# JIRA plugin
|
||||||
|
atlassian-ide-plugin.xml
|
||||||
|
|
||||||
|
# Cursive Clojure plugin
|
||||||
|
.idea/replstate.xml
|
||||||
|
|
||||||
|
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||||
|
com_crashlytics_export_strings.xml
|
||||||
|
crashlytics.properties
|
||||||
|
crashlytics-build.properties
|
||||||
|
fabric.properties
|
||||||
|
|
||||||
|
# Editor-based Rest Client
|
||||||
|
.idea/httpRequests
|
||||||
|
|
||||||
|
# Android studio 3.1+ serialized cache file
|
||||||
|
.idea/caches/build_file_checksums.ser
|
||||||
|
|
||||||
|
### Windows ###
|
||||||
|
# Windows thumbnail cache files
|
||||||
|
Thumbs.db
|
||||||
|
Thumbs.db:encryptable
|
||||||
|
ehthumbs.db
|
||||||
|
ehthumbs_vista.db
|
||||||
|
|
||||||
|
# Dump file
|
||||||
|
*.stackdump
|
||||||
|
|
||||||
|
# Folder config file
|
||||||
|
[Dd]esktop.ini
|
||||||
|
|
||||||
|
# Recycle Bin used on file shares
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
|
# Windows Installer files
|
||||||
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msix
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
|
# Windows shortcuts
|
||||||
|
*.lnk
|
||||||
|
|
||||||
### VisualStudio ###
|
### VisualStudio ###
|
||||||
|
|
||||||
# User-specific files
|
# User-specific files
|
||||||
@ -509,4 +604,4 @@ MigrationBackup/
|
|||||||
|
|
||||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
|
|
||||||
# End of https://www.gitignore.io/api/csharp,visualstudio
|
# End of https://www.gitignore.io/api/rider,csharp,windows,visualstudio
|
||||||
|
72
.gitlab-ci.yml
Normal file
72
.gitlab-ci.yml
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
.shared_windows_runners:
|
||||||
|
tags:
|
||||||
|
- windows
|
||||||
|
|
||||||
|
uptool:
|
||||||
|
extends:
|
||||||
|
- .shared_windows_runners
|
||||||
|
stage: deploy
|
||||||
|
script: |
|
||||||
|
Invoke-WebRequest -Uri https://dotnet.microsoft.com/download/dotnet-core/scripts/v1/dotnet-install.ps1 -OutFile dotnet-install.ps1
|
||||||
|
Set-ExecutionPolicy Unrestricted -Scope Process
|
||||||
|
.\dotnet-install.ps1 -Channel 5.0
|
||||||
|
$env:Path = "C:\Users\gitlab_runner\AppData\Local\Microsoft\dotnet;" + $env:Path + ";C:\Users\gitlab_runner\AppData\Local\Microsoft\dotnet"
|
||||||
|
dotnet build --verbosity:m -p:Configuration=Release
|
||||||
|
cp ".\UpTool build tool\bin\Release\net5.0\package.zip" .\Tools.zip
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Release.zip .\UpTool2\bin\Release\net5.0-windows\UpTool2.exe
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Release.zip .\UpTool2\bin\Release\net5.0-windows\*.dll
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Release.zip .\UpTool2\bin\Release\net5.0-windows\UpTool2.runtimeconfig.json
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Release.zip .\UpToolCLI\bin\Release\net5.0\uptool.exe
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Release.zip .\UpToolCLI\bin\Release\net5.0\*.dll
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Release.zip .\UpToolCLI\bin\Release\net5.0\uptool.runtimeconfig.json
|
||||||
|
$asmver = $([Reflection.Assembly]::Loadfile($(pwd).Path + "\\UpTool2\\bin\\Release\\net5.0-windows\\UpTool2.dll").GetName().version.ToString())
|
||||||
|
$pkgtoolver = $([Reflection.Assembly]::Loadfile($(pwd).Path + "\\UpTool build tool\\bin\\Release\\net5.0\\pkgtool.dll").GetName().version.ToString())
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Installer-generic.zip .\InstallerCLI\bin\Release\net5.0\Installer.exe
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Installer-generic.zip .\InstallerCLI\bin\Release\net5.0\*.dll
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Installer-generic.zip .\InstallerCLI\bin\Release\net5.0\Installer.runtimeconfig.json
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Installer-generic.zip .\InstallerCLI\Info.txt
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Installer-gui.zip .\Installer\bin\Release\net5.0-windows\Installer.exe
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Installer-gui.zip .\Installer\bin\Release\net5.0-windows\*.dll
|
||||||
|
& "C:\Program Files\7-Zip\7z" a .\Installer-gui.zip .\Installer\bin\Release\net5.0-windows\Installer.runtimeconfig.json
|
||||||
|
[System.XML.XMLDocument]$xml=New-Object System.XML.XMLDocument
|
||||||
|
[System.XML.XMLElement]$app=$xml.CreateElement("app")
|
||||||
|
$xml.appendChild($app)
|
||||||
|
$app.appendChild($xml.CreateElement("Name")).InnerText = "UpTool2 package tools"
|
||||||
|
$app.appendChild($xml.CreateElement("Description")).InnerText = "Tools for automating package creation"
|
||||||
|
$app.appendChild($xml.CreateElement("Version")).InnerText = $pkgtoolver
|
||||||
|
$app.appendChild($xml.CreateElement("ID")).InnerText = "0e35d154-d0d3-45e0-b080-62f521263a44"
|
||||||
|
$app.appendChild($xml.CreateElement("File")).InnerText = $CI_PROJECT_URL + "/-/jobs/" + $CI_JOB_ID + "/artifacts/raw/Tools.zip"
|
||||||
|
$app.appendChild($xml.CreateElement("Hash")).InnerText = $(Get-FileHash .\Tools.zip).Hash
|
||||||
|
$app.appendChild($xml.CreateElement("MainFile")).InnerText = "pkgtool.exe"
|
||||||
|
$app.appendChild($xml.CreateElement("Icon")).InnerText = "https://gitlab.com/JFronny/UpTool2/-/raw/master/UpTool2.ico"
|
||||||
|
echo NULL > tools.xml
|
||||||
|
$xml.save($(gi .\tools.xml).Fullname)
|
||||||
|
[System.XML.XMLDocument]$xml=New-Object System.XML.XMLDocument
|
||||||
|
[System.XML.XMLElement]$app=$xml.CreateElement("meta")
|
||||||
|
$xml.appendChild($app)
|
||||||
|
$app.appendChild($xml.CreateElement("Version")).InnerText = $asmver
|
||||||
|
$app.appendChild($xml.CreateElement("File")).InnerText = $CI_PROJECT_URL + "/-/jobs/" + $CI_JOB_ID + "/artifacts/raw/Release.zip"
|
||||||
|
$app.appendChild($xml.CreateElement("Hash")).InnerText = $(Get-FileHash .\Release.zip).Hash
|
||||||
|
$app.appendChild($xml.CreateElement("Installer")).InnerText = $CI_PROJECT_URL + "/-/jobs/" + $CI_JOB_ID + "/artifacts/raw/Installer-generic.zip"
|
||||||
|
$app.appendChild($xml.CreateElement("InstallerHash")).InnerText = $(Get-FileHash .\Installer-generic.zip).Hash
|
||||||
|
$app.appendChild($xml.CreateElement("InstallerGui")).InnerText = $CI_PROJECT_URL + "/-/jobs/" + $CI_JOB_ID + "/artifacts/raw/Installer-gui.zip"
|
||||||
|
$app.appendChild($xml.CreateElement("InstallerGuiHash")).InnerText = $(Get-FileHash .\Installer-gui.zip).Hash
|
||||||
|
echo NULL > meta.xml
|
||||||
|
$xml.save($(gi .\meta.xml).Fullname)
|
||||||
|
#cd Installer
|
||||||
|
#dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true
|
||||||
|
#dotnet publish -r win-x86 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true
|
||||||
|
#cp .\bin\Release\net5.0-windows\win-x64\publish\Installer.exe ..\Installer-x64.exe
|
||||||
|
#cp .\bin\Release\net5.0-windows\win-x86\publish\Installer.exe ..\Installer-x86.exe
|
||||||
|
#cd ..
|
||||||
|
#Installer-x64 and Installer-x86 were also originally artifacts but there doesn't seem to be a x86-64 windows runner
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- Release.zip
|
||||||
|
- Tools.zip
|
||||||
|
- Installer-generic.zip
|
||||||
|
- Installer-gui.zip
|
||||||
|
- meta.xml
|
||||||
|
- tools.xml
|
||||||
|
only:
|
||||||
|
- master
|
0
.idea/.gitignore
vendored
Normal file
0
.idea/.gitignore
vendored
Normal file
2
.idea/.idea.UpTool2/.idea/.gitignore
vendored
Normal file
2
.idea/.idea.UpTool2/.idea/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/workspace.xml
|
5
.idea/.idea.UpTool2/.idea/codeStyles/codeStyleConfig.xml
Normal file
5
.idea/.idea.UpTool2/.idea/codeStyles/codeStyleConfig.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<state>
|
||||||
|
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||||
|
</state>
|
||||||
|
</component>
|
9
.idea/.idea.UpTool2/.idea/discord.xml
Normal file
9
.idea/.idea.UpTool2/.idea/discord.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DiscordProjectSettings">
|
||||||
|
<option name="show" value="PROJECT_FILES" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectNotificationSettings">
|
||||||
|
<option name="askShowProject" value="false" />
|
||||||
|
</component>
|
||||||
|
</project>
|
4
.idea/.idea.UpTool2/.idea/encodings.xml
Normal file
4
.idea/.idea.UpTool2/.idea/encodings.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
||||||
|
</project>
|
8
.idea/.idea.UpTool2/.idea/indexLayout.xml
Normal file
8
.idea/.idea.UpTool2/.idea/indexLayout.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ContentModelUserStore">
|
||||||
|
<attachedFolders />
|
||||||
|
<explicitIncludes />
|
||||||
|
<explicitExcludes />
|
||||||
|
</component>
|
||||||
|
</project>
|
8
.idea/.idea.UpTool2/.idea/modules.xml
Normal file
8
.idea/.idea.UpTool2/.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/.idea.UpTool2/.idea/riderModule.iml" filepath="$PROJECT_DIR$/.idea/.idea.UpTool2/.idea/riderModule.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/.idea.UpTool2/.idea/projectSettingsUpdater.xml
Normal file
6
.idea/.idea.UpTool2/.idea/projectSettingsUpdater.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RiderProjectSettingsUpdater">
|
||||||
|
<option name="vcsConfiguration" value="2" />
|
||||||
|
</component>
|
||||||
|
</project>
|
7
.idea/.idea.UpTool2/.idea/riderModule.iml
Normal file
7
.idea/.idea.UpTool2/.idea/riderModule.iml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="RIDER_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$/../.." />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
6
.idea/.idea.UpTool2/.idea/vcs.xml
Normal file
6
.idea/.idea.UpTool2/.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
7
.idea/.idea.UpTool2/riderModule.iml
Normal file
7
.idea/.idea.UpTool2/riderModule.iml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="RIDER_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$/../.." />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
39
CLI.md
Normal file
39
CLI.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# CLI
|
||||||
|
|
||||||
|
### Package Management
|
||||||
|
|
||||||
|
Installing a package (set \<package> to a file for local): uptool install \<package>
|
||||||
|
|
||||||
|
Upgrading a package: uptool upgrade \<package>
|
||||||
|
|
||||||
|
Reinstalling a package: uptool reinstall \<package>
|
||||||
|
|
||||||
|
Removing a package: uptool remove \<package>
|
||||||
|
|
||||||
|
Removing a package and all its configuration and data files: uptool purge \<package>
|
||||||
|
|
||||||
|
Upgrade all packages: uptool dist-upgrade
|
||||||
|
|
||||||
|
### Cache Management
|
||||||
|
|
||||||
|
List installed packages: uptool list
|
||||||
|
|
||||||
|
Search for a package: uptool search \<text>
|
||||||
|
|
||||||
|
Show package info: uptool show \<package>
|
||||||
|
|
||||||
|
Updating the cache: uptool update
|
||||||
|
|
||||||
|
### Repos Management
|
||||||
|
|
||||||
|
Add a repository: uptool add-repo \<name> \<link>
|
||||||
|
|
||||||
|
Remove a repository: uptool remove-repo \<name>
|
||||||
|
|
||||||
|
List repositories: uptool list-repo
|
||||||
|
|
||||||
|
### Other
|
||||||
|
|
||||||
|
Upgrading UpToolCLI: uptool upgrade-self
|
||||||
|
|
||||||
|
Start an app: uptool start \<package>
|
@ -1,14 +0,0 @@
|
|||||||
%APPDATA%\UpTool2
|
|
||||||
- Apps
|
|
||||||
- __APPNAME
|
|
||||||
- info.xml
|
|
||||||
- Version
|
|
||||||
- package.zip
|
|
||||||
- Install.bat
|
|
||||||
- Remove.bat
|
|
||||||
- Data
|
|
||||||
- __APPFILES
|
|
||||||
- app
|
|
||||||
- __APPFILES
|
|
||||||
- info.xml
|
|
||||||
- Version
|
|
18
Installer/Installer.csproj
Normal file
18
Installer/Installer.csproj
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net5.0-windows</TargetFramework>
|
||||||
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
|
<ApplicationIcon>..\UpTool2.ico</ApplicationIcon>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Properties\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\UpToolLib\UpToolLib.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
134
Installer/InstallerForm.Designer.cs
generated
Normal file
134
Installer/InstallerForm.Designer.cs
generated
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
namespace Installer
|
||||||
|
{
|
||||||
|
partial class InstallerForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
_lib.Dispose();
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Installer.InstallerForm));
|
||||||
|
this.install = new System.Windows.Forms.Button();
|
||||||
|
this.installLabel = new System.Windows.Forms.Label();
|
||||||
|
this.progress = new System.Windows.Forms.ProgressBar();
|
||||||
|
this.processLabel = new System.Windows.Forms.Label();
|
||||||
|
this.log = new System.Windows.Forms.Button();
|
||||||
|
this.startupBox = new System.Windows.Forms.CheckBox();
|
||||||
|
this.pathBox = new System.Windows.Forms.CheckBox();
|
||||||
|
this.updateAppsBox = new System.Windows.Forms.CheckBox();
|
||||||
|
this.SuspendLayout();
|
||||||
|
this.install.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.install.Location = new System.Drawing.Point(12, 116);
|
||||||
|
this.install.Name = "install";
|
||||||
|
this.install.Size = new System.Drawing.Size(539, 27);
|
||||||
|
this.install.TabIndex = 0;
|
||||||
|
this.install.Text = "Install";
|
||||||
|
this.install.UseVisualStyleBackColor = true;
|
||||||
|
this.install.Click += new System.EventHandler(this.install_Click);
|
||||||
|
this.installLabel.AutoSize = true;
|
||||||
|
this.installLabel.Location = new System.Drawing.Point(12, 9);
|
||||||
|
this.installLabel.Name = "installLabel";
|
||||||
|
this.installLabel.Size = new System.Drawing.Size(550, 75);
|
||||||
|
this.installLabel.TabIndex = 1;
|
||||||
|
this.installLabel.Text = resources.GetString("installLabel.Text");
|
||||||
|
this.progress.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.progress.Location = new System.Drawing.Point(12, 116);
|
||||||
|
this.progress.Maximum = 8;
|
||||||
|
this.progress.Name = "progress";
|
||||||
|
this.progress.Size = new System.Drawing.Size(539, 27);
|
||||||
|
this.progress.TabIndex = 2;
|
||||||
|
this.progress.Visible = false;
|
||||||
|
this.processLabel.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.processLabel.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||||
|
this.processLabel.Location = new System.Drawing.Point(386, 91);
|
||||||
|
this.processLabel.Name = "processLabel";
|
||||||
|
this.processLabel.Size = new System.Drawing.Size(165, 22);
|
||||||
|
this.processLabel.TabIndex = 3;
|
||||||
|
this.processLabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||||
|
this.log.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.log.Location = new System.Drawing.Point(524, 3);
|
||||||
|
this.log.Name = "log";
|
||||||
|
this.log.Size = new System.Drawing.Size(36, 23);
|
||||||
|
this.log.TabIndex = 4;
|
||||||
|
this.log.Text = "Log";
|
||||||
|
this.log.UseVisualStyleBackColor = true;
|
||||||
|
this.log.Visible = false;
|
||||||
|
this.log.Click += new System.EventHandler(this.log_Click);
|
||||||
|
this.startupBox.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.startupBox.AutoSize = true;
|
||||||
|
this.startupBox.Enabled = false;
|
||||||
|
this.startupBox.Location = new System.Drawing.Point(130, 91);
|
||||||
|
this.startupBox.Name = "startupBox";
|
||||||
|
this.startupBox.Size = new System.Drawing.Size(122, 19);
|
||||||
|
this.startupBox.TabIndex = 5;
|
||||||
|
this.startupBox.Text = "Update on Startup";
|
||||||
|
this.startupBox.CheckedChanged += new System.EventHandler(this.startupBox_CheckedChanged);
|
||||||
|
this.pathBox.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.pathBox.AutoSize = true;
|
||||||
|
this.pathBox.Location = new System.Drawing.Point(12, 91);
|
||||||
|
this.pathBox.Name = "pathBox";
|
||||||
|
this.pathBox.Size = new System.Drawing.Size(112, 19);
|
||||||
|
this.pathBox.TabIndex = 6;
|
||||||
|
this.pathBox.Text = "Register in PATH";
|
||||||
|
this.pathBox.CheckedChanged += new System.EventHandler(this.pathBox_CheckedChanged);
|
||||||
|
this.updateAppsBox.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.updateAppsBox.AutoSize = true;
|
||||||
|
this.updateAppsBox.Enabled = false;
|
||||||
|
this.updateAppsBox.Location = new System.Drawing.Point(258, 91);
|
||||||
|
this.updateAppsBox.Name = "updateAppsBox";
|
||||||
|
this.updateAppsBox.Size = new System.Drawing.Size(94, 19);
|
||||||
|
this.updateAppsBox.TabIndex = 5;
|
||||||
|
this.updateAppsBox.Text = "Update Apps";
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(563, 156);
|
||||||
|
this.Controls.Add(this.updateAppsBox);
|
||||||
|
this.Controls.Add(this.log);
|
||||||
|
this.Controls.Add(this.processLabel);
|
||||||
|
this.Controls.Add(this.progress);
|
||||||
|
this.Controls.Add(this.installLabel);
|
||||||
|
this.Controls.Add(this.install);
|
||||||
|
this.Controls.Add(this.startupBox);
|
||||||
|
this.Controls.Add(this.pathBox);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||||
|
this.Icon = ((System.Drawing.Icon) (resources.GetObject("$this.Icon")));
|
||||||
|
this.Name = "InstallerForm";
|
||||||
|
this.ShowIcon = false;
|
||||||
|
this.Text = "UpTool2 Installer";
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
private System.Windows.Forms.Button install;
|
||||||
|
private System.Windows.Forms.Label installLabel;
|
||||||
|
private System.Windows.Forms.Button log;
|
||||||
|
private System.Windows.Forms.CheckBox pathBox;
|
||||||
|
private System.Windows.Forms.Label processLabel;
|
||||||
|
private System.Windows.Forms.ProgressBar progress;
|
||||||
|
private System.Windows.Forms.CheckBox startupBox;
|
||||||
|
private System.Windows.Forms.CheckBox updateAppsBox;
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
142
Installer/InstallerForm.cs
Normal file
142
Installer/InstallerForm.cs
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using Microsoft.Win32;
|
||||||
|
using UpToolLib;
|
||||||
|
using UpToolLib.v1.Tool;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
|
||||||
|
namespace Installer
|
||||||
|
{
|
||||||
|
public partial class InstallerForm : Form
|
||||||
|
{
|
||||||
|
private const string AppName = "UpTool2";
|
||||||
|
private readonly RegistryKey _rkApp;
|
||||||
|
private string _log = "";
|
||||||
|
private UpToolLibMain _lib;
|
||||||
|
|
||||||
|
public InstallerForm()
|
||||||
|
{
|
||||||
|
_lib = new UpToolLibMain(new UtLibFunctionsGui(Log));
|
||||||
|
InitializeComponent();
|
||||||
|
Step(0, "Initialized");
|
||||||
|
_log = _log.TrimStart(Environment.NewLine.ToCharArray());
|
||||||
|
_rkApp = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
|
||||||
|
pathBox.Checked = !File.Exists(_lib.V1.PathTool.InfoXml) ||
|
||||||
|
Path.Content.Contains(Path.GetName(_lib.V1.PathTool.GetRelative("Install")));
|
||||||
|
startupBox.Checked = pathBox.Checked && _rkApp.GetValue(AppName) != null;
|
||||||
|
updateAppsBox.Checked = pathBox.Checked && startupBox.Checked &&
|
||||||
|
(string) _rkApp.GetValue(AppName) == "uptool dist-upgrade";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void install_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
log.Visible = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
progress.Visible = true;
|
||||||
|
WebClient client = new();
|
||||||
|
Step(1, "Downloading metadata");
|
||||||
|
XElement meta = XDocument
|
||||||
|
.Load("https://gitlab.com/JFronny/UpTool2/-/jobs/artifacts/master/raw/meta.xml?job=uptool")
|
||||||
|
.Element("meta");
|
||||||
|
Step(2, "Downloading binary");
|
||||||
|
byte[] dl = client.DownloadData(meta.Element("File").Value);
|
||||||
|
Step(3, "Verifying integrity");
|
||||||
|
using (SHA256CryptoServiceProvider sha256 = new())
|
||||||
|
{
|
||||||
|
string pkgHash = BitConverter.ToString(sha256.ComputeHash(dl)).Replace("-", string.Empty).ToUpper();
|
||||||
|
if (pkgHash != meta.Element("Hash").Value.ToUpper())
|
||||||
|
throw new Exception(
|
||||||
|
$@"The hash is not equal to the one stored in the repo:
|
||||||
|
Package: {pkgHash}
|
||||||
|
Online: {meta.Element("Hash").Value.ToUpper()}");
|
||||||
|
}
|
||||||
|
Step(4, "Extracting");
|
||||||
|
if (Directory.Exists(_lib.V1.PathTool.GetRelative("Install")))
|
||||||
|
Directory.Delete(_lib.V1.PathTool.GetRelative("Install"), true);
|
||||||
|
Directory.CreateDirectory(_lib.V1.PathTool.GetRelative("Install"));
|
||||||
|
using (MemoryStream ms = new(dl))
|
||||||
|
{
|
||||||
|
using ZipArchive ar = new(ms);
|
||||||
|
ar.ExtractToDirectory(_lib.V1.PathTool.GetRelative("Install"), true);
|
||||||
|
}
|
||||||
|
Step(5, "Creating shortcut");
|
||||||
|
Shortcut.Make(_lib.V1.PathTool.GetRelative("Install", "UpTool2.exe"),
|
||||||
|
System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs),
|
||||||
|
"UpTool2.lnk"));
|
||||||
|
Step(6, "Preparing Repos");
|
||||||
|
_lib.V1.XmlTool.FixXml();
|
||||||
|
_lib.V2.RepoManagement.FetchRepos();
|
||||||
|
if (pathBox.Checked)
|
||||||
|
{
|
||||||
|
Step(7, startupBox.Checked ? "Creating PATH & Autostart entry" : "Creating PATH entry");
|
||||||
|
if (!Path.Content.Contains(Path.GetName(_lib.V1.PathTool.GetRelative("Install"))))
|
||||||
|
Path.Append(_lib.V1.PathTool.GetRelative("Install"));
|
||||||
|
if (startupBox.Checked)
|
||||||
|
_rkApp.SetValue(AppName, updateAppsBox.Checked ? "uptool dist-upgrade" : "uptool upgrade-self");
|
||||||
|
else if (_rkApp.GetValue(AppName) != null)
|
||||||
|
_rkApp.DeleteValue(AppName, false);
|
||||||
|
}
|
||||||
|
Step(8, "Done!");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Step(progress.Value, $"Failed!{Environment.NewLine}{ex}");
|
||||||
|
BackColor = Color.Red;
|
||||||
|
processLabel.Text = "Failed";
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
BackColor = SystemColors.Control;
|
||||||
|
progress.Visible = false;
|
||||||
|
}));
|
||||||
|
}).Start();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
log.Visible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Step(int p, string text)
|
||||||
|
{
|
||||||
|
progress.Value = p;
|
||||||
|
processLabel.Text = text;
|
||||||
|
Log(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Log(string text) => _log +=
|
||||||
|
$"{Environment.NewLine}[{DateTime.Now.ToString(CultureInfo.InvariantCulture).Split(' ')[1]}] {text}";
|
||||||
|
|
||||||
|
private void log_Click(object sender, EventArgs e) => new Thread(() => MessageBox.Show(_log)).Start();
|
||||||
|
|
||||||
|
private void pathBox_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
startupBox.Enabled = pathBox.Checked;
|
||||||
|
if (!pathBox.Checked)
|
||||||
|
{
|
||||||
|
startupBox.Checked = false;
|
||||||
|
updateAppsBox.Checked = false;
|
||||||
|
updateAppsBox.Enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startupBox_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
updateAppsBox.Enabled = startupBox.Checked;
|
||||||
|
if (!startupBox.Checked)
|
||||||
|
updateAppsBox.Checked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
355
Installer/InstallerForm.resx
Normal file
355
Installer/InstallerForm.resx
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="installLabel.Text" xml:space="preserve">
|
||||||
|
<value>Thank you for downloading UpTool2.
|
||||||
|
To prevent inconsistent behavior you will need to install this before running.
|
||||||
|
Files will be placed in %appdata%\UpTool2 and %appdata%\Microsoft\Windows\Start Menu\Programs
|
||||||
|
There will also be a new PATH Entry for your user.
|
||||||
|
Do you want to continue?</value>
|
||||||
|
</data>
|
||||||
|
<assembly alias="System.Drawing.Common" name="System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing.Common" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/vDoAPzdyQD6yqkA+bqHAPisYwD4oT0A95wWAPecFgD4oT0A+KxjAPm6
|
||||||
|
hwD6yqkA/N3JAP7w6AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP3s4gD7zrAA/wAADf8AAEv/AACB/wAArf8AAND/AADq/wAA+f8A
|
||||||
|
AP//AAD5/wAA6v8AAND/AACt/wAAgf8AAEv/AAAN+K5pAPvOsAD97OIA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/OLSAP8AAAn/AABg/wAAsP8AAPn/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AALD/AABg/wAACfm8
|
||||||
|
jAD84tIA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD959sA/wAAG/8AAIH/AADh/wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAOH/AACB/wAAG/m9jwD959sA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP749QD/AAAD/wAAdP8A
|
||||||
|
AOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOH/AAB0/wAAA/vPsgD++PUA////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP3r
|
||||||
|
4AD/AABA/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
ALf/AABA+byMAP3r4AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////APzj0wD/AABp/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA5f8AAGn4r20A/OPTAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAP/AACA/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAgP8AAAP8384A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAAP/AACH/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AACH/wAAA/zj0wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP3r4AD/AACA/wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAID4r20A/evgAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP74
|
||||||
|
9QD/AABp/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAafm8jAD++PUA////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABA+8+yAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AAAD/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAAt/8AAAP959sA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAdP8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB0+b2PAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAG/8A
|
||||||
|
AOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA4f8A
|
||||||
|
ABv84tIA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAIH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AACB+byMAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAn/AADh/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA4f8AAAn97OIA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AABg/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABg+86wAP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAsP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAAsPiuaQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A/wAADf8AAPn/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAPn/AAAN/vDoAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAEv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAS/zdyQD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AACB/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AIH6yqkA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAArf8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AACt+bqHAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAND/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA0PisYwD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AADq/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOr4oT0A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAA+f8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD595wWAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//ecFgD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AAD5/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPn4oT0A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/wAA6v8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADq+KxjAP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8AAND/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA0Pm6hwD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD/AACt/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAK36yqkA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/wAAgf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACB/N3JAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAEv/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAS/7w
|
||||||
|
6AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAAN/wAA+f8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA+f8AAA3///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AALD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AALD7zrAA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AABg/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABg/eziAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAACf8AAOH/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADh/wAACf//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD/AACB/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAAgfzi0gD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/wAAG/8AAOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA4f8AABv///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAB0/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHT959sA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAA/8A
|
||||||
|
ALf/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AALf/AAAD////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABA/vj1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAGn/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AABp/evgAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAgP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACA/OPTAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAAP/AACH/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACH/wAAA////wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/wAAA/8AAID/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACA/wAAA///
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAaf8A
|
||||||
|
AOX/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABp/evgAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AALf/AABA/vj1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAAP/AAB0/wAA4f8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA4f8AAHT/AAAD////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8A
|
||||||
|
ABv/AACB/wAA4f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADh/wAAgf8AABv///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAn/AABg/wAAsP8AAPn/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AALD/AABg/wAACf///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAAN/wAAS/8A
|
||||||
|
AIH/AACt/wAA0P8AAOr/AAD5/wAA//8AAPn/AADq/wAA0P8AAK3/AACB/wAAS/8AAA3///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////////////////////////////////////////////////////////////////////////
|
||||||
|
//////8AAf//////+AAAP//////gAAAP/////4AAAAP/////AAAAAf////4AAAAA////+AAAAAA////w
|
||||||
|
AAAAAB////AAAAAAH///4AAAAAAP///AAAAAAAf//4AAAAAAA///gAAAAAAD//8AAAAAAAH//wAAAAAA
|
||||||
|
Af/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wA
|
||||||
|
AAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAA
|
||||||
|
AH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP//AAAAAAAB//8A
|
||||||
|
AAAAAAH//4AAAAAAA///gAAAAAAD///AAAAAAAf//+AAAAAAD///8AAAAAAf///wAAAAAB////gAAAAA
|
||||||
|
P////gAAAAD/////AAAAAf////+AAAAD/////+AAAA//////+AAAP///////AAH/////////////////
|
||||||
|
//////////////////////////////////////////////////8=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
19
Installer/PATH.cs
Normal file
19
Installer/PATH.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Installer
|
||||||
|
{
|
||||||
|
public static class Path
|
||||||
|
{
|
||||||
|
public static string[] Content
|
||||||
|
{
|
||||||
|
get => Environment.GetEnvironmentVariable("path", EnvironmentVariableTarget.User).Split(';');
|
||||||
|
set => Environment.SetEnvironmentVariable("path", string.Join(';', value), EnvironmentVariableTarget.User);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Append(string path, bool escape = true) =>
|
||||||
|
Content = Content.Append(escape ? GetName(path) : path).ToArray();
|
||||||
|
|
||||||
|
public static string GetName(string path) => System.IO.Path.GetFullPath(path);
|
||||||
|
}
|
||||||
|
}
|
21
Installer/Program.cs
Normal file
21
Installer/Program.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using UpToolLib;
|
||||||
|
|
||||||
|
namespace Installer
|
||||||
|
{
|
||||||
|
internal static class Program
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The main entry point for the application.
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
private static void Main()
|
||||||
|
{
|
||||||
|
Application.SetHighDpiMode(HighDpiMode.SystemAware);
|
||||||
|
Application.EnableVisualStyles();
|
||||||
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
Application.Run(new InstallerForm());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
124
Installer/Shortcut.cs
Normal file
124
Installer/Shortcut.cs
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Installer
|
||||||
|
{
|
||||||
|
internal static class Shortcut
|
||||||
|
{
|
||||||
|
private static readonly Type MType = Type.GetTypeFromProgID("WScript.Shell");
|
||||||
|
private static readonly object MShell = Activator.CreateInstance(MType);
|
||||||
|
|
||||||
|
public static void Make(string target, string fileName)
|
||||||
|
{
|
||||||
|
IWshShortcut shortcut = (IWshShortcut) MType.InvokeMember("CreateShortcut", BindingFlags.InvokeMethod,
|
||||||
|
null, MShell, new object[] {fileName});
|
||||||
|
shortcut.TargetPath = target;
|
||||||
|
shortcut.Save();
|
||||||
|
}
|
||||||
|
|
||||||
|
[ComImport]
|
||||||
|
[TypeLibType(0x1040)]
|
||||||
|
[Guid("F935DC23-1CF0-11D0-ADB9-00C04FD58A0B")]
|
||||||
|
private interface IWshShortcut
|
||||||
|
{
|
||||||
|
[DispId(0)]
|
||||||
|
string FullName
|
||||||
|
{
|
||||||
|
[return: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0)]
|
||||||
|
get;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DispId(0x3e8)]
|
||||||
|
string Arguments
|
||||||
|
{
|
||||||
|
[return: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3e8)]
|
||||||
|
get;
|
||||||
|
[param: In]
|
||||||
|
[param: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3e8)]
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DispId(0x3e9)]
|
||||||
|
string Description
|
||||||
|
{
|
||||||
|
[return: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3e9)]
|
||||||
|
get;
|
||||||
|
[param: In]
|
||||||
|
[param: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3e9)]
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DispId(0x3ea)]
|
||||||
|
string Hotkey
|
||||||
|
{
|
||||||
|
[return: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3ea)]
|
||||||
|
get;
|
||||||
|
[param: In]
|
||||||
|
[param: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3ea)]
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DispId(0x3eb)]
|
||||||
|
string IconLocation
|
||||||
|
{
|
||||||
|
[return: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3eb)]
|
||||||
|
get;
|
||||||
|
[param: In]
|
||||||
|
[param: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3eb)]
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DispId(0x3ec)]
|
||||||
|
string RelativePath
|
||||||
|
{
|
||||||
|
[param: In]
|
||||||
|
[param: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3ec)]
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DispId(0x3ed)]
|
||||||
|
string TargetPath
|
||||||
|
{
|
||||||
|
[return: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3ed)]
|
||||||
|
get;
|
||||||
|
[param: In]
|
||||||
|
[param: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3ed)]
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DispId(0x3ee)] int WindowStyle { [DispId(0x3ee)] get; [param: In] [DispId(0x3ee)] set; }
|
||||||
|
|
||||||
|
[DispId(0x3ef)]
|
||||||
|
string WorkingDirectory
|
||||||
|
{
|
||||||
|
[return: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3ef)]
|
||||||
|
get;
|
||||||
|
[param: In]
|
||||||
|
[param: MarshalAs(UnmanagedType.BStr)]
|
||||||
|
[DispId(0x3ef)]
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[TypeLibFunc(0x40)]
|
||||||
|
[DispId(0x7d0)]
|
||||||
|
void Load([In] [MarshalAs(UnmanagedType.BStr)] string pathLink);
|
||||||
|
|
||||||
|
[DispId(0x7d1)]
|
||||||
|
void Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
65
Installer/UTLibFunctions.cs
Normal file
65
Installer/UTLibFunctions.cs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
|
||||||
|
namespace Installer
|
||||||
|
{
|
||||||
|
internal class UtLibFunctionsGui : IExternalFunctionality
|
||||||
|
{
|
||||||
|
private readonly Action<string> _log;
|
||||||
|
public UtLibFunctionsGui(Action<string> log) => _log = log;
|
||||||
|
|
||||||
|
public Tuple<bool, byte[]> Download(Uri link)
|
||||||
|
{
|
||||||
|
using WebClient cli = new();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return new Tuple<bool, byte[]>(true, cli.DownloadData(link));
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return new Tuple<bool, byte[]>(false, new byte[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string FetchImageB64(Uri link)
|
||||||
|
{
|
||||||
|
using WebClient client = new();
|
||||||
|
Image src = Image.FromStream(
|
||||||
|
client.OpenRead(link));
|
||||||
|
Bitmap dest = new(70, 70);
|
||||||
|
dest.SetResolution(src.HorizontalResolution, src.VerticalResolution);
|
||||||
|
using (Graphics g = Graphics.FromImage(dest))
|
||||||
|
{
|
||||||
|
g.CompositingMode = CompositingMode.SourceCopy;
|
||||||
|
g.CompositingQuality = CompositingQuality.HighQuality;
|
||||||
|
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||||
|
g.SmoothingMode = SmoothingMode.HighQuality;
|
||||||
|
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
||||||
|
using ImageAttributes wrapMode = new();
|
||||||
|
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
|
||||||
|
g.DrawImage(src, new Rectangle(0, 0, 70, 70), 0, 0, src.Width, src.Height,
|
||||||
|
GraphicsUnit.Pixel, wrapMode);
|
||||||
|
}
|
||||||
|
using MemoryStream ms = new();
|
||||||
|
dest.Save(ms, ImageFormat.Png);
|
||||||
|
return Convert.ToBase64String(ms.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool YesNoDialog(string text, bool _) =>
|
||||||
|
MessageBox.Show(text, "", MessageBoxButtons.YesNo) == DialogResult.Yes;
|
||||||
|
|
||||||
|
public void OkDialog(string text) => MessageBox.Show(text);
|
||||||
|
public object GetDefaultIcon() => 0;
|
||||||
|
|
||||||
|
public object ImageFromB64(string b64) =>
|
||||||
|
(Bitmap) new ImageConverter().ConvertFrom(Convert.FromBase64String(b64));
|
||||||
|
|
||||||
|
public void Log(string text) => _log(text);
|
||||||
|
}
|
||||||
|
}
|
2
InstallerCLI/Info.txt
Normal file
2
InstallerCLI/Info.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Use "Installer --help" for info
|
||||||
|
(on non-windows platforms, use the dotnet CLI to run Installer.dll)
|
19
InstallerCLI/InstallerCLI.csproj
Normal file
19
InstallerCLI/InstallerCLI.csproj
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
<AssemblyName>Installer</AssemblyName>
|
||||||
|
<RootNamespace>Installer</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\UpToolLib\UpToolLib.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.2" />
|
||||||
|
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20574.7" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
90
InstallerCLI/Program.cs
Normal file
90
InstallerCLI/Program.cs
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
using System;
|
||||||
|
using System.CommandLine;
|
||||||
|
using System.CommandLine.Invocation;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Net;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Threading;
|
||||||
|
using UpToolLib;
|
||||||
|
using UpToolLib.v1.Tool;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
|
||||||
|
namespace Installer
|
||||||
|
{
|
||||||
|
public static class Program
|
||||||
|
{
|
||||||
|
public static bool Basic;
|
||||||
|
private static UpToolLibMain _lib;
|
||||||
|
public static int Main(string[] args)
|
||||||
|
{
|
||||||
|
Thread.Sleep(2000);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Basic = args.Length > 0 && args[0].ToLower() == "--basic";
|
||||||
|
_lib = new UpToolLibMain(new UtLibFunctions());
|
||||||
|
RootCommand rootCommand = new();
|
||||||
|
rootCommand.AddGlobalOption(new Option<bool>("--basic",
|
||||||
|
"Use only basic console functionality. Must be the first parameter in the call"));
|
||||||
|
Command install = new("install", "Install UpTool")
|
||||||
|
{
|
||||||
|
new Option<bool>(new[] {"--noPrep", "-p"}, "Doesn't initialize repos. Use with caution!")
|
||||||
|
};
|
||||||
|
install.AddAlias("-i");
|
||||||
|
install.AddAlias("i");
|
||||||
|
install.Handler = CommandHandler.Create<bool>(Install);
|
||||||
|
rootCommand.AddCommand(install);
|
||||||
|
return rootCommand.InvokeAsync(args).Result;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"FAILED: {e}");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_lib?.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Install(bool noPrep)
|
||||||
|
{
|
||||||
|
WebClient client = new();
|
||||||
|
Console.WriteLine("Downloading metadata");
|
||||||
|
UpdateCheck check =
|
||||||
|
_lib.V2.UpdateChecker.Check(
|
||||||
|
"https://gitlab.com/JFronny/UpTool2/-/jobs/artifacts/master/raw/meta.xml?job=uptool");
|
||||||
|
PathTool pathTool = _lib.V1.PathTool;
|
||||||
|
Console.WriteLine("Downloading binary");
|
||||||
|
byte[] dl = client.DownloadData(check.App);
|
||||||
|
Console.WriteLine("Verifying integrity");
|
||||||
|
using (SHA256CryptoServiceProvider sha256 = new())
|
||||||
|
{
|
||||||
|
string pkgHash = BitConverter.ToString(sha256.ComputeHash(dl)).Replace("-", string.Empty)
|
||||||
|
.ToUpper();
|
||||||
|
if (pkgHash != check.AppHash)
|
||||||
|
throw new Exception($@"The hash is not equal to the one stored in the repo:
|
||||||
|
Package: {pkgHash}
|
||||||
|
Online: {check.AppHash}");
|
||||||
|
}
|
||||||
|
Console.WriteLine("Extracting");
|
||||||
|
if (Directory.Exists(pathTool.GetRelative("Install")))
|
||||||
|
{
|
||||||
|
foreach (string file in Directory.GetFiles(pathTool.GetRelative("Install"))) File.Delete(file);
|
||||||
|
foreach (string dir in Directory.GetDirectories(pathTool.GetRelative("Install")))
|
||||||
|
if (Path.GetFileName(dir) != "tmp")
|
||||||
|
Directory.Delete(dir, true);
|
||||||
|
}
|
||||||
|
Directory.CreateDirectory(pathTool.GetRelative("Install"));
|
||||||
|
using (MemoryStream ms = new(dl))
|
||||||
|
{
|
||||||
|
using ZipArchive ar = new(ms);
|
||||||
|
ar.ExtractToDirectory(pathTool.GetRelative("Install"), true);
|
||||||
|
}
|
||||||
|
if (noPrep) return;
|
||||||
|
Console.WriteLine("Preparing Repos");
|
||||||
|
_lib.V1.XmlTool.FixXml();
|
||||||
|
_lib.V2.RepoManagement.FetchRepos();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
116
InstallerCLI/UTLibFunctions.cs
Normal file
116
InstallerCLI/UTLibFunctions.cs
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Threading;
|
||||||
|
using SixLabors.ImageSharp;
|
||||||
|
using SixLabors.ImageSharp.Processing;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using static Installer.Program;
|
||||||
|
|
||||||
|
namespace Installer
|
||||||
|
{
|
||||||
|
public class UtLibFunctions : IExternalFunctionality
|
||||||
|
{
|
||||||
|
public Tuple<bool, byte[]> Download(Uri link)
|
||||||
|
{
|
||||||
|
using WebClient client = new();
|
||||||
|
byte[] result = new byte[0];
|
||||||
|
bool finished = false;
|
||||||
|
bool success = true;
|
||||||
|
client.DownloadDataCompleted += (sender, e) =>
|
||||||
|
{
|
||||||
|
success = !e.Cancelled;
|
||||||
|
if (success)
|
||||||
|
result = e.Result;
|
||||||
|
finished = true;
|
||||||
|
};
|
||||||
|
client.DownloadProgressChanged += (sender, e) =>
|
||||||
|
{
|
||||||
|
if (!Basic)
|
||||||
|
{
|
||||||
|
Console.Write(
|
||||||
|
$"{new string('=', e.ProgressPercentage / 10)}[{e.ProgressPercentage}]{new string('-', 10 - e.ProgressPercentage / 10)}");
|
||||||
|
Console.CursorLeft = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
client.DownloadDataAsync(link);
|
||||||
|
while (!finished)
|
||||||
|
Thread.Sleep(100);
|
||||||
|
return new Tuple<bool, byte[]>(success, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string FetchImageB64(Uri link)
|
||||||
|
{
|
||||||
|
using WebClient client = new();
|
||||||
|
using Image image = Image.Load(client.OpenRead(link));
|
||||||
|
using MemoryStream ms = new();
|
||||||
|
image.SaveAsPng(ms);
|
||||||
|
return Convert.ToBase64String(ms.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool YesNoDialog(string text, bool defaultVal)
|
||||||
|
{
|
||||||
|
if (Basic)
|
||||||
|
{
|
||||||
|
Console.WriteLine(text);
|
||||||
|
Console.WriteLine($"Selecting: {defaultVal}");
|
||||||
|
return defaultVal;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool choosing = true;
|
||||||
|
bool current = defaultVal;
|
||||||
|
Console.WriteLine(text);
|
||||||
|
while (choosing)
|
||||||
|
{
|
||||||
|
Console.CursorLeft = 0;
|
||||||
|
Console.BackgroundColor = current ? ConsoleColor.White : ConsoleColor.Black;
|
||||||
|
Console.ForegroundColor = current ? ConsoleColor.Black : ConsoleColor.White;
|
||||||
|
Console.Write("Yes");
|
||||||
|
Console.ResetColor();
|
||||||
|
Console.Write(" ");
|
||||||
|
Console.BackgroundColor = current ? ConsoleColor.Black : ConsoleColor.White;
|
||||||
|
Console.ForegroundColor = current ? ConsoleColor.White : ConsoleColor.Black;
|
||||||
|
Console.Write("No");
|
||||||
|
Console.ResetColor();
|
||||||
|
switch (Console.ReadKey().Key)
|
||||||
|
{
|
||||||
|
case ConsoleKey.LeftArrow:
|
||||||
|
case ConsoleKey.RightArrow:
|
||||||
|
current = !current;
|
||||||
|
break;
|
||||||
|
case ConsoleKey.Enter:
|
||||||
|
choosing = false;
|
||||||
|
break;
|
||||||
|
case ConsoleKey.Escape:
|
||||||
|
current = defaultVal;
|
||||||
|
choosing = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Console.ResetColor();
|
||||||
|
Console.WriteLine($" Selecting: {current}");
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OkDialog(string text)
|
||||||
|
{
|
||||||
|
if (Basic)
|
||||||
|
Console.WriteLine(text);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine(text);
|
||||||
|
Console.BackgroundColor = ConsoleColor.White;
|
||||||
|
Console.Write("OK");
|
||||||
|
Console.ResetColor();
|
||||||
|
Console.ReadKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public object GetDefaultIcon() => 0;
|
||||||
|
|
||||||
|
public object ImageFromB64(string b64) => 0;
|
||||||
|
public void Log(string text) => Console.WriteLine(text);
|
||||||
|
}
|
||||||
|
}
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 J. Fronny
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
57
README.md
57
README.md
@ -1 +1,58 @@
|
|||||||
# UpTool2
|
# UpTool2
|
||||||
|
Downloading software from online repos since 2019\
|
||||||
|
[![GitLab pipeline](https://img.shields.io/gitlab/pipeline/JFronny/UpTool2)](https://gitlab.com/JFronny/UpTool2/builds)
|
||||||
|
[![Discord](https://img.shields.io/discord/466965965658128384)](https://discordapp.com/invite/UjhHBqt)
|
||||||
|
[![Default Repo](https://img.shields.io/badge/Default-Repo-informational)](https://gitlab.com/JFronny/UpTool2/snippets/1988600)
|
||||||
|
## How to automate UpTool2 deployments
|
||||||
|
You will want the assembly version to automatically increment.
|
||||||
|
To achieve this you have to add this:\
|
||||||
|
`<Deterministic>false</Deterministic>`\
|
||||||
|
to your csproj in the main PropertyGroup and change your AssemblyVersion to `1.0.*` or something like this\
|
||||||
|
Now you can add this\
|
||||||
|
```if exist "$(SolutionDir)Data\pkgtool.exe" ($(SolutionDir)Data\pkgtool.exe build --noLogo --binDir .) else if exist "%appdata%\UpTool2\Apps\0e35d154-d0d3-45e0-b080-62f521263a44\app\pkgtool.exe" ("%appdata%\UpTool2\Apps\0e35d154-d0d3-45e0-b080-62f521263a44\app\pkgtool.exe" build --noLogo --binDir .) else echo Cound not find Package build tools, skipping```\
|
||||||
|
as a PostBuild event to automatically run pkgtool. Customize this if you need to.\
|
||||||
|
For GitHub actions I wrote [this](https://github.com/JFronny/CC-Clicker/blob/master/.github/workflows/main.yml).\
|
||||||
|
If you copy it, make sure to replace the descriptions and ID under the `Generate XML` step\
|
||||||
|
You can also add something like this to your Readme: [![UpTool2](https://img.shields.io/badge/Get%20it-on%20UpTool2-blue)](https://jfronny.gitlab.io/home/uptool)\
|
||||||
|
(Look at the source for the MD Code)
|
||||||
|
## Folder layout
|
||||||
|
- %APPDATA%\UpTool2
|
||||||
|
- Apps
|
||||||
|
- __APPGUID
|
||||||
|
- `info.xml` Local copy of some app information, like [this](https://gitlab.com/JFronny/UpTool2#app-layout) but missing ID, File, Hash, Platform and Icon
|
||||||
|
- [`package.zip`](https://gitlab.com/JFronny/UpTool2#package-layout) The package that was downloaded on install
|
||||||
|
- `app` The app install path
|
||||||
|
- `__APPFILES` Copy of the app files from above, may contain user-configs
|
||||||
|
- `info.xml` File used by UpTool2 for saving info
|
||||||
|
- `Version` The installed version. Not used anymore
|
||||||
|
- `Repos` The list of package repos
|
||||||
|
- `__REPO` A repository
|
||||||
|
- `Name` The display name of the repository
|
||||||
|
- `Link` The source of the repo xml
|
||||||
|
- `Local Repo` A preprocessed copy of the online repos
|
||||||
|
- [`__APP`](https://gitlab.com/JFronny/UpTool2#app-layout) A normal app with the icon processed as Base64
|
||||||
|
- `Install` The folder containing the actual tool
|
||||||
|
- `__ZIP CONTENTS` The app files
|
||||||
|
- `tmp` A temporary folder used during updates
|
||||||
|
- `__FILES FOR UPDATE` The downloaded update files
|
||||||
|
## Repo layout
|
||||||
|
- `repo` The main repo tag
|
||||||
|
- `__APPLINK` Links to external app XMLs
|
||||||
|
- `__REPOLINK` Links to external repos
|
||||||
|
- [`__APP`](https://gitlab.com/JFronny/UpTool2#app-layout) Apps
|
||||||
|
## App layout
|
||||||
|
- app
|
||||||
|
- `Name` Name of the application
|
||||||
|
- `Description` Description that gets displayed on the right panel
|
||||||
|
- `Version` Version for update checking, might get removed
|
||||||
|
- `ID` The Guid used for identification
|
||||||
|
- `File` A link to the package file
|
||||||
|
- `Hash` The files SHA256 Hash
|
||||||
|
- `Icon` The apps icon, (optional)
|
||||||
|
- `MainFile` Main binary, used for starting, (optional)
|
||||||
|
- `Platform` The platform this works on (optional, defaults to current)
|
||||||
|
## Package layout
|
||||||
|
- `Install.bat` The script for installing the app
|
||||||
|
- `Remove.bat` The script for removing the app
|
||||||
|
- `Data` The folder containing binaries
|
||||||
|
- `__APPFILES` The binaries
|
||||||
|
5
ToDo.txt
5
ToDo.txt
@ -1,5 +0,0 @@
|
|||||||
Automatic Updates for UpTool
|
|
||||||
ProgressBar for Downloads
|
|
||||||
Icons
|
|
||||||
Splash screen
|
|
||||||
Search
|
|
31
UpTool build tool/BatchScripts.cs
Normal file
31
UpTool build tool/BatchScripts.cs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace UpTool_build_tool
|
||||||
|
{
|
||||||
|
internal static class BatchScripts
|
||||||
|
{
|
||||||
|
public static Tuple<string, string> Create(bool shortcuts, string? mainBin, string programName,
|
||||||
|
string? postInstall, string? postRemove)
|
||||||
|
{
|
||||||
|
string installBat = "@echo off\r\necho INSTALL";
|
||||||
|
string removeBat = "@echo off\r\necho REMOVE";
|
||||||
|
if (shortcuts)
|
||||||
|
{
|
||||||
|
installBat += "\r\n";
|
||||||
|
installBat +=
|
||||||
|
$@"powershell ""$s=(New-Object -COM WScript.Shell).CreateShortcut('%appdata%\Microsoft\Windows\Start Menu\Programs\{programName}.lnk');$s.TargetPath='%cd%\{Path.GetFileName(mainBin)}';$s.Save()""";
|
||||||
|
removeBat += "\r\n";
|
||||||
|
removeBat += $@"del ""%appdata%\Microsoft\Windows\Start Menu\Programs\{programName}.lnk""";
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrWhiteSpace(mainBin))
|
||||||
|
{
|
||||||
|
removeBat += "\r\n";
|
||||||
|
removeBat += $@"taskkill /f /im ""{Path.GetFileName(mainBin)}""";
|
||||||
|
}
|
||||||
|
installBat += $"\r\n{postInstall}";
|
||||||
|
removeBat += $"\r\n{postRemove}";
|
||||||
|
return new Tuple<string, string>(installBat, removeBat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
95
UpTool build tool/Program.cs
Normal file
95
UpTool build tool/Program.cs
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
using System;
|
||||||
|
using System.CommandLine;
|
||||||
|
using System.CommandLine.Invocation;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Reflection;
|
||||||
|
using CC_Functions.Core;
|
||||||
|
|
||||||
|
namespace UpTool_build_tool
|
||||||
|
{
|
||||||
|
internal static class Program
|
||||||
|
{
|
||||||
|
public static int Main(string[] args)
|
||||||
|
{
|
||||||
|
RootCommand rootCommand = new RootCommand();
|
||||||
|
Command build = new Command("build", "Builds a generic package with or without shortcuts from a directory")
|
||||||
|
{
|
||||||
|
new Option<string>("--binDir", "Directory to package"),
|
||||||
|
new Option<string>("--mainBin", () => "FIND_BIN", "The applications main binary"),
|
||||||
|
new Option<string>("--packageFile", "Directory to package"),
|
||||||
|
new Option<string>("--postInstall", () => "",
|
||||||
|
"Command(s) to run after installing the package (This will be pasted into the .bat AND .sh file)"),
|
||||||
|
new Option<string>("--postRemove", () => "",
|
||||||
|
"Command(s) to run after removing the package (This will be pasted into the .bat AND .sh file)"),
|
||||||
|
new Option<bool>("--noLogo", "Disables the logo"),
|
||||||
|
new Option<bool>("--noShortcuts",
|
||||||
|
"When this is enabled the scripts will not generate a start-menu item"),
|
||||||
|
new Option<bool>("--noWine",
|
||||||
|
"This indicates that your program supports multiple platforms natively and doesn't require WINE")
|
||||||
|
};
|
||||||
|
build.Handler =
|
||||||
|
CommandHandler.Create((Action<string?, string, string, string, string, bool, bool, bool>) Build);
|
||||||
|
rootCommand.AddCommand(build);
|
||||||
|
return rootCommand.InvokeAsync(args).Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Build(string? binDir, string? mainBin, string? packageFile, string? postInstall,
|
||||||
|
string? postRemove, bool noLogo, bool noShortcuts, bool noWine)
|
||||||
|
{
|
||||||
|
Stopwatch watch = Stopwatch.StartNew();
|
||||||
|
if (!noLogo)
|
||||||
|
{
|
||||||
|
Console.WriteLine("-------------------------------");
|
||||||
|
Console.WriteLine("| UpTool2 package build tools |");
|
||||||
|
Console.WriteLine("-------------------------------");
|
||||||
|
Console.WriteLine();
|
||||||
|
Console.WriteLine($"Using version {Assembly.GetExecutingAssembly().GetName().Version}");
|
||||||
|
Console.WriteLine();
|
||||||
|
}
|
||||||
|
Console.WriteLine("Parsing arguments...");
|
||||||
|
packageFile ??= Path.Combine(binDir, "package.zip");
|
||||||
|
if (File.Exists(packageFile))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Removing previous package...");
|
||||||
|
File.Delete(packageFile);
|
||||||
|
}
|
||||||
|
Console.WriteLine("Copying binary dir...");
|
||||||
|
using ZipArchive archive = ZipFile.Open(packageFile, ZipArchiveMode.Create);
|
||||||
|
{
|
||||||
|
archive.AddDirectory(binDir, "Data", new[] {".xml", ".pdb"}, new[] {packageFile});
|
||||||
|
Console.WriteLine("Creating batch scripts...");
|
||||||
|
if (mainBin == "FIND_BIN")
|
||||||
|
{
|
||||||
|
string[] tmp = Directory.GetFiles(binDir, "*.exe");
|
||||||
|
if (tmp.Length > 0)
|
||||||
|
mainBin = Directory.GetFiles(binDir, "*.exe")[0];
|
||||||
|
if (tmp.Length > 1)
|
||||||
|
{
|
||||||
|
Console.WriteLine(
|
||||||
|
"Detected multiple EXEs. This is not recommended as all processes running in the app folder will need to be terminated for uninstall to succeed");
|
||||||
|
Console.WriteLine(
|
||||||
|
"Please consider removing unnecessary EXEs or notify me that anyone is actually using this.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
string programName = Path.GetFileNameWithoutExtension(mainBin);
|
||||||
|
(string installBat, string removeBat) =
|
||||||
|
BatchScripts.Create(!noShortcuts, mainBin, programName, postInstall, postRemove);
|
||||||
|
archive.AddFile("Install.bat", installBat);
|
||||||
|
archive.AddFile("Remove.bat", removeBat);
|
||||||
|
ShScripts.Create(archive.AddFile, !noShortcuts, mainBin, programName, postInstall, postRemove, !noWine);
|
||||||
|
}
|
||||||
|
watch.Stop();
|
||||||
|
Console.WriteLine($"Completed package creation in {watch.Elapsed}");
|
||||||
|
Console.WriteLine($"Output file: {Path.GetFullPath(packageFile)}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AddFile(this ZipArchive archive, string fileName, string content)
|
||||||
|
{
|
||||||
|
using Stream s = archive.CreateEntry(fileName).Open();
|
||||||
|
using StreamWriter writer = new StreamWriter(s);
|
||||||
|
writer.Write(content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
41
UpTool build tool/ShScripts.cs
Normal file
41
UpTool build tool/ShScripts.cs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace UpTool_build_tool
|
||||||
|
{
|
||||||
|
internal static class ShScripts
|
||||||
|
{
|
||||||
|
public static void Create(Action<string, string> fileSave, bool shortcuts, string? mainBin, string programName,
|
||||||
|
string? postInstall, string? postRemove, bool wine)
|
||||||
|
{
|
||||||
|
Regex rgx = new Regex("[^a-z0-9]");
|
||||||
|
Regex upRgx = new Regex("[^a-zA-Z0-9 -]");
|
||||||
|
string lnkName = $"~/.local/share/applications/{rgx.Replace(programName.ToLower(), "")}.desktop";
|
||||||
|
string installSh = "#!/bin/bash\necho INSTALL";
|
||||||
|
string removeSh = "#!/bin/bash\necho REMOVE";
|
||||||
|
if (shortcuts)
|
||||||
|
{
|
||||||
|
installSh += $@"
|
||||||
|
echo ""[Desktop Entry]"" > {lnkName}
|
||||||
|
echo ""Exec={(wine ? "wine " : "")}{Path.GetFileName(mainBin)}"" >> {lnkName}
|
||||||
|
echo ""Icon=application/x-shellscript"" >> {lnkName}
|
||||||
|
echo ""Name={upRgx.Replace(programName, "")}"" >> {lnkName}
|
||||||
|
echo ""StartupNotify=false"" >> {lnkName}
|
||||||
|
echo ""Terminal=false"" >> {lnkName}
|
||||||
|
echo ""Type=Application"" >> {lnkName}";
|
||||||
|
removeSh += "\r\n";
|
||||||
|
removeSh += $@"rm {lnkName}";
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrWhiteSpace(mainBin))
|
||||||
|
{
|
||||||
|
removeSh += "\r\n";
|
||||||
|
removeSh += $@"pkill -f ""{Path.GetFileName(mainBin)}""";
|
||||||
|
}
|
||||||
|
installSh += $"\r\n{postInstall}";
|
||||||
|
removeSh += $"\r\n{postRemove}";
|
||||||
|
fileSave("Install.sh", installSh);
|
||||||
|
fileSave("Remove.sh", removeSh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
UpTool build tool/UpTool build tool.csproj
Normal file
21
UpTool build tool/UpTool build tool.csproj
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<RootNamespace>UpTool_build_tool</RootNamespace>
|
||||||
|
<AssemblyName>pkgtool</AssemblyName>
|
||||||
|
<Deterministic>false</Deterministic>
|
||||||
|
<LangVersion>8</LangVersion>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<AssemblyVersion>1.0.*</AssemblyVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<PostBuildEvent Condition="'$(OS)' != 'Windows_NT'">.\pkgtool build --noLogo --noShortcuts --binDir . --mainBin ""</PostBuildEvent>
|
||||||
|
<PostBuildEvent Condition="'$(OS)' == 'Windows_NT'">pkgtool.exe build --noLogo --noShortcuts --binDir . --mainBin ""</PostBuildEvent>
|
||||||
|
<ApplicationIcon>..\UpTool2.ico</ApplicationIcon>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="CC-Functions.Core" Version="1.1.7628.34181" />
|
||||||
|
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20574.7" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
BIN
UpTool2.ico
Normal file
BIN
UpTool2.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
73
UpTool2.sln
73
UpTool2.sln
@ -3,14 +3,38 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 16
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 16.0.29230.47
|
VisualStudioVersion = 16.0.29230.47
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpTool2", "UpTool2\UpTool2.csproj", "{C0C1E002-9E13-4E8F-A035-DBDC5128E00E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UpTool2", "UpTool2\UpTool2.csproj", "{C0C1E002-9E13-4E8F-A035-DBDC5128E00E}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9841227C-3F1B-4C32-8123-3DB2CF4E15EE}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9841227C-3F1B-4C32-8123-3DB2CF4E15EE}"
|
||||||
ProjectSection(SolutionItems) = preProject
|
ProjectSection(SolutionItems) = preProject
|
||||||
FolderLayout.txt = FolderLayout.txt
|
.gitignore = .gitignore
|
||||||
ToDo.txt = ToDo.txt
|
README.md = README.md
|
||||||
|
CLI.md = CLI.md
|
||||||
|
.gitlab-ci.yml = .gitlab-ci.yml
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UpTool build tool", "UpTool build tool\UpTool build tool.csproj", "{AAB8D6BA-3A43-4DC4-95EE-6757482B77FD}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Installer", "Installer\Installer.csproj", "{1D273392-3796-4BE9-A67F-BB402315D52D}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpToolLib", "UpToolLib\UpToolLib.csproj", "{FACD621F-6C6D-4D4B-B322-4364A0F9B4C2}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpToolCLI", "UpToolCLI\UpToolCLI.csproj", "{3EC369B9-D927-4A53-BE1A-7E7006081BCE}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GUI", "GUI", "{EA919DFD-766B-423C-99DF-C99356592842}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CLI", "CLI", "{3CFAB991-C12A-4B51-BC91-6965133DAF53}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{0E778462-504C-4183-A27E-44EEE7B8CCDD}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InstallerCLI", "InstallerCLI\InstallerCLI.csproj", "{493B2CC5-29E9-4F10-A2F5-E10B9584D667}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpToolEto", "UpToolEto\UpToolEto\UpToolEto.csproj", "{213FF69B-426E-475F-8A77-0A20EA4257C2}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpToolEto.Gtk", "UpToolEto\UpToolEto.Gtk\UpToolEto.Gtk.csproj", "{8A544AEA-3081-45C9-BED2-7E424EB287B1}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpToolEto.Wpf", "UpToolEto\UpToolEto.Wpf\UpToolEto.Wpf.csproj", "{C89EC79F-CC2B-4B8E-B4CB-D4DFD30A58AB}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@ -21,6 +45,38 @@ Global
|
|||||||
{C0C1E002-9E13-4E8F-A035-DBDC5128E00E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{C0C1E002-9E13-4E8F-A035-DBDC5128E00E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{C0C1E002-9E13-4E8F-A035-DBDC5128E00E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{C0C1E002-9E13-4E8F-A035-DBDC5128E00E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{C0C1E002-9E13-4E8F-A035-DBDC5128E00E}.Release|Any CPU.Build.0 = Release|Any CPU
|
{C0C1E002-9E13-4E8F-A035-DBDC5128E00E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{AAB8D6BA-3A43-4DC4-95EE-6757482B77FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{AAB8D6BA-3A43-4DC4-95EE-6757482B77FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{AAB8D6BA-3A43-4DC4-95EE-6757482B77FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{AAB8D6BA-3A43-4DC4-95EE-6757482B77FD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1D273392-3796-4BE9-A67F-BB402315D52D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1D273392-3796-4BE9-A67F-BB402315D52D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1D273392-3796-4BE9-A67F-BB402315D52D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1D273392-3796-4BE9-A67F-BB402315D52D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{FACD621F-6C6D-4D4B-B322-4364A0F9B4C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{FACD621F-6C6D-4D4B-B322-4364A0F9B4C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{FACD621F-6C6D-4D4B-B322-4364A0F9B4C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{FACD621F-6C6D-4D4B-B322-4364A0F9B4C2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{3EC369B9-D927-4A53-BE1A-7E7006081BCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3EC369B9-D927-4A53-BE1A-7E7006081BCE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3EC369B9-D927-4A53-BE1A-7E7006081BCE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{3EC369B9-D927-4A53-BE1A-7E7006081BCE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{493B2CC5-29E9-4F10-A2F5-E10B9584D667}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{493B2CC5-29E9-4F10-A2F5-E10B9584D667}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{493B2CC5-29E9-4F10-A2F5-E10B9584D667}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{493B2CC5-29E9-4F10-A2F5-E10B9584D667}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{213FF69B-426E-475F-8A77-0A20EA4257C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{213FF69B-426E-475F-8A77-0A20EA4257C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{213FF69B-426E-475F-8A77-0A20EA4257C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{213FF69B-426E-475F-8A77-0A20EA4257C2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{8A544AEA-3081-45C9-BED2-7E424EB287B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{8A544AEA-3081-45C9-BED2-7E424EB287B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{8A544AEA-3081-45C9-BED2-7E424EB287B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{8A544AEA-3081-45C9-BED2-7E424EB287B1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{C89EC79F-CC2B-4B8E-B4CB-D4DFD30A58AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{C89EC79F-CC2B-4B8E-B4CB-D4DFD30A58AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{C89EC79F-CC2B-4B8E-B4CB-D4DFD30A58AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{C89EC79F-CC2B-4B8E-B4CB-D4DFD30A58AB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -28,4 +84,15 @@ Global
|
|||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {008127DC-F473-4709-A763-75F5FCED93AB}
|
SolutionGuid = {008127DC-F473-4709-A763-75F5FCED93AB}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{FACD621F-6C6D-4D4B-B322-4364A0F9B4C2} = {0E778462-504C-4183-A27E-44EEE7B8CCDD}
|
||||||
|
{AAB8D6BA-3A43-4DC4-95EE-6757482B77FD} = {0E778462-504C-4183-A27E-44EEE7B8CCDD}
|
||||||
|
{C0C1E002-9E13-4E8F-A035-DBDC5128E00E} = {EA919DFD-766B-423C-99DF-C99356592842}
|
||||||
|
{3EC369B9-D927-4A53-BE1A-7E7006081BCE} = {3CFAB991-C12A-4B51-BC91-6965133DAF53}
|
||||||
|
{1D273392-3796-4BE9-A67F-BB402315D52D} = {EA919DFD-766B-423C-99DF-C99356592842}
|
||||||
|
{493B2CC5-29E9-4F10-A2F5-E10B9584D667} = {3CFAB991-C12A-4B51-BC91-6965133DAF53}
|
||||||
|
{213FF69B-426E-475F-8A77-0A20EA4257C2} = {EA919DFD-766B-423C-99DF-C99356592842}
|
||||||
|
{8A544AEA-3081-45C9-BED2-7E424EB287B1} = {EA919DFD-766B-423C-99DF-C99356592842}
|
||||||
|
{C89EC79F-CC2B-4B8E-B4CB-D4DFD30A58AB} = {EA919DFD-766B-423C-99DF-C99356592842}
|
||||||
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
2
UpTool2.sln.DotSettings
Normal file
2
UpTool2.sln.DotSettings
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=pkgtool/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
BIN
UpTool2.xcf
Normal file
BIN
UpTool2.xcf
Normal file
Binary file not shown.
@ -1,23 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<configSections>
|
|
||||||
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
|
|
||||||
<section name="UpTool2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
|
||||||
</sectionGroup>
|
|
||||||
</configSections>
|
|
||||||
<startup>
|
<startup>
|
||||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
|
||||||
</startup>
|
</startup>
|
||||||
<userSettings>
|
|
||||||
<UpTool2.Properties.Settings>
|
|
||||||
<setting name="Repos" serializeAs="Xml">
|
|
||||||
<value>
|
|
||||||
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
|
||||||
<string>https://github.com/CreepyCrafter24/UpTool2/releases/download/Repo/Repo.xml</string>
|
|
||||||
</ArrayOfString>
|
|
||||||
</value>
|
|
||||||
</setting>
|
|
||||||
</UpTool2.Properties.Settings>
|
|
||||||
</userSettings>
|
|
||||||
</configuration>
|
</configuration>
|
72
UpTool2/AppNameDialog.Designer.cs
generated
Normal file
72
UpTool2/AppNameDialog.Designer.cs
generated
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
using System.ComponentModel;
|
||||||
|
|
||||||
|
namespace UpTool2
|
||||||
|
{
|
||||||
|
partial class AppNameDialog
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AppNameDialog));
|
||||||
|
this.nameBox = new System.Windows.Forms.TextBox();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// nameBox
|
||||||
|
//
|
||||||
|
this.nameBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.nameBox.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.nameBox.Name = "nameBox";
|
||||||
|
this.nameBox.Size = new System.Drawing.Size(375, 23);
|
||||||
|
this.nameBox.TabIndex = 0;
|
||||||
|
this.nameBox.TextChanged += new System.EventHandler(this.nameBox_TextChanged);
|
||||||
|
this.nameBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.nameBox_KeyDown);
|
||||||
|
//
|
||||||
|
// AppNameDialog
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(399, 41);
|
||||||
|
this.Controls.Add(this.nameBox);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.Name = "AppNameDialog";
|
||||||
|
this.ShowIcon = false;
|
||||||
|
this.ShowInTaskbar = false;
|
||||||
|
this.Text = "App Name";
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.AppNameDialog_FormClosing);
|
||||||
|
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.AppNameDialog_FormClosed);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.TextBox nameBox;
|
||||||
|
}
|
||||||
|
}
|
31
UpTool2/AppNameDialog.cs
Normal file
31
UpTool2/AppNameDialog.cs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace UpTool2
|
||||||
|
{
|
||||||
|
internal partial class AppNameDialog : Form
|
||||||
|
{
|
||||||
|
private string _name;
|
||||||
|
|
||||||
|
private AppNameDialog() => InitializeComponent();
|
||||||
|
|
||||||
|
public new static string Show()
|
||||||
|
{
|
||||||
|
using AppNameDialog dialog = new AppNameDialog();
|
||||||
|
dialog.ShowDialog();
|
||||||
|
return dialog._name;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AppNameDialog_FormClosed(object sender, FormClosedEventArgs e) => _name = nameBox.Text;
|
||||||
|
|
||||||
|
private void AppNameDialog_FormClosing(object sender, FormClosingEventArgs e) => _name = nameBox.Text;
|
||||||
|
|
||||||
|
private void nameBox_TextChanged(object sender, EventArgs e) => _name = nameBox.Text;
|
||||||
|
|
||||||
|
private void nameBox_KeyDown(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.KeyCode == Keys.Enter)
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
348
UpTool2/AppNameDialog.resx
Normal file
348
UpTool2/AppNameDialog.resx
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing.Common" name="System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing.Common" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/vDoAPzdyQD6yqkA+bqHAPisYwD4oT0A95wWAPecFgD4oT0A+KxjAPm6
|
||||||
|
hwD6yqkA/N3JAP7w6AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP3s4gD7zrAA/wAADf8AAEv/AACB/wAArf8AAND/AADq/wAA+f8A
|
||||||
|
AP//AAD5/wAA6v8AAND/AACt/wAAgf8AAEv/AAAN+K5pAPvOsAD97OIA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/OLSAP8AAAn/AABg/wAAsP8AAPn/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AALD/AABg/wAACfm8
|
||||||
|
jAD84tIA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD959sA/wAAG/8AAIH/AADh/wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAOH/AACB/wAAG/m9jwD959sA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP749QD/AAAD/wAAdP8A
|
||||||
|
AOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOH/AAB0/wAAA/vPsgD++PUA////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP3r
|
||||||
|
4AD/AABA/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
ALf/AABA+byMAP3r4AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////APzj0wD/AABp/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA5f8AAGn4r20A/OPTAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAP/AACA/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAgP8AAAP8384A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAAP/AACH/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AACH/wAAA/zj0wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP3r4AD/AACA/wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAID4r20A/evgAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP74
|
||||||
|
9QD/AABp/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAafm8jAD++PUA////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABA+8+yAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AAAD/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAAt/8AAAP959sA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAdP8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB0+b2PAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAG/8A
|
||||||
|
AOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA4f8A
|
||||||
|
ABv84tIA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAIH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AACB+byMAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAn/AADh/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA4f8AAAn97OIA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AABg/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABg+86wAP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAsP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAAsPiuaQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A/wAADf8AAPn/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAPn/AAAN/vDoAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAEv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAS/zdyQD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AACB/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AIH6yqkA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAArf8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AACt+bqHAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAND/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA0PisYwD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AADq/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOr4oT0A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAA+f8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD595wWAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//ecFgD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AAD5/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPn4oT0A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/wAA6v8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADq+KxjAP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8AAND/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA0Pm6hwD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD/AACt/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAK36yqkA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/wAAgf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACB/N3JAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAEv/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAS/7w
|
||||||
|
6AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAAN/wAA+f8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA+f8AAA3///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AALD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AALD7zrAA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AABg/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABg/eziAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAACf8AAOH/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADh/wAACf//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD/AACB/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAAgfzi0gD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/wAAG/8AAOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA4f8AABv///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAB0/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHT959sA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAA/8A
|
||||||
|
ALf/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AALf/AAAD////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABA/vj1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAGn/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AABp/evgAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAgP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACA/OPTAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAAP/AACH/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACH/wAAA////wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/wAAA/8AAID/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACA/wAAA///
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAaf8A
|
||||||
|
AOX/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABp/evgAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AALf/AABA/vj1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAAP/AAB0/wAA4f8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA4f8AAHT/AAAD////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8A
|
||||||
|
ABv/AACB/wAA4f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADh/wAAgf8AABv///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAn/AABg/wAAsP8AAPn/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AALD/AABg/wAACf///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAAN/wAAS/8A
|
||||||
|
AIH/AACt/wAA0P8AAOr/AAD5/wAA//8AAPn/AADq/wAA0P8AAK3/AACB/wAAS/8AAA3///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////////////////////////////////////////////////////////////////////////
|
||||||
|
//////8AAf//////+AAAP//////gAAAP/////4AAAAP/////AAAAAf////4AAAAA////+AAAAAA////w
|
||||||
|
AAAAAB////AAAAAAH///4AAAAAAP///AAAAAAAf//4AAAAAAA///gAAAAAAD//8AAAAAAAH//wAAAAAA
|
||||||
|
Af/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wA
|
||||||
|
AAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAA
|
||||||
|
AH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP//AAAAAAAB//8A
|
||||||
|
AAAAAAH//4AAAAAAA///gAAAAAAD///AAAAAAAf//+AAAAAAD///8AAAAAAf///wAAAAAB////gAAAAA
|
||||||
|
P////gAAAAD/////AAAAAf////+AAAAD/////+AAAA//////+AAAP///////AAH/////////////////
|
||||||
|
//////////////////////////////////////////////////8=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
216
UpTool2/MainForm.Designer.cs
generated
216
UpTool2/MainForm.Designer.cs
generated
@ -1,6 +1,6 @@
|
|||||||
namespace UpTool2
|
namespace UpTool2
|
||||||
{
|
{
|
||||||
partial class MainForm
|
sealed partial class MainForm
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Required designer variable.
|
/// Required designer variable.
|
||||||
@ -28,8 +28,11 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
|
this.components = new System.ComponentModel.Container();
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
||||||
this.sidebarPanel = new System.Windows.Forms.FlowLayoutPanel();
|
this.sidebarPanel = new System.Windows.Forms.FlowLayoutPanel();
|
||||||
this.infoPanel = new System.Windows.Forms.Panel();
|
this.infoPanel = new System.Windows.Forms.Panel();
|
||||||
|
this.action_run = new System.Windows.Forms.Button();
|
||||||
this.action_remove = new System.Windows.Forms.Button();
|
this.action_remove = new System.Windows.Forms.Button();
|
||||||
this.action_update = new System.Windows.Forms.Button();
|
this.action_update = new System.Windows.Forms.Button();
|
||||||
this.action_install = new System.Windows.Forms.Button();
|
this.action_install = new System.Windows.Forms.Button();
|
||||||
@ -37,27 +40,39 @@
|
|||||||
this.infoPanel_Title = new System.Windows.Forms.Label();
|
this.infoPanel_Title = new System.Windows.Forms.Label();
|
||||||
this.splitContainer = new System.Windows.Forms.SplitContainer();
|
this.splitContainer = new System.Windows.Forms.SplitContainer();
|
||||||
this.optionsPanel = new System.Windows.Forms.Panel();
|
this.optionsPanel = new System.Windows.Forms.Panel();
|
||||||
|
this.controls_upload = new System.Windows.Forms.Button();
|
||||||
|
this.filterBox = new System.Windows.Forms.ComboBox();
|
||||||
|
this.searchBox = new System.Windows.Forms.TextBox();
|
||||||
this.controls_settings = new System.Windows.Forms.Button();
|
this.controls_settings = new System.Windows.Forms.Button();
|
||||||
this.button1 = new System.Windows.Forms.Button();
|
this.controls_reload = new System.Windows.Forms.Button();
|
||||||
|
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||||
|
this.changesButton = new System.Windows.Forms.Button();
|
||||||
|
this.searchPackageDialog = new System.Windows.Forms.OpenFileDialog();
|
||||||
|
this.changesPanel = new System.Windows.Forms.Panel();
|
||||||
|
this.progressBar1 = new System.Windows.Forms.ProgressBar();
|
||||||
|
this.changesLabel = new System.Windows.Forms.Label();
|
||||||
this.infoPanel.SuspendLayout();
|
this.infoPanel.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
|
||||||
this.splitContainer.Panel1.SuspendLayout();
|
this.splitContainer.Panel1.SuspendLayout();
|
||||||
this.splitContainer.Panel2.SuspendLayout();
|
this.splitContainer.Panel2.SuspendLayout();
|
||||||
this.splitContainer.SuspendLayout();
|
this.splitContainer.SuspendLayout();
|
||||||
this.optionsPanel.SuspendLayout();
|
this.optionsPanel.SuspendLayout();
|
||||||
|
this.changesPanel.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// sidebarPanel
|
// sidebarPanel
|
||||||
//
|
//
|
||||||
|
this.sidebarPanel.AutoScroll = true;
|
||||||
this.sidebarPanel.BackColor = System.Drawing.SystemColors.ControlLight;
|
this.sidebarPanel.BackColor = System.Drawing.SystemColors.ControlLight;
|
||||||
this.sidebarPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.sidebarPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.sidebarPanel.Location = new System.Drawing.Point(0, 34);
|
this.sidebarPanel.Location = new System.Drawing.Point(0, 68);
|
||||||
this.sidebarPanel.Name = "sidebarPanel";
|
this.sidebarPanel.Name = "sidebarPanel";
|
||||||
this.sidebarPanel.Size = new System.Drawing.Size(266, 416);
|
this.sidebarPanel.Size = new System.Drawing.Size(312, 425);
|
||||||
this.sidebarPanel.TabIndex = 0;
|
this.sidebarPanel.TabIndex = 0;
|
||||||
//
|
//
|
||||||
// infoPanel
|
// infoPanel
|
||||||
//
|
//
|
||||||
|
this.infoPanel.Controls.Add(this.action_run);
|
||||||
this.infoPanel.Controls.Add(this.action_remove);
|
this.infoPanel.Controls.Add(this.action_remove);
|
||||||
this.infoPanel.Controls.Add(this.action_update);
|
this.infoPanel.Controls.Add(this.action_update);
|
||||||
this.infoPanel.Controls.Add(this.action_install);
|
this.infoPanel.Controls.Add(this.action_install);
|
||||||
@ -66,18 +81,29 @@
|
|||||||
this.infoPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.infoPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.infoPanel.Location = new System.Drawing.Point(0, 0);
|
this.infoPanel.Location = new System.Drawing.Point(0, 0);
|
||||||
this.infoPanel.Name = "infoPanel";
|
this.infoPanel.Name = "infoPanel";
|
||||||
this.infoPanel.Size = new System.Drawing.Size(530, 450);
|
this.infoPanel.Size = new System.Drawing.Size(616, 493);
|
||||||
this.infoPanel.TabIndex = 1;
|
this.infoPanel.TabIndex = 1;
|
||||||
//
|
//
|
||||||
|
// action_run
|
||||||
|
//
|
||||||
|
this.action_run.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.action_run.Location = new System.Drawing.Point(491, 6);
|
||||||
|
this.action_run.Name = "action_run";
|
||||||
|
this.action_run.Size = new System.Drawing.Size(27, 27);
|
||||||
|
this.action_run.TabIndex = 5;
|
||||||
|
this.action_run.Text = "↗";
|
||||||
|
this.action_run.UseVisualStyleBackColor = true;
|
||||||
|
this.action_run.Click += new System.EventHandler(this.Action_run_Click);
|
||||||
|
//
|
||||||
// action_remove
|
// action_remove
|
||||||
//
|
//
|
||||||
this.action_remove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
this.action_remove.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.action_remove.Enabled = false;
|
this.action_remove.Enabled = false;
|
||||||
this.action_remove.Location = new System.Drawing.Point(281, 12);
|
this.action_remove.Location = new System.Drawing.Point(523, 6);
|
||||||
this.action_remove.Name = "action_remove";
|
this.action_remove.Name = "action_remove";
|
||||||
this.action_remove.Size = new System.Drawing.Size(75, 23);
|
this.action_remove.Size = new System.Drawing.Size(27, 27);
|
||||||
this.action_remove.TabIndex = 4;
|
this.action_remove.TabIndex = 4;
|
||||||
this.action_remove.Text = "Remove";
|
this.action_remove.Text = "🗑";
|
||||||
this.action_remove.UseVisualStyleBackColor = true;
|
this.action_remove.UseVisualStyleBackColor = true;
|
||||||
this.action_remove.Click += new System.EventHandler(this.Action_remove_Click);
|
this.action_remove.Click += new System.EventHandler(this.Action_remove_Click);
|
||||||
//
|
//
|
||||||
@ -85,11 +111,11 @@
|
|||||||
//
|
//
|
||||||
this.action_update.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
this.action_update.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.action_update.Enabled = false;
|
this.action_update.Enabled = false;
|
||||||
this.action_update.Location = new System.Drawing.Point(362, 12);
|
this.action_update.Location = new System.Drawing.Point(554, 6);
|
||||||
this.action_update.Name = "action_update";
|
this.action_update.Name = "action_update";
|
||||||
this.action_update.Size = new System.Drawing.Size(75, 23);
|
this.action_update.Size = new System.Drawing.Size(27, 27);
|
||||||
this.action_update.TabIndex = 3;
|
this.action_update.TabIndex = 3;
|
||||||
this.action_update.Text = "Update";
|
this.action_update.Text = "⭱";
|
||||||
this.action_update.UseVisualStyleBackColor = true;
|
this.action_update.UseVisualStyleBackColor = true;
|
||||||
this.action_update.Click += new System.EventHandler(this.Action_update_Click);
|
this.action_update.Click += new System.EventHandler(this.Action_update_Click);
|
||||||
//
|
//
|
||||||
@ -97,26 +123,29 @@
|
|||||||
//
|
//
|
||||||
this.action_install.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
this.action_install.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.action_install.Enabled = false;
|
this.action_install.Enabled = false;
|
||||||
this.action_install.Location = new System.Drawing.Point(443, 12);
|
this.action_install.Location = new System.Drawing.Point(586, 6);
|
||||||
this.action_install.Name = "action_install";
|
this.action_install.Name = "action_install";
|
||||||
this.action_install.Size = new System.Drawing.Size(75, 23);
|
this.action_install.Size = new System.Drawing.Size(27, 27);
|
||||||
this.action_install.TabIndex = 2;
|
this.action_install.TabIndex = 2;
|
||||||
this.action_install.Text = "Install";
|
this.action_install.Text = "⭳";
|
||||||
this.action_install.UseVisualStyleBackColor = true;
|
this.action_install.UseVisualStyleBackColor = true;
|
||||||
this.action_install.Click += new System.EventHandler(this.Action_install_Click);
|
this.action_install.Click += new System.EventHandler(this.Action_install_Click);
|
||||||
//
|
//
|
||||||
// infoPanel_Description
|
// infoPanel_Description
|
||||||
//
|
//
|
||||||
this.infoPanel_Description.Location = new System.Drawing.Point(3, 40);
|
this.infoPanel_Description.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.infoPanel_Description.Location = new System.Drawing.Point(3, 51);
|
||||||
this.infoPanel_Description.Name = "infoPanel_Description";
|
this.infoPanel_Description.Name = "infoPanel_Description";
|
||||||
this.infoPanel_Description.Size = new System.Drawing.Size(524, 401);
|
this.infoPanel_Description.Size = new System.Drawing.Size(611, 439);
|
||||||
this.infoPanel_Description.TabIndex = 1;
|
this.infoPanel_Description.TabIndex = 1;
|
||||||
//
|
//
|
||||||
// infoPanel_Title
|
// infoPanel_Title
|
||||||
//
|
//
|
||||||
this.infoPanel_Title.AutoSize = true;
|
this.infoPanel_Title.AutoSize = true;
|
||||||
this.infoPanel_Title.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.infoPanel_Title.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
|
||||||
this.infoPanel_Title.Location = new System.Drawing.Point(3, 9);
|
this.infoPanel_Title.Location = new System.Drawing.Point(2, 1);
|
||||||
this.infoPanel_Title.Name = "infoPanel_Title";
|
this.infoPanel_Title.Name = "infoPanel_Title";
|
||||||
this.infoPanel_Title.Size = new System.Drawing.Size(0, 31);
|
this.infoPanel_Title.Size = new System.Drawing.Size(0, 31);
|
||||||
this.infoPanel_Title.TabIndex = 0;
|
this.infoPanel_Title.TabIndex = 0;
|
||||||
@ -131,53 +160,155 @@
|
|||||||
//
|
//
|
||||||
this.splitContainer.Panel1.Controls.Add(this.sidebarPanel);
|
this.splitContainer.Panel1.Controls.Add(this.sidebarPanel);
|
||||||
this.splitContainer.Panel1.Controls.Add(this.optionsPanel);
|
this.splitContainer.Panel1.Controls.Add(this.optionsPanel);
|
||||||
|
this.splitContainer.Panel1MinSize = 160;
|
||||||
//
|
//
|
||||||
// splitContainer.Panel2
|
// splitContainer.Panel2
|
||||||
//
|
//
|
||||||
this.splitContainer.Panel2.Controls.Add(this.infoPanel);
|
this.splitContainer.Panel2.Controls.Add(this.infoPanel);
|
||||||
this.splitContainer.Size = new System.Drawing.Size(800, 450);
|
this.splitContainer.Panel2MinSize = 160;
|
||||||
this.splitContainer.SplitterDistance = 266;
|
this.splitContainer.Size = new System.Drawing.Size(933, 493);
|
||||||
|
this.splitContainer.SplitterDistance = 312;
|
||||||
|
this.splitContainer.SplitterWidth = 5;
|
||||||
this.splitContainer.TabIndex = 0;
|
this.splitContainer.TabIndex = 0;
|
||||||
|
this.splitContainer.TabStop = false;
|
||||||
//
|
//
|
||||||
// optionsPanel
|
// optionsPanel
|
||||||
//
|
//
|
||||||
|
this.optionsPanel.Controls.Add(this.controls_upload);
|
||||||
|
this.optionsPanel.Controls.Add(this.filterBox);
|
||||||
|
this.optionsPanel.Controls.Add(this.searchBox);
|
||||||
this.optionsPanel.Controls.Add(this.controls_settings);
|
this.optionsPanel.Controls.Add(this.controls_settings);
|
||||||
this.optionsPanel.Controls.Add(this.button1);
|
this.optionsPanel.Controls.Add(this.controls_reload);
|
||||||
this.optionsPanel.Dock = System.Windows.Forms.DockStyle.Top;
|
this.optionsPanel.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
this.optionsPanel.Location = new System.Drawing.Point(0, 0);
|
this.optionsPanel.Location = new System.Drawing.Point(0, 0);
|
||||||
this.optionsPanel.Name = "optionsPanel";
|
this.optionsPanel.Name = "optionsPanel";
|
||||||
this.optionsPanel.Size = new System.Drawing.Size(266, 34);
|
this.optionsPanel.Size = new System.Drawing.Size(312, 68);
|
||||||
this.optionsPanel.TabIndex = 0;
|
this.optionsPanel.TabIndex = 0;
|
||||||
//
|
//
|
||||||
|
// controls_upload
|
||||||
|
//
|
||||||
|
this.controls_upload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.controls_upload.Location = new System.Drawing.Point(284, 6);
|
||||||
|
this.controls_upload.Name = "controls_upload";
|
||||||
|
this.controls_upload.Size = new System.Drawing.Size(27, 27);
|
||||||
|
this.controls_upload.TabIndex = 4;
|
||||||
|
this.controls_upload.Text = "↑";
|
||||||
|
this.controls_upload.UseVisualStyleBackColor = true;
|
||||||
|
this.controls_upload.Click += new System.EventHandler(this.controls_upload_Click);
|
||||||
|
//
|
||||||
|
// filterBox
|
||||||
|
//
|
||||||
|
this.filterBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.filterBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.filterBox.FormattingEnabled = true;
|
||||||
|
this.filterBox.Location = new System.Drawing.Point(68, 7);
|
||||||
|
this.filterBox.Name = "filterBox";
|
||||||
|
this.filterBox.Size = new System.Drawing.Size(209, 23);
|
||||||
|
this.filterBox.TabIndex = 3;
|
||||||
|
this.filterBox.SelectedIndexChanged += new System.EventHandler(this.UpdateSidebarV);
|
||||||
|
//
|
||||||
|
// searchBox
|
||||||
|
//
|
||||||
|
this.searchBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.searchBox.Location = new System.Drawing.Point(3, 38);
|
||||||
|
this.searchBox.Name = "searchBox";
|
||||||
|
this.searchBox.Size = new System.Drawing.Size(307, 23);
|
||||||
|
this.searchBox.TabIndex = 2;
|
||||||
|
this.searchBox.TextChanged += new System.EventHandler(this.UpdateSidebarV);
|
||||||
|
//
|
||||||
// controls_settings
|
// controls_settings
|
||||||
//
|
//
|
||||||
this.controls_settings.Location = new System.Drawing.Point(3, 5);
|
this.controls_settings.Location = new System.Drawing.Point(3, 6);
|
||||||
this.controls_settings.Name = "controls_settings";
|
this.controls_settings.Name = "controls_settings";
|
||||||
this.controls_settings.Size = new System.Drawing.Size(75, 23);
|
this.controls_settings.Size = new System.Drawing.Size(27, 27);
|
||||||
this.controls_settings.TabIndex = 1;
|
this.controls_settings.TabIndex = 1;
|
||||||
this.controls_settings.Text = "Settings";
|
this.controls_settings.Text = "⚙";
|
||||||
this.controls_settings.UseVisualStyleBackColor = true;
|
this.controls_settings.UseVisualStyleBackColor = true;
|
||||||
this.controls_settings.Click += new System.EventHandler(this.Controls_settings_Click);
|
this.controls_settings.Click += new System.EventHandler(this.Controls_settings_Click);
|
||||||
//
|
//
|
||||||
// button1
|
// controls_reload
|
||||||
//
|
//
|
||||||
this.button1.Location = new System.Drawing.Point(84, 5);
|
this.controls_reload.Location = new System.Drawing.Point(34, 6);
|
||||||
this.button1.Name = "button1";
|
this.controls_reload.Name = "controls_reload";
|
||||||
this.button1.Size = new System.Drawing.Size(75, 23);
|
this.controls_reload.Size = new System.Drawing.Size(27, 27);
|
||||||
this.button1.TabIndex = 0;
|
this.controls_reload.TabIndex = 0;
|
||||||
this.button1.Text = "Reload";
|
this.controls_reload.Text = "↻";
|
||||||
this.button1.UseVisualStyleBackColor = true;
|
this.controls_reload.UseVisualStyleBackColor = true;
|
||||||
this.button1.Click += new System.EventHandler(this.Button1_Click);
|
this.controls_reload.Click += new System.EventHandler(this.Controls_reload_Click);
|
||||||
|
//
|
||||||
|
// toolTip
|
||||||
|
//
|
||||||
|
this.toolTip.AutoPopDelay = 5000;
|
||||||
|
this.toolTip.InitialDelay = 300;
|
||||||
|
this.toolTip.ReshowDelay = 100;
|
||||||
|
this.toolTip.ShowAlways = true;
|
||||||
|
//
|
||||||
|
// changesButton
|
||||||
|
//
|
||||||
|
this.changesButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.changesButton.Location = new System.Drawing.Point(906, 0);
|
||||||
|
this.changesButton.Name = "changesButton";
|
||||||
|
this.changesButton.Size = new System.Drawing.Size(27, 26);
|
||||||
|
this.changesButton.TabIndex = 4;
|
||||||
|
this.changesButton.Text = "→";
|
||||||
|
this.toolTip.SetToolTip(this.changesButton, "Perform changes");
|
||||||
|
this.changesButton.UseVisualStyleBackColor = true;
|
||||||
|
this.changesButton.Click += new System.EventHandler(this.changesButton_Click);
|
||||||
|
//
|
||||||
|
// searchPackageDialog
|
||||||
|
//
|
||||||
|
this.searchPackageDialog.Filter = "Packages (*.zip)|*.zip";
|
||||||
|
//
|
||||||
|
// changesPanel
|
||||||
|
//
|
||||||
|
this.changesPanel.Controls.Add(this.progressBar1);
|
||||||
|
this.changesPanel.Controls.Add(this.changesButton);
|
||||||
|
this.changesPanel.Controls.Add(this.changesLabel);
|
||||||
|
this.changesPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||||
|
this.changesPanel.Location = new System.Drawing.Point(0, 493);
|
||||||
|
this.changesPanel.Name = "changesPanel";
|
||||||
|
this.changesPanel.Size = new System.Drawing.Size(933, 26);
|
||||||
|
this.changesPanel.TabIndex = 1;
|
||||||
|
this.changesPanel.Visible = false;
|
||||||
|
//
|
||||||
|
// progressBar1
|
||||||
|
//
|
||||||
|
this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.progressBar1.Location = new System.Drawing.Point(714, 0);
|
||||||
|
this.progressBar1.Name = "progressBar1";
|
||||||
|
this.progressBar1.Size = new System.Drawing.Size(186, 26);
|
||||||
|
this.progressBar1.Step = 1;
|
||||||
|
this.progressBar1.TabIndex = 5;
|
||||||
|
//
|
||||||
|
// changesLabel
|
||||||
|
//
|
||||||
|
this.changesLabel.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||||
|
this.changesLabel.AutoSize = true;
|
||||||
|
this.changesLabel.Location = new System.Drawing.Point(7, 5);
|
||||||
|
this.changesLabel.Name = "changesLabel";
|
||||||
|
this.changesLabel.Size = new System.Drawing.Size(119, 15);
|
||||||
|
this.changesLabel.TabIndex = 0;
|
||||||
|
this.changesLabel.Text = "No Changes Selected";
|
||||||
|
this.changesLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
this.changesLabel.Click += new System.EventHandler(this.changesLabel_Click);
|
||||||
//
|
//
|
||||||
// MainForm
|
// MainForm
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
this.ClientSize = new System.Drawing.Size(933, 519);
|
||||||
this.Controls.Add(this.splitContainer);
|
this.Controls.Add(this.splitContainer);
|
||||||
|
this.Controls.Add(this.changesPanel);
|
||||||
|
this.HelpButton = true;
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.MinimumSize = new System.Drawing.Size(631, 269);
|
||||||
this.Name = "MainForm";
|
this.Name = "MainForm";
|
||||||
this.ShowIcon = false;
|
this.ShowIcon = false;
|
||||||
this.Text = "UpTool 2";
|
this.Text = "UpTool 2";
|
||||||
|
this.Load += new System.EventHandler(this.MainForm_Load);
|
||||||
this.infoPanel.ResumeLayout(false);
|
this.infoPanel.ResumeLayout(false);
|
||||||
this.infoPanel.PerformLayout();
|
this.infoPanel.PerformLayout();
|
||||||
this.splitContainer.Panel1.ResumeLayout(false);
|
this.splitContainer.Panel1.ResumeLayout(false);
|
||||||
@ -185,6 +316,9 @@
|
|||||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
|
||||||
this.splitContainer.ResumeLayout(false);
|
this.splitContainer.ResumeLayout(false);
|
||||||
this.optionsPanel.ResumeLayout(false);
|
this.optionsPanel.ResumeLayout(false);
|
||||||
|
this.optionsPanel.PerformLayout();
|
||||||
|
this.changesPanel.ResumeLayout(false);
|
||||||
|
this.changesPanel.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -198,10 +332,20 @@
|
|||||||
private System.Windows.Forms.Label infoPanel_Description;
|
private System.Windows.Forms.Label infoPanel_Description;
|
||||||
private System.Windows.Forms.Panel optionsPanel;
|
private System.Windows.Forms.Panel optionsPanel;
|
||||||
private System.Windows.Forms.Button controls_settings;
|
private System.Windows.Forms.Button controls_settings;
|
||||||
private System.Windows.Forms.Button button1;
|
private System.Windows.Forms.Button controls_reload;
|
||||||
private System.Windows.Forms.Button action_install;
|
private System.Windows.Forms.Button action_install;
|
||||||
private System.Windows.Forms.Button action_remove;
|
private System.Windows.Forms.Button action_remove;
|
||||||
private System.Windows.Forms.Button action_update;
|
private System.Windows.Forms.Button action_update;
|
||||||
|
private System.Windows.Forms.TextBox searchBox;
|
||||||
|
private System.Windows.Forms.ToolTip toolTip;
|
||||||
|
private System.Windows.Forms.ComboBox filterBox;
|
||||||
|
private System.Windows.Forms.Button action_run;
|
||||||
|
private System.Windows.Forms.Button controls_upload;
|
||||||
|
private System.Windows.Forms.OpenFileDialog searchPackageDialog;
|
||||||
|
private System.Windows.Forms.Panel changesPanel;
|
||||||
|
private System.Windows.Forms.Label changesLabel;
|
||||||
|
private System.Windows.Forms.Button changesButton;
|
||||||
|
private System.Windows.Forms.ProgressBar progressBar1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,216 +1,347 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Data;
|
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Imaging;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using UpTool2.Properties;
|
|
||||||
using System.Xml;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using UpToolLib;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO.Compression;
|
using UpToolLib.v1.Tool;
|
||||||
using System.Security.Cryptography;
|
using UpToolLib.v2;
|
||||||
|
using UpToolLib.v2.TaskQueue;
|
||||||
|
|
||||||
namespace UpTool2
|
namespace UpTool2
|
||||||
{
|
{
|
||||||
public partial class MainForm : Form
|
public sealed partial class MainForm : Form
|
||||||
{
|
{
|
||||||
List<App> apps = new List<App>();
|
private readonly HelpEventHandler _help;
|
||||||
string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\UpTool2";
|
private List<AppTask> _tasks;
|
||||||
|
|
||||||
public MainForm()
|
public MainForm()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
reloadElements();
|
_tasks = new List<AppTask>();
|
||||||
if (!Directory.Exists(dir + @"\Apps"))
|
_help = MainForm_HelpRequested;
|
||||||
Directory.CreateDirectory(dir + @"\Apps");
|
HelpRequested += _help;
|
||||||
}
|
filterBox.DataSource = Enum.GetValues(typeof(Status));
|
||||||
void reloadElements()
|
if (Program.Online)
|
||||||
{
|
{
|
||||||
//remove
|
Program.SetSplash(8, "Fetching repositories");
|
||||||
action_install.Enabled = false;
|
Program.Lib.V2.RepoManagement.FetchRepos();
|
||||||
action_remove.Enabled = false;
|
|
||||||
action_update.Enabled = false;
|
|
||||||
infoPanel_Title.Text = "";
|
|
||||||
infoPanel_Description.Text = "";
|
|
||||||
int F = sidebarPanel.Controls.Count;
|
|
||||||
for (int i = 0; i < F; i++)
|
|
||||||
{
|
|
||||||
sidebarPanel.Controls[0].Dispose();
|
|
||||||
}
|
}
|
||||||
apps.Clear();
|
else
|
||||||
//add
|
|
||||||
WebClient client = new WebClient();
|
|
||||||
for (int i = 0; i < Settings.Default.Repos.Count; i++)
|
|
||||||
{
|
{
|
||||||
try
|
MessageBox.Show("Starting in offline mode!");
|
||||||
{
|
controls_reload.Enabled = false;
|
||||||
//extract info
|
filterBox.Enabled = false;
|
||||||
XDocument repo = XDocument.Load(Settings.Default.Repos[i]);
|
filterBox.SelectedIndex = 2;
|
||||||
foreach (XElement el in repo.Element("repo").Elements("app"))
|
|
||||||
{
|
|
||||||
string name = el.Element("Name").Value;
|
|
||||||
string description = el.Element("Description").Value;
|
|
||||||
int version = int.Parse(el.Element("Version").Value);
|
|
||||||
string file = el.Element("File").Value;
|
|
||||||
string hash = el.Element("Hash").Value;
|
|
||||||
Guid ID = Guid.Parse(el.Element("ID").Value);
|
|
||||||
Color color = ColorTranslator.FromHtml(el.Element("Color").Value);
|
|
||||||
Image icon = Image.FromStream(client.OpenRead(el.Element("Icon").Value));
|
|
||||||
App app = new App(name, description, version, file, hash, ID, color, icon);
|
|
||||||
apps.Add(app);
|
|
||||||
//generate UI elements
|
|
||||||
Panel sidebarIcon = new Panel();
|
|
||||||
sidebarIcon.BackColor = color;
|
|
||||||
sidebarIcon.Size = new Size(70, 70);
|
|
||||||
sidebarIcon.Click += (object sender, EventArgs e) => {
|
|
||||||
infoPanel_Title.Text = name;
|
|
||||||
infoPanel_Description.Text = description;
|
|
||||||
action_install.Tag = app;
|
|
||||||
action_install.Enabled = !Directory.Exists(dir + @"\Apps\" + ID.ToString());
|
|
||||||
action_remove.Tag = app;
|
|
||||||
action_remove.Enabled = Directory.Exists(dir + @"\Apps\" + ID.ToString());
|
|
||||||
action_update.Tag = app;
|
|
||||||
string xml = dir + @"\Apps\" + ID.ToString() + @"\info.xml";
|
|
||||||
action_update.Enabled = File.Exists(xml) && int.Parse(XDocument.Load(xml).Element("app").Element("Version").Value) < version;
|
|
||||||
};
|
|
||||||
sidebarIcon.Paint += (object sender, PaintEventArgs e) => {
|
|
||||||
e.Graphics.DrawImage(icon, 0, 0, sidebarIcon.Width, sidebarIcon.Height);
|
|
||||||
string text = "NGL";
|
|
||||||
Font font = new Font(FontFamily.GenericSansSerif, 10);
|
|
||||||
SizeF tmp = e.Graphics.MeasureString(text, font);
|
|
||||||
e.Graphics.DrawString(text, font, new SolidBrush(Color.Black), (sidebarIcon.Width - tmp.Width) / 2, sidebarIcon.Height - tmp.Height);
|
|
||||||
};
|
|
||||||
sidebarPanel.Controls.Add(sidebarIcon);
|
|
||||||
}
|
}
|
||||||
}
|
Program.SetSplash(9, "Reloading data");
|
||||||
catch (Exception e)
|
ReloadElements();
|
||||||
{
|
if (!Directory.Exists(Program.Lib.V1.PathTool.AppsPath))
|
||||||
MessageBox.Show(e.ToString(), "Failed to load repo: " + Settings.Default.Repos[i]);
|
Directory.CreateDirectory(Program.Lib.V1.PathTool.AppsPath);
|
||||||
}
|
|
||||||
}
|
|
||||||
client.Dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Controls_settings_Click(object sender, EventArgs e) => new SettingsForm().Show();
|
|
||||||
|
|
||||||
private void Button1_Click(object sender, EventArgs e) => reloadElements();
|
|
||||||
|
|
||||||
private struct App : IEquatable<App>
|
|
||||||
{
|
|
||||||
public string name;
|
|
||||||
public string description;
|
|
||||||
public int version;
|
|
||||||
public string file;
|
|
||||||
public string hash;
|
|
||||||
public Guid ID;
|
|
||||||
public Color color;
|
|
||||||
public Image Icon;
|
|
||||||
|
|
||||||
public App(string name, string description, int version, string file, string hash, Guid iD, Color color, Image icon)
|
|
||||||
{
|
|
||||||
this.name = name ?? throw new ArgumentNullException(nameof(name));
|
|
||||||
this.description = description ?? throw new ArgumentNullException(nameof(description));
|
|
||||||
this.version = version;
|
|
||||||
this.file = file ?? throw new ArgumentNullException(nameof(file));
|
|
||||||
this.hash = hash ?? throw new ArgumentNullException(nameof(hash));
|
|
||||||
ID = iD;
|
|
||||||
this.color = color;
|
|
||||||
Icon = icon ?? throw new ArgumentNullException(nameof(icon));
|
|
||||||
}
|
|
||||||
|
|
||||||
public override bool Equals(object obj) => obj is App app && Equals(app);
|
|
||||||
public bool Equals(App other) => ID.Equals(other.ID);
|
|
||||||
public override int GetHashCode() => 1213502048 + EqualityComparer<Guid>.Default.GetHashCode(ID);
|
|
||||||
public static bool operator ==(App left, App right) => left.Equals(right);
|
|
||||||
public static bool operator !=(App left, App right) => !(left == right);
|
|
||||||
}
|
|
||||||
bool relE = true;
|
|
||||||
private void Action_remove_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string app = dir + @"\Apps\" + ((App)action_remove.Tag).ID.ToString();
|
|
||||||
string tmp = dir + @"\tmp";
|
|
||||||
if (Directory.Exists(tmp))
|
|
||||||
Directory.Delete(tmp, true);
|
|
||||||
Directory.CreateDirectory(tmp);
|
|
||||||
ZipFile.ExtractToDirectory(app + @"\package.zip", tmp);
|
|
||||||
Process.Start(new ProcessStartInfo { FileName = "cmd.exe", Arguments = "/C \"" + tmp + "\\Remove.bat\"", WorkingDirectory = app + @"\app" }).WaitForExit();
|
|
||||||
Directory.Delete(tmp, true);
|
|
||||||
Directory.Delete(app, true);
|
|
||||||
if (relE)
|
|
||||||
reloadElements();
|
|
||||||
}
|
|
||||||
catch (Exception e1)
|
|
||||||
{
|
|
||||||
if (!relE)
|
|
||||||
throw;
|
|
||||||
MessageBox.Show(e1.ToString(), "Removal failed");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Action_update_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
relE = false;
|
|
||||||
Action_remove_Click(sender, e);
|
|
||||||
Action_install_Click(sender, e);
|
|
||||||
}
|
|
||||||
catch (Exception e1)
|
|
||||||
{
|
|
||||||
MessageBox.Show(e1.ToString(), "Install failed");
|
|
||||||
}
|
|
||||||
relE = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Action_install_Click(object sender, EventArgs e)
|
private void Action_install_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
string app = "";
|
App tmp = (App) action_install.Tag;
|
||||||
string tmp = "";
|
if (_tasks.Any(s => s is InstallTask t && t.App == tmp))
|
||||||
|
{
|
||||||
|
_tasks = _tasks.Where(s => !(s is InstallTask t) || t.App != tmp).ToList();
|
||||||
|
action_install.ResetBackColor();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_tasks.Add(Program.Lib.V2.TaskFactory.CreateInstall(tmp, ReloadElements));
|
||||||
|
action_install.BackColor = Color.Green;
|
||||||
|
}
|
||||||
|
UpdateChangesLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Action_remove_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
App tmp = (App) action_install.Tag;
|
||||||
|
if (_tasks.Any(s => s is RemoveTask t && t.App == tmp))
|
||||||
|
{
|
||||||
|
_tasks = _tasks.Where(s => !(s is RemoveTask t) || t.App != tmp).ToList();
|
||||||
|
action_remove.ResetBackColor();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_tasks.Add(Program.Lib.V2.TaskFactory.CreateRemove(tmp, ReloadElements));
|
||||||
|
action_remove.BackColor = Color.Green;
|
||||||
|
}
|
||||||
|
UpdateChangesLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void controls_upload_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (searchPackageDialog.ShowDialog() != DialogResult.OK)
|
||||||
|
return;
|
||||||
|
if (!_tasks.Any(s => s is UploadTask t && t.ZipFile == searchPackageDialog.FileName))
|
||||||
|
_tasks.Add(Program.Lib.V2.TaskFactory.CreateUpload(searchPackageDialog.FileName, AppNameDialog.Show(), ReloadElements));
|
||||||
|
UpdateChangesLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Action_update_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
App tmp = (App) action_install.Tag;
|
||||||
|
if (_tasks.Any(s => s is UpdateTask t && t.App == tmp))
|
||||||
|
{
|
||||||
|
_tasks = _tasks.Where(s => !(s is UpdateTask t) || t.App != tmp).ToList();
|
||||||
|
action_update.ResetBackColor();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_tasks.Add(Program.Lib.V2.TaskFactory.CreateUpdate(tmp, ReloadElements));
|
||||||
|
action_update.BackColor = Color.Green;
|
||||||
|
}
|
||||||
|
UpdateChangesLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ReloadElements()
|
||||||
|
{
|
||||||
|
//remove
|
||||||
|
toolTip.RemoveAll();
|
||||||
|
ClearSelection();
|
||||||
|
infoPanel_Title.Invalidate();
|
||||||
|
infoPanel_Description.Invalidate();
|
||||||
|
int f = sidebarPanel.Controls.Count;
|
||||||
|
for (int i = 0; i < f; i++) sidebarPanel.Controls[0].Dispose();
|
||||||
|
Program.Lib.V1.Apps.Clear();
|
||||||
|
//add
|
||||||
|
toolTip.SetToolTip(controls_settings, "Settings");
|
||||||
|
toolTip.SetToolTip(controls_reload, "Refresh repositories");
|
||||||
|
toolTip.SetToolTip(controls_upload, "Install package from disk");
|
||||||
|
toolTip.SetToolTip(filterBox, "Filter");
|
||||||
|
toolTip.SetToolTip(action_install, "Install");
|
||||||
|
toolTip.SetToolTip(action_remove, "Remove");
|
||||||
|
toolTip.SetToolTip(action_update, "Update");
|
||||||
|
toolTip.SetToolTip(action_run, "Run");
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
int availableUpdates = 0;
|
||||||
|
foreach (App app in Program.Lib.V1.Apps.Values)
|
||||||
|
{
|
||||||
|
Panel sidebarIcon = new Panel
|
||||||
|
{
|
||||||
|
Tag = app,
|
||||||
|
BackColor = app.Color,
|
||||||
|
Size = new Size(70, 70),
|
||||||
|
BackgroundImage = (Bitmap) app.Icon,
|
||||||
|
BackgroundImageLayout = ImageLayout.Stretch
|
||||||
|
};
|
||||||
|
sidebarIcon.Paint += (sender, args) =>
|
||||||
|
{
|
||||||
|
args.Graphics.Clear(sidebarIcon.BackColor);
|
||||||
|
args.Graphics.DrawImage(sidebarIcon.BackgroundImage, args.ClipRectangle,
|
||||||
|
new Rectangle(new Point(0, 0), sidebarIcon.BackgroundImage.Size), GraphicsUnit.Pixel);
|
||||||
|
};
|
||||||
|
bool updateable = !app.Local && app.Status.Contains(Status.Updatable);
|
||||||
|
sidebarIcon.Click += (sender, e) =>
|
||||||
|
{
|
||||||
|
infoPanel_Title.Text = app.Name;
|
||||||
|
infoPanel_Title.ForeColor = app.Local ? Color.Red : Color.Black;
|
||||||
|
infoPanel_Description.Text = app.Description;
|
||||||
|
action_install.Tag = app;
|
||||||
|
action_install.Enabled = !(app.Local || Directory.Exists(app.AppPath));
|
||||||
|
if (_tasks.Any(s => s is InstallTask t && t.App == app))
|
||||||
|
action_install.BackColor = Color.Green;
|
||||||
|
else
|
||||||
|
action_install.ResetBackColor();
|
||||||
|
action_remove.Tag = app;
|
||||||
|
action_remove.Enabled = Directory.Exists(app.AppPath);
|
||||||
|
if (_tasks.Any(s => s is RemoveTask t && t.App == app))
|
||||||
|
action_remove.BackColor = Color.Green;
|
||||||
|
else
|
||||||
|
action_remove.ResetBackColor();
|
||||||
|
action_update.Tag = app;
|
||||||
|
action_update.Enabled = updateable;
|
||||||
|
if (_tasks.Any(s => s is UpdateTask t && t.App == app))
|
||||||
|
action_update.BackColor = Color.Green;
|
||||||
|
else
|
||||||
|
action_update.ResetBackColor();
|
||||||
|
action_run.Tag = app;
|
||||||
|
action_run.Enabled = app.Status.Contains(Status.Installed) && !app.Local &&
|
||||||
|
app.Runnable && Directory.Exists(app.AppPath);
|
||||||
|
};
|
||||||
|
if (updateable)
|
||||||
|
availableUpdates++;
|
||||||
|
toolTip.SetToolTip(sidebarIcon, app.Name);
|
||||||
|
sidebarPanel.Controls.Add(sidebarIcon);
|
||||||
|
}
|
||||||
|
UpdateSidebarV(null, null);
|
||||||
|
Text =
|
||||||
|
$"UpTool2 {(availableUpdates == 0 ? "(All up-to-date)" : $"({availableUpdates} Updates)")}";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Action_run_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
App appI = (App)action_install.Tag;
|
Program.Lib.V1.AppExtras.RunApp((App) action_run.Tag);
|
||||||
app = dir + @"\Apps\" + appI.ID.ToString();
|
|
||||||
tmp = dir + @"\tmp";
|
|
||||||
if (Directory.Exists(tmp))
|
|
||||||
Directory.Delete(tmp, true);
|
|
||||||
Directory.CreateDirectory(tmp);
|
|
||||||
if (Directory.Exists(app))
|
|
||||||
Directory.Delete(app, true);
|
|
||||||
Directory.CreateDirectory(app);
|
|
||||||
using (var client = new WebClient())
|
|
||||||
{
|
|
||||||
client.DownloadFile(appI.file, app + @"\package.zip");
|
|
||||||
}
|
|
||||||
SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider();
|
|
||||||
if (BitConverter.ToString(sha256.ComputeHash(File.ReadAllBytes(app + @"\package.zip"))).Replace("-", string.Empty).ToUpper() != appI.hash)
|
|
||||||
throw new Exception("The hash is not equal to the one stored in the repo");
|
|
||||||
sha256.Dispose();
|
|
||||||
ZipFile.ExtractToDirectory(app + @"\package.zip", tmp);
|
|
||||||
Directory.Move(tmp + @"\Data", app + @"\app");
|
|
||||||
Process.Start(new ProcessStartInfo { FileName = "cmd.exe", Arguments = "/C \"" + tmp + "\\Install.bat\"", WorkingDirectory = app + @"\app" }).WaitForExit();
|
|
||||||
new XElement("app", new XElement("Version", appI.version)).Save(app + @"\info.xml");
|
|
||||||
Directory.Delete(tmp, true);
|
|
||||||
if (relE)
|
|
||||||
reloadElements();
|
|
||||||
}
|
}
|
||||||
catch (Exception e1)
|
catch (Exception e1)
|
||||||
{
|
{
|
||||||
if (!relE)
|
MessageBox.Show($"{e1}Failed to start!");
|
||||||
throw;
|
}
|
||||||
if (Directory.Exists(tmp))
|
}
|
||||||
Directory.Delete(tmp, true);
|
|
||||||
if (Directory.Exists(app))
|
private void Controls_reload_Click(object sender, EventArgs e)
|
||||||
Directory.Delete(app, true);
|
{
|
||||||
MessageBox.Show(e1.ToString(), "Install failed");
|
Enabled = false;
|
||||||
}
|
if (MessageBox.Show("This may take a few minutes. Are you sure?", "", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.FetchRepos();
|
||||||
|
Invoke((Action) (() =>
|
||||||
|
{
|
||||||
|
ReloadElements();
|
||||||
|
Enabled = true;
|
||||||
|
}));
|
||||||
|
}).Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Controls_settings_Click(object sender, EventArgs e) => new SettingsForms().ShowDialog();
|
||||||
|
|
||||||
|
private void ClearSelection()
|
||||||
|
{
|
||||||
|
action_install.Enabled = false;
|
||||||
|
action_install.ResetBackColor();
|
||||||
|
action_remove.Enabled = false;
|
||||||
|
action_remove.ResetBackColor();
|
||||||
|
action_update.Enabled = false;
|
||||||
|
action_update.ResetBackColor();
|
||||||
|
action_run.Enabled = false;
|
||||||
|
action_run.ResetBackColor();
|
||||||
|
infoPanel_Title.Text = "";
|
||||||
|
infoPanel_Description.Text = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateSidebarV(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (searchBox.Text == "!DEBUG:PRINT!")
|
||||||
|
{
|
||||||
|
searchBox.Text = "!DEBUG:PRINT";
|
||||||
|
string tmpFile = Path.GetTempFileName();
|
||||||
|
File.WriteAllText(tmpFile,
|
||||||
|
string.Join("\r\n\r\n",
|
||||||
|
Program.Lib.V1.Apps.Values.Select(app => app.ToString()).Concat(new[]
|
||||||
|
{
|
||||||
|
$"Assembly version: {Assembly.GetExecutingAssembly().GetName().Version}"
|
||||||
|
}).ToArray()));
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
Process.Start("notepad", tmpFile).WaitForExit();
|
||||||
|
File.Delete(tmpFile);
|
||||||
|
}).Start();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
App[] apps = Program.Lib.V1.AppExtras.FindApps(searchBox.Text);
|
||||||
|
Enum.TryParse(filterBox.SelectedValue.ToString(), out Status status);
|
||||||
|
for (int i = 0; i < sidebarPanel.Controls.Count; i++)
|
||||||
|
{
|
||||||
|
Panel sidebarIcon = (Panel) sidebarPanel.Controls[i];
|
||||||
|
App app = (App) sidebarIcon.Tag;
|
||||||
|
sidebarIcon.Visible = apps.Contains(app) && app.Status.Contains(Program.Online ? status : Status.Installed);
|
||||||
|
}
|
||||||
|
ClearSelection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MainForm_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (Program.Splash.IsDisposed)
|
||||||
|
Close();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Program.Splash.Invoke((Action) Program.Splash.Hide);
|
||||||
|
BringToFront();
|
||||||
|
UpdateChangesLabel(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static DateTime GetBuildDateTime(Assembly assembly)
|
||||||
|
{
|
||||||
|
string location = assembly.Location;
|
||||||
|
const int headerOffset = 60;
|
||||||
|
const int linkerTimestampOffset = 8;
|
||||||
|
byte[] buffer = new byte[2048];
|
||||||
|
Stream? stream = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
stream = new FileStream(location, FileMode.Open, FileAccess.Read);
|
||||||
|
stream.Read(buffer, 0, 2048);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
stream?.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
int i = BitConverter.ToInt32(buffer, headerOffset);
|
||||||
|
int secondsSince1970 = BitConverter.ToInt32(buffer, i + linkerTimestampOffset);
|
||||||
|
DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0);
|
||||||
|
dt = dt.AddSeconds(secondsSince1970);
|
||||||
|
dt = TimeZoneInfo.ConvertTimeToUtc(dt);
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MainForm_HelpRequested(object sender, HelpEventArgs hlpEvent)
|
||||||
|
{
|
||||||
|
HelpRequested -= _help;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
DateTime buildTime = GetBuildDateTime(Assembly.GetExecutingAssembly());
|
||||||
|
MessageBox.Show($@"UpTool2 by JFronny
|
||||||
|
Version: {Assembly.GetExecutingAssembly().GetName().Version}
|
||||||
|
Build Date: {buildTime:dd.MM.yyyy}", "UpTool2");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
HelpRequested += _help;
|
||||||
|
hlpEvent.Handled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void changesButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (TaskPreview.Show(ref _tasks, true))
|
||||||
|
{
|
||||||
|
progressBar1.Maximum = _tasks.Count;
|
||||||
|
progressBar1.Value = 0;
|
||||||
|
foreach (AppTask task in _tasks)
|
||||||
|
{
|
||||||
|
task.Run();
|
||||||
|
progressBar1.PerformStep();
|
||||||
|
}
|
||||||
|
_tasks.Clear();
|
||||||
|
UpdateChangesLabel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void changesLabel_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
TaskPreview.Show(ref _tasks, false);
|
||||||
|
UpdateChangesLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateChangesLabel(bool showPanel = true)
|
||||||
|
{
|
||||||
|
changesPanel.Visible = showPanel;
|
||||||
|
changesButton.Enabled = _tasks.Count > 0;
|
||||||
|
progressBar1.Maximum = _tasks.Count;
|
||||||
|
changesLabel.Text = _tasks.Count switch
|
||||||
|
{
|
||||||
|
0 => "No Changes Selected",
|
||||||
|
1 => "1 Change Selected",
|
||||||
|
_ => $"{_tasks.Count} Changes Selected"
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,64 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<root>
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
@ -117,4 +57,292 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing.Common" name="System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing.Common" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/vDoAPzdyQD6yqkA+bqHAPisYwD4oT0A95wWAPecFgD4oT0A+KxjAPm6
|
||||||
|
hwD6yqkA/N3JAP7w6AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP3s4gD7zrAA/wAADf8AAEv/AACB/wAArf8AAND/AADq/wAA+f8A
|
||||||
|
AP//AAD5/wAA6v8AAND/AACt/wAAgf8AAEv/AAAN+K5pAPvOsAD97OIA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/OLSAP8AAAn/AABg/wAAsP8AAPn/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AALD/AABg/wAACfm8
|
||||||
|
jAD84tIA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD959sA/wAAG/8AAIH/AADh/wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAOH/AACB/wAAG/m9jwD959sA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP749QD/AAAD/wAAdP8A
|
||||||
|
AOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOH/AAB0/wAAA/vPsgD++PUA////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP3r
|
||||||
|
4AD/AABA/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
ALf/AABA+byMAP3r4AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////APzj0wD/AABp/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA5f8AAGn4r20A/OPTAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAP/AACA/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAgP8AAAP8384A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAAP/AACH/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AACH/wAAA/zj0wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP3r4AD/AACA/wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAID4r20A/evgAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP74
|
||||||
|
9QD/AABp/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAafm8jAD++PUA////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABA+8+yAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AAAD/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAAt/8AAAP959sA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAdP8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB0+b2PAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAG/8A
|
||||||
|
AOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA4f8A
|
||||||
|
ABv84tIA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAIH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AACB+byMAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAn/AADh/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA4f8AAAn97OIA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AABg/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABg+86wAP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAsP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAAsPiuaQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A/wAADf8AAPn/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAPn/AAAN/vDoAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAEv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAS/zdyQD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AACB/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AIH6yqkA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAArf8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AACt+bqHAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAND/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA0PisYwD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AADq/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOr4oT0A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAA+f8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD595wWAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//ecFgD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AAD5/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPn4oT0A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/wAA6v8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADq+KxjAP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8AAND/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA0Pm6hwD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD/AACt/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAK36yqkA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/wAAgf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACB/N3JAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAEv/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAS/7w
|
||||||
|
6AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAAN/wAA+f8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA+f8AAA3///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AALD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AALD7zrAA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AABg/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABg/eziAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAACf8AAOH/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADh/wAACf//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD/AACB/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAAgfzi0gD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/wAAG/8AAOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA4f8AABv///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAB0/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHT959sA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAA/8A
|
||||||
|
ALf/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AALf/AAAD////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABA/vj1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAGn/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AABp/evgAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAgP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACA/OPTAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAAP/AACH/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACH/wAAA////wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/wAAA/8AAID/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACA/wAAA///
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAaf8A
|
||||||
|
AOX/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABp/evgAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AALf/AABA/vj1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAAP/AAB0/wAA4f8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA4f8AAHT/AAAD////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8A
|
||||||
|
ABv/AACB/wAA4f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADh/wAAgf8AABv///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAn/AABg/wAAsP8AAPn/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AALD/AABg/wAACf///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAAN/wAAS/8A
|
||||||
|
AIH/AACt/wAA0P8AAOr/AAD5/wAA//8AAPn/AADq/wAA0P8AAK3/AACB/wAAS/8AAA3///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////////////////////////////////////////////////////////////////////////
|
||||||
|
//////8AAf//////+AAAP//////gAAAP/////4AAAAP/////AAAAAf////4AAAAA////+AAAAAA////w
|
||||||
|
AAAAAB////AAAAAAH///4AAAAAAP///AAAAAAAf//4AAAAAAA///gAAAAAAD//8AAAAAAAH//wAAAAAA
|
||||||
|
Af/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wA
|
||||||
|
AAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAA
|
||||||
|
AH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP//AAAAAAAB//8A
|
||||||
|
AAAAAAH//4AAAAAAA///gAAAAAAD///AAAAAAAf//+AAAAAAD///8AAAAAAf///wAAAAAB////gAAAAA
|
||||||
|
P////gAAAAD/////AAAAAf////+AAAAD/////+AAAA//////+AAAP///////AAH/////////////////
|
||||||
|
//////////////////////////////////////////////////8=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
@ -1,87 +1,219 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.IO.Compression;
|
||||||
using System.Net;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Security.AccessControl;
|
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Security.Principal;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using System.Xml.Linq;
|
using System.Xml;
|
||||||
|
using UpTool2.Tool;
|
||||||
|
using UpToolLib;
|
||||||
|
using UpToolLib.v1.Tool;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
|
||||||
namespace UpTool2
|
namespace UpTool2
|
||||||
{
|
{
|
||||||
static class Program
|
internal static class Program
|
||||||
{
|
{
|
||||||
/// <summary>
|
public static Form? Splash;
|
||||||
/// The main entry point for the application.
|
private static int _splashProgress;
|
||||||
/// </summary>
|
private static string? _splashMessage;
|
||||||
|
public static bool Online;
|
||||||
|
public static UpToolLibMain Lib;
|
||||||
|
|
||||||
[STAThread]
|
[STAThread]
|
||||||
static void Main()
|
private static void Main(string[] args)
|
||||||
{
|
{
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
string appGuid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), false).GetValue(0)).Value.ToString();
|
BuildSplash();
|
||||||
string mutexId = string.Format("Global\\{{{0}}}", appGuid);
|
Splash.Show();
|
||||||
bool createdNew;
|
|
||||||
var allowEveryoneRule = new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MutexRights.FullControl, AccessControlType.Allow);
|
|
||||||
var securitySettings = new MutexSecurity();
|
|
||||||
securitySettings.AddAccessRule(allowEveryoneRule);
|
|
||||||
using (var mutex = new Mutex(false, mutexId, out createdNew, securitySettings))
|
|
||||||
{
|
|
||||||
var hasHandle = false;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
try
|
Lib = new UpToolLibMain(new UtLibFunctions());
|
||||||
{
|
|
||||||
hasHandle = mutex.WaitOne(5000, false);
|
|
||||||
if (hasHandle == false)
|
|
||||||
throw new TimeoutException("Timeout waiting for exclusive access");
|
|
||||||
}
|
}
|
||||||
catch (AbandonedMutexException)
|
catch (MutexLockLockedException)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Mutex property of other process, quitting");
|
||||||
|
Process[] processes = Process.GetProcessesByName("UpTool2");
|
||||||
|
if (processes.Length > 0)
|
||||||
|
WindowHelper.BringProcessToFront(Process.GetProcessesByName("UpTool2")[0]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#if !DEBUG
|
||||||
|
try
|
||||||
{
|
{
|
||||||
#if DEBUG
|
|
||||||
Console.WriteLine("Mutex abandoned");
|
|
||||||
#endif
|
#endif
|
||||||
hasHandle = true;
|
SetSplash(1, "Initializing paths");
|
||||||
}
|
if (!Directory.Exists(Lib.V1.PathTool.Dir))
|
||||||
string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\UpTool2";
|
Directory.CreateDirectory(Lib.V1.PathTool.Dir);
|
||||||
string xml = dir + @"\info.xml";
|
FixXml();
|
||||||
if (!File.Exists(xml))
|
SetSplash(2, "Performing checks");
|
||||||
new XElement("meta", new XElement("Version", 0)).Save(xml);
|
try
|
||||||
XElement meta = XDocument.Load("https://github.com/CreepyCrafter24/UpTool2/releases/download/Repo/Repo.xml").Element("meta");
|
|
||||||
int version = int.Parse(meta.Element("Version").Value);
|
|
||||||
if (int.Parse(XDocument.Load(xml).Element("meta").Element("Version").Value) < version)
|
|
||||||
{
|
{
|
||||||
using (var client = new WebClient())
|
Lib.V2.UpdateChecker.Check();
|
||||||
|
Online = true;
|
||||||
|
}
|
||||||
|
catch
|
||||||
{
|
{
|
||||||
client.DownloadFile(meta.Element("File").Value, dir + @"\update.exe");
|
Online = false;
|
||||||
}
|
}
|
||||||
SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider();
|
if (!Directory.Exists(Lib.V1.PathTool.GetRelative("Apps")))
|
||||||
if (BitConverter.ToString(sha256.ComputeHash(File.ReadAllBytes(dir + @"\update.exe"))).Replace("-", string.Empty).ToUpper() != meta.Element("Hash").Value)
|
Directory.CreateDirectory(Lib.V1.PathTool.GetRelative("Apps"));
|
||||||
throw new Exception("The hash is not equal to the one stored in the repo");
|
if (!Online)
|
||||||
sha256.Dispose();
|
SetSplash(7, "Opening");
|
||||||
new XElement("meta", new XElement("Version", version)).Save(xml);
|
if (!Online || UpdateCheck())
|
||||||
Process.Start(new ProcessStartInfo { FileName = "cmd.exe", Arguments = "/C echo Running Update & timeout /t 4 & copy /b/v/y \"" + dir + @"\update.exe" + "\" \"" + Application.ExecutablePath + "\" & echo Done Updating, please restart & pause" });
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Application.Run(new MainForm());
|
Application.Run(new MainForm());
|
||||||
|
#if !DEBUG
|
||||||
}
|
}
|
||||||
catch (Exception e1)
|
catch (Exception e1)
|
||||||
{
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Splash.Invoke((Action) Splash.Hide);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
Console.WriteLine("Failed to hide splash");
|
||||||
|
}
|
||||||
MessageBox.Show(e1.ToString());
|
MessageBox.Show(e1.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (hasHandle)
|
Lib.Dispose();
|
||||||
mutex.ReleaseMutex();
|
}
|
||||||
}
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void BuildSplash()
|
||||||
|
{
|
||||||
|
Splash = new Form
|
||||||
|
{
|
||||||
|
StartPosition = FormStartPosition.CenterScreen,
|
||||||
|
FormBorderStyle = FormBorderStyle.None,
|
||||||
|
ControlBox = false,
|
||||||
|
MaximizeBox = false,
|
||||||
|
MinimizeBox = false,
|
||||||
|
ShowIcon = false,
|
||||||
|
ShowInTaskbar = false,
|
||||||
|
Size = new Size(700, 400),
|
||||||
|
BackColor = Color.Black
|
||||||
|
};
|
||||||
|
Splash.MaximumSize = Splash.Size;
|
||||||
|
Splash.MinimumSize = Splash.Size;
|
||||||
|
Splash.Paint += (sender, e) =>
|
||||||
|
{
|
||||||
|
Graphics g = e.Graphics;
|
||||||
|
//Draw background
|
||||||
|
Brush[] brushes =
|
||||||
|
{Brushes.Purple, Brushes.MediumPurple, Brushes.Indigo, Brushes.Fuchsia, Brushes.OrangeRed};
|
||||||
|
const int barWidth = 50;
|
||||||
|
const int topOffset = 100;
|
||||||
|
for (int i = 0; i < Splash.Width + topOffset; i += barWidth)
|
||||||
|
g.FillPolygon(brushes[i / barWidth % brushes.Length], new[]
|
||||||
|
{
|
||||||
|
new PointF(i, 0),
|
||||||
|
new PointF(i + barWidth, 0),
|
||||||
|
new PointF(i, Splash.Height),
|
||||||
|
new PointF(i - topOffset, Splash.Height)
|
||||||
|
});
|
||||||
|
//Draw Text: UpTool2 (by JFronny)^
|
||||||
|
Font font = new Font(FontFamily.GenericSansSerif, 40, FontStyle.Bold);
|
||||||
|
const string text = "UpTool2";
|
||||||
|
SizeF size = g.MeasureString(text, font);
|
||||||
|
RectangleF rect = new RectangleF(Splash.Width / 2f - size.Width / 2,
|
||||||
|
Splash.Height / 2f - size.Height / 2, size.Width, size.Height);
|
||||||
|
g.DrawString(text, font, Brushes.White, rect);
|
||||||
|
Font smallFont = new Font(FontFamily.GenericSansSerif, 10);
|
||||||
|
const string subtitle = "by JFronny";
|
||||||
|
SizeF size2 = g.MeasureString(subtitle, smallFont);
|
||||||
|
g.DrawString(subtitle, smallFont, Brushes.White,
|
||||||
|
new RectangleF(rect.Right - size2.Width, rect.Bottom - size2.Height, size2.Width, size2.Height));
|
||||||
|
//Draw progress bar
|
||||||
|
Rectangle bar = new Rectangle(3 * Splash.Width / 8, Splash.Height * 3 / 4 - 10, Splash.Width / 4,
|
||||||
|
20);
|
||||||
|
g.FillRectangle(Brushes.Gray, bar);
|
||||||
|
g.FillRectangle(Brushes.Black,
|
||||||
|
new Rectangle(bar.X, bar.Y, bar.Width * _splashProgress / 10, bar.Height));
|
||||||
|
g.DrawRectangle(Pens.DimGray, bar);
|
||||||
|
//g.DrawString(SplashMessage, smallFont, Brushes.White, new PointF(bar.Left, bar.Bottom));
|
||||||
|
g.DrawString(_splashMessage, smallFont, Brushes.White, bar,
|
||||||
|
new StringFormat {Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center});
|
||||||
|
};
|
||||||
|
Splash.Load += (sender, e) => Splash.BringToFront();
|
||||||
|
Splash.FormClosed += (sender, e) => Splash.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetSplash(int progress, string status) => Splash.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{progress} - {status}");
|
||||||
|
Debug.WriteLine($"{progress} - {status}");
|
||||||
|
_splashProgress = progress;
|
||||||
|
_splashMessage = status;
|
||||||
|
Splash.Invoke((Action) Splash.Invalidate);
|
||||||
|
}));
|
||||||
|
|
||||||
|
public static void FixXml(bool throwOnError = false)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Lib.V1.XmlTool.FixXml();
|
||||||
|
}
|
||||||
|
catch (XmlException)
|
||||||
|
{
|
||||||
|
if (throwOnError) throw;
|
||||||
|
MessageBox.Show("Something went wrong while trying to parse XML. Retrying...");
|
||||||
|
File.Delete(Lib.V1.PathTool.InfoXml);
|
||||||
|
FixXml();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool UpdateCheck()
|
||||||
|
{
|
||||||
|
UpdateCheck check = Lib.V2.UpdateChecker.Check();
|
||||||
|
SetSplash(3, "Comparing online version");
|
||||||
|
if (Assembly.GetExecutingAssembly().GetName().Version >= check.OnlineVersion)
|
||||||
|
{
|
||||||
|
SetSplash(7, "Opening");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
byte[] dl;
|
||||||
|
SetSplash(4, "Downloading latest");
|
||||||
|
using (DownloadDialog dlg = new DownloadDialog(check.Installer.AbsoluteUri))
|
||||||
|
{
|
||||||
|
if (dlg.ShowDialog() != DialogResult.OK)
|
||||||
|
throw new Exception("Failed to update");
|
||||||
|
dl = dlg.Result;
|
||||||
|
}
|
||||||
|
SetSplash(8, "Verifying");
|
||||||
|
using (SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider())
|
||||||
|
{
|
||||||
|
string pkgHash = BitConverter.ToString(sha256.ComputeHash(dl)).Replace("-", string.Empty).ToUpper();
|
||||||
|
if (pkgHash != check.InstallerHash)
|
||||||
|
throw new Exception(
|
||||||
|
$"The hash is not equal to the one stored in the repo:\r\nPackage: {pkgHash}\r\nOnline: {check.InstallerHash}");
|
||||||
|
}
|
||||||
|
SetSplash(9, "Installing");
|
||||||
|
if (Directory.Exists(Lib.V1.PathTool.GetRelative("Install", "tmp")))
|
||||||
|
Directory.Delete(Lib.V1.PathTool.GetRelative("Install", "tmp"), true);
|
||||||
|
Directory.CreateDirectory(Lib.V1.PathTool.GetRelative("Install", "tmp"));
|
||||||
|
using (MemoryStream ms = new MemoryStream(dl))
|
||||||
|
{
|
||||||
|
using ZipArchive ar = new ZipArchive(ms);
|
||||||
|
ar.ExtractToDirectory(Lib.V1.PathTool.GetRelative("Install", "tmp"), true);
|
||||||
|
}
|
||||||
|
Splash.Hide();
|
||||||
|
Process.Start(new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = Lib.V1.PathTool.GetRelative("Install", "tmp", "Installer.exe"),
|
||||||
|
Arguments = "i -p",
|
||||||
|
CreateNoWindow = true,
|
||||||
|
WindowStyle = ProcessWindowStyle.Hidden,
|
||||||
|
WorkingDirectory = Lib.V1.PathTool.GetRelative("Install")
|
||||||
|
});
|
||||||
|
SetSplash(7, "Installing");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,36 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
|
||||||
// set of attributes. Change these attribute values to modify the information
|
|
||||||
// associated with an assembly.
|
|
||||||
[assembly: AssemblyTitle("UpTool2")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("UpTool2")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Setting ComVisible to false makes the types in this assembly not visible
|
|
||||||
// to COM components. If you need to access a type in this assembly from
|
|
||||||
// COM, set the ComVisible attribute to true on that type.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
|
||||||
[assembly: Guid("c0c1e002-9e13-4e8f-a035-dbdc5128e00e")]
|
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
|
||||||
//
|
|
||||||
// Major Version
|
|
||||||
// Minor Version
|
|
||||||
// Build Number
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
|
||||||
// by using the '*' as shown below:
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
10
UpTool2/Properties/Resources.Designer.cs
generated
10
UpTool2/Properties/Resources.Designer.cs
generated
@ -59,5 +59,15 @@ namespace UpTool2.Properties {
|
|||||||
resourceCulture = value;
|
resourceCulture = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Icon C_64 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("C_64", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,4 +117,8 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="C_64" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\C_64.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
41
UpTool2/Properties/Settings.Designer.cs
generated
41
UpTool2/Properties/Settings.Designer.cs
generated
@ -1,41 +0,0 @@
|
|||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// This code was generated by a tool.
|
|
||||||
// Runtime Version:4.0.30319.42000
|
|
||||||
//
|
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
|
||||||
// the code is regenerated.
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace UpTool2.Properties {
|
|
||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.2.0.0")]
|
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
|
||||||
|
|
||||||
public static Settings Default {
|
|
||||||
get {
|
|
||||||
return defaultInstance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute(@"<?xml version=""1.0"" encoding=""utf-16""?>
|
|
||||||
<ArrayOfString xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
|
|
||||||
<string>https://github.com/CreepyCrafter24/UpTool2/releases/download/Repo/Repo.xml</string>
|
|
||||||
</ArrayOfString>")]
|
|
||||||
public global::System.Collections.Specialized.StringCollection Repos {
|
|
||||||
get {
|
|
||||||
return ((global::System.Collections.Specialized.StringCollection)(this["Repos"]));
|
|
||||||
}
|
|
||||||
set {
|
|
||||||
this["Repos"] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
|
||||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="UpTool2.Properties" GeneratedClassName="Settings">
|
|
||||||
<Profiles />
|
|
||||||
<Settings>
|
|
||||||
<Setting Name="Repos" Type="System.Collections.Specialized.StringCollection" Scope="User">
|
|
||||||
<Value Profile="(Default)"><?xml version="1.0" encoding="utf-16"?>
|
|
||||||
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
|
||||||
<string>https://github.com/CreepyCrafter24/UpTool2/releases/download/Repo/Repo.xml</string>
|
|
||||||
</ArrayOfString></Value>
|
|
||||||
</Setting>
|
|
||||||
</Settings>
|
|
||||||
</SettingsFile>
|
|
BIN
UpTool2/Resources/C_64.ico
Normal file
BIN
UpTool2/Resources/C_64.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
110
UpTool2/SettingsForm.Designer.cs
generated
110
UpTool2/SettingsForm.Designer.cs
generated
@ -1,110 +0,0 @@
|
|||||||
namespace UpTool2
|
|
||||||
{
|
|
||||||
partial class SettingsForm
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
if (disposing && (components != null))
|
|
||||||
{
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Windows Form Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent()
|
|
||||||
{
|
|
||||||
this.repoList = new System.Windows.Forms.ListBox();
|
|
||||||
this.minusButton = new System.Windows.Forms.Button();
|
|
||||||
this.plusButton = new System.Windows.Forms.Button();
|
|
||||||
this.repoBox = new System.Windows.Forms.TextBox();
|
|
||||||
this.okButton = new System.Windows.Forms.Button();
|
|
||||||
this.SuspendLayout();
|
|
||||||
//
|
|
||||||
// repoList
|
|
||||||
//
|
|
||||||
this.repoList.FormattingEnabled = true;
|
|
||||||
this.repoList.Location = new System.Drawing.Point(12, 12);
|
|
||||||
this.repoList.Name = "repoList";
|
|
||||||
this.repoList.Size = new System.Drawing.Size(432, 95);
|
|
||||||
this.repoList.TabIndex = 0;
|
|
||||||
this.repoList.SelectedIndexChanged += new System.EventHandler(this.RepoList_SelectedIndexChanged);
|
|
||||||
//
|
|
||||||
// minusButton
|
|
||||||
//
|
|
||||||
this.minusButton.Location = new System.Drawing.Point(421, 113);
|
|
||||||
this.minusButton.Name = "minusButton";
|
|
||||||
this.minusButton.Size = new System.Drawing.Size(23, 23);
|
|
||||||
this.minusButton.TabIndex = 1;
|
|
||||||
this.minusButton.Text = "-";
|
|
||||||
this.minusButton.UseVisualStyleBackColor = true;
|
|
||||||
this.minusButton.Click += new System.EventHandler(this.MinusButton_Click);
|
|
||||||
//
|
|
||||||
// plusButton
|
|
||||||
//
|
|
||||||
this.plusButton.Location = new System.Drawing.Point(392, 113);
|
|
||||||
this.plusButton.Name = "plusButton";
|
|
||||||
this.plusButton.Size = new System.Drawing.Size(23, 23);
|
|
||||||
this.plusButton.TabIndex = 2;
|
|
||||||
this.plusButton.Text = "+";
|
|
||||||
this.plusButton.UseVisualStyleBackColor = true;
|
|
||||||
this.plusButton.Click += new System.EventHandler(this.PlusButton_Click);
|
|
||||||
//
|
|
||||||
// repoBox
|
|
||||||
//
|
|
||||||
this.repoBox.Location = new System.Drawing.Point(12, 115);
|
|
||||||
this.repoBox.Name = "repoBox";
|
|
||||||
this.repoBox.Size = new System.Drawing.Size(320, 20);
|
|
||||||
this.repoBox.TabIndex = 3;
|
|
||||||
//
|
|
||||||
// okButton
|
|
||||||
//
|
|
||||||
this.okButton.Location = new System.Drawing.Point(338, 113);
|
|
||||||
this.okButton.Name = "okButton";
|
|
||||||
this.okButton.Size = new System.Drawing.Size(48, 23);
|
|
||||||
this.okButton.TabIndex = 4;
|
|
||||||
this.okButton.Text = "OK";
|
|
||||||
this.okButton.UseVisualStyleBackColor = true;
|
|
||||||
this.okButton.Click += new System.EventHandler(this.OkButton_Click);
|
|
||||||
//
|
|
||||||
// SettingsForm
|
|
||||||
//
|
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
||||||
this.ClientSize = new System.Drawing.Size(456, 146);
|
|
||||||
this.Controls.Add(this.okButton);
|
|
||||||
this.Controls.Add(this.repoBox);
|
|
||||||
this.Controls.Add(this.plusButton);
|
|
||||||
this.Controls.Add(this.minusButton);
|
|
||||||
this.Controls.Add(this.repoList);
|
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
|
|
||||||
this.Name = "SettingsForm";
|
|
||||||
this.Text = "Settings";
|
|
||||||
this.ResumeLayout(false);
|
|
||||||
this.PerformLayout();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private System.Windows.Forms.ListBox repoList;
|
|
||||||
private System.Windows.Forms.Button minusButton;
|
|
||||||
private System.Windows.Forms.Button plusButton;
|
|
||||||
private System.Windows.Forms.TextBox repoBox;
|
|
||||||
private System.Windows.Forms.Button okButton;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Data;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using UpTool2.Properties;
|
|
||||||
|
|
||||||
namespace UpTool2
|
|
||||||
{
|
|
||||||
public partial class SettingsForm : Form
|
|
||||||
{
|
|
||||||
int ind;
|
|
||||||
public SettingsForm()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
SaveAndReload();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RepoList_SelectedIndexChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
repoBox.Text = (string)repoList.SelectedItem;
|
|
||||||
ind = repoList.SelectedIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OkButton_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrWhiteSpace(repoBox.Text))
|
|
||||||
{
|
|
||||||
Settings.Default.Repos[ind] = repoBox.Text;
|
|
||||||
SaveAndReload();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PlusButton_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Settings.Default.Repos.Add("New Repo");
|
|
||||||
SaveAndReload();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MinusButton_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Settings.Default.Repos.RemoveAt(ind);
|
|
||||||
SaveAndReload();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SaveAndReload()
|
|
||||||
{
|
|
||||||
Settings.Default.Save();
|
|
||||||
repoList.Items.Clear();
|
|
||||||
repoList.Items.AddRange(Settings.Default.Repos.Cast<object>().ToArray());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,120 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
</root>
|
|
64
UpTool2/SourcesForm.Designer.cs
generated
Normal file
64
UpTool2/SourcesForm.Designer.cs
generated
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
namespace UpTool2
|
||||||
|
{
|
||||||
|
partial class SettingsForms
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UpTool2.SettingsForms));
|
||||||
|
this.sourceGrid = new System.Windows.Forms.DataGridView();
|
||||||
|
((System.ComponentModel.ISupportInitialize) (this.sourceGrid)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
this.sourceGrid.BackgroundColor = System.Drawing.Color.White;
|
||||||
|
this.sourceGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||||
|
this.sourceGrid.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.sourceGrid.GridColor = System.Drawing.Color.White;
|
||||||
|
this.sourceGrid.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.sourceGrid.MultiSelect = false;
|
||||||
|
this.sourceGrid.Name = "sourceGrid";
|
||||||
|
this.sourceGrid.Size = new System.Drawing.Size(933, 519);
|
||||||
|
this.sourceGrid.TabIndex = 0;
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(933, 519);
|
||||||
|
this.Controls.Add(this.sourceGrid);
|
||||||
|
this.Icon = ((System.Drawing.Icon) (resources.GetObject("$this.Icon")));
|
||||||
|
this.Name = "SettingsForms";
|
||||||
|
this.ShowIcon = false;
|
||||||
|
this.ShowInTaskbar = false;
|
||||||
|
this.Text = "Sources";
|
||||||
|
this.TopMost = true;
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SettingsForms_FormClosing);
|
||||||
|
((System.ComponentModel.ISupportInitialize) (this.sourceGrid)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private System.Windows.Forms.DataGridView sourceGrid;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.DataGridViewTextBoxColumn sbName;
|
||||||
|
private System.Windows.Forms.DataGridViewTextBoxColumn sbLink;
|
||||||
|
}
|
||||||
|
}
|
27
UpTool2/SourcesForm.cs
Normal file
27
UpTool2/SourcesForm.cs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
|
||||||
|
namespace UpTool2
|
||||||
|
{
|
||||||
|
public partial class SettingsForms : Form
|
||||||
|
{
|
||||||
|
private readonly List<Repo> _repos = new List<Repo>();
|
||||||
|
public SettingsForms()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
Program.FixXml();
|
||||||
|
_repos.AddRange(Program.Lib.V2.RepoManagement.GetRepos());
|
||||||
|
sourceGrid.Columns.Clear();
|
||||||
|
sourceGrid.Columns.Add("name", "Name");
|
||||||
|
sourceGrid.Columns.Add("link", "Link");
|
||||||
|
foreach (Repo repo in _repos)
|
||||||
|
sourceGrid.Rows.Add(repo.Name, repo.Url);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SettingsForms_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.Save(_repos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
348
UpTool2/SourcesForm.resx
Normal file
348
UpTool2/SourcesForm.resx
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing.Common" name="System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing.Common" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/vDoAPzdyQD6yqkA+bqHAPisYwD4oT0A95wWAPecFgD4oT0A+KxjAPm6
|
||||||
|
hwD6yqkA/N3JAP7w6AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP3s4gD7zrAA/wAADf8AAEv/AACB/wAArf8AAND/AADq/wAA+f8A
|
||||||
|
AP//AAD5/wAA6v8AAND/AACt/wAAgf8AAEv/AAAN+K5pAPvOsAD97OIA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/OLSAP8AAAn/AABg/wAAsP8AAPn/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AALD/AABg/wAACfm8
|
||||||
|
jAD84tIA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD959sA/wAAG/8AAIH/AADh/wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAOH/AACB/wAAG/m9jwD959sA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP749QD/AAAD/wAAdP8A
|
||||||
|
AOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOH/AAB0/wAAA/vPsgD++PUA////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP3r
|
||||||
|
4AD/AABA/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
ALf/AABA+byMAP3r4AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////APzj0wD/AABp/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA5f8AAGn4r20A/OPTAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAP/AACA/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAgP8AAAP8384A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAAP/AACH/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AACH/wAAA/zj0wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP3r4AD/AACA/wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAID4r20A/evgAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP74
|
||||||
|
9QD/AABp/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAafm8jAD++PUA////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABA+8+yAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AAAD/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAAt/8AAAP959sA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAdP8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB0+b2PAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAG/8A
|
||||||
|
AOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA4f8A
|
||||||
|
ABv84tIA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAIH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AACB+byMAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAn/AADh/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA4f8AAAn97OIA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AABg/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABg+86wAP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAsP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAAsPiuaQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A/wAADf8AAPn/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAPn/AAAN/vDoAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAEv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAS/zdyQD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AACB/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AIH6yqkA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAArf8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AACt+bqHAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAND/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA0PisYwD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AADq/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOr4oT0A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAA+f8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD595wWAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//ecFgD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AAD5/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPn4oT0A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/wAA6v8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADq+KxjAP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8AAND/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA0Pm6hwD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD/AACt/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAK36yqkA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/wAAgf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACB/N3JAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAEv/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAS/7w
|
||||||
|
6AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAAN/wAA+f8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA+f8AAA3///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AALD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AALD7zrAA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AABg/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABg/eziAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAACf8AAOH/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADh/wAACf//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD/AACB/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAAgfzi0gD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/wAAG/8AAOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA4f8AABv///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAB0/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHT959sA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAA/8A
|
||||||
|
ALf/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AALf/AAAD////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABA/vj1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAGn/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AABp/evgAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAgP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACA/OPTAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAAP/AACH/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACH/wAAA////wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/wAAA/8AAID/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACA/wAAA///
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAaf8A
|
||||||
|
AOX/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABp/evgAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AALf/AABA/vj1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAAP/AAB0/wAA4f8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA4f8AAHT/AAAD////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8A
|
||||||
|
ABv/AACB/wAA4f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADh/wAAgf8AABv///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAn/AABg/wAAsP8AAPn/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AALD/AABg/wAACf///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAAN/wAAS/8A
|
||||||
|
AIH/AACt/wAA0P8AAOr/AAD5/wAA//8AAPn/AADq/wAA0P8AAK3/AACB/wAAS/8AAA3///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////////////////////////////////////////////////////////////////////////
|
||||||
|
//////8AAf//////+AAAP//////gAAAP/////4AAAAP/////AAAAAf////4AAAAA////+AAAAAA////w
|
||||||
|
AAAAAB////AAAAAAH///4AAAAAAP///AAAAAAAf//4AAAAAAA///gAAAAAAD//8AAAAAAAH//wAAAAAA
|
||||||
|
Af/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wA
|
||||||
|
AAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAA
|
||||||
|
AH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP//AAAAAAAB//8A
|
||||||
|
AAAAAAH//4AAAAAAA///gAAAAAAD///AAAAAAAf//+AAAAAAD///8AAAAAAf///wAAAAAB////gAAAAA
|
||||||
|
P////gAAAAD/////AAAAAf////+AAAAD/////+AAAA//////+AAAP///////AAH/////////////////
|
||||||
|
//////////////////////////////////////////////////8=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
32
UpTool2/TaskPreview.cs
Normal file
32
UpTool2/TaskPreview.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using UpToolLib.v2.TaskQueue;
|
||||||
|
|
||||||
|
namespace UpTool2
|
||||||
|
{
|
||||||
|
internal static class TaskPreview
|
||||||
|
{
|
||||||
|
public static bool Show(ref List<AppTask> tasks, bool showOk)
|
||||||
|
{
|
||||||
|
bool ok = false;
|
||||||
|
using Form tmp = new Form {Size = new Size(600, 300), MinimumSize = new Size(300, showOk ? 138 : 133)};
|
||||||
|
using CheckedListBox list = new CheckedListBox {Dock = DockStyle.Fill};
|
||||||
|
using Button okButton = new Button {Dock = DockStyle.Bottom, Text = "OK"};
|
||||||
|
list.Items.AddRange(tasks.ToArray());
|
||||||
|
for (int i = 0; i < tasks.Count; i++)
|
||||||
|
list.SetItemChecked(i, true);
|
||||||
|
tmp.Controls.Add(list);
|
||||||
|
okButton.Click += (sender, args) =>
|
||||||
|
{
|
||||||
|
ok = true;
|
||||||
|
tmp.Close();
|
||||||
|
};
|
||||||
|
if (showOk) tmp.Controls.Add(okButton);
|
||||||
|
tmp.ShowDialog();
|
||||||
|
tasks = list.Items.OfType<AppTask>().Where((s, i) => list.GetItemChecked(i)).ToList();
|
||||||
|
return !showOk || ok;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
72
UpTool2/Tool/DownloadDialog.Designer.cs
generated
Normal file
72
UpTool2/Tool/DownloadDialog.Designer.cs
generated
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace UpTool2.Tool
|
||||||
|
{
|
||||||
|
partial class DownloadDialog
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
_client.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DownloadDialog));
|
||||||
|
this.progressBar = new System.Windows.Forms.ProgressBar();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// progressBar
|
||||||
|
//
|
||||||
|
this.progressBar.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.progressBar.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.progressBar.Name = "progressBar";
|
||||||
|
this.progressBar.Size = new System.Drawing.Size(346, 30);
|
||||||
|
this.progressBar.Step = 1;
|
||||||
|
this.progressBar.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// DownloadDialog
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(346, 30);
|
||||||
|
this.ControlBox = false;
|
||||||
|
this.Controls.Add(this.progressBar);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.MinimizeBox = false;
|
||||||
|
this.Name = "DownloadDialog";
|
||||||
|
this.ShowIcon = false;
|
||||||
|
this.ShowInTaskbar = false;
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
|
this.Text = "Downloading...";
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.DownloadDialog_FormClosing);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.ProgressBar progressBar;
|
||||||
|
}
|
||||||
|
}
|
43
UpTool2/Tool/DownloadDialog.cs
Normal file
43
UpTool2/Tool/DownloadDialog.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using System;
|
||||||
|
using System.Net;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace UpTool2.Tool
|
||||||
|
{
|
||||||
|
public partial class DownloadDialog : Form
|
||||||
|
{
|
||||||
|
private readonly WebClient _client;
|
||||||
|
private bool _close;
|
||||||
|
public byte[] Result;
|
||||||
|
|
||||||
|
public DownloadDialog(string uri)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_client = new WebClient();
|
||||||
|
_client.DownloadProgressChanged += ProgressChanged;
|
||||||
|
_client.DownloadDataCompleted += Done;
|
||||||
|
_client.DownloadDataAsync(new Uri(uri), _client);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
DialogResult = DialogResult.Abort;
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Done(object sender, DownloadDataCompletedEventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult = DialogResult.OK;
|
||||||
|
_close = true;
|
||||||
|
Result = e.Result;
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e) =>
|
||||||
|
progressBar.Value = e.ProgressPercentage;
|
||||||
|
|
||||||
|
private void DownloadDialog_FormClosing(object sender, FormClosingEventArgs e) => e.Cancel = !_close;
|
||||||
|
}
|
||||||
|
}
|
348
UpTool2/Tool/DownloadDialog.resx
Normal file
348
UpTool2/Tool/DownloadDialog.resx
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
<root>
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing.Common" name="System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing.Common" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/vDoAPzdyQD6yqkA+bqHAPisYwD4oT0A95wWAPecFgD4oT0A+KxjAPm6
|
||||||
|
hwD6yqkA/N3JAP7w6AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP3s4gD7zrAA/wAADf8AAEv/AACB/wAArf8AAND/AADq/wAA+f8A
|
||||||
|
AP//AAD5/wAA6v8AAND/AACt/wAAgf8AAEv/AAAN+K5pAPvOsAD97OIA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/OLSAP8AAAn/AABg/wAAsP8AAPn/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AALD/AABg/wAACfm8
|
||||||
|
jAD84tIA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD959sA/wAAG/8AAIH/AADh/wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAOH/AACB/wAAG/m9jwD959sA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP749QD/AAAD/wAAdP8A
|
||||||
|
AOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOH/AAB0/wAAA/vPsgD++PUA////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP3r
|
||||||
|
4AD/AABA/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
ALf/AABA+byMAP3r4AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////APzj0wD/AABp/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA5f8AAGn4r20A/OPTAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAP/AACA/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAgP8AAAP8384A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAAP/AACH/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AACH/wAAA/zj0wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP3r4AD/AACA/wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAID4r20A/evgAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP74
|
||||||
|
9QD/AABp/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAafm8jAD++PUA////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABA+8+yAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AAAD/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAAt/8AAAP959sA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAdP8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAB0+b2PAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAG/8A
|
||||||
|
AOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA4f8A
|
||||||
|
ABv84tIA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAIH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AACB+byMAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAn/AADh/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA4f8AAAn97OIA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AABg/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABg+86wAP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAsP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAAsPiuaQD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A/wAADf8AAPn/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAPn/AAAN/vDoAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAEv/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAS/zdyQD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AACB/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AIH6yqkA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAArf8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AACt+bqHAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAND/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA0PisYwD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AADq/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAOr4oT0A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAA+f8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD595wWAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//ecFgD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AAD5/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAPn4oT0A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/wAA6v8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADq+KxjAP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8AAND/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA0Pm6hwD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD/AACt/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAK36yqkA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/wAAgf8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACB/N3JAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAEv/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAS/7w
|
||||||
|
6AD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAAN/wAA+f8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA+f8AAA3///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AALD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AALD7zrAA////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD/AABg/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AABg/eziAP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAACf8AAOH/AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADh/wAACf//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD/AACB/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAAgfzi0gD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A/wAAG/8AAOH/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA4f8AABv///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAB0/wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP8AAAD/AAAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAHT959sA////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAA/8A
|
||||||
|
ALf/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA/wAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AALf/AAAD////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAA5f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABA/vj1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAGn/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AABp/evgAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAgP8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACA/OPTAP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP8AAAP/AACH/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACH/wAAA////wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A/wAAA/8AAID/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACA/wAAA///
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A/wAAaf8A
|
||||||
|
AOX/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AOX/AABp/evgAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD/AABA/wAAt/8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AALf/AABA/vj1AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP8AAAP/AAB0/wAA4f8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA4f8AAHT/AAAD////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP8A
|
||||||
|
ABv/AACB/wAA4f8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AADh/wAAgf8AABv///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP8AAAn/AABg/wAAsP8AAPn/AAD//wAA//8AAP//AAD//wAA//8A
|
||||||
|
AP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA+f8AALD/AABg/wAACf///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/AAAN/wAAS/8A
|
||||||
|
AIH/AACt/wAA0P8AAOr/AAD5/wAA//8AAPn/AADq/wAA0P8AAK3/AACB/wAAS/8AAA3///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
||||||
|
/wD///8A////////////////////////////////////////////////////////////////////////
|
||||||
|
//////8AAf//////+AAAP//////gAAAP/////4AAAAP/////AAAAAf////4AAAAA////+AAAAAA////w
|
||||||
|
AAAAAB////AAAAAAH///4AAAAAAP///AAAAAAAf//4AAAAAAA///gAAAAAAD//8AAAAAAAH//wAAAAAA
|
||||||
|
Af/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wA
|
||||||
|
AAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/8AAAAAAAAf/wAAAAAAAB//AAAAAAA
|
||||||
|
AH/8AAAAAAAAf/wAAAAAAAB//AAAAAAAAH/+AAAAAAAA//4AAAAAAAD//gAAAAAAAP//AAAAAAAB//8A
|
||||||
|
AAAAAAH//4AAAAAAA///gAAAAAAD///AAAAAAAf//+AAAAAAD///8AAAAAAf///wAAAAAB////gAAAAA
|
||||||
|
P////gAAAAD/////AAAAAf////+AAAAD/////+AAAA//////+AAAP///////AAH/////////////////
|
||||||
|
//////////////////////////////////////////////////8=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
60
UpTool2/UTLibFunctions.cs
Normal file
60
UpTool2/UTLibFunctions.cs
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using UpTool2.Properties;
|
||||||
|
using UpTool2.Tool;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
|
||||||
|
namespace UpTool2
|
||||||
|
{
|
||||||
|
internal class UtLibFunctions : IExternalFunctionality
|
||||||
|
{
|
||||||
|
public Tuple<bool, byte[]> Download(Uri link)
|
||||||
|
{
|
||||||
|
using DownloadDialog dialog = new DownloadDialog(link.AbsoluteUri);
|
||||||
|
bool success = dialog.ShowDialog() == DialogResult.OK;
|
||||||
|
return new Tuple<bool, byte[]>(success, success ? dialog.Result : null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string FetchImageB64(Uri link)
|
||||||
|
{
|
||||||
|
using WebClient client = new WebClient();
|
||||||
|
Image src = Image.FromStream(
|
||||||
|
client.OpenRead(link));
|
||||||
|
Bitmap dest = new Bitmap(70, 70);
|
||||||
|
dest.SetResolution(src.HorizontalResolution, src.VerticalResolution);
|
||||||
|
using (Graphics g = Graphics.FromImage(dest))
|
||||||
|
{
|
||||||
|
g.CompositingMode = CompositingMode.SourceCopy;
|
||||||
|
g.CompositingQuality = CompositingQuality.HighQuality;
|
||||||
|
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||||
|
g.SmoothingMode = SmoothingMode.HighQuality;
|
||||||
|
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
||||||
|
using ImageAttributes wrapMode = new ImageAttributes();
|
||||||
|
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
|
||||||
|
g.DrawImage(src, new Rectangle(0, 0, 70, 70), 0, 0, src.Width, src.Height,
|
||||||
|
GraphicsUnit.Pixel, wrapMode);
|
||||||
|
}
|
||||||
|
using MemoryStream ms = new MemoryStream();
|
||||||
|
dest.Save(ms, ImageFormat.Png);
|
||||||
|
return Convert.ToBase64String(ms.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool YesNoDialog(string text, bool _) =>
|
||||||
|
MessageBox.Show(text, "", MessageBoxButtons.YesNo) == DialogResult.Yes;
|
||||||
|
|
||||||
|
public void OkDialog(string text) => MessageBox.Show(text);
|
||||||
|
public object GetDefaultIcon() => Resources.C_64.ToBitmap();
|
||||||
|
|
||||||
|
public object ImageFromB64(string b64) =>
|
||||||
|
(Bitmap) new ImageConverter().ConvertFrom(Convert.FromBase64String(b64));
|
||||||
|
|
||||||
|
public void Log(string text)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,94 +1,25 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<TargetFramework>net5.0-windows</TargetFramework>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProjectGuid>{C0C1E002-9E13-4E8F-A035-DBDC5128E00E}</ProjectGuid>
|
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<RootNamespace>UpTool2</RootNamespace>
|
<LangVersion>8</LangVersion>
|
||||||
<AssemblyName>UpTool2</AssemblyName>
|
<Deterministic>false</Deterministic>
|
||||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
<Nullable>enable</Nullable>
|
||||||
<FileAlignment>512</FileAlignment>
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<Deterministic>false</Deterministic>
|
||||||
<Deterministic>true</Deterministic>
|
<AssemblyVersion>1.0.*</AssemblyVersion>
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<DebugType>none</DebugType>
|
||||||
<DebugType>pdbonly</DebugType>
|
</PropertyGroup>
|
||||||
<Optimize>true</Optimize>
|
<PropertyGroup>
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
<StartupObject>UpTool2.Program</StartupObject>
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
<ApplicationIcon>..\UpTool2.ico</ApplicationIcon>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
|
||||||
<Reference Include="System.Core" />
|
|
||||||
<Reference Include="System.IO.Compression.FileSystem" />
|
|
||||||
<Reference Include="System.Xml.Linq" />
|
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
|
||||||
<Reference Include="System.Data" />
|
|
||||||
<Reference Include="System.Deployment" />
|
|
||||||
<Reference Include="System.Drawing" />
|
|
||||||
<Reference Include="System.Net.Http" />
|
|
||||||
<Reference Include="System.Windows.Forms" />
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="MainForm.cs">
|
<ProjectReference Include="..\UpToolLib\UpToolLib.csproj" />
|
||||||
<SubType>Form</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="MainForm.Designer.cs">
|
|
||||||
<DependentUpon>MainForm.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Program.cs" />
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
<Compile Include="SettingsForm.cs">
|
|
||||||
<SubType>Form</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="SettingsForm.Designer.cs">
|
|
||||||
<DependentUpon>SettingsForm.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<EmbeddedResource Include="MainForm.resx">
|
|
||||||
<DependentUpon>MainForm.cs</DependentUpon>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<Compile Include="Properties\Resources.Designer.cs">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
|
||||||
<DesignTime>True</DesignTime>
|
|
||||||
</Compile>
|
|
||||||
<EmbeddedResource Include="SettingsForm.resx">
|
|
||||||
<DependentUpon>SettingsForm.cs</DependentUpon>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<None Include="Properties\Settings.settings">
|
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
|
||||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
|
||||||
</None>
|
|
||||||
<Compile Include="Properties\Settings.Designer.cs">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DependentUpon>Settings.settings</DependentUpon>
|
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
|
||||||
</Compile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
|
||||||
<None Include="App.config" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
||||||
</Project>
|
</Project>
|
27
UpTool2/WindowHelper.cs
Normal file
27
UpTool2/WindowHelper.cs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace UpTool2
|
||||||
|
{
|
||||||
|
//TODO: This class is Windows-only and can't be used cross-platform.
|
||||||
|
public static class WindowHelper
|
||||||
|
{
|
||||||
|
public static void BringProcessToFront(Process process)
|
||||||
|
{
|
||||||
|
IntPtr handle = process.MainWindowHandle;
|
||||||
|
if (IsIconic(handle))
|
||||||
|
ShowWindow(handle, 9);
|
||||||
|
SetForegroundWindow(handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("User32.dll")]
|
||||||
|
private static extern bool SetForegroundWindow(IntPtr handle);
|
||||||
|
|
||||||
|
[DllImport("User32.dll")]
|
||||||
|
private static extern bool ShowWindow(IntPtr handle, int nCmdShow);
|
||||||
|
|
||||||
|
[DllImport("User32.dll")]
|
||||||
|
private static extern bool IsIconic(IntPtr handle);
|
||||||
|
}
|
||||||
|
}
|
101
UpToolCLI/CacheManagement.cs
Normal file
101
UpToolCLI/CacheManagement.cs
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.CommandLine;
|
||||||
|
using System.CommandLine.Invocation;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using UpToolLib;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v1.Tool;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
|
||||||
|
namespace UpToolCLI
|
||||||
|
{
|
||||||
|
public static class CacheManagement
|
||||||
|
{
|
||||||
|
public static void RegisterCommands(RootCommand rootCommand)
|
||||||
|
{
|
||||||
|
rootCommand.AddCommand(new Command("list", "Lists installed packages")
|
||||||
|
{
|
||||||
|
Handler = CommandHandler.Create(List)
|
||||||
|
});
|
||||||
|
|
||||||
|
Command search = new("search", "Search for packages")
|
||||||
|
{
|
||||||
|
new Argument<string>("identifier", "Something to identify the app")
|
||||||
|
};
|
||||||
|
search.Handler = CommandHandler.Create<string>(Search);
|
||||||
|
rootCommand.AddCommand(search);
|
||||||
|
|
||||||
|
Command show = new("show", "Shows package info")
|
||||||
|
{
|
||||||
|
new Argument<string>("identifier", "Something to identify the app")
|
||||||
|
};
|
||||||
|
show.Handler = CommandHandler.Create<string>(Show);
|
||||||
|
rootCommand.AddCommand(show);
|
||||||
|
|
||||||
|
rootCommand.AddCommand(new Command("update", "Updates the cache")
|
||||||
|
{
|
||||||
|
Handler = CommandHandler.Create(Update)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void List()
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
Console.WriteLine(Program.Lib.V1.Apps.Where(s => s.Value.Status.Contains(Status.Installed))
|
||||||
|
.ToStringTable(new[]
|
||||||
|
{
|
||||||
|
"Name", "State", "Guid"
|
||||||
|
},
|
||||||
|
u => u.Value.Name,
|
||||||
|
u => u.Value.Local ? "Local" :
|
||||||
|
u.Value.Status.Contains(Status.Updatable) ? "Updatable" : "None",
|
||||||
|
u => u.Key));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Search(string identifier)
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
App[] apps = Program.Lib.V1.AppExtras.FindApps(identifier);
|
||||||
|
Console.WriteLine($"Found {apps.Length} app(s)");
|
||||||
|
if (apps.Length > 0)
|
||||||
|
Console.WriteLine(apps.ToStringTable(new[]
|
||||||
|
{
|
||||||
|
"Name", "Guid"
|
||||||
|
},
|
||||||
|
u => u.Name,
|
||||||
|
u => u.Id));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Show(string identifier)
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
App[] apps = Program.Lib.V1.AppExtras.FindApps(identifier);
|
||||||
|
if (apps.Length == 0)
|
||||||
|
Console.WriteLine("Package not found.");
|
||||||
|
else
|
||||||
|
Console.WriteLine(apps.First());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Update()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Fetching Repos...");
|
||||||
|
Program.Lib.V2.RepoManagement.FetchRepos();
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
Console.WriteLine();
|
||||||
|
IEnumerable<App> tmp = Program.Lib.V1.Apps.Where(s =>
|
||||||
|
s.Value.Status.Contains(Status.Updatable)).Select(s => s.Value);
|
||||||
|
IEnumerable<App> apps = tmp as App[] ?? tmp.ToArray();
|
||||||
|
int updatableCount = apps.Count();
|
||||||
|
Console.WriteLine(updatableCount == 0
|
||||||
|
? "All up-to-date"
|
||||||
|
: $@"Found {updatableCount} Updates:
|
||||||
|
{string.Join(Environment.NewLine, apps.Select(s => $"- {s.Name} ({s.Version})"))}");
|
||||||
|
Version vLocal = Assembly.GetExecutingAssembly().GetName().Version;
|
||||||
|
Version vOnline = Program.Lib.V2.UpdateChecker.Check().OnlineVersion;
|
||||||
|
if (vLocal < vOnline)
|
||||||
|
Console.WriteLine($"uptool is outdated ({vLocal} vs {vOnline}), update using \"uptool upgrade-self\"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
104
UpToolCLI/Other.cs
Normal file
104
UpToolCLI/Other.cs
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
using System;
|
||||||
|
using System.CommandLine;
|
||||||
|
using System.CommandLine.Invocation;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using UpToolLib;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v1.Tool;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
using Process = System.Diagnostics.Process;
|
||||||
|
|
||||||
|
namespace UpToolCLI
|
||||||
|
{
|
||||||
|
public class Other
|
||||||
|
{
|
||||||
|
public static void RegisterCommands(RootCommand rootCommand)
|
||||||
|
{
|
||||||
|
Command command = new("upgrade-self", "Upgrades UpToolCLI")
|
||||||
|
{
|
||||||
|
new Option<bool>(new[] {"--force", "-f"}, "Overwrites older files")
|
||||||
|
};
|
||||||
|
command.Handler = CommandHandler.Create<bool>(UpgradeSelf);
|
||||||
|
rootCommand.AddCommand(command);
|
||||||
|
|
||||||
|
Command start = new("start", "Starts an app")
|
||||||
|
{
|
||||||
|
new Argument<string>("identifier", "Something to identify the app"),
|
||||||
|
new Option<string>(new[] {"--arguments", "--args", "-a"}, () => "", "The arguments to run the file with"),
|
||||||
|
new Option<string>(new[] {"--file", "-f"}, () => null, "The file to run instead of the MainFile"),
|
||||||
|
new Option<bool>(new[] {"--waitForExit", "-wait"}, "Waits until the program quits")
|
||||||
|
};
|
||||||
|
start.Handler = CommandHandler.Create<string, string, string, bool>(Start);
|
||||||
|
rootCommand.AddCommand(start);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void UpgradeSelf(bool force)
|
||||||
|
{
|
||||||
|
PathTool pathTool = Program.Lib.V1.PathTool;
|
||||||
|
UpdateCheck updateCheck = Program.Lib.V2.UpdateChecker.Check();
|
||||||
|
if (!force && Assembly.GetExecutingAssembly().GetName().Version >= updateCheck.OnlineVersion)
|
||||||
|
Console.WriteLine("Already up-to-date");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Downloading latest");
|
||||||
|
(bool success, byte[] dl) = Program.Functions.Download(updateCheck.Installer);
|
||||||
|
if (!success)
|
||||||
|
throw new Exception("Failed to update");
|
||||||
|
Console.WriteLine("Verifying");
|
||||||
|
using (SHA256CryptoServiceProvider sha256 = new())
|
||||||
|
{
|
||||||
|
string pkgHash = BitConverter.ToString(sha256.ComputeHash(dl)).Replace("-", string.Empty).ToUpper();
|
||||||
|
if (pkgHash != updateCheck.InstallerHash)
|
||||||
|
throw new Exception($@"The hash is not equal to the one stored in the repo:
|
||||||
|
Package: {pkgHash}
|
||||||
|
Online: {updateCheck.InstallerHash}");
|
||||||
|
}
|
||||||
|
Console.WriteLine("Installing");
|
||||||
|
if (Directory.Exists(pathTool.GetRelative("Install", "tmp")))
|
||||||
|
Directory.Delete(pathTool.GetRelative("Install", "tmp"), true);
|
||||||
|
Directory.CreateDirectory(pathTool.GetRelative("Install", "tmp"));
|
||||||
|
using (MemoryStream ms = new(dl))
|
||||||
|
{
|
||||||
|
using ZipArchive ar = new(ms);
|
||||||
|
ar.ExtractToDirectory(pathTool.GetRelative("Install", "tmp"), true);
|
||||||
|
}
|
||||||
|
string file = pathTool.GetRelative("Install", "tmp", "Installer.exe");
|
||||||
|
Console.WriteLine($"Starting {file}");
|
||||||
|
Process.Start(new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = file,
|
||||||
|
Arguments = "i",
|
||||||
|
WorkingDirectory = pathTool.GetRelative("Install"),
|
||||||
|
UseShellExecute = false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Start(string identifier, string arguments, string file, bool waitForExit)
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
App[] apps = Program.Lib.V1.AppExtras.FindApps(identifier);
|
||||||
|
if (apps.Length == 0)
|
||||||
|
Console.WriteLine("Package not found.");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
App tmp = apps.First();
|
||||||
|
if (tmp.Runnable)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Starting {tmp.Name}");
|
||||||
|
Process tmp1 = Program.Lib.V1.AppExtras.RunApp(tmp, file ?? tmp.MainFile, arguments);
|
||||||
|
if (waitForExit)
|
||||||
|
tmp1.WaitForExit();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Console.WriteLine($"{tmp.Name} is not runnable");
|
||||||
|
}
|
||||||
|
Console.WriteLine("Done!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
192
UpToolCLI/PackageManagement.cs
Normal file
192
UpToolCLI/PackageManagement.cs
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.CommandLine;
|
||||||
|
using System.CommandLine.Invocation;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using UpToolLib;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v1;
|
||||||
|
using UpToolLib.v1.Tool;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
|
||||||
|
namespace UpToolCLI
|
||||||
|
{
|
||||||
|
public static class PackageManagement
|
||||||
|
{
|
||||||
|
public static void RegisterCommands(RootCommand rootCommand)
|
||||||
|
{
|
||||||
|
Command install = new("install", "Install a package")
|
||||||
|
{
|
||||||
|
new Argument<string>("identifier", "Something to identify the app or the file name"),
|
||||||
|
new Option<bool>(new[] {"--force", "-f"}, "Overwrites older files")
|
||||||
|
};
|
||||||
|
install.Handler = CommandHandler.Create<string, bool>(Install);
|
||||||
|
rootCommand.AddCommand(install);
|
||||||
|
|
||||||
|
Command upgrade = new("upgrade", "Upgrade a package")
|
||||||
|
{
|
||||||
|
new Argument<string>("identifier", "Something to identify the app"),
|
||||||
|
new Option<bool>(new[] {"--force", "-f"}, "Overwrites older files")
|
||||||
|
};
|
||||||
|
upgrade.Handler = CommandHandler.Create<string, bool>(Upgrade);
|
||||||
|
rootCommand.AddCommand(upgrade);
|
||||||
|
|
||||||
|
Command reinstall = new("reinstall", "Reinstall a package")
|
||||||
|
{
|
||||||
|
new Argument<string>("identifier", "Something to identify the app"),
|
||||||
|
new Option<bool>(new[] {"--force", "-f"}, "Overwrites older files")
|
||||||
|
};
|
||||||
|
reinstall.Handler = CommandHandler.Create<string, bool>(Reinstall);
|
||||||
|
rootCommand.AddCommand(reinstall);
|
||||||
|
|
||||||
|
Command remove = new("remove", "Remove a package")
|
||||||
|
{
|
||||||
|
new Argument<string>("identifier", "Something to identify the app")
|
||||||
|
};
|
||||||
|
remove.Handler = CommandHandler.Create<string>(Remove);
|
||||||
|
rootCommand.AddCommand(remove);
|
||||||
|
|
||||||
|
Command purge = new("purge", "Completely remove a package")
|
||||||
|
{
|
||||||
|
new Argument<string>("identifier", "Something to identify the app")
|
||||||
|
};
|
||||||
|
purge.Handler = CommandHandler.Create<string>(Purge);
|
||||||
|
rootCommand.AddCommand(purge);
|
||||||
|
|
||||||
|
rootCommand.AddCommand(new Command("dist-upgrade", "Upgrades all packages")
|
||||||
|
{
|
||||||
|
Handler = CommandHandler.Create(DistUpgrade)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Install(string identifier, bool force)
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
App[] apps = Program.Lib.V1.AppExtras.FindApps(identifier);
|
||||||
|
if (apps.Length == 0)
|
||||||
|
{
|
||||||
|
if (File.Exists(identifier))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Name:");
|
||||||
|
string name = Console.ReadLine();
|
||||||
|
Program.Lib.V1.Installer.InstallZip(identifier, Program.Lib.V2.AppFactory.CreateApp(name, "Locally installed package, removal only",
|
||||||
|
UpToolLibV1.MinimumVer, "", true, "",
|
||||||
|
Guid.NewGuid(), Color.Red, "", false, ""), force);
|
||||||
|
Console.WriteLine($"Successfully installed \"{name}\"");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Package not found.");
|
||||||
|
Console.WriteLine(identifier);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
App tmp = apps.First();
|
||||||
|
if (tmp.Status.Contains(Status.Installed))
|
||||||
|
Console.WriteLine("Package is already installed");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Installing {tmp.Name}");
|
||||||
|
Program.Lib.V1.Installer.Install(tmp, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Console.WriteLine("Done!");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Upgrade(string identifier, bool force)
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
App[] apps = Program.Lib.V1.AppExtras.FindApps(identifier);
|
||||||
|
if (apps.Length == 0)
|
||||||
|
Console.WriteLine("Package not found.");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
App tmp = apps.First();
|
||||||
|
if (tmp.Status.Contains(Status.Updatable))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Upgrading {tmp.Name}");
|
||||||
|
Program.Lib.V1.AppExtras.Update(tmp, force);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Console.WriteLine("Package is up-to-date");
|
||||||
|
}
|
||||||
|
Console.WriteLine("Done!");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Reinstall(string identifier, bool force)
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
App[] apps = Program.Lib.V1.AppExtras.FindApps(identifier);
|
||||||
|
if (apps.Length == 0)
|
||||||
|
Console.WriteLine("Package not found.");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
App tmp = apps.First();
|
||||||
|
Console.WriteLine($"Reinstalling {tmp.Name}");
|
||||||
|
Program.Lib.V1.AppExtras.Update(tmp, force);
|
||||||
|
}
|
||||||
|
Console.WriteLine("Done!");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Remove(string identifier)
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
App[] apps = Program.Lib.V1.AppExtras.FindApps(identifier);
|
||||||
|
if (apps.Length == 0)
|
||||||
|
Console.WriteLine("Package not found.");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
App tmp = apps.First();
|
||||||
|
if (tmp.Status.Contains(Status.Installed))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Removing {tmp.Name}");
|
||||||
|
Program.Lib.V1.AppExtras.Remove(tmp, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Console.WriteLine("Package is not installed");
|
||||||
|
}
|
||||||
|
Console.WriteLine("Done!");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void Purge(string identifier)
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
App[] apps = Program.Lib.V1.AppExtras.FindApps(identifier);
|
||||||
|
if (apps.Length == 0)
|
||||||
|
Console.WriteLine("Package not found.");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
App tmp = apps.First();
|
||||||
|
if (tmp.Status.Contains(Status.Installed))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Purging {tmp.Name}");
|
||||||
|
Program.Lib.V1.AppExtras.Remove(tmp, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Console.WriteLine("Package is not installed");
|
||||||
|
}
|
||||||
|
Console.WriteLine("Done!");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void DistUpgrade()
|
||||||
|
{
|
||||||
|
Program.Lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
foreach (KeyValuePair<Guid, App> app in Program.Lib.V1.Apps.Where(s =>
|
||||||
|
s.Value.Status.Contains(Status.Updatable)))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Updating {app.Value.Name}");
|
||||||
|
Program.Lib.V1.AppExtras.Update(app.Value, false);
|
||||||
|
}
|
||||||
|
if (Assembly.GetExecutingAssembly().GetName().Version < Program.Lib.V2.UpdateChecker.Check().OnlineVersion)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Updating self");
|
||||||
|
Other.UpgradeSelf(false);
|
||||||
|
}
|
||||||
|
Console.WriteLine("Done!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
41
UpToolCLI/Program.cs
Normal file
41
UpToolCLI/Program.cs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
using System;
|
||||||
|
using System.CommandLine;
|
||||||
|
using UpToolLib;
|
||||||
|
|
||||||
|
namespace UpToolCLI
|
||||||
|
{
|
||||||
|
public static class Program
|
||||||
|
{
|
||||||
|
public static readonly UtLibFunctions Functions = new();
|
||||||
|
public static bool Basic;
|
||||||
|
public static UpToolLibMain Lib;
|
||||||
|
|
||||||
|
public static int Main(string[] args)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Basic = args.Length > 0 && args[0].ToLower() == "--basic";
|
||||||
|
Lib = new UpToolLibMain(Functions);
|
||||||
|
Lib.V1.XmlTool.FixXml();
|
||||||
|
RootCommand rootCommand = new();
|
||||||
|
rootCommand.AddGlobalOption(new Option<bool>("--basic", "Use only basic console functionality. Must be the first parameter in the call"));
|
||||||
|
|
||||||
|
PackageManagement.RegisterCommands(rootCommand);
|
||||||
|
CacheManagement.RegisterCommands(rootCommand);
|
||||||
|
ReposManagement.RegisterCommands(rootCommand);
|
||||||
|
Other.RegisterCommands(rootCommand);
|
||||||
|
|
||||||
|
return rootCommand.InvokeAsync(args).Result;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"FAILED: {e}");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Lib?.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
93
UpToolCLI/ReposManagement.cs
Normal file
93
UpToolCLI/ReposManagement.cs
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
using System;
|
||||||
|
using System.CommandLine;
|
||||||
|
using System.CommandLine.Invocation;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using UpToolLib.v1.Tool;
|
||||||
|
|
||||||
|
namespace UpToolCLI
|
||||||
|
{
|
||||||
|
public class ReposManagement
|
||||||
|
{
|
||||||
|
private static string InfoXml => Program.Lib.V1.PathTool.InfoXml;
|
||||||
|
public static void RegisterCommands(RootCommand rootCommand)
|
||||||
|
{
|
||||||
|
rootCommand.AddCommand(new Command("list-repo", "Lists current repositories")
|
||||||
|
{
|
||||||
|
Handler = CommandHandler.Create(ListRepo)
|
||||||
|
});
|
||||||
|
|
||||||
|
Command addRepo = new("add-repo", "Adds a repository")
|
||||||
|
{
|
||||||
|
new Argument<string>("name", "The new repositories name"),
|
||||||
|
new Argument<string>("link", "A link to the repositories XML")
|
||||||
|
};
|
||||||
|
addRepo.Handler = CommandHandler.Create<string, string>(AddRepo);
|
||||||
|
rootCommand.AddCommand(addRepo);
|
||||||
|
|
||||||
|
Command removeRepo = new("remove-repo", "Removes a repository")
|
||||||
|
{
|
||||||
|
new Argument<string>("name", "The repositories name")
|
||||||
|
};
|
||||||
|
removeRepo.Handler = CommandHandler.Create<string>(RemoveRepo);
|
||||||
|
rootCommand.AddCommand(removeRepo);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ListRepo()
|
||||||
|
{
|
||||||
|
XDocument doc = XDocument.Load(InfoXml);
|
||||||
|
XElement repos = doc.Element("meta").Element("Repos");
|
||||||
|
Console.WriteLine("Current repos:");
|
||||||
|
Console.WriteLine(repos.Elements("Repo").ToStringTable(new[]
|
||||||
|
{
|
||||||
|
"Name", "Link"
|
||||||
|
},
|
||||||
|
u => u.Element("Name").Value,
|
||||||
|
u => u.Element("Link").Value));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AddRepo(string name, string link)
|
||||||
|
{
|
||||||
|
XDocument doc = XDocument.Load(InfoXml);
|
||||||
|
XElement repos = doc.Element("meta").Element("Repos");
|
||||||
|
repos.Add(new XElement("Repo", new XElement("Name", name),
|
||||||
|
new XElement("Link", link)));
|
||||||
|
doc.Save(InfoXml);
|
||||||
|
Console.WriteLine("Added repo. Remember to update the cache using \"uptool update\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void RemoveRepo(string name)
|
||||||
|
{
|
||||||
|
XDocument doc = XDocument.Load(InfoXml);
|
||||||
|
XElement repos = doc.Element("meta").Element("Repos");
|
||||||
|
XElement[] sRepos = repos.Elements("Repo")
|
||||||
|
.Where(s => s.Element("Name").Value.ToLower().StartsWith(name.ToLower())).ToArray();
|
||||||
|
switch (sRepos.Length)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
Console.WriteLine("No repo was found that matches your input!");
|
||||||
|
return;
|
||||||
|
case 1:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Console.WriteLine("Found multiple repos that match your input:");
|
||||||
|
Console.WriteLine(sRepos.ToStringTable(new[]
|
||||||
|
{
|
||||||
|
"Name", "Link"
|
||||||
|
},
|
||||||
|
u => u.Element("Name").Value,
|
||||||
|
u => u.Element("Link").Value));
|
||||||
|
if (!Program.Functions.YesNoDialog("Are you sure you want to delete them all?", false))
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
foreach (XElement t in sRepos)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Removing {t.Element("Name").Value}");
|
||||||
|
t.Remove();
|
||||||
|
}
|
||||||
|
doc.Save(InfoXml);
|
||||||
|
Console.WriteLine("Removed repo. Remember to update the cache using \"uptool update\"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
104
UpToolCLI/TableParser.cs
Normal file
104
UpToolCLI/TableParser.cs
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace UpToolCLI
|
||||||
|
{
|
||||||
|
public static class TableParser
|
||||||
|
{
|
||||||
|
public static string ToStringTable<T>(this IEnumerable<T> values, string[] columnHeaders,
|
||||||
|
params Func<T, object>[] valueSelectors) => ToStringTable(values.ToArray(), columnHeaders, valueSelectors);
|
||||||
|
|
||||||
|
public static string ToStringTable<T>(this T[] values, string[] columnHeaders,
|
||||||
|
params Func<T, object>[] valueSelectors)
|
||||||
|
{
|
||||||
|
Debug.Assert(columnHeaders.Length == valueSelectors.Length);
|
||||||
|
|
||||||
|
string[,] arrValues = new string[values.Length + 1, valueSelectors.Length];
|
||||||
|
|
||||||
|
// Fill headers
|
||||||
|
for (int colIndex = 0; colIndex < arrValues.GetLength(1); colIndex++)
|
||||||
|
arrValues[0, colIndex] = columnHeaders[colIndex];
|
||||||
|
|
||||||
|
// Fill table rows
|
||||||
|
for (int rowIndex = 1; rowIndex < arrValues.GetLength(0); rowIndex++)
|
||||||
|
for (int colIndex = 0; colIndex < arrValues.GetLength(1); colIndex++)
|
||||||
|
{
|
||||||
|
object value = valueSelectors[colIndex].Invoke(values[rowIndex - 1]);
|
||||||
|
|
||||||
|
arrValues[rowIndex, colIndex] = value != null ? value.ToString() : "null";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ToStringTable(arrValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToStringTable(this string[,] arrValues)
|
||||||
|
{
|
||||||
|
int[] maxColumnsWidth = GetMaxColumnsWidth(arrValues);
|
||||||
|
string headerSpliter = new('-', maxColumnsWidth.Sum(i => i + 3) - 1);
|
||||||
|
|
||||||
|
StringBuilder sb = new();
|
||||||
|
for (int rowIndex = 0; rowIndex < arrValues.GetLength(0); rowIndex++)
|
||||||
|
{
|
||||||
|
for (int colIndex = 0; colIndex < arrValues.GetLength(1); colIndex++)
|
||||||
|
{
|
||||||
|
// Print cell
|
||||||
|
string cell = arrValues[rowIndex, colIndex];
|
||||||
|
cell = cell.PadRight(maxColumnsWidth[colIndex]);
|
||||||
|
sb.Append(" | ");
|
||||||
|
sb.Append(cell);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print end of line
|
||||||
|
sb.Append(" | ");
|
||||||
|
sb.AppendLine();
|
||||||
|
|
||||||
|
// Print splitter
|
||||||
|
if (rowIndex == 0)
|
||||||
|
{
|
||||||
|
sb.AppendFormat(" |{0}| ", headerSpliter);
|
||||||
|
sb.AppendLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int[] GetMaxColumnsWidth(string[,] arrValues)
|
||||||
|
{
|
||||||
|
int[] maxColumnsWidth = new int[arrValues.GetLength(1)];
|
||||||
|
for (int colIndex = 0; colIndex < arrValues.GetLength(1); colIndex++)
|
||||||
|
for (int rowIndex = 0; rowIndex < arrValues.GetLength(0); rowIndex++)
|
||||||
|
{
|
||||||
|
int newLength = arrValues[rowIndex, colIndex].Length;
|
||||||
|
int oldLength = maxColumnsWidth[colIndex];
|
||||||
|
|
||||||
|
if (newLength > oldLength) maxColumnsWidth[colIndex] = newLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
return maxColumnsWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ToStringTable<T>(this IEnumerable<T> values,
|
||||||
|
params Expression<Func<T, object>>[] valueSelectors)
|
||||||
|
{
|
||||||
|
string[] headers = valueSelectors.Select(func => GetProperty(func).Name).ToArray();
|
||||||
|
Func<T, object>[] selectors = valueSelectors.Select(exp => exp.Compile()).ToArray();
|
||||||
|
return ToStringTable(values, headers, selectors);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PropertyInfo GetProperty<T>(Expression<Func<T, object>> expresstion)
|
||||||
|
{
|
||||||
|
if (expresstion.Body is UnaryExpression expression)
|
||||||
|
if (expression.Operand is MemberExpression memberExpression)
|
||||||
|
return memberExpression.Member as PropertyInfo;
|
||||||
|
|
||||||
|
if (expresstion.Body is MemberExpression body) return body.Member as PropertyInfo;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
117
UpToolCLI/UTLibFunctions.cs
Normal file
117
UpToolCLI/UTLibFunctions.cs
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Threading;
|
||||||
|
using SixLabors.ImageSharp;
|
||||||
|
using SixLabors.ImageSharp.Processing;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using static UpToolCLI.Program;
|
||||||
|
|
||||||
|
namespace UpToolCLI
|
||||||
|
{
|
||||||
|
public class UtLibFunctions : IExternalFunctionality
|
||||||
|
{
|
||||||
|
public Tuple<bool, byte[]> Download(Uri link)
|
||||||
|
{
|
||||||
|
using WebClient client = new();
|
||||||
|
byte[] result = new byte[0];
|
||||||
|
bool finished = false;
|
||||||
|
bool success = true;
|
||||||
|
client.DownloadDataCompleted += (sender, e) =>
|
||||||
|
{
|
||||||
|
success = !e.Cancelled;
|
||||||
|
if (success)
|
||||||
|
result = e.Result;
|
||||||
|
finished = true;
|
||||||
|
};
|
||||||
|
client.DownloadProgressChanged += (sender, e) =>
|
||||||
|
{
|
||||||
|
if (!Basic)
|
||||||
|
{
|
||||||
|
Console.Write(
|
||||||
|
$"{new string('=', e.ProgressPercentage / 10)}[{e.ProgressPercentage}]{new string('-', 10 - e.ProgressPercentage / 10)}");
|
||||||
|
Console.CursorLeft = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
client.DownloadDataAsync(link);
|
||||||
|
while (!finished)
|
||||||
|
Thread.Sleep(100);
|
||||||
|
return new Tuple<bool, byte[]>(success, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string FetchImageB64(Uri link)
|
||||||
|
{
|
||||||
|
using WebClient client = new();
|
||||||
|
using Image image = Image.Load(client.OpenRead(link));
|
||||||
|
image.Mutate(x => x.Resize(70, 70));
|
||||||
|
using MemoryStream ms = new();
|
||||||
|
image.SaveAsPng(ms);
|
||||||
|
return Convert.ToBase64String(ms.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool YesNoDialog(string text, bool defaultVal)
|
||||||
|
{
|
||||||
|
if (Basic)
|
||||||
|
{
|
||||||
|
Console.WriteLine(text);
|
||||||
|
Console.WriteLine($"Selecting: {defaultVal}");
|
||||||
|
return defaultVal;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool choosing = true;
|
||||||
|
bool current = defaultVal;
|
||||||
|
Console.WriteLine(text);
|
||||||
|
while (choosing)
|
||||||
|
{
|
||||||
|
Console.CursorLeft = 0;
|
||||||
|
Console.BackgroundColor = current ? ConsoleColor.White : ConsoleColor.Black;
|
||||||
|
Console.ForegroundColor = current ? ConsoleColor.Black : ConsoleColor.White;
|
||||||
|
Console.Write("Yes");
|
||||||
|
Console.ResetColor();
|
||||||
|
Console.Write(" ");
|
||||||
|
Console.BackgroundColor = current ? ConsoleColor.Black : ConsoleColor.White;
|
||||||
|
Console.ForegroundColor = current ? ConsoleColor.White : ConsoleColor.Black;
|
||||||
|
Console.Write("No");
|
||||||
|
Console.ResetColor();
|
||||||
|
switch (Console.ReadKey().Key)
|
||||||
|
{
|
||||||
|
case ConsoleKey.LeftArrow:
|
||||||
|
case ConsoleKey.RightArrow:
|
||||||
|
current = !current;
|
||||||
|
break;
|
||||||
|
case ConsoleKey.Enter:
|
||||||
|
choosing = false;
|
||||||
|
break;
|
||||||
|
case ConsoleKey.Escape:
|
||||||
|
current = defaultVal;
|
||||||
|
choosing = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Console.ResetColor();
|
||||||
|
Console.WriteLine($" Selecting: {current}");
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OkDialog(string text)
|
||||||
|
{
|
||||||
|
if (Basic)
|
||||||
|
Console.WriteLine(text);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine(text);
|
||||||
|
Console.BackgroundColor = ConsoleColor.White;
|
||||||
|
Console.Write("OK");
|
||||||
|
Console.ResetColor();
|
||||||
|
Console.ReadKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public object GetDefaultIcon() => 0;
|
||||||
|
|
||||||
|
public object ImageFromB64(string b64) => 0;
|
||||||
|
public void Log(string text) => Console.WriteLine(text);
|
||||||
|
}
|
||||||
|
}
|
24
UpToolCLI/UpToolCLI.csproj
Normal file
24
UpToolCLI/UpToolCLI.csproj
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
<AssemblyName>uptool</AssemblyName>
|
||||||
|
<Deterministic>false</Deterministic>
|
||||||
|
<AssemblyVersion>1.0.*</AssemblyVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationIcon>..\UpTool2.ico</ApplicationIcon>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.2" />
|
||||||
|
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20574.7" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\UpToolLib\UpToolLib.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
17
UpToolEto/UpToolEto.Gtk/Program.cs
Normal file
17
UpToolEto/UpToolEto.Gtk/Program.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using Eto.Forms;
|
||||||
|
|
||||||
|
namespace UpToolEto.Gtk
|
||||||
|
{
|
||||||
|
class MainClass
|
||||||
|
{
|
||||||
|
[STAThread]
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
new Main(new Application(Eto.Platforms.Gtk), () =>
|
||||||
|
{
|
||||||
|
|
||||||
|
}, args).Entry();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
UpToolEto/UpToolEto.Gtk/UpToolEto.Gtk.csproj
Normal file
16
UpToolEto/UpToolEto.Gtk/UpToolEto.Gtk.csproj
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\UpToolEto\UpToolEto.csproj"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Eto.Platform.Gtk" Version="2.5.10"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
38
UpToolEto/UpToolEto.Wpf/Program.cs
Normal file
38
UpToolEto/UpToolEto.Wpf/Program.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using System;
|
||||||
|
using Eto.Forms;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace UpToolEto.Wpf
|
||||||
|
{
|
||||||
|
class MainClass
|
||||||
|
{
|
||||||
|
[STAThread]
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
new Main(new Application(Eto.Platforms.Wpf), () =>
|
||||||
|
{
|
||||||
|
Process[] processes = Process.GetProcessesByName("UpTool2");
|
||||||
|
if (processes.Length > 0)
|
||||||
|
BringProcessToFront(processes[0]);
|
||||||
|
}, args).Entry();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void BringProcessToFront(Process process)
|
||||||
|
{
|
||||||
|
IntPtr handle = process.MainWindowHandle;
|
||||||
|
if (IsIconic(handle))
|
||||||
|
ShowWindow(handle, 9);
|
||||||
|
SetForegroundWindow(handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("User32.dll")]
|
||||||
|
private static extern bool SetForegroundWindow(IntPtr handle);
|
||||||
|
|
||||||
|
[DllImport("User32.dll")]
|
||||||
|
private static extern bool ShowWindow(IntPtr handle, int nCmdShow);
|
||||||
|
|
||||||
|
[DllImport("User32.dll")]
|
||||||
|
private static extern bool IsIconic(IntPtr handle);
|
||||||
|
}
|
||||||
|
}
|
16
UpToolEto/UpToolEto.Wpf/UpToolEto.Wpf.csproj
Normal file
16
UpToolEto/UpToolEto.Wpf/UpToolEto.Wpf.csproj
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net5.0-windows</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\UpToolEto\UpToolEto.csproj"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Eto.Platform.Wpf" Version="2.5.10"/>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
65
UpToolEto/UpToolEto/Controls/AppControlButton.cs
Normal file
65
UpToolEto/UpToolEto/Controls/AppControlButton.cs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Eto.Drawing;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
using UpToolLib.v2.TaskQueue;
|
||||||
|
|
||||||
|
namespace UpToolEto.Controls
|
||||||
|
{
|
||||||
|
public abstract class AppControlButton : Button
|
||||||
|
{
|
||||||
|
public abstract void ReloadState();
|
||||||
|
public abstract void SetApp(App app);
|
||||||
|
public abstract void Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AppControlButton<T> : AppControlButton where T : KnownAppTask
|
||||||
|
{
|
||||||
|
private readonly IList<AppTask> _tasks;
|
||||||
|
private readonly Func<App, bool> _enabledCheck;
|
||||||
|
private readonly Color _defaultColor;
|
||||||
|
private App _app;
|
||||||
|
|
||||||
|
public AppControlButton(string text, Func<App, Action?, AppTask> factory, IList<AppTask> tasks, Action reloadState, Func<App, bool> enabledCheck)
|
||||||
|
{
|
||||||
|
_tasks = tasks;
|
||||||
|
_enabledCheck = enabledCheck;
|
||||||
|
_defaultColor = BackgroundColor;
|
||||||
|
Text = text;
|
||||||
|
Click += (_, _) =>
|
||||||
|
{
|
||||||
|
bool found = false;
|
||||||
|
for (var i = tasks.ToArray().Length - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if (tasks[i] is T t && t.App == _app)
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
tasks.RemoveAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
|
tasks.Add(factory(_app, ReloadState));
|
||||||
|
reloadState();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void ReloadState()
|
||||||
|
{
|
||||||
|
Enabled = _enabledCheck(_app);
|
||||||
|
BackgroundColor = _tasks.Any(s => s is T t && t.App == _app) ? Colors.Green : _defaultColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetApp(App app)
|
||||||
|
{
|
||||||
|
_app = app;
|
||||||
|
ReloadState();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Clear()
|
||||||
|
{
|
||||||
|
Enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
83
UpToolEto/UpToolEto/Controls/AppControls.cs
Normal file
83
UpToolEto/UpToolEto/Controls/AppControls.cs
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Eto.Drawing;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolEto.Forms;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
using UpToolLib.v2.TaskQueue;
|
||||||
|
|
||||||
|
namespace UpToolEto.Controls
|
||||||
|
{
|
||||||
|
public class AppControls : StackLayout
|
||||||
|
{
|
||||||
|
private readonly IList<AppTask> _tasks;
|
||||||
|
private readonly List<AppControlButton> _buttons;
|
||||||
|
private readonly Button _applyButton;
|
||||||
|
public AppControls(TaskFactory factory, IList<AppTask> tasks, IExternalFunctionality platform, Action update)
|
||||||
|
{
|
||||||
|
_tasks = tasks;
|
||||||
|
_buttons = new List<AppControlButton>
|
||||||
|
{
|
||||||
|
new AppControlButton<InstallTask>("Install", factory.CreateInstall, tasks, ReloadState,
|
||||||
|
app => !app.Status.Contains(Status.Installed)),
|
||||||
|
new AppControlButton<UpdateTask>("Update", factory.CreateUpdate, tasks, ReloadState,
|
||||||
|
app => app.Status.Contains(Status.Updatable)),
|
||||||
|
new AppControlButton<RemoveTask>("Remove", factory.CreateRemove, tasks, ReloadState,
|
||||||
|
app => app.Status.Contains(Status.Installed))
|
||||||
|
};
|
||||||
|
_applyButton = new Button((_, _) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
QueueOverview overview = new(tasks);
|
||||||
|
overview.ShowModal();
|
||||||
|
if (!overview.Cancelled)
|
||||||
|
{
|
||||||
|
foreach (AppTask task in overview.TasksResulting)
|
||||||
|
{
|
||||||
|
task.Run();
|
||||||
|
_tasks.RemoveAt(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
platform.OkDialog("Failed to complete queue:\r\n" + e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
ReloadState();
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Text = "Apply",
|
||||||
|
Enabled = false
|
||||||
|
};
|
||||||
|
foreach (AppControlButton button in _buttons) Items.Add(button);
|
||||||
|
Items.Add(new StackLayoutItem(_applyButton, HorizontalAlignment.Right));
|
||||||
|
if (Main.DebugColors)
|
||||||
|
BackgroundColor = Colors.Yellow;
|
||||||
|
Orientation = Orientation.Horizontal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetApp(App app)
|
||||||
|
{
|
||||||
|
foreach (AppControlButton button in _buttons) button.SetApp(app);
|
||||||
|
ReloadState();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
foreach (AppControlButton button in _buttons) button.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ReloadState()
|
||||||
|
{
|
||||||
|
foreach (AppControlButton button in _buttons) button.ReloadState();
|
||||||
|
_applyButton.Enabled = _tasks.Any();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
58
UpToolEto/UpToolEto/Controls/AppList.cs
Normal file
58
UpToolEto/UpToolEto/Controls/AppList.cs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Eto.Drawing;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolEto.Forms;
|
||||||
|
using UpToolLib.v1.Tool;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
using UpToolLib.v2.TaskQueue;
|
||||||
|
|
||||||
|
namespace UpToolEto.Controls
|
||||||
|
{
|
||||||
|
public class AppList : StackLayout
|
||||||
|
{
|
||||||
|
private readonly AppExtras _extras;
|
||||||
|
private readonly Action<Guid, App> _itemClickEvent;
|
||||||
|
private readonly StackLayout _layout;
|
||||||
|
private readonly AppListSearchProvider _searchProvider;
|
||||||
|
|
||||||
|
public AppList(AppExtras extras, Action<Guid, App> itemClickEvent, bool online, TaskFactory factory, IList<AppTask> tasks)
|
||||||
|
{
|
||||||
|
_extras = extras;
|
||||||
|
_itemClickEvent = itemClickEvent;
|
||||||
|
_searchProvider = new AppListSearchProvider(online, Update);
|
||||||
|
Items.Add(_searchProvider);
|
||||||
|
_layout = new StackLayout
|
||||||
|
{
|
||||||
|
Padding = 10,
|
||||||
|
Orientation = Orientation.Vertical,
|
||||||
|
Width = 200
|
||||||
|
};
|
||||||
|
Scrollable scrollable = new()
|
||||||
|
{
|
||||||
|
Content = _layout
|
||||||
|
};
|
||||||
|
if (Main.DebugColors)
|
||||||
|
scrollable.BackgroundColor = Colors.YellowGreen;
|
||||||
|
Items.Add(new StackLayoutItem(scrollable, VerticalAlignment.Stretch, true));
|
||||||
|
Orientation = Orientation.Vertical;
|
||||||
|
if (Main.DebugColors)
|
||||||
|
BackgroundColor = Colors.Green;
|
||||||
|
Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update()
|
||||||
|
{
|
||||||
|
_layout.Items.Clear();
|
||||||
|
foreach (App app in _extras.FindApps(_searchProvider.GetSearchTerms()))
|
||||||
|
if (_searchProvider.Matches(app))
|
||||||
|
_layout.Items.Add(new Button((_, _) => _itemClickEvent(app.Id, app))
|
||||||
|
{
|
||||||
|
Text = app.Name,
|
||||||
|
Image = (Icon)app.Icon,
|
||||||
|
ImagePosition = ButtonImagePosition.Left,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
32
UpToolEto/UpToolEto/Controls/AppListSearchProvider.cs
Normal file
32
UpToolEto/UpToolEto/Controls/AppListSearchProvider.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
|
||||||
|
namespace UpToolEto.Controls
|
||||||
|
{
|
||||||
|
public class AppListSearchProvider : StackLayout
|
||||||
|
{
|
||||||
|
private readonly bool _online;
|
||||||
|
private readonly TextBox _search;
|
||||||
|
private readonly EnumDropDown<Status> _state;
|
||||||
|
|
||||||
|
public AppListSearchProvider(bool online, Action refresh)
|
||||||
|
{
|
||||||
|
_online = online;
|
||||||
|
_search = new SearchBox();
|
||||||
|
_state = new EnumDropDown<Status>();
|
||||||
|
_state.SelectedValue = online ? Status.NotInstalled : Status.Installed;
|
||||||
|
_state.Enabled = online;
|
||||||
|
_search.TextChanged += (_, _) => refresh();
|
||||||
|
_state.SelectedIndexChanged += (_, _) => refresh();
|
||||||
|
Orientation = Orientation.Vertical;
|
||||||
|
Items.Add(new StackLayoutItem(_search, HorizontalAlignment.Stretch));
|
||||||
|
Items.Add(_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Matches(App app) => app.Status.Contains(_online ? _state.SelectedValue : Status.Installed);
|
||||||
|
|
||||||
|
public string GetSearchTerms() => _search.Text;
|
||||||
|
}
|
||||||
|
}
|
70
UpToolEto/UpToolEto/Controls/AppPanel.cs
Normal file
70
UpToolEto/UpToolEto/Controls/AppPanel.cs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Eto.Drawing;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v1.Tool;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
using UpToolLib.v2.TaskQueue;
|
||||||
|
|
||||||
|
namespace UpToolEto.Controls
|
||||||
|
{
|
||||||
|
public class AppPanel : Panel
|
||||||
|
{
|
||||||
|
private readonly Button _appNameLabel;
|
||||||
|
private readonly Label _appDescriptionLabel;
|
||||||
|
private readonly AppControls _appControls;
|
||||||
|
private App _app;
|
||||||
|
public AppPanel(TaskFactory factory, AppExtras extras, IList<AppTask> tasks, IExternalFunctionality platform, Action updateAppList)
|
||||||
|
{
|
||||||
|
_appDescriptionLabel = new Label();
|
||||||
|
_appNameLabel = new Button((_, _) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
extras.RunApp(_app);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
platform.OkDialog("Failed to start\r\n" + e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
_appNameLabel.Font = new Font(_appNameLabel.Font.Family, _appNameLabel.Font.Size * 2);
|
||||||
|
_appControls = new AppControls(factory, tasks, platform, () =>
|
||||||
|
{
|
||||||
|
updateAppList();
|
||||||
|
SetApp(_app);
|
||||||
|
});
|
||||||
|
Content = new StackLayout
|
||||||
|
{
|
||||||
|
Items =
|
||||||
|
{
|
||||||
|
new StackLayoutItem(_appNameLabel, HorizontalAlignment.Center),
|
||||||
|
new StackLayoutItem(_appDescriptionLabel, HorizontalAlignment.Center, true),
|
||||||
|
new StackLayoutItem(_appControls, HorizontalAlignment.Stretch)
|
||||||
|
},
|
||||||
|
Orientation = Orientation.Vertical
|
||||||
|
};
|
||||||
|
if (Main.DebugColors)
|
||||||
|
BackgroundColor = Colors.Red;
|
||||||
|
Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetApp(App app)
|
||||||
|
{
|
||||||
|
_app = app;
|
||||||
|
_appNameLabel.Text = app.Name;
|
||||||
|
_appNameLabel.Enabled = app.Status.Contains(Status.Installed) && app.Runnable;
|
||||||
|
_appDescriptionLabel.Text = app.Description;
|
||||||
|
_appControls.SetApp(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
_appNameLabel.Text = "Welcome to UpTool2";
|
||||||
|
_appNameLabel.Enabled = false;
|
||||||
|
_appDescriptionLabel.Text = "Select an app to get started";
|
||||||
|
_appControls.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
UpToolEto/UpToolEto/Controls/RepoItem.cs
Normal file
35
UpToolEto/UpToolEto/Controls/RepoItem.cs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
|
||||||
|
namespace UpToolEto.Controls
|
||||||
|
{
|
||||||
|
public class RepoItem : StackLayout
|
||||||
|
{
|
||||||
|
public RepoItem(Repo repo, int index, Action update, IList<Repo> repos)
|
||||||
|
{
|
||||||
|
TextBox name = new()
|
||||||
|
{
|
||||||
|
Text = repo.Name
|
||||||
|
};
|
||||||
|
name.TextChanged += (_, _) => repo.Name = name.Text;
|
||||||
|
TextBox link = new()
|
||||||
|
{
|
||||||
|
Text = repo.Url
|
||||||
|
};
|
||||||
|
link.TextChanged += (_, _) => repo.Url = link.Text;
|
||||||
|
Orientation = Orientation.Horizontal;
|
||||||
|
Items.Add(name);
|
||||||
|
Items.Add(new StackLayoutItem(link, HorizontalAlignment.Stretch, true));
|
||||||
|
Items.Add(new Button((_, _) =>
|
||||||
|
{
|
||||||
|
repos.RemoveAt(index);
|
||||||
|
update();
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Text = "-"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
71
UpToolEto/UpToolEto/Controls/UTMenuBar.cs
Normal file
71
UpToolEto/UpToolEto/Controls/UTMenuBar.cs
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolEto.Forms;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
using UpToolLib.v2.TaskQueue;
|
||||||
|
|
||||||
|
namespace UpToolEto.Controls
|
||||||
|
{
|
||||||
|
public class UTMenuBar : MenuBar
|
||||||
|
{
|
||||||
|
public UTMenuBar(MainForm mainForm, RepoManagement repoManagement, TaskFactory factory, IList<AppTask> tasks, AppList appList, IExternalFunctionality platform)
|
||||||
|
{
|
||||||
|
Command reloadRepos = new() {MenuText = "Reload", ToolBarText = "Reload"};
|
||||||
|
reloadRepos.Executed += (_, _) =>
|
||||||
|
{
|
||||||
|
if (platform.YesNoDialog("This may take some time. Are you sure?", true))
|
||||||
|
{
|
||||||
|
repoManagement.FetchRepos();
|
||||||
|
repoManagement.GetReposFromDisk();
|
||||||
|
appList.Update();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command editSources = new() {MenuText = "Sources", ToolBarText = "Sources"};
|
||||||
|
editSources.Executed += (_, _) => new RepoForm(repoManagement).ShowModal();
|
||||||
|
|
||||||
|
Command addPackage = new() {MenuText = "Add Package", ToolBarText = "Add Package"};
|
||||||
|
addPackage.Executed += (_, _) =>
|
||||||
|
{
|
||||||
|
OpenFileDialog dialog = new() {MultiSelect = false, CheckFileExists = true, Filters = { new FileFilter("App package", ".zip")}};
|
||||||
|
if (dialog.ShowDialog(mainForm) == DialogResult.Ok)
|
||||||
|
{
|
||||||
|
if (!tasks.Any(s => s is UploadTask t && t.ZipFile == dialog.FileName))
|
||||||
|
{
|
||||||
|
StringDialog sd = new("Package name") {Text = "New package"};
|
||||||
|
sd.ShowModal();
|
||||||
|
tasks.Add(factory.CreateUpload(dialog.FileName, sd.Text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Command quitCommand = new() {MenuText = "Quit", Shortcut = Application.Instance.CommonModifier | Keys.Q};
|
||||||
|
quitCommand.Executed += (_, _) => Application.Instance.Quit();
|
||||||
|
|
||||||
|
Command aboutCommand = new() {MenuText = "About Eto..."};
|
||||||
|
aboutCommand.Executed += (_, _) => new AboutDialog().ShowDialog(mainForm);
|
||||||
|
|
||||||
|
Items.Add(new ButtonMenuItem
|
||||||
|
{
|
||||||
|
Text = "&File", Items =
|
||||||
|
{
|
||||||
|
reloadRepos,
|
||||||
|
editSources,
|
||||||
|
addPackage
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// File submenu
|
||||||
|
// new ButtonMenuItem { Text = "&Edit", Items = { /* commands/items */ } },
|
||||||
|
// new ButtonMenuItem { Text = "&View", Items = { /* commands/items */ } },
|
||||||
|
/*ApplicationItems =
|
||||||
|
{
|
||||||
|
// application (OS X) or file menu (others)
|
||||||
|
new ButtonMenuItem {Text = "&Preferences..."},
|
||||||
|
},*/
|
||||||
|
QuitItem = quitCommand;
|
||||||
|
AboutItem = aboutCommand;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
79
UpToolEto/UpToolEto/Forms/DownloadDialog.cs
Normal file
79
UpToolEto/UpToolEto/Forms/DownloadDialog.cs
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
using System;
|
||||||
|
using System.Net;
|
||||||
|
using System.Threading;
|
||||||
|
using Eto.Drawing;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
|
||||||
|
namespace UpToolEto.Forms
|
||||||
|
{
|
||||||
|
public class DownloadDialog : Dialog
|
||||||
|
{
|
||||||
|
private readonly Uri _url;
|
||||||
|
private readonly Application _application;
|
||||||
|
private readonly IExternalFunctionality _platform;
|
||||||
|
public State CurrentState = State.NotStarted;
|
||||||
|
public byte[] Download = new byte[0];
|
||||||
|
private readonly ProgressBar _bar;
|
||||||
|
public DownloadDialog(Uri url, Application application, IExternalFunctionality platform)
|
||||||
|
{
|
||||||
|
_url = url;
|
||||||
|
_application = application;
|
||||||
|
_platform = platform;
|
||||||
|
Title = "Downloader";
|
||||||
|
Resizable = false;
|
||||||
|
Maximizable = false;
|
||||||
|
Minimizable = false;
|
||||||
|
WindowStyle = WindowStyle.Utility;
|
||||||
|
_bar = new();
|
||||||
|
_bar.MaxValue = 100;
|
||||||
|
Content = new StackLayout
|
||||||
|
{
|
||||||
|
Padding = 10,
|
||||||
|
Items =
|
||||||
|
{
|
||||||
|
"Downloading " + url,
|
||||||
|
new StackLayoutItem(_bar, HorizontalAlignment.Stretch, true)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Size = new Size(700, 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartDownload()
|
||||||
|
{
|
||||||
|
CurrentState = State.Downloading;
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
WebClient client = new();
|
||||||
|
client.DownloadProgressChanged += (_, args) => _application.Invoke(() =>
|
||||||
|
{
|
||||||
|
_bar.Value = args.ProgressPercentage;
|
||||||
|
_application.RunIteration();
|
||||||
|
});
|
||||||
|
client.DownloadDataCompleted += (_, args) =>
|
||||||
|
{
|
||||||
|
CurrentState = State.Success;
|
||||||
|
Download = args.Result;
|
||||||
|
_application.Invoke(Close);
|
||||||
|
};
|
||||||
|
client.DownloadDataAsync(_url, client);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
CurrentState = State.Failed;
|
||||||
|
_application.Invoke(Close);
|
||||||
|
}
|
||||||
|
}).Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum State
|
||||||
|
{
|
||||||
|
NotStarted,
|
||||||
|
Downloading,
|
||||||
|
Failed,
|
||||||
|
Success
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
51
UpToolEto/UpToolEto/Forms/InitScreen.cs
Normal file
51
UpToolEto/UpToolEto/Forms/InitScreen.cs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
using System;
|
||||||
|
using Eto.Drawing;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
|
||||||
|
namespace UpToolEto.Forms
|
||||||
|
{
|
||||||
|
public class InitScreen : Form
|
||||||
|
{
|
||||||
|
private readonly Application _application;
|
||||||
|
private readonly IExternalFunctionality _platform;
|
||||||
|
private readonly Label _lab;
|
||||||
|
public InitScreen(Application application, IExternalFunctionality platform)
|
||||||
|
{
|
||||||
|
_application = application;
|
||||||
|
_platform = platform;
|
||||||
|
Title = "UpTool2 Init";
|
||||||
|
Resizable = false;
|
||||||
|
Maximizable = false;
|
||||||
|
Minimizable = false;
|
||||||
|
WindowStyle = WindowStyle.None;
|
||||||
|
_lab = new Label();
|
||||||
|
Label header = new();
|
||||||
|
header.Font = new Font(header.Font.Family, header.Font.Size * 2);
|
||||||
|
header.Text = "UpTool2";
|
||||||
|
Content = new StackLayout
|
||||||
|
{
|
||||||
|
Padding = 10,
|
||||||
|
Items =
|
||||||
|
{
|
||||||
|
new StackLayoutItem(header, HorizontalAlignment.Center),
|
||||||
|
new StackLayoutItem(_lab, HorizontalAlignment.Center)
|
||||||
|
},
|
||||||
|
VerticalContentAlignment = VerticalAlignment.Center
|
||||||
|
};
|
||||||
|
Shown += (_, _) => Size = new Size(700, 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetText(string text)
|
||||||
|
{
|
||||||
|
_application.Invoke(() =>
|
||||||
|
{
|
||||||
|
_platform.Log(text);
|
||||||
|
_lab.Text = text;
|
||||||
|
_application.RunIteration();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Close() => _application.Invoke(() => base.Close());
|
||||||
|
}
|
||||||
|
}
|
37
UpToolEto/UpToolEto/Forms/MainForm.cs
Normal file
37
UpToolEto/UpToolEto/Forms/MainForm.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Eto.Drawing;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolEto.Controls;
|
||||||
|
using UpToolLib;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v2.TaskQueue;
|
||||||
|
|
||||||
|
namespace UpToolEto.Forms
|
||||||
|
{
|
||||||
|
public partial class MainForm : Form
|
||||||
|
{
|
||||||
|
private readonly AppPanel _appPanel;
|
||||||
|
private readonly IList<AppTask> _tasks;
|
||||||
|
public MainForm(InitScreen init, UpToolLibMain lib, IExternalFunctionality platform, bool online)
|
||||||
|
{
|
||||||
|
_tasks = new List<AppTask>();
|
||||||
|
Title = "UpTool2";
|
||||||
|
MinimumSize = new Size(600, 100);
|
||||||
|
AppList appList = new(lib.V1.AppExtras, (_, app) => _appPanel.SetApp(app), online, lib.V2.TaskFactory, _tasks);
|
||||||
|
_appPanel = new AppPanel(lib.V2.TaskFactory, lib.V1.AppExtras, _tasks, platform, appList.Update);
|
||||||
|
|
||||||
|
Content = new StackLayout
|
||||||
|
{
|
||||||
|
Padding = 10,
|
||||||
|
Items =
|
||||||
|
{
|
||||||
|
new StackLayoutItem(appList, VerticalAlignment.Stretch),
|
||||||
|
new StackLayoutItem(_appPanel, VerticalAlignment.Stretch, true)
|
||||||
|
},
|
||||||
|
Orientation = Orientation.Horizontal
|
||||||
|
};
|
||||||
|
Menu = new UTMenuBar(this, lib.V2.RepoManagement, lib.V2.TaskFactory, _tasks, appList, platform);
|
||||||
|
Shown += (_, _) => init.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
46
UpToolEto/UpToolEto/Forms/QueueOverview.cs
Normal file
46
UpToolEto/UpToolEto/Forms/QueueOverview.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolLib.v2.TaskQueue;
|
||||||
|
|
||||||
|
namespace UpToolEto.Forms
|
||||||
|
{
|
||||||
|
public class QueueOverview : Dialog
|
||||||
|
{
|
||||||
|
private readonly IList<AppTask> _tasks;
|
||||||
|
public bool Cancelled;
|
||||||
|
CheckBoxList cbl;
|
||||||
|
public List<AppTask> TasksResulting => cbl.SelectedValues.Select(s => (AppTask) s).ToList();
|
||||||
|
|
||||||
|
public QueueOverview(IList<AppTask> tasks)
|
||||||
|
{
|
||||||
|
_tasks = tasks;
|
||||||
|
StackLayout layout = new();
|
||||||
|
layout.Items.Add(new StackLayoutItem(new StackLayout()
|
||||||
|
{
|
||||||
|
Items =
|
||||||
|
{
|
||||||
|
new StackLayoutItem(new Button((_, _) =>
|
||||||
|
{
|
||||||
|
Cancelled = true;
|
||||||
|
Close();
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Text = "Cancel"
|
||||||
|
}, HorizontalAlignment.Stretch),
|
||||||
|
new StackLayoutItem(new Button((_, _) =>
|
||||||
|
{
|
||||||
|
Close();
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Text = "OK"
|
||||||
|
}, HorizontalAlignment.Stretch)
|
||||||
|
},
|
||||||
|
Orientation = Orientation.Horizontal
|
||||||
|
}, HorizontalAlignment.Stretch));
|
||||||
|
cbl = new CheckBoxList {DataStore = tasks, SelectedValues = tasks};
|
||||||
|
layout.Items.Add(cbl);
|
||||||
|
Content = layout;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
54
UpToolEto/UpToolEto/Forms/RepoForm.cs
Normal file
54
UpToolEto/UpToolEto/Forms/RepoForm.cs
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolEto.Controls;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
|
||||||
|
namespace UpToolEto.Forms
|
||||||
|
{
|
||||||
|
public class RepoForm : Dialog
|
||||||
|
{
|
||||||
|
private readonly RepoManagement _management;
|
||||||
|
private List<Repo> _repos = new();
|
||||||
|
private StackLayout _layout;
|
||||||
|
public RepoForm(RepoManagement management)
|
||||||
|
{
|
||||||
|
_management = management;
|
||||||
|
_repos.AddRange(management.GetRepos());
|
||||||
|
Title = "Sources";
|
||||||
|
_layout = new StackLayout();
|
||||||
|
Content = _layout;
|
||||||
|
Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Update()
|
||||||
|
{
|
||||||
|
_layout.Items.Clear();
|
||||||
|
_layout.Items.Add(new StackLayoutItem(new Button((_, _) =>
|
||||||
|
{
|
||||||
|
_repos.Add(new Repo
|
||||||
|
{
|
||||||
|
Name = "New repo",
|
||||||
|
Url = "https://example.com/repo.xml"
|
||||||
|
});
|
||||||
|
Update();
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Text = "Add",
|
||||||
|
}, HorizontalAlignment.Stretch));
|
||||||
|
StackLayout reposLayout = new();
|
||||||
|
for (int i = 0; i < _repos.Count; i++)
|
||||||
|
reposLayout.Items.Add(new StackLayoutItem(new RepoItem(_repos[i], i, Update, _repos), HorizontalAlignment.Stretch));
|
||||||
|
_layout.Items.Add(new StackLayoutItem(new Scrollable{Content = reposLayout}, HorizontalAlignment.Stretch, true));
|
||||||
|
_layout.Items.Add(new StackLayoutItem(new Button((_, _) =>
|
||||||
|
{
|
||||||
|
_management.Save(_repos);
|
||||||
|
Close();
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Text = "Save"
|
||||||
|
}, HorizontalAlignment.Stretch));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
UpToolEto/UpToolEto/Forms/StringDialog.cs
Normal file
20
UpToolEto/UpToolEto/Forms/StringDialog.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using Eto.Forms;
|
||||||
|
|
||||||
|
namespace UpToolEto.Forms
|
||||||
|
{
|
||||||
|
public class StringDialog : Dialog
|
||||||
|
{
|
||||||
|
private readonly TextBox _tb;
|
||||||
|
public string Text
|
||||||
|
{
|
||||||
|
get => _tb.Text;
|
||||||
|
set => _tb.Text = value;
|
||||||
|
}
|
||||||
|
public StringDialog(string title)
|
||||||
|
{
|
||||||
|
_tb = new TextBox();
|
||||||
|
Content = _tb;
|
||||||
|
Title = title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
164
UpToolEto/UpToolEto/Main.cs
Normal file
164
UpToolEto/UpToolEto/Main.cs
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Xml;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolEto.Forms;
|
||||||
|
using UpToolLib;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v1;
|
||||||
|
using UpToolLib.v1.Tool;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
|
||||||
|
namespace UpToolEto
|
||||||
|
{
|
||||||
|
public class Main
|
||||||
|
{
|
||||||
|
private readonly IExternalFunctionality _platform;
|
||||||
|
private readonly Application _application;
|
||||||
|
private readonly Action _activityExistsException;
|
||||||
|
private readonly InitScreen _init;
|
||||||
|
private readonly bool _skipFetch;
|
||||||
|
public static bool DebugColors { get; private set; }
|
||||||
|
|
||||||
|
public Main(Application application, Action activityExistsException, string[] args)
|
||||||
|
{
|
||||||
|
_skipFetch = args.Contains("--skip-fetch");
|
||||||
|
DebugColors = args.Contains("--debug-colors");
|
||||||
|
_platform = new UTLibFunctions(application);
|
||||||
|
_application = application;
|
||||||
|
_activityExistsException = activityExistsException;
|
||||||
|
_init = new(application, _platform);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Entry()
|
||||||
|
{
|
||||||
|
new Thread(InitThread).Start();
|
||||||
|
_application.Run(_init);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InitThread()
|
||||||
|
{
|
||||||
|
UpToolLibMain lib = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
lib = new UpToolLibMain(_platform);
|
||||||
|
_init.SetText("Initializing paths");
|
||||||
|
if (!Directory.Exists(lib.V1.PathTool.Dir))
|
||||||
|
Directory.CreateDirectory(lib.V1.PathTool.Dir);
|
||||||
|
FixXml(lib.V1.XmlTool, lib.V1.PathTool);
|
||||||
|
_init.SetText("Performing checks");
|
||||||
|
bool online = false;
|
||||||
|
UpdateCheck updateCheck = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
updateCheck = lib.V2.UpdateChecker.Check();
|
||||||
|
online = true;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
_platform.Log("Could not perform update check, starting offline");
|
||||||
|
}
|
||||||
|
if (online && UpdateCheck(updateCheck, lib.V1.PathTool, _init))
|
||||||
|
_platform.Log("Quitting");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(lib.V1.PathTool.GetRelative("Apps")))
|
||||||
|
Directory.CreateDirectory(lib.V1.PathTool.GetRelative("Apps"));
|
||||||
|
if (!_skipFetch && online)
|
||||||
|
{
|
||||||
|
_init.SetText("Fetching repos");
|
||||||
|
lib.V2.RepoManagement.FetchRepos();
|
||||||
|
}
|
||||||
|
lib.V2.RepoManagement.GetReposFromDisk();
|
||||||
|
_init.SetText("Opening");
|
||||||
|
_application.Invoke(() => _application.Run(new MainForm(_init, lib, _platform, online)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (MutexLockLockedException)
|
||||||
|
{
|
||||||
|
_application.Invoke(() =>
|
||||||
|
{
|
||||||
|
_init.Close();
|
||||||
|
_platform.OkDialog("Mutex property of other process, quitting");
|
||||||
|
_activityExistsException();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
lib?.Dispose();
|
||||||
|
_platform.Log(e.ToString());
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
lib?.Dispose();
|
||||||
|
_application.Invoke(() => _application.Quit());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FixXml(XmlTool xmlTool, PathTool pathTool, bool throwOnError = false)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
xmlTool.FixXml();
|
||||||
|
}
|
||||||
|
catch (XmlException)
|
||||||
|
{
|
||||||
|
if (throwOnError) throw;
|
||||||
|
_platform.OkDialog("Something went wrong while trying to parse XML. Retrying...");
|
||||||
|
File.Delete(pathTool.InfoXml);
|
||||||
|
FixXml(xmlTool, pathTool);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool UpdateCheck(UpdateCheck updateCheck, PathTool pathTool, InitScreen init)
|
||||||
|
{
|
||||||
|
init.SetText("Comparing online version");
|
||||||
|
if (Assembly.GetExecutingAssembly().GetName().Version >= updateCheck.OnlineVersion) return false;
|
||||||
|
if (PlatformCheck.IsWindows)
|
||||||
|
{
|
||||||
|
init.SetText("Downloading latest");
|
||||||
|
(bool success, byte[] dl) = _platform.Download(updateCheck.Installer);
|
||||||
|
if (!success)
|
||||||
|
throw new Exception("Failed to update");
|
||||||
|
init.SetText("Verifying");
|
||||||
|
using (SHA256CryptoServiceProvider sha256 = new())
|
||||||
|
{
|
||||||
|
string pkgHash = BitConverter.ToString(sha256.ComputeHash(dl)).Replace("-", string.Empty).ToUpper();
|
||||||
|
if (pkgHash != updateCheck.InstallerHash)
|
||||||
|
throw new Exception(
|
||||||
|
$"The hash is not equal to the one stored in the repo:\r\nPackage: {pkgHash}\r\nOnline: {updateCheck.InstallerHash}");
|
||||||
|
}
|
||||||
|
init.SetText("Installing");
|
||||||
|
if (Directory.Exists(pathTool.GetRelative("Install", "tmp")))
|
||||||
|
Directory.Delete(pathTool.GetRelative("Install", "tmp"), true);
|
||||||
|
Directory.CreateDirectory(pathTool.GetRelative("Install", "tmp"));
|
||||||
|
using (MemoryStream ms = new(dl))
|
||||||
|
{
|
||||||
|
using ZipArchive ar = new(ms);
|
||||||
|
ar.ExtractToDirectory(pathTool.GetRelative("Install", "tmp"), true);
|
||||||
|
}
|
||||||
|
init.Close();
|
||||||
|
Process.Start(new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = pathTool.GetRelative("Install", "tmp", "Installer.exe"),
|
||||||
|
Arguments = "i -p",
|
||||||
|
CreateNoWindow = true,
|
||||||
|
WindowStyle = ProcessWindowStyle.Hidden,
|
||||||
|
WorkingDirectory = pathTool.GetRelative("Install")
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_platform.OkDialog("A new version is available. Please install it");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
59
UpToolEto/UpToolEto/UTLibFunctions.cs
Normal file
59
UpToolEto/UpToolEto/UTLibFunctions.cs
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Threading;
|
||||||
|
using Eto.Drawing;
|
||||||
|
using Eto.Forms;
|
||||||
|
using UpToolEto.Forms;
|
||||||
|
using UpToolLib;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
|
||||||
|
namespace UpToolEto
|
||||||
|
{
|
||||||
|
public class UTLibFunctions : IExternalFunctionality
|
||||||
|
{
|
||||||
|
private readonly Application _application;
|
||||||
|
private const int ImgSize = 32;
|
||||||
|
public Tuple<bool, byte[]> Download(Uri link)
|
||||||
|
{
|
||||||
|
DownloadDialog dlg = new(link, _application, this);
|
||||||
|
_application.AsyncInvoke(() => dlg.ShowModal());
|
||||||
|
dlg.StartDownload();
|
||||||
|
Log("Downloading " + link);
|
||||||
|
while (dlg.CurrentState == DownloadDialog.State.Downloading) Thread.Sleep(20);
|
||||||
|
Log("Download complete");
|
||||||
|
return new Tuple<bool, byte[]>(dlg.CurrentState == DownloadDialog.State.Success, dlg.Download);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string FetchImageB64(Uri link)
|
||||||
|
{
|
||||||
|
using WebClient client = new();
|
||||||
|
using Stream s = client.OpenRead(link);
|
||||||
|
using Bitmap source = new(s);
|
||||||
|
using Icon bmp = source.WithSize(ImgSize, ImgSize);
|
||||||
|
using Bitmap bitmapResized = new(bmp);
|
||||||
|
using MemoryStream ms = new();
|
||||||
|
bitmapResized.Save(ms, ImageFormat.Png);
|
||||||
|
return Convert.ToBase64String(ms.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool YesNoDialog(string text, bool defaultVal) =>
|
||||||
|
_application.Invoke(() => MessageBox.Show(text, MessageBoxButtons.YesNo,
|
||||||
|
defaultButton: defaultVal ? MessageBoxDefaultButton.Yes : MessageBoxDefaultButton.No)) ==
|
||||||
|
DialogResult.Yes;
|
||||||
|
|
||||||
|
public void OkDialog(string text) => _application.Invoke(() => MessageBox.Show(text));
|
||||||
|
|
||||||
|
public object GetDefaultIcon() => Bitmap.FromResource("UpToolLib.C_64.ico", typeof(UpToolLibMain)).WithSize(ImgSize, ImgSize);
|
||||||
|
|
||||||
|
public object ImageFromB64(string b64) => new Bitmap(Convert.FromBase64String(b64)).WithSize(ImgSize, ImgSize);
|
||||||
|
|
||||||
|
public void Log(string text)
|
||||||
|
{
|
||||||
|
Console.WriteLine(text);
|
||||||
|
//TODO implement visual logging
|
||||||
|
}
|
||||||
|
|
||||||
|
public UTLibFunctions(Application application) => _application = application;
|
||||||
|
}
|
||||||
|
}
|
15
UpToolEto/UpToolEto/UpToolEto.csproj
Normal file
15
UpToolEto/UpToolEto/UpToolEto.csproj
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Eto.Forms" Version="2.5.10" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\UpToolLib\UpToolLib.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
BIN
UpToolLib/C_64.ico
Normal file
BIN
UpToolLib/C_64.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
15
UpToolLib/DataStructures/IExternalFunctionality.cs
Normal file
15
UpToolLib/DataStructures/IExternalFunctionality.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace UpToolLib.DataStructures
|
||||||
|
{
|
||||||
|
public interface IExternalFunctionality
|
||||||
|
{
|
||||||
|
public Tuple<bool, byte[]> Download(Uri link);
|
||||||
|
public string FetchImageB64(Uri link);
|
||||||
|
public bool YesNoDialog(string text, bool defaultVal);
|
||||||
|
public void OkDialog(string text);
|
||||||
|
public object GetDefaultIcon();
|
||||||
|
public object ImageFromB64(string b64);
|
||||||
|
public void Log(string text);
|
||||||
|
}
|
||||||
|
}
|
8
UpToolLib/DataStructures/Repo.cs
Normal file
8
UpToolLib/DataStructures/Repo.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
namespace UpToolLib.DataStructures
|
||||||
|
{
|
||||||
|
public class Repo
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Url { get; set; }
|
||||||
|
}
|
||||||
|
}
|
19
UpToolLib/DataStructures/Status.cs
Normal file
19
UpToolLib/DataStructures/Status.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace UpToolLib.DataStructures
|
||||||
|
{
|
||||||
|
[Flags]
|
||||||
|
public enum Status
|
||||||
|
{
|
||||||
|
NotInstalled = 1,
|
||||||
|
Updatable = 2,
|
||||||
|
Installed = 4,
|
||||||
|
Local = 8,
|
||||||
|
All = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class StatusExtensions
|
||||||
|
{
|
||||||
|
public static bool Contains(this Status status, Status other) => (status & other) == other;
|
||||||
|
}
|
||||||
|
}
|
8
UpToolLib/MutexLockLockedException.cs
Normal file
8
UpToolLib/MutexLockLockedException.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace UpToolLib
|
||||||
|
{
|
||||||
|
public class MutexLockLockedException : Exception
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
16
UpToolLib/UpToolLib.csproj
Normal file
16
UpToolLib/UpToolLib.csproj
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
<Deterministic>false</Deterministic>
|
||||||
|
<AssemblyVersion>1.0.*</AssemblyVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Remove="C_64.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="C_64.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
38
UpToolLib/UpToolLibMain.cs
Normal file
38
UpToolLib/UpToolLibMain.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using UpToolLib.DataStructures;
|
||||||
|
using UpToolLib.v1;
|
||||||
|
using UpToolLib.v2;
|
||||||
|
|
||||||
|
namespace UpToolLib
|
||||||
|
{
|
||||||
|
public class UpToolLibMain : IDisposable
|
||||||
|
{
|
||||||
|
private static Mutex _mutex;
|
||||||
|
public UpToolLibMain(IExternalFunctionality platform)
|
||||||
|
{
|
||||||
|
V1 = new UpToolLibV1(platform);
|
||||||
|
V2 = new UpToolLibV2(platform, V1.Installer, V1.AppExtras, V1.PathTool, V1.XmlTool, V1.Apps);
|
||||||
|
_mutex = new Mutex(false,
|
||||||
|
"Global\\{c0c1e002-9e13-4e8f-a035-dbdc5128e00e}",
|
||||||
|
out bool _);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (_mutex.WaitOne(5000, false))
|
||||||
|
return;
|
||||||
|
throw new MutexLockLockedException();
|
||||||
|
}
|
||||||
|
catch (AbandonedMutexException)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
_platform.Log("Mutex abandoned");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public readonly UpToolLibV1 V1;
|
||||||
|
public readonly UpToolLibV2 V2;
|
||||||
|
public void Dispose() => _mutex.ReleaseMutex();
|
||||||
|
~UpToolLibMain() => Dispose();
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user