mirror of
https://github.com/mmvanheusden/SteamDepotDownloaderGUI.git
synced 2026-02-04 13:41:18 +01:00
Compare commits
460 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b3f8b9360d | ||
|
|
27b474ca3c | ||
|
|
68ccf63f66 | ||
|
|
20567d8f8b | ||
|
|
c503c2ce51 | ||
|
|
c403f14e65 | ||
|
|
070b5e7d10 | ||
|
|
5b9838cf85 | ||
|
|
bb978b411f | ||
|
|
b2160eda35 | ||
|
|
75488bff61 | ||
|
|
60895e972a | ||
|
|
6ac1697c2f | ||
|
|
88bca2d35a | ||
|
|
0ef5469943 | ||
|
|
93f2718f0d | ||
|
|
0524c3231f | ||
|
|
8d494e783c | ||
|
|
0befc10ce2 | ||
|
|
2b1a287ad8 | ||
|
|
2f85e861b6 | ||
|
|
11cb943d53 | ||
|
|
3c840bbdb7 | ||
|
|
c418185984 | ||
|
|
2663ad629c | ||
|
|
a7a98c06e0 | ||
|
|
e17098e412 | ||
|
|
52ee6cd822 | ||
|
|
d0b42d36e8 | ||
|
|
8a0249af18 | ||
|
|
849155dc45 | ||
|
|
83bff692f5 | ||
|
|
0ba456df4f | ||
|
|
97d1e6ffd1 | ||
|
|
32559b7b4a | ||
|
|
1b4115cd70 | ||
|
|
e8e741a908 | ||
|
|
0f06a45b9a | ||
|
|
dbf573c8ec | ||
|
|
d1ff298cfa | ||
|
|
7fb7c57367 | ||
|
|
b6566e15fa | ||
|
|
6583904bd9 | ||
|
|
a34d2e4ad9 | ||
|
|
c65f47f1d7 | ||
|
|
262864fcd4 | ||
|
|
930576e28c | ||
|
|
352f604b81 | ||
|
|
a668731b46 | ||
|
|
2e2fe928b3 | ||
|
|
589381ef6c | ||
|
|
d1f0fe7116 | ||
|
|
0a91fcfccf | ||
|
|
a55f16e50d | ||
|
|
6a747f8ac1 | ||
|
|
f557af562f | ||
|
|
e84bae7d22 | ||
|
|
7ba581a2cd | ||
|
|
dbefebc7d8 | ||
|
|
010e1b89c5 | ||
|
|
4f6014a2b4 | ||
|
|
9d4197b237 | ||
|
|
8e481132f3 | ||
|
|
8347005fc4 | ||
|
|
8bc3c5aef2 | ||
|
|
5d41b1e94a | ||
|
|
32153bb2b1 | ||
|
|
3813678469 | ||
|
|
da8b528856 | ||
|
|
209847bf97 | ||
|
|
ddb110764e | ||
|
|
827247f4f7 | ||
|
|
ccd5803ec1 | ||
|
|
3ebf2f920e | ||
|
|
ab96a2c78a | ||
|
|
f0f7766005 | ||
|
|
12f0e8f37b | ||
|
|
58e87b0b6b | ||
|
|
4ada0a3838 | ||
|
|
c8ac9985bb | ||
|
|
07c65e816c | ||
|
|
e60fa3b9ce | ||
|
|
903bdb7a8f | ||
|
|
bde5c534d4 | ||
|
|
434baee9c0 | ||
|
|
1a0ba73dc1 | ||
|
|
13930669c5 | ||
|
|
0c9d18eeb1 | ||
|
|
c43e92211e | ||
|
|
0b2d69b118 | ||
|
|
983c4c7604 | ||
|
|
9b95a6df53 | ||
|
|
c4bb1907bf | ||
|
|
79067b7092 | ||
|
|
f4cd650f65 | ||
|
|
9b2a7d0860 | ||
|
|
d47bfacad7 | ||
|
|
a576c22543 | ||
|
|
a8aa53f6b4 | ||
|
|
ac0e4b9a7e | ||
|
|
6065338b49 | ||
|
|
a70d8148a0 | ||
|
|
7f5775c616 | ||
|
|
5c05075d36 | ||
|
|
01a68e3163 | ||
|
|
753ccd77be | ||
|
|
917d72cbe6 | ||
|
|
b7f3f70bce | ||
|
|
d0c00ff79d | ||
|
|
da494356f2 | ||
|
|
c8719a7421 | ||
|
|
1ad022a1fb | ||
|
|
e9b01c1658 | ||
|
|
3674fcf2e9 | ||
|
|
35994122b9 | ||
|
|
2323bee305 | ||
|
|
d48f99eb31 | ||
|
|
1576c680ca | ||
|
|
0b46d66ad0 | ||
|
|
f5605aa6a5 | ||
|
|
369bd805c9 | ||
|
|
61f1852db1 | ||
|
|
1a2b91b78a | ||
|
|
5b27e4a2c9 | ||
|
|
882f4aa252 | ||
|
|
e7a4964400 | ||
|
|
62e487abfe | ||
|
|
1f604460a0 | ||
|
|
8a53d80502 | ||
|
|
efcf98d0f8 | ||
|
|
b5ecd66d8e | ||
|
|
e1bacd5b77 | ||
|
|
179d1f7f05 | ||
|
|
e57f90a700 | ||
|
|
8a75924652 | ||
|
|
cbbcce6997 | ||
|
|
cbad0edc81 | ||
|
|
67513abc01 | ||
|
|
f93d53f574 | ||
|
|
32b014a283 | ||
|
|
50de5b676a | ||
|
|
799dea18be | ||
|
|
45e14398f3 | ||
|
|
120dbb257c | ||
|
|
98a8e5f853 | ||
|
|
912ec9927c | ||
|
|
00d80a603c | ||
|
|
6c0fc19381 | ||
|
|
8147b3611a | ||
|
|
8f7f231000 | ||
|
|
6360e4f553 | ||
|
|
dba37f3563 | ||
|
|
42ff7dcae3 | ||
|
|
d8878896e7 | ||
|
|
1723bc6af0 | ||
|
|
274ece410a | ||
|
|
fce3c6cff3 | ||
|
|
a613d96f79 | ||
|
|
8686d3145a | ||
|
|
c2ca657450 | ||
|
|
8c6ba4dc76 | ||
|
|
0bb41b8f90 | ||
|
|
eeacf5885d | ||
|
|
0bb67ad0fb | ||
|
|
e87bc27904 | ||
|
|
4de82acadf | ||
|
|
67921755d3 | ||
|
|
4600cb0715 | ||
|
|
63647166b0 | ||
|
|
24b4789f16 | ||
|
|
8e60860365 | ||
|
|
efe997e73d | ||
|
|
2f93efc1a5 | ||
|
|
cdcc7ff250 | ||
|
|
bd0b4c0857 | ||
|
|
1ae267e610 | ||
|
|
d2bf485db5 | ||
|
|
9b436a81af | ||
|
|
48ed904863 | ||
|
|
11a63612e4 | ||
|
|
e94bafe100 | ||
|
|
ff55b24bbb | ||
|
|
de11c7bfda | ||
|
|
e33e2b85f1 | ||
|
|
ff89270976 | ||
|
|
c63cb94e28 | ||
|
|
fad16516f0 | ||
|
|
d20f94c449 | ||
|
|
1d7fd54c6a | ||
|
|
06dd83f99e | ||
|
|
0914a832d7 | ||
|
|
2de0ca8130 | ||
|
|
db75c7f623 | ||
|
|
219803f01b | ||
|
|
c8a9468e3a | ||
|
|
27da4d7534 | ||
|
|
c8717de5f7 | ||
|
|
0508be5171 | ||
|
|
199472e4af | ||
|
|
37b86711a7 | ||
|
|
92c3ca0f9d | ||
|
|
42d2ca108a | ||
|
|
481f9165e4 | ||
|
|
e75e10ba5e | ||
|
|
0c8cf2d15b | ||
|
|
dbc5db4e98 | ||
|
|
c7eb98263a | ||
|
|
dc5630d3af | ||
|
|
e76c0b7e0f | ||
|
|
cc7b4b9578 | ||
|
|
f7f3a6b254 | ||
|
|
326fbd1d73 | ||
|
|
12344805f3 | ||
|
|
0eee1f8c16 | ||
|
|
64dc7a79b8 | ||
|
|
f9e5bf4953 | ||
|
|
c8d215bf37 | ||
|
|
c945f90f36 | ||
|
|
2943fe62fe | ||
|
|
17e31901a2 | ||
|
|
b26e95a992 | ||
|
|
fcbf340a95 | ||
|
|
7aa60d53d9 | ||
|
|
01b9f1eda6 | ||
|
|
b2dcd5279f | ||
|
|
c655207c04 | ||
|
|
84dde67a4d | ||
|
|
6b603a004d | ||
|
|
1d1f66bb7c | ||
|
|
b8fc38b4f9 | ||
|
|
8b7253d9bf | ||
|
|
702a4530ed | ||
|
|
f0e378fde2 | ||
|
|
f64655eee2 | ||
|
|
ab8c23c6db | ||
|
|
36c42910a2 | ||
|
|
0f0442cf61 | ||
|
|
15eecac4e3 | ||
|
|
72febb5c8b | ||
|
|
f8ad3b3566 | ||
|
|
8891e550c5 | ||
|
|
47888668ae | ||
|
|
dc6a7d966c | ||
|
|
4f2b7d6cb5 | ||
|
|
c4085fe6ea | ||
|
|
0073974d25 | ||
|
|
a9cf7aa338 | ||
|
|
b66abf916a | ||
|
|
e4b287d2b2 | ||
|
|
5e39208999 | ||
|
|
b47d1ac1d9 | ||
|
|
3564bf7202 | ||
|
|
1a974f40d9 | ||
|
|
e7e5223132 | ||
|
|
d8e20aac62 | ||
|
|
18915bf7a4 | ||
|
|
9ccdf3e0cb | ||
|
|
a08402fb0e | ||
|
|
95d58b1bfa | ||
|
|
f17386d7c8 | ||
|
|
74cbc0fee9 | ||
|
|
866163b81c | ||
|
|
1682539aba | ||
|
|
4215b3b233 | ||
|
|
3e4faa5492 | ||
|
|
cacd77c246 | ||
|
|
9d5d09c252 | ||
|
|
72efb71ca4 | ||
|
|
be34cc746e | ||
|
|
7f669a44d4 | ||
|
|
e2020d7aa3 | ||
|
|
3f185153e9 | ||
|
|
28ea79276e | ||
|
|
b1bcac83f5 | ||
|
|
96fec37650 | ||
|
|
a976d807c1 | ||
|
|
0e56ec477f | ||
|
|
6eed37278d | ||
|
|
11e0316d50 | ||
|
|
f59b350acf | ||
|
|
e82d943cbd | ||
|
|
66a1b6f01a | ||
|
|
9a66fc9921 | ||
|
|
627630aec2 | ||
|
|
afb722f730 | ||
|
|
328e0527ab | ||
|
|
423a93afae | ||
|
|
7bedaadcdd | ||
|
|
e41f6b7958 | ||
|
|
d79f34f6d7 | ||
|
|
f1609d29aa | ||
|
|
f710ed3cce | ||
|
|
b3f3ea5ef7 | ||
|
|
66b1777be7 | ||
|
|
d0b3889a83 | ||
|
|
038de51557 | ||
|
|
76c1d3c4c5 | ||
|
|
0b8b6cb9ee | ||
|
|
98235b41c9 | ||
|
|
beeec6d3bf | ||
|
|
05b315e30d | ||
|
|
1906722c02 | ||
|
|
523418d882 | ||
|
|
93e2d4dd3e | ||
|
|
a4b08e7470 | ||
|
|
4e44cef80c | ||
|
|
cd817a8b8f | ||
|
|
11b122d5b7 | ||
|
|
a73053278a | ||
|
|
0ef69fa1e9 | ||
|
|
c84e86ca54 | ||
|
|
69a1cc9edc | ||
|
|
deb9f0b53a | ||
|
|
e711c7b6c6 | ||
|
|
2531f88fad | ||
|
|
3c932e69ab | ||
|
|
325d2a2772 | ||
|
|
f3155fb174 | ||
|
|
52b8aad68b | ||
|
|
4cbaa0b01a | ||
|
|
d310dfd238 | ||
|
|
4558e4bc25 | ||
|
|
37c074780e | ||
|
|
82ea62b6a9 | ||
|
|
7abe8aeab6 | ||
|
|
c1c63152fd | ||
|
|
c1715b10f4 | ||
|
|
07c22285ec | ||
|
|
e224c69931 | ||
|
|
33b83f6841 | ||
|
|
7cf1c9ad8c | ||
|
|
6ec2964267 | ||
|
|
b578bb16a6 | ||
|
|
d60ba5695d | ||
|
|
47f0f43fcc | ||
|
|
f85f65b40c | ||
|
|
a56803c4d4 | ||
|
|
6ad1d3652a | ||
|
|
445177d211 | ||
|
|
d1ced1cc53 | ||
|
|
dab989b79f | ||
|
|
6325f509b7 | ||
|
|
7b5897f357 | ||
|
|
812457033c | ||
|
|
5036309a84 | ||
|
|
53281fa643 | ||
|
|
89733df9b5 | ||
|
|
99f4b5a32b | ||
|
|
54fb0fedf5 | ||
|
|
8daacd3148 | ||
|
|
fa9427ea97 | ||
|
|
dedbb14a6a | ||
|
|
687bb2400b | ||
|
|
7d2a35738d | ||
|
|
d885150dee | ||
|
|
697acac76d | ||
|
|
4ab86662bb | ||
|
|
ff919b29b0 | ||
|
|
e552562861 | ||
|
|
490e9c81c3 | ||
|
|
b0139b499e | ||
|
|
2d409f98f2 | ||
|
|
f62c5e03bb | ||
|
|
f96581e87a | ||
|
|
4fb43dac1a | ||
|
|
f3b33eb5af | ||
|
|
35b8c476db | ||
|
|
d7260d8976 | ||
|
|
a7ce59fcd4 | ||
|
|
cc781b33d2 | ||
|
|
54a5027f8a | ||
|
|
1053c7b114 | ||
|
|
510d80c58a | ||
|
|
894197e75e | ||
|
|
eca48e2495 | ||
|
|
2bd8dc7c41 | ||
|
|
b8eb915788 | ||
|
|
5c0fe6fc9a | ||
|
|
14ecff0d12 | ||
|
|
9135dbd788 | ||
|
|
39511b2cbe | ||
|
|
55db579d88 | ||
|
|
8d31196e4d | ||
|
|
49d0378530 | ||
|
|
67f78a5242 | ||
|
|
ed71768d36 | ||
|
|
baf017efbd | ||
|
|
567d143cf5 | ||
|
|
496ad5724b | ||
|
|
76997c1c88 | ||
|
|
6d42c8c886 | ||
|
|
4c687b3b33 | ||
|
|
53c7eb9a35 | ||
|
|
35ceb8ad48 | ||
|
|
d9067650b4 | ||
|
|
1a3e6d7f04 | ||
|
|
33a88f172c | ||
|
|
087e40a705 | ||
|
|
36cadc541a | ||
|
|
b6852432dd | ||
|
|
7f6060dc19 | ||
|
|
c4f0177b4a | ||
|
|
157a2ecce9 | ||
|
|
e0f99bd1af | ||
|
|
638fef954c | ||
|
|
cd45a53aee | ||
|
|
1413a34c69 | ||
|
|
0c6a4353a5 | ||
|
|
b811201363 | ||
|
|
11ab85dbf8 | ||
|
|
4759a418c6 | ||
|
|
f77477b52e | ||
|
|
c4df5da15e | ||
|
|
ca066bcb3c | ||
|
|
7ed72f79ac | ||
|
|
7228e4bfbf | ||
|
|
99c97dbfb1 | ||
|
|
2803eeee08 | ||
|
|
c336639baf | ||
|
|
2dee6b66dc | ||
|
|
7d925ef800 | ||
|
|
f91247c0f0 | ||
|
|
ad52750cdf | ||
|
|
882f0cbf21 | ||
|
|
6813a268fd | ||
|
|
f379eb2e46 | ||
|
|
2cec3f077c | ||
|
|
a385a82773 | ||
|
|
7a6458ce76 | ||
|
|
4eb07780f2 | ||
|
|
acba5bf774 | ||
|
|
a6115ef016 | ||
|
|
878f98bfef | ||
|
|
f5b6adbdc2 | ||
|
|
465111fbdc | ||
|
|
3cdb8fe138 | ||
|
|
bcde2397cd | ||
|
|
fab7360488 | ||
|
|
c6eba0b51b | ||
|
|
80bdef06c9 | ||
|
|
7bb99845a5 | ||
|
|
cfc599f753 | ||
|
|
5c5e6d5b7e | ||
|
|
5347341414 | ||
|
|
ae83e0eea9 | ||
|
|
0262e82f3b | ||
|
|
4c3e0273d4 | ||
|
|
d5d8e4112e | ||
|
|
d0904e711c | ||
|
|
dd5dc86522 | ||
|
|
70c949db02 | ||
|
|
1a6117c674 | ||
|
|
cbab3919b8 | ||
|
|
72520a9da0 | ||
|
|
39026d1562 | ||
|
|
b6e70d5157 | ||
|
|
bfdf917c6f | ||
|
|
a2144e4126 | ||
|
|
1ab8b6220b | ||
|
|
8de8c7f9f8 |
21
.eslintrc.yml
Normal file
21
.eslintrc.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
env:
|
||||
browser: true
|
||||
es2021: true
|
||||
node: true
|
||||
extends: eslint:recommended
|
||||
parserOptions:
|
||||
ecmaVersion: latest
|
||||
sourceType: module
|
||||
rules:
|
||||
indent:
|
||||
- error
|
||||
- tab
|
||||
linebreak-style:
|
||||
- error
|
||||
- unix
|
||||
quotes:
|
||||
- error
|
||||
- double
|
||||
semi:
|
||||
- error
|
||||
- never
|
||||
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@@ -1 +1 @@
|
||||
custom: ['https://en.cryptobadges.io/donate/19sE9mHShbag5WiBwZ75nG21BSFZ1UnjpZ']
|
||||
custom: https://my.fsf.org/donate
|
||||
|
||||
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,38 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Smartphone (please complete the following information):**
|
||||
- Device: [e.g. iPhone6]
|
||||
- OS: [e.g. iOS8.1]
|
||||
- Browser [e.g. stock browser, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
6
.github/dependabot.yml
vendored
Normal file
6
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
42
.github/workflows/build.yml
vendored
Normal file
42
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
on:
|
||||
workflow_dispatch
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repositoty
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up nodejs
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
cache: 'npm'
|
||||
node-version: 20
|
||||
|
||||
- name: Set up npm project
|
||||
run: npm install
|
||||
|
||||
- name: Build project
|
||||
run: npm run build
|
||||
|
||||
- name: Move x64 exe
|
||||
run: cp ./dist/SteamDepotDownloaderGUI*.exe ./SteamDepotDownloaderGUI-${{ github.run_number }}.exe
|
||||
|
||||
- name: Move x64 AppImage
|
||||
run: cp `ls -d1 dist/* | grep -E "SteamDepotDownloaderGUI-[0-9]+\.[0-9]+\.[0-9]+\.AppImage"` ./SteamDepotDownloaderGUI-${{ github.run_number }}.AppImage
|
||||
|
||||
- name: Move x64 zip
|
||||
run: cp `ls -d1 dist/* | grep -E "steamdepotdownloadergui-[0-9]+\.[0-9]+\.[0-9]+\.zip"` ./SteamDepotDownloaderGUI-${{ github.run_number }}.zip
|
||||
|
||||
- name: Move arm64 AppImage
|
||||
run: cp `ls -d1 dist/* | grep -E "SteamDepotDownloaderGUI-[0-9]+\.[0-9]+\.[0-9]+\-arm64.AppImage"` ./SteamDepotDownloaderGUI-${{ github.run_number }}.AppImage
|
||||
|
||||
- name: Move arm64 zip
|
||||
run: cp `ls -d1 dist/* | grep -E "steamdepotdownloadergui-[0-9]+\.[0-9]+\.[0-9]+\-arm64.zip"` ./SteamDepotDownloaderGUI-${{ github.run_number }}-arm64.zip
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: SteamDepotDownloaderGUI-${{ github.run_number }}
|
||||
path: SteamDepotDownloaderGUI-${{ github.run_number }}*.*
|
||||
19
.github/workflows/github-repo-stats.yml
vendored
Normal file
19
.github/workflows/github-repo-stats.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
name: github-repo-stats
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Run this once per day, towards the end of the day for keeping the most
|
||||
# recent data point most meaningful (hours are interpreted in UTC).
|
||||
- cron: "0 23 * * *"
|
||||
workflow_dispatch: # Allow for running this manually.
|
||||
|
||||
jobs:
|
||||
j1:
|
||||
name: github-repo-stats
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: run-ghrs
|
||||
# Use latest release.
|
||||
uses: jgehrcke/github-repo-stats@v1.4.2
|
||||
with:
|
||||
ghtoken: ${{ secrets.ghrs_github_api_token }}
|
||||
437
.gitignore
vendored
437
.gitignore
vendored
@@ -1,362 +1,143 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# VSCode directory for storing user settings
|
||||
.vscode
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
# IntelliJ
|
||||
.idea/
|
||||
|
||||
# SteamDepotDownloaderGUI specific
|
||||
depotdownloader
|
||||
games
|
||||
*.zip
|
||||
run.bat
|
||||
run.sh
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
@@ -3,126 +3,192 @@
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
|
||||
and learning from the experience
|
||||
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
|
||||
advances of any kind
|
||||
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
|
||||
* Public or private harassment
|
||||
|
||||
* Publishing others' private information, such as a physical or email
|
||||
|
||||
address, without their explicit permission
|
||||
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
|
||||
an individual is officially representing the community in public spaces.
|
||||
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
|
||||
posting via an official social media account, or acting as an appointed
|
||||
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
|
||||
reported to the community leaders responsible for enforcement at
|
||||
the repository's webpage.
|
||||
|
||||
.
|
||||
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
|
||||
communication with the community for a specified period of time. No public or
|
||||
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
version 2.1, available at
|
||||
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
|
||||
[Mozilla's code of conduct enforcement ladder][mozilla coc].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
|
||||
[https://www.contributor-covenant.org/faq][faq]. Translations are available at
|
||||
|
||||
[https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
|
||||
[mozilla coc]: https://github.com/mozilla/diversity
|
||||
|
||||
[faq]: https://www.contributor-covenant.org/faq
|
||||
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
|
||||
|
||||
@@ -1,88 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{9FE2AF44-2D88-43DB-9B8F-EA410552D8CE}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>DepotDownloaderGUI</RootNamespace>
|
||||
<AssemblyName>DepotDownloaderGUI</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
<TargetFrameworkProfile />
|
||||
</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 Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.DirectoryServices" />
|
||||
<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>
|
||||
<Compile Include="downloadGUI.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="downloadGUI.Designer.cs">
|
||||
<DependentUpon>downloadGUI.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="downloadGUI.resx">
|
||||
<DependentUpon>downloadGUI.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>
|
||||
<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>
|
||||
<EmbeddedResource Include="Resources\Poppins-Medium.ttf" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -1,25 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30907.101
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DepotDownloaderGUI", "DepotDownloaderGUI.csproj", "{9FE2AF44-2D88-43DB-9B8F-EA410552D8CE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{9FE2AF44-2D88-43DB-9B8F-EA410552D8CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9FE2AF44-2D88-43DB-9B8F-EA410552D8CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9FE2AF44-2D88-43DB-9B8F-EA410552D8CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9FE2AF44-2D88-43DB-9B8F-EA410552D8CE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {B49312C0-32E2-42A5-9DC8-892A707C0EF8}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
BIN
Hubot-Sans.woff2
Normal file
BIN
Hubot-Sans.woff2
Normal file
Binary file not shown.
1348
LICENSE.md
1348
LICENSE.md
File diff suppressed because it is too large
Load Diff
22
Program.cs
22
Program.cs
@@ -1,22 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace DepotDownloaderGUI
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new downloadGUI());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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("DepotDownloaderGUI")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("DepotDownloaderGUI")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2021")]
|
||||
[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("9fe2af44-2d88-43db-9b8f-ea410552d8ce")]
|
||||
|
||||
// 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")]
|
||||
73
Properties/Resources.Designer.cs
generated
73
Properties/Resources.Designer.cs
generated
@@ -1,73 +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 DepotDownloaderGUI.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DepotDownloaderGUI.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Byte[].
|
||||
/// </summary>
|
||||
internal static byte[] Poppins_Medium {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Poppins_Medium", resourceCulture);
|
||||
return ((byte[])(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,124 +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>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="Poppins_Medium" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\Poppins-Medium.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
||||
26
Properties/Settings.Designer.cs
generated
26
Properties/Settings.Designer.cs
generated
@@ -1,26 +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 DepotDownloaderGUI.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
182
README.md
182
README.md
@@ -1,76 +1,106 @@
|
||||
|
||||
|
||||
<img src="https://socialify.git.ci/mmvanheusden/SteamDepotDownloaderGUI/image?description=1&font=Inter&forks=1&issues=1&language=1&owner=1&pattern=Floating%20Cogs&pulls=1&stargazers=1&theme=Light" alt="Banner" width="768"/>
|
||||
|
||||
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/status-Beta-blue" />
|
||||
<img alt="GitHub all releases" src="https://img.shields.io/github/downloads/mmvanheusden/SteamDepotDownloaderGUI/total?color=orange&label=downloads">
|
||||
<img alt="GitHub release (latest by date including pre-releases)" src="https://img.shields.io/github/v/release/mmvanheusden/SteamDepotDownloaderGUI?color=seagreen&include_prereleases">
|
||||
<img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/mmvanheusden/SteamDepotDownloaderGUI?color=crimson">
|
||||
<a href="https://en.cryptobadges.io/donate/19sE9mHShbag5WiBwZ75nG21BSFZ1UnjpZ"><img src="https://en.cryptobadges.io/badge/small/19sE9mHShbag5WiBwZ75nG21BSFZ1UnjpZ"></a>
|
||||
<img alt="Visitor Count" src="https://visitor-badge.glitch.me/badge?page_id=mmvanheusden.SteamDepotDownloaderGUI">
|
||||
</p>
|
||||
|
||||
# SteamDepotDownloaderGUI
|
||||
|
||||
A simple GUI tool based on [**DepotDownloader**][depotdownloader] for downloading older versions of Steam games.
|
||||
|
||||

|
||||
|
||||
## What can you do with the program?
|
||||
You can download older builds of Steam games and software
|
||||
|
||||
## Want an example?
|
||||
Take a look at [**This**][subnauticawiki] example.
|
||||
|
||||
## YouTube Tutorial
|
||||
<a href="https://www.youtube.com/watch?v=X-tzW5ywCgU">
|
||||
<img border="0" alt="YouTube Tutorial" src="/src/readme.md/youtube.png" width="768">
|
||||
</a>
|
||||
|
||||
## How use the program?
|
||||
|
||||
### step 1:
|
||||
Download [**.NET Core 2.0**][dotnet] It is required for the program to work properly.
|
||||
### step 2:
|
||||
Download and unzip the program. (You can download the latest version [**here**][latest])
|
||||
### step 3:
|
||||
Run DepotDownloaderGUI.exe.
|
||||
### step 4:
|
||||
First enter your Steam credentials at "Username" and "Password"
|
||||
### step 5:
|
||||
Click on "SteamDB Instant Search".
|
||||
### step 6:
|
||||
Enter your game/software of choice at the search bar and select the game.
|
||||
### step 7:
|
||||
Copy the App ID and paste it in the program at "App ID"
|
||||
### step 8:
|
||||
Click on "Depots" in the sidebar.
|
||||
### step 9:
|
||||
Select the Windows depot (usually Win32)
|
||||
### step 10:
|
||||
Copy the Depot ID and paste it in the program at "Depot ID"
|
||||
### step 11:
|
||||
Click on "Manifests" in the sidebar
|
||||
### step 12:
|
||||
Choose a Manifest(build) of choice and copy its ID and paste it in the program at "Manifest ID"
|
||||
### step 13:
|
||||
If you want a faster download speed, increase the max servers and max chunks.
|
||||
### step 14:
|
||||
Click on "Start Download", choose the location and a terminal window will pop up and will show the download progress.
|
||||
### step 15:
|
||||
Once the download is done, close the program.
|
||||
The downloaded game is stored in the specified location
|
||||
### Enjoy your game!
|
||||
|
||||
## Need help?
|
||||
Open an issue.
|
||||
|
||||
|
||||
[latest]: https://github.com/mmvanheusden/SteamDepotDownloaderGUI/releases/latest
|
||||
[steamdb]: https://steamdb.info/
|
||||
[depotdownloader]: https://github.com/SteamRE/DepotDownloader
|
||||
[subnauticawiki]: https://github.com/mmvanheusden/SteamDepotDownloaderGUI/wiki/How-to-Download-older-versions-of-Subnautica
|
||||
[dotnet]: https://dotnet.microsoft.com/download/dotnet-core/thank-you/runtime-2.0.9-windows-x64-installer
|
||||
|
||||
<h1 align="center">SteamDepotDownloaderGUI
|
||||
|
||||
<h4 align="center">A graphical wrapper for DepotDownloader, designed to make downloading older versions of Steam games easy. built using <a href="https://www.electronjs.org" target="_blank">Electron</a>.
|
||||
<br><br>
|
||||
→<a href="https://www.youtube.com/watch?v=H2COwT5OUOo" target="_blank"><b>Tutorial</b></a> ~
|
||||
<a href="https://github.com/mmvanheusden/SteamDepotDownloaderGUI/tree/steamdeck-dotnet#steamdepotdownloadergui-for-steam-deck" target="_blank"><b>Steam Deck</b></a> ~
|
||||
<a href="https://www.youtube.com/watch?v=ogiDAuH3VdY" target="_blank"><b>Subnautica</b></a>←
|
||||
</h4>
|
||||
|
||||
|
||||
|
||||
<p align="center"><a href="https://github.com/mmvanheusden/SteamDepotDownloaderGUI/releases/latest"><img src="https://img.shields.io/github/downloads/mmvanheusden/SteamDepotDownloaderGUI/total?color=orange&label=downloads" alt="Download count badge"></a><a href="https://img.shields.io/github/last-commit/mmvanheusden/SteamDepotDownloaderGUI?color=crimson"><img src="https://img.shields.io/github/last-commit/mmvanheusden/SteamDepotDownloaderGUI?color=crimson" alt="Last contribution badge"></a><a href="https://github.com/mmvanheusden/SteamDepotDownloaderGUI/releases/latest"><img src="https://img.shields.io/badge/Download -ffbd03?style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAABd0lEQVRoge2XwUrDQBCGPz3Ee++2UBSvdsGbeLHeFX0lPQhei+8g2AfwSVREK+LJ1oqHUGjRQ7Z0laRJNtldKPPBwoTM7D9/sks2IAiCsKrsAK/AC7DtSmTd1cTAKbAJtIAzVyIuDURGvOFKxKUBL4iB0IiB0IiB0IiB0IiB0IiB0IiB0IgBoA08Ak+AKpCvdO6AGn416zBwDGyRGLljuQmlc9pAEzipKl6HgVtgpOMGSYOdlLyOvtfQ1yPgpgb9WlDAEPjRYwj0jet+yv0iy80ru8AHiyazxiewF6jHXPJMeG3+CoiBy5J1/5dTlWVzAXwD5yXrAJho4YlFbdqesFnzsa6PLWr/PD0bFPAA3GO/YXN7WMspLpLnktweVvooMTPiKDPLHabmLCtpmYF3I96v3E55Doz4zWaCaxYb6Bno4udNRMCR1pzr92wmagFfZH+UfI0xycHPim5gE2Pg0Lb5OU2SVzgAph6anmqtHhWevCAIgh9+AdLMtu/CZhHJAAAAAElFTkSuQmCC" alt="Download latest release badge"></a><a href="https://img.shields.io/endpoint?url=https%3A%2F%2Fhits.dwyl.com%2Fmmvanheusden%2Fsteamdepotdownloadergui.json&color=lightblue"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fhits.dwyl.com%2Fmmvanheusden%2Fsteamdepotdownloadergui.json&color=lightblue" alt="Visitor count badge"></a><a href="https://my.fsf.org/donate"><img src="https://img.shields.io/badge/Donate-%23A42E2B?logo=gnu" alt="Donation badge"></a><a href="https://www.codefactor.io/repository/github/mmvanheusden/steamdepotdownloadergui/badge/master"><img src="https://www.codefactor.io/repository/github/mmvanheusden/steamdepotdownloadergui/badge/master" alt="CodeFactor badge"></a></p>
|
||||
|
||||
|
||||
<p align="center">
|
||||
<img alt="Screenshot of the downloader interface" src="screenshot.png"
|
||||
style="max-width: 60%;"/>
|
||||
</p>
|
||||
|
||||
## Features
|
||||
|
||||
* **Cross platform**
|
||||
- Windows
|
||||
- <s>macOS</s> (in development™)
|
||||
- Linux
|
||||
- [Steam Deck](https://github.com/mmvanheusden/SteamDepotDownloaderGUI/tree/steamdeck-dotnet#steamdepotdownloadergui-for-steam-deck)
|
||||
* **Cross terminal**
|
||||
- Gnome Terminal
|
||||
- Konsole
|
||||
- xfce4-terminal
|
||||
- Terminator
|
||||
- Terminology
|
||||
- xterm
|
||||
- Kitty
|
||||
- LXTerminal
|
||||
- Tilix
|
||||
- Deepin Terminal
|
||||
- cool-retro-term
|
||||
- Manual: produce a script that can be copy pasted into a terminal of choice
|
||||
* **Support for anonymous downloads**
|
||||
|
||||
## Rewrite
|
||||
Computer resources are not an all-you-can-eat buffet. The executables weigh on average 103 MB.
|
||||
That's why in the future, this project is fully switching to a different toolset, probably [gtk-rs](https://gtk-rs.org/).
|
||||
This framework is more suited as we don't need a whole browser engine just to download files.
|
||||
|
||||
|
||||
## Download
|
||||
|
||||
### Windows:
|
||||
* If you haven't already, install [.NET SDK 6.0](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) on your computer.
|
||||
Then, download the [latest Windows build](https://github.com/mmvanheusden/SteamDepotDownloaderGUI/releases/latest)
|
||||
### **Linux:**
|
||||
#### Arch Linux:
|
||||
* There is an [AUR package](https://aur.archlinux.org/packages/steamdepotdownloadergui-bin) made. this can be installed using `yay -S steamdepotdownloadergui-bin`.
|
||||
**This is not maintained by me!!**
|
||||
#### Other Linux distros:
|
||||
* **You'll need `unzip`, .NET SDK 6.0.**
|
||||
* **Ubuntu:**
|
||||
|
||||
`sudo apt install unzip dotnet-sdk-6.0`
|
||||
* **Fedora:**
|
||||
|
||||
`sudo dnf install unzip dotnet-sdk-6.0`
|
||||
|
||||
|
||||
* There are several options, AppImage, and a `.zip`, for both x64 and arm64.
|
||||
|
||||
[Download latest release](https://github.com/mmvanheusden/SteamDepotDownloaderGUI/releases/latest)
|
||||
|
||||
|
||||
## How to use
|
||||
|
||||
#### Tutorials:
|
||||
* https://www.youtube.com/watch?v=H2COwT5OUOo How to download older versions of Steam games. rollback steam games tutorial
|
||||
* https://www.youtube.com/watch?v=ogiDAuH3VdY How to download older versions of Subnautica tutorial
|
||||
---
|
||||
|
||||
**Enter everything you normally would in the DepotDownloader console and select your OS/terminal and click download**
|
||||
|
||||
|
||||
## Credits
|
||||
|
||||
This software makes use of the following projects:
|
||||
- [**DepotDownloader**](https://github.com/SteamRE/DepotDownloader/)
|
||||
- [Electron](https://www.electronjs.org/)
|
||||
- [Node.js](https://nodejs.org/)
|
||||
- [Primer CSS](https://primer.style/css/)
|
||||
- [follow-redirects](https://github.com/follow-redirects/follow-redirects)
|
||||
- [Hubut Sans](https://github.com/github/hubot-sans) under [license](https://github.com/github/hubot-sans/blob/05d5ea150c20e6434485db8ffd2277ed18a9e911/LICENSE)
|
||||
|
||||
|
||||
## Donate
|
||||
I prefer not to receive any donations. If you want to make me happy open an issue and say thanks ;)
|
||||
Please donate to the [Free Software Foundation](https://my.fsf.org/donate) instead.
|
||||
|
||||
|
||||
## Contribute
|
||||
If you would like to contribute to SteamDepotDownloaderGUI, please make sure to follow
|
||||
the [contributing instructions and guidelines](contributing.md).
|
||||
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
|
||||
Please make sure to keep code clean and cross-platform compatible.
|
||||
|
||||
|
||||

|
||||
Binary file not shown.
61
contributing.md
Normal file
61
contributing.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# SteamDepotDownloaderGUI development information
|
||||
|
||||
SteamDepotDownloaderGUI is a graphical user interface for DepotDownloader.
|
||||
|
||||
It is written in Node.js and uses the [Electron](https://electronjs.org/) framework.
|
||||
The CSS framework being used is [Primer](https://primer.style), by GitHub.
|
||||
|
||||
## Setup development environment
|
||||
|
||||
**Note that these instructions may differ from operating system to operating system.**
|
||||
|
||||
* Install node.js, npm, and git on your computer.
|
||||
|
||||
* Clone the repository.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/mmvanheusden/SteamDepotDownloaderGUI
|
||||
```
|
||||
|
||||
* Move into the directory and install npm dependencies.
|
||||
|
||||
```bash
|
||||
cd SteamDepotDownloaderGUI
|
||||
npm install
|
||||
```
|
||||
|
||||
* **You are now ready to contribute**
|
||||
|
||||
## Testing the application
|
||||
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
## Building the application
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
* If you are using macOS, you can build using the following command:
|
||||
|
||||
```bash
|
||||
npm run buildall
|
||||
```
|
||||
|
||||
This will build the application for all supported operating systems.
|
||||
|
||||
## Contributing Guidelines
|
||||
|
||||
Please make sure to keep code consistent and cross-platform compatible.
|
||||
|
||||
After you made a change, clean-up the code using your favorite code editor and run the following command:
|
||||
|
||||
```bash
|
||||
npx eslint *.js --fix
|
||||
```
|
||||
|
||||
Please make sure your git commit message is descriptive and contains the changes you made.
|
||||
|
||||
**Happy coding!**
|
||||
325
downloadGUI.Designer.cs
generated
325
downloadGUI.Designer.cs
generated
@@ -1,325 +0,0 @@
|
||||
|
||||
namespace DepotDownloaderGUI
|
||||
{
|
||||
partial class downloadGUI
|
||||
{
|
||||
/// <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.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(downloadGUI));
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.label8 = new System.Windows.Forms.Label();
|
||||
this.textBoxUsername = new System.Windows.Forms.TextBox();
|
||||
this.textBoxPassword = new System.Windows.Forms.TextBox();
|
||||
this.textBoxAppID = new System.Windows.Forms.TextBox();
|
||||
this.textBoxDepotID = new System.Windows.Forms.TextBox();
|
||||
this.textBoxManifestID = new System.Windows.Forms.TextBox();
|
||||
this.textBoxArgs = new System.Windows.Forms.TextBox();
|
||||
this.buttonDownload = new System.Windows.Forms.Button();
|
||||
this.numericUpDownMaxServers = new System.Windows.Forms.NumericUpDown();
|
||||
this.numericUpDownMaxChunks = new System.Windows.Forms.NumericUpDown();
|
||||
this.buttonHelp = new System.Windows.Forms.Button();
|
||||
this.buttonSearch = new System.Windows.Forms.Button();
|
||||
this.buttonRepo = new System.Windows.Forms.Button();
|
||||
this.labelTitle = new System.Windows.Forms.Label();
|
||||
this.labelIssue = new System.Windows.Forms.Label();
|
||||
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownMaxServers)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownMaxChunks)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// label1
|
||||
//
|
||||
resources.ApplyResources(this.label1, "label1");
|
||||
this.label1.Name = "label1";
|
||||
this.toolTip1.SetToolTip(this.label1, resources.GetString("label1.ToolTip"));
|
||||
//
|
||||
// label2
|
||||
//
|
||||
resources.ApplyResources(this.label2, "label2");
|
||||
this.label2.Name = "label2";
|
||||
this.toolTip1.SetToolTip(this.label2, resources.GetString("label2.ToolTip"));
|
||||
//
|
||||
// label3
|
||||
//
|
||||
resources.ApplyResources(this.label3, "label3");
|
||||
this.label3.Name = "label3";
|
||||
this.toolTip1.SetToolTip(this.label3, resources.GetString("label3.ToolTip"));
|
||||
//
|
||||
// label4
|
||||
//
|
||||
resources.ApplyResources(this.label4, "label4");
|
||||
this.label4.Name = "label4";
|
||||
this.toolTip1.SetToolTip(this.label4, resources.GetString("label4.ToolTip"));
|
||||
//
|
||||
// label5
|
||||
//
|
||||
resources.ApplyResources(this.label5, "label5");
|
||||
this.label5.Name = "label5";
|
||||
this.toolTip1.SetToolTip(this.label5, resources.GetString("label5.ToolTip"));
|
||||
//
|
||||
// label6
|
||||
//
|
||||
resources.ApplyResources(this.label6, "label6");
|
||||
this.label6.Name = "label6";
|
||||
this.toolTip1.SetToolTip(this.label6, resources.GetString("label6.ToolTip"));
|
||||
//
|
||||
// label7
|
||||
//
|
||||
resources.ApplyResources(this.label7, "label7");
|
||||
this.label7.Name = "label7";
|
||||
this.toolTip1.SetToolTip(this.label7, resources.GetString("label7.ToolTip"));
|
||||
//
|
||||
// label8
|
||||
//
|
||||
resources.ApplyResources(this.label8, "label8");
|
||||
this.label8.Name = "label8";
|
||||
this.toolTip1.SetToolTip(this.label8, resources.GetString("label8.ToolTip"));
|
||||
//
|
||||
// textBoxUsername
|
||||
//
|
||||
resources.ApplyResources(this.textBoxUsername, "textBoxUsername");
|
||||
this.textBoxUsername.BackColor = System.Drawing.Color.Black;
|
||||
this.textBoxUsername.ForeColor = System.Drawing.Color.White;
|
||||
this.textBoxUsername.Name = "textBoxUsername";
|
||||
//
|
||||
// textBoxPassword
|
||||
//
|
||||
resources.ApplyResources(this.textBoxPassword, "textBoxPassword");
|
||||
this.textBoxPassword.BackColor = System.Drawing.Color.Black;
|
||||
this.textBoxPassword.ForeColor = System.Drawing.Color.White;
|
||||
this.textBoxPassword.Name = "textBoxPassword";
|
||||
//
|
||||
// textBoxAppID
|
||||
//
|
||||
resources.ApplyResources(this.textBoxAppID, "textBoxAppID");
|
||||
this.textBoxAppID.BackColor = System.Drawing.Color.Black;
|
||||
this.textBoxAppID.ForeColor = System.Drawing.Color.White;
|
||||
this.textBoxAppID.Name = "textBoxAppID";
|
||||
//
|
||||
// textBoxDepotID
|
||||
//
|
||||
resources.ApplyResources(this.textBoxDepotID, "textBoxDepotID");
|
||||
this.textBoxDepotID.BackColor = System.Drawing.Color.Black;
|
||||
this.textBoxDepotID.ForeColor = System.Drawing.Color.White;
|
||||
this.textBoxDepotID.Name = "textBoxDepotID";
|
||||
//
|
||||
// textBoxManifestID
|
||||
//
|
||||
resources.ApplyResources(this.textBoxManifestID, "textBoxManifestID");
|
||||
this.textBoxManifestID.BackColor = System.Drawing.Color.Black;
|
||||
this.textBoxManifestID.ForeColor = System.Drawing.Color.White;
|
||||
this.textBoxManifestID.Name = "textBoxManifestID";
|
||||
//
|
||||
// textBoxArgs
|
||||
//
|
||||
resources.ApplyResources(this.textBoxArgs, "textBoxArgs");
|
||||
this.textBoxArgs.BackColor = System.Drawing.Color.Black;
|
||||
this.textBoxArgs.ForeColor = System.Drawing.Color.White;
|
||||
this.textBoxArgs.Name = "textBoxArgs";
|
||||
//
|
||||
// buttonDownload
|
||||
//
|
||||
resources.ApplyResources(this.buttonDownload, "buttonDownload");
|
||||
this.buttonDownload.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.buttonDownload.Name = "buttonDownload";
|
||||
this.toolTip1.SetToolTip(this.buttonDownload, resources.GetString("buttonDownload.ToolTip"));
|
||||
this.buttonDownload.UseVisualStyleBackColor = true;
|
||||
this.buttonDownload.Click += new System.EventHandler(this.buttonDownload_Click);
|
||||
//
|
||||
// numericUpDownMaxServers
|
||||
//
|
||||
resources.ApplyResources(this.numericUpDownMaxServers, "numericUpDownMaxServers");
|
||||
this.numericUpDownMaxServers.BackColor = System.Drawing.Color.Black;
|
||||
this.numericUpDownMaxServers.ForeColor = System.Drawing.Color.White;
|
||||
this.numericUpDownMaxServers.Increment = new decimal(new int[] {
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownMaxServers.Maximum = new decimal(new int[] {
|
||||
1000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownMaxServers.Minimum = new decimal(new int[] {
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownMaxServers.Name = "numericUpDownMaxServers";
|
||||
this.numericUpDownMaxServers.Value = new decimal(new int[] {
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// numericUpDownMaxChunks
|
||||
//
|
||||
resources.ApplyResources(this.numericUpDownMaxChunks, "numericUpDownMaxChunks");
|
||||
this.numericUpDownMaxChunks.BackColor = System.Drawing.Color.Black;
|
||||
this.numericUpDownMaxChunks.ForeColor = System.Drawing.Color.White;
|
||||
this.numericUpDownMaxChunks.Increment = new decimal(new int[] {
|
||||
5,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownMaxChunks.Maximum = new decimal(new int[] {
|
||||
1000,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownMaxChunks.Minimum = new decimal(new int[] {
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownMaxChunks.Name = "numericUpDownMaxChunks";
|
||||
this.numericUpDownMaxChunks.Value = new decimal(new int[] {
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
//
|
||||
// buttonHelp
|
||||
//
|
||||
resources.ApplyResources(this.buttonHelp, "buttonHelp");
|
||||
this.buttonHelp.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.buttonHelp.Name = "buttonHelp";
|
||||
this.buttonHelp.UseVisualStyleBackColor = true;
|
||||
this.buttonHelp.Click += new System.EventHandler(this.buttonHelp_Click);
|
||||
//
|
||||
// buttonSearch
|
||||
//
|
||||
resources.ApplyResources(this.buttonSearch, "buttonSearch");
|
||||
this.buttonSearch.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.buttonSearch.Name = "buttonSearch";
|
||||
this.toolTip1.SetToolTip(this.buttonSearch, resources.GetString("buttonSearch.ToolTip"));
|
||||
this.buttonSearch.UseVisualStyleBackColor = true;
|
||||
this.buttonSearch.Click += new System.EventHandler(this.buttonSearch_Click);
|
||||
//
|
||||
// buttonRepo
|
||||
//
|
||||
resources.ApplyResources(this.buttonRepo, "buttonRepo");
|
||||
this.buttonRepo.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.buttonRepo.Name = "buttonRepo";
|
||||
this.toolTip1.SetToolTip(this.buttonRepo, resources.GetString("buttonRepo.ToolTip"));
|
||||
this.buttonRepo.UseVisualStyleBackColor = true;
|
||||
this.buttonRepo.Click += new System.EventHandler(this.buttonRepo_Click);
|
||||
//
|
||||
// labelTitle
|
||||
//
|
||||
resources.ApplyResources(this.labelTitle, "labelTitle");
|
||||
this.labelTitle.Name = "labelTitle";
|
||||
//
|
||||
// labelIssue
|
||||
//
|
||||
resources.ApplyResources(this.labelIssue, "labelIssue");
|
||||
this.labelIssue.Name = "labelIssue";
|
||||
//
|
||||
// toolTip1
|
||||
//
|
||||
this.toolTip1.AutomaticDelay = 0;
|
||||
this.toolTip1.AutoPopDelay = 0;
|
||||
this.toolTip1.InitialDelay = 0;
|
||||
this.toolTip1.IsBalloon = true;
|
||||
this.toolTip1.ReshowDelay = 600;
|
||||
this.toolTip1.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;
|
||||
this.toolTip1.ToolTipTitle = "Info";
|
||||
//
|
||||
// downloadGUI
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.BackColor = System.Drawing.Color.Black;
|
||||
this.Controls.Add(this.labelIssue);
|
||||
this.Controls.Add(this.labelTitle);
|
||||
this.Controls.Add(this.buttonRepo);
|
||||
this.Controls.Add(this.buttonSearch);
|
||||
this.Controls.Add(this.buttonHelp);
|
||||
this.Controls.Add(this.numericUpDownMaxChunks);
|
||||
this.Controls.Add(this.numericUpDownMaxServers);
|
||||
this.Controls.Add(this.buttonDownload);
|
||||
this.Controls.Add(this.textBoxArgs);
|
||||
this.Controls.Add(this.textBoxManifestID);
|
||||
this.Controls.Add(this.textBoxDepotID);
|
||||
this.Controls.Add(this.textBoxAppID);
|
||||
this.Controls.Add(this.textBoxPassword);
|
||||
this.Controls.Add(this.textBoxUsername);
|
||||
this.Controls.Add(this.label8);
|
||||
this.Controls.Add(this.label7);
|
||||
this.Controls.Add(this.label6);
|
||||
this.Controls.Add(this.label5);
|
||||
this.Controls.Add(this.label4);
|
||||
this.Controls.Add(this.label3);
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.label1);
|
||||
this.ForeColor = System.Drawing.Color.White;
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "downloadGUI";
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownMaxServers)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownMaxChunks)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.Label label8;
|
||||
private System.Windows.Forms.TextBox textBoxUsername;
|
||||
private System.Windows.Forms.TextBox textBoxPassword;
|
||||
private System.Windows.Forms.TextBox textBoxAppID;
|
||||
private System.Windows.Forms.TextBox textBoxDepotID;
|
||||
private System.Windows.Forms.TextBox textBoxManifestID;
|
||||
private System.Windows.Forms.TextBox textBoxArgs;
|
||||
private System.Windows.Forms.Button buttonDownload;
|
||||
private System.Windows.Forms.NumericUpDown numericUpDownMaxServers;
|
||||
private System.Windows.Forms.NumericUpDown numericUpDownMaxChunks;
|
||||
private System.Windows.Forms.Button buttonHelp;
|
||||
private System.Windows.Forms.Button buttonSearch;
|
||||
private System.Windows.Forms.Button buttonRepo;
|
||||
private System.Windows.Forms.Label labelTitle;
|
||||
private System.Windows.Forms.Label labelIssue;
|
||||
private System.Windows.Forms.ToolTip toolTip1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
using System.Drawing.Text;
|
||||
using System.Net;
|
||||
using System.IO.Compression;
|
||||
|
||||
namespace DepotDownloaderGUI
|
||||
{
|
||||
public partial class downloadGUI : Form
|
||||
{
|
||||
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
|
||||
private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont,
|
||||
IntPtr pdv, [System.Runtime.InteropServices.In] ref uint pcFonts);
|
||||
|
||||
private PrivateFontCollection fonts = new PrivateFontCollection();
|
||||
|
||||
Font Poppins;
|
||||
|
||||
string Command;
|
||||
public downloadGUI()
|
||||
{
|
||||
InitializeComponent();
|
||||
if (!Directory.Exists("DepotDownloader"))
|
||||
{
|
||||
//Download
|
||||
string Download = "https://github.com/SteamRE/DepotDownloader/releases/download/DepotDownloader_2.4.5/depotdownloader-2.4.5.zip";
|
||||
string zipname = "depotdownloader-2.4.5.zip";
|
||||
string extractPath = "DepotDownloader";
|
||||
WebClient ZipDownloader = new WebClient();
|
||||
ZipDownloader.DownloadFile(Download, zipname);
|
||||
//Extract
|
||||
ZipFile.ExtractToDirectory(zipname, extractPath);
|
||||
//Delete
|
||||
File.Delete(zipname);
|
||||
}
|
||||
byte[] fontData = Properties.Resources.Poppins_Medium;
|
||||
IntPtr fontPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(fontData.Length);
|
||||
System.Runtime.InteropServices.Marshal.Copy(fontData, 0, fontPtr, fontData.Length);
|
||||
uint dummy = 0;
|
||||
fonts.AddMemoryFont(fontPtr, Properties.Resources.Poppins_Medium.Length);
|
||||
AddFontMemResourceEx(fontPtr, (uint)Properties.Resources.Poppins_Medium.Length, IntPtr.Zero, ref dummy);
|
||||
System.Runtime.InteropServices.Marshal.FreeCoTaskMem(fontPtr);
|
||||
Poppins = new Font(fonts.Families[0], 18.0F);
|
||||
Directory.SetCurrentDirectory("./DepotDownloader/");
|
||||
labelTitle.Font = Poppins;
|
||||
}
|
||||
|
||||
|
||||
private void buttonDownload_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(textBoxAppID.Text) || string.IsNullOrEmpty(textBoxDepotID.Text) || string.IsNullOrEmpty(textBoxManifestID.Text))
|
||||
{
|
||||
MessageBox.Show("Please fill all required fields.");
|
||||
}
|
||||
else
|
||||
{
|
||||
FolderBrowserDialog folderDlg = new FolderBrowserDialog();
|
||||
DialogResult result = folderDlg.ShowDialog();
|
||||
if (result == DialogResult.OK & result != DialogResult.Cancel)
|
||||
{
|
||||
string selectedpath = folderDlg.SelectedPath;
|
||||
if (textBoxPassword.Text.Length <= 0)
|
||||
{
|
||||
//Todo Remember Password tick
|
||||
Command = $"/k dotnet DepotDownloader.dll -app {textBoxAppID.Text} -depot {textBoxDepotID.Text} -manifest {textBoxManifestID.Text} -max-servers {numericUpDownMaxServers.Value} -max-downloads {numericUpDownMaxChunks.Value} -dir " + '"' + selectedpath + '"' + " " + textBoxArgs.Text;
|
||||
}
|
||||
else
|
||||
{
|
||||
Command = $"/k dotnet DepotDownloader.dll -app {textBoxAppID.Text} -depot {textBoxDepotID.Text} -manifest {textBoxManifestID.Text} -username {textBoxUsername.Text} -password {textBoxPassword.Text} -max-servers {numericUpDownMaxServers.Value} -max-downloads {numericUpDownMaxChunks.Value} -dir " + '"' + selectedpath + '"' + " " + textBoxArgs.Text;
|
||||
}
|
||||
|
||||
open("cmd.exe", Command);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void open(string url, string args = "")
|
||||
{
|
||||
System.Diagnostics.Process.Start(url, args);
|
||||
}
|
||||
|
||||
private void buttonHelp_Click(object sender, EventArgs e)
|
||||
{
|
||||
open("https://github.com/mmvanheusden/SteamDepotDownloaderGUI/discussions/5");
|
||||
}
|
||||
|
||||
private void buttonSearch_Click(object sender, EventArgs e)
|
||||
{
|
||||
open("https://steamdb.info/instantsearch/");
|
||||
}
|
||||
|
||||
private void buttonRepo_Click(object sender, EventArgs e)
|
||||
{
|
||||
open("https://github.com/mmvanheusden/SteamDepotDownloaderGUI");
|
||||
}
|
||||
}
|
||||
}
|
||||
848
downloadGUI.resx
848
downloadGUI.resx
@@ -1,848 +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>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="label1.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 60</value>
|
||||
</data>
|
||||
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>87, 23</value>
|
||||
</data>
|
||||
<data name="label1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>Username</value>
|
||||
</data>
|
||||
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="label1.ToolTip" xml:space="preserve">
|
||||
<value>Your Steam Username</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
</data>
|
||||
<data name=">>label1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label1.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label1.ZOrder" xml:space="preserve">
|
||||
<value>21</value>
|
||||
</data>
|
||||
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label2.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 96</value>
|
||||
</data>
|
||||
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>80, 23</value>
|
||||
</data>
|
||||
<data name="label2.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="label2.Text" xml:space="preserve">
|
||||
<value>Password</value>
|
||||
</data>
|
||||
<data name="label2.ToolTip" xml:space="preserve">
|
||||
<value>Your Steam Password</value>
|
||||
</data>
|
||||
<data name=">>label2.Name" xml:space="preserve">
|
||||
<value>label2</value>
|
||||
</data>
|
||||
<data name=">>label2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label2.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label2.ZOrder" xml:space="preserve">
|
||||
<value>20</value>
|
||||
</data>
|
||||
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label3.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 132</value>
|
||||
</data>
|
||||
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>63, 23</value>
|
||||
</data>
|
||||
<data name="label3.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="label3.Text" xml:space="preserve">
|
||||
<value>App ID</value>
|
||||
</data>
|
||||
<data name="label3.ToolTip" xml:space="preserve">
|
||||
<value>The app's unique ID, which can be found on the SteamDB website.</value>
|
||||
</data>
|
||||
<data name=">>label3.Name" xml:space="preserve">
|
||||
<value>label3</value>
|
||||
</data>
|
||||
<data name=">>label3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label3.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label3.ZOrder" xml:space="preserve">
|
||||
<value>19</value>
|
||||
</data>
|
||||
<data name="label4.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label4.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 168</value>
|
||||
</data>
|
||||
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>79, 23</value>
|
||||
</data>
|
||||
<data name="label4.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="label4.Text" xml:space="preserve">
|
||||
<value>Depot ID</value>
|
||||
</data>
|
||||
<data name="label4.ToolTip" xml:space="preserve">
|
||||
<value>The app's unique Depot ID, which can be found on the
|
||||
SteamDB website at 'Depots' in the sidebar.</value>
|
||||
</data>
|
||||
<data name=">>label4.Name" xml:space="preserve">
|
||||
<value>label4</value>
|
||||
</data>
|
||||
<data name=">>label4.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label4.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label4.ZOrder" xml:space="preserve">
|
||||
<value>18</value>
|
||||
</data>
|
||||
<data name="label5.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label5.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="label5.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 204</value>
|
||||
</data>
|
||||
<data name="label5.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>97, 23</value>
|
||||
</data>
|
||||
<data name="label5.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="label5.Text" xml:space="preserve">
|
||||
<value>Manifest ID</value>
|
||||
</data>
|
||||
<data name="label5.ToolTip" xml:space="preserve">
|
||||
<value>The app's unique Manifest ID, which can be found on the
|
||||
SteamDB website at 'Manifests' in the sidebar.</value>
|
||||
</data>
|
||||
<data name=">>label5.Name" xml:space="preserve">
|
||||
<value>label5</value>
|
||||
</data>
|
||||
<data name=">>label5.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label5.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label5.ZOrder" xml:space="preserve">
|
||||
<value>17</value>
|
||||
</data>
|
||||
<data name="label6.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label6.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="label6.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 239</value>
|
||||
</data>
|
||||
<data name="label6.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>101, 23</value>
|
||||
</data>
|
||||
<data name="label6.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="label6.Text" xml:space="preserve">
|
||||
<value>Max Servers</value>
|
||||
</data>
|
||||
<data name="label6.ToolTip" xml:space="preserve">
|
||||
<value>Maximum number of content servers to use.
|
||||
Speeds up download drastically</value>
|
||||
</data>
|
||||
<data name=">>label6.Name" xml:space="preserve">
|
||||
<value>label6</value>
|
||||
</data>
|
||||
<data name=">>label6.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label6.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label6.ZOrder" xml:space="preserve">
|
||||
<value>16</value>
|
||||
</data>
|
||||
<data name="label7.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label7.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="label7.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 275</value>
|
||||
</data>
|
||||
<data name="label7.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>103, 23</value>
|
||||
</data>
|
||||
<data name="label7.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="label7.Text" xml:space="preserve">
|
||||
<value>Max Chunks</value>
|
||||
</data>
|
||||
<data name="label7.ToolTip" xml:space="preserve">
|
||||
<value>Maximum number of chunks to download concurrently.
|
||||
Speeds up download drastically</value>
|
||||
</data>
|
||||
<data name=">>label7.Name" xml:space="preserve">
|
||||
<value>label7</value>
|
||||
</data>
|
||||
<data name=">>label7.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label7.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label7.ZOrder" xml:space="preserve">
|
||||
<value>15</value>
|
||||
</data>
|
||||
<data name="label8.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="label8.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="label8.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 312</value>
|
||||
</data>
|
||||
<data name="label8.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>165, 23</value>
|
||||
</data>
|
||||
<data name="label8.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="label8.Text" xml:space="preserve">
|
||||
<value>Optional Arguments</value>
|
||||
</data>
|
||||
<data name="label8.ToolTip" xml:space="preserve">
|
||||
<value>Optional Parameters.
|
||||
For advanced users</value>
|
||||
</data>
|
||||
<data name=">>label8.Name" xml:space="preserve">
|
||||
<value>label8</value>
|
||||
</data>
|
||||
<data name=">>label8.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>label8.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>label8.ZOrder" xml:space="preserve">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="textBoxUsername.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="textBoxUsername.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="textBoxUsername.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>187, 57</value>
|
||||
</data>
|
||||
<data name="textBoxUsername.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 30</value>
|
||||
</data>
|
||||
<data name="textBoxUsername.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name=">>textBoxUsername.Name" xml:space="preserve">
|
||||
<value>textBoxUsername</value>
|
||||
</data>
|
||||
<data name=">>textBoxUsername.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>textBoxUsername.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>textBoxUsername.ZOrder" xml:space="preserve">
|
||||
<value>13</value>
|
||||
</data>
|
||||
<data name="textBoxPassword.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="textBoxPassword.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="textBoxPassword.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>187, 93</value>
|
||||
</data>
|
||||
<data name="textBoxPassword.PasswordChar" type="System.Char, mscorlib" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
<data name="textBoxPassword.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 30</value>
|
||||
</data>
|
||||
<data name="textBoxPassword.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name=">>textBoxPassword.Name" xml:space="preserve">
|
||||
<value>textBoxPassword</value>
|
||||
</data>
|
||||
<data name=">>textBoxPassword.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>textBoxPassword.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>textBoxPassword.ZOrder" xml:space="preserve">
|
||||
<value>12</value>
|
||||
</data>
|
||||
<data name="textBoxAppID.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="textBoxAppID.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="textBoxAppID.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>187, 129</value>
|
||||
</data>
|
||||
<data name="textBoxAppID.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 30</value>
|
||||
</data>
|
||||
<data name="textBoxAppID.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name=">>textBoxAppID.Name" xml:space="preserve">
|
||||
<value>textBoxAppID</value>
|
||||
</data>
|
||||
<data name=">>textBoxAppID.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>textBoxAppID.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>textBoxAppID.ZOrder" xml:space="preserve">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="textBoxDepotID.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="textBoxDepotID.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="textBoxDepotID.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>187, 165</value>
|
||||
</data>
|
||||
<data name="textBoxDepotID.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 30</value>
|
||||
</data>
|
||||
<data name="textBoxDepotID.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name=">>textBoxDepotID.Name" xml:space="preserve">
|
||||
<value>textBoxDepotID</value>
|
||||
</data>
|
||||
<data name=">>textBoxDepotID.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>textBoxDepotID.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>textBoxDepotID.ZOrder" xml:space="preserve">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="textBoxManifestID.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="textBoxManifestID.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="textBoxManifestID.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>187, 201</value>
|
||||
</data>
|
||||
<data name="textBoxManifestID.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 30</value>
|
||||
</data>
|
||||
<data name="textBoxManifestID.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name=">>textBoxManifestID.Name" xml:space="preserve">
|
||||
<value>textBoxManifestID</value>
|
||||
</data>
|
||||
<data name=">>textBoxManifestID.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>textBoxManifestID.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>textBoxManifestID.ZOrder" xml:space="preserve">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="textBoxArgs.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="textBoxArgs.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="textBoxArgs.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>187, 309</value>
|
||||
</data>
|
||||
<data name="textBoxArgs.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 30</value>
|
||||
</data>
|
||||
<data name="textBoxArgs.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name=">>textBoxArgs.Name" xml:space="preserve">
|
||||
<value>textBoxArgs</value>
|
||||
</data>
|
||||
<data name=">>textBoxArgs.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>textBoxArgs.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>textBoxArgs.ZOrder" xml:space="preserve">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="buttonDownload.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="buttonDownload.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
|
||||
<value>Flat</value>
|
||||
</data>
|
||||
<data name="buttonDownload.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI Semibold, 9.75pt, style=Bold</value>
|
||||
</data>
|
||||
<data name="buttonDownload.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>188, 355</value>
|
||||
</data>
|
||||
<data name="buttonDownload.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>179, 57</value>
|
||||
</data>
|
||||
<data name="buttonDownload.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>11</value>
|
||||
</data>
|
||||
<data name="buttonDownload.Text" xml:space="preserve">
|
||||
<value>Start Download</value>
|
||||
</data>
|
||||
<data name="buttonDownload.ToolTip" xml:space="preserve">
|
||||
<value>Starts the download</value>
|
||||
</data>
|
||||
<data name=">>buttonDownload.Name" xml:space="preserve">
|
||||
<value>buttonDownload</value>
|
||||
</data>
|
||||
<data name=">>buttonDownload.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>buttonDownload.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>buttonDownload.ZOrder" xml:space="preserve">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name="numericUpDownMaxServers.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="numericUpDownMaxServers.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="numericUpDownMaxServers.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>187, 237</value>
|
||||
</data>
|
||||
<data name="numericUpDownMaxServers.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 30</value>
|
||||
</data>
|
||||
<data name="numericUpDownMaxServers.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name=">>numericUpDownMaxServers.Name" xml:space="preserve">
|
||||
<value>numericUpDownMaxServers</value>
|
||||
</data>
|
||||
<data name=">>numericUpDownMaxServers.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>numericUpDownMaxServers.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>numericUpDownMaxServers.ZOrder" xml:space="preserve">
|
||||
<value>6</value>
|
||||
</data>
|
||||
<data name="numericUpDownMaxChunks.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Right</value>
|
||||
</data>
|
||||
<data name="numericUpDownMaxChunks.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI, 12.75pt</value>
|
||||
</data>
|
||||
<data name="numericUpDownMaxChunks.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>187, 273</value>
|
||||
</data>
|
||||
<data name="numericUpDownMaxChunks.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 30</value>
|
||||
</data>
|
||||
<data name="numericUpDownMaxChunks.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
</data>
|
||||
<data name=">>numericUpDownMaxChunks.Name" xml:space="preserve">
|
||||
<value>numericUpDownMaxChunks</value>
|
||||
</data>
|
||||
<data name=">>numericUpDownMaxChunks.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>numericUpDownMaxChunks.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>numericUpDownMaxChunks.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="buttonHelp.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="buttonHelp.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
|
||||
<value>Flat</value>
|
||||
</data>
|
||||
<data name="buttonHelp.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI Semibold, 9.75pt, style=Bold</value>
|
||||
</data>
|
||||
<data name="buttonHelp.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 387</value>
|
||||
</data>
|
||||
<data name="buttonHelp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>165, 25</value>
|
||||
</data>
|
||||
<data name="buttonHelp.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>9</value>
|
||||
</data>
|
||||
<data name="buttonHelp.Text" xml:space="preserve">
|
||||
<value>Need Help?</value>
|
||||
</data>
|
||||
<data name=">>buttonHelp.Name" xml:space="preserve">
|
||||
<value>buttonHelp</value>
|
||||
</data>
|
||||
<data name=">>buttonHelp.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>buttonHelp.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>buttonHelp.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<data name="buttonSearch.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="buttonSearch.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
|
||||
<value>Flat</value>
|
||||
</data>
|
||||
<data name="buttonSearch.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI Semibold, 9.75pt, style=Bold</value>
|
||||
</data>
|
||||
<data name="buttonSearch.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
<data name="buttonSearch.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 355</value>
|
||||
</data>
|
||||
<data name="buttonSearch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>165, 25</value>
|
||||
</data>
|
||||
<data name="buttonSearch.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>8</value>
|
||||
</data>
|
||||
<data name="buttonSearch.Text" xml:space="preserve">
|
||||
<value>SteamDB Instant Search</value>
|
||||
</data>
|
||||
<data name="buttonSearch.ToolTip" xml:space="preserve">
|
||||
<value>Brings you to the SteamDB Instant game search page.</value>
|
||||
</data>
|
||||
<data name=">>buttonSearch.Name" xml:space="preserve">
|
||||
<value>buttonSearch</value>
|
||||
</data>
|
||||
<data name=">>buttonSearch.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>buttonSearch.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>buttonSearch.ZOrder" xml:space="preserve">
|
||||
<value>3</value>
|
||||
</data>
|
||||
<data name="buttonRepo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="buttonRepo.FlatStyle" type="System.Windows.Forms.FlatStyle, System.Windows.Forms">
|
||||
<value>Flat</value>
|
||||
</data>
|
||||
<data name="buttonRepo.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI Semibold, 9.75pt, style=Bold</value>
|
||||
</data>
|
||||
<data name="buttonRepo.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>13, 418</value>
|
||||
</data>
|
||||
<data name="buttonRepo.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>165, 25</value>
|
||||
</data>
|
||||
<data name="buttonRepo.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>10</value>
|
||||
</data>
|
||||
<data name="buttonRepo.Text" xml:space="preserve">
|
||||
<value>GitHub Repo</value>
|
||||
</data>
|
||||
<data name="buttonRepo.ToolTip" xml:space="preserve">
|
||||
<value>Brings you to the GitHub Repository page.</value>
|
||||
</data>
|
||||
<data name=">>buttonRepo.Name" xml:space="preserve">
|
||||
<value>buttonRepo</value>
|
||||
</data>
|
||||
<data name=">>buttonRepo.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>buttonRepo.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>buttonRepo.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="labelTitle.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Top, Left, Right</value>
|
||||
</data>
|
||||
<data name="labelTitle.Font" type="System.Drawing.Font, System.Drawing">
|
||||
<value>Segoe UI Semibold, 18pt, style=Bold</value>
|
||||
</data>
|
||||
<data name="labelTitle.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>12, 9</value>
|
||||
</data>
|
||||
<data name="labelTitle.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>355, 32</value>
|
||||
</data>
|
||||
<data name="labelTitle.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>13</value>
|
||||
</data>
|
||||
<data name="labelTitle.Text" xml:space="preserve">
|
||||
<value>Steam Depot Downloader</value>
|
||||
</data>
|
||||
<data name="labelTitle.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
<value>TopCenter</value>
|
||||
</data>
|
||||
<data name=">>labelTitle.Name" xml:space="preserve">
|
||||
<value>labelTitle</value>
|
||||
</data>
|
||||
<data name=">>labelTitle.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>labelTitle.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>labelTitle.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="labelIssue.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
|
||||
<value>Bottom, Left, Right</value>
|
||||
</data>
|
||||
<data name="labelIssue.AutoSize" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="labelIssue.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>186, 425</value>
|
||||
</data>
|
||||
<data name="labelIssue.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>182, 13</value>
|
||||
</data>
|
||||
<data name="labelIssue.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>14</value>
|
||||
</data>
|
||||
<data name="labelIssue.Text" xml:space="preserve">
|
||||
<value>If something is broken open an issue!</value>
|
||||
</data>
|
||||
<data name=">>labelIssue.Name" xml:space="preserve">
|
||||
<value>labelIssue</value>
|
||||
</data>
|
||||
<data name=">>labelIssue.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>labelIssue.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>labelIssue.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 13</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>379, 452</value>
|
||||
</data>
|
||||
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
|
||||
<value>CenterScreen</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Steam Depot Downloader</value>
|
||||
</data>
|
||||
<data name=">>toolTip1.Name" xml:space="preserve">
|
||||
<value>toolTip1</value>
|
||||
</data>
|
||||
<data name=">>toolTip1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>downloadGUI</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
||||
358
downloader.js
Normal file
358
downloader.js
Normal file
@@ -0,0 +1,358 @@
|
||||
// Uses a prebuild binary of https://github.com/SteamRE/DepotDownloader
|
||||
// License can be found at https://github.com/SteamRE/DepotDownloader/blob/master/LICENSE
|
||||
const {ipcRenderer, shell} = require("electron")
|
||||
const {
|
||||
preDownloadCheck,
|
||||
download,
|
||||
runCommand,
|
||||
removeDir,
|
||||
removeFile,
|
||||
unzip,
|
||||
forceTerminals,
|
||||
generateRunScript,
|
||||
createCommandWithTerminal,
|
||||
platformpath
|
||||
} = require("./utils")
|
||||
const electron = require("electron")
|
||||
const {sep} = require("path")
|
||||
|
||||
// Initializes the variable that holds the path to the specified download location
|
||||
let exportedFile = ""
|
||||
let ready = true
|
||||
let app_version
|
||||
|
||||
const DOTNET_DOWNLOAD_URL = "https://github.com/SteamRE/DepotDownloader/releases/download/DepotDownloader_2.5.0/depotdownloader-2.5.0.zip" // the url to the depotdownloader zip
|
||||
const DOTNET_DIR = "depotdownloader" // folder where zip is extracted
|
||||
const DOTNET_ZIP_FILE = DOTNET_DOWNLOAD_URL.split("/").pop() // the file that is being downloaded.
|
||||
|
||||
function submitForm() {
|
||||
// Check if the form is filled in and if dotnet is installed
|
||||
preDownloadCheck().then(async function () {
|
||||
//console.log(terminal[1][0])
|
||||
document.getElementById("dotnetwarning").hidden = true
|
||||
document.getElementById("dotnetwarning2").hidden = true
|
||||
document.getElementById("emptywarning").hidden = true
|
||||
console.info("dotnet found in PATH")
|
||||
// create variables for the form values
|
||||
const username = document.getElementById("username").value
|
||||
const password = document.getElementById("password").value
|
||||
const appid = document.getElementById("appid").value
|
||||
const depotid = document.getElementById("depotid").value
|
||||
const manifestid = document.getElementById("manifestid").value
|
||||
const terminal_dropdown = document.getElementById("terminal-dropdown").selectedIndex
|
||||
const os_dropdown = document.getElementById("os-dropdown").selectedIndex
|
||||
const foldername_element = document.getElementById("folder-name-custom-input")
|
||||
|
||||
|
||||
// Remove the old depotdownloader directory if there are any
|
||||
await removeDir("depotdownloader")
|
||||
|
||||
// Download a prebuild DepotDownloader binary, so it doesn't have to be included in the source code
|
||||
await download(DOTNET_DOWNLOAD_URL)
|
||||
|
||||
// Unzip the DepotDownloader binary
|
||||
await unzip(DOTNET_ZIP_FILE, DOTNET_DIR)
|
||||
|
||||
// Clean up the old files
|
||||
await removeFile(DOTNET_ZIP_FILE)
|
||||
|
||||
// Generate the run script (run.sh for linux, or run.bat for windows).
|
||||
await generateRunScript(username, password, appid, depotid, manifestid, foldername_element, exportedFile)
|
||||
|
||||
let terminal
|
||||
let os
|
||||
if (terminal_dropdown === 11) {
|
||||
terminal = "auto"
|
||||
} else {
|
||||
terminal = terminal_dropdown
|
||||
}
|
||||
if (os_dropdown === 4) {
|
||||
os = "auto"
|
||||
} else {
|
||||
os = os_dropdown
|
||||
}
|
||||
let command
|
||||
if (process.platform.includes("linux")) {
|
||||
// if the OS is linux, run the sh file with the chosen terminal
|
||||
command = await createCommandWithTerminal(`sh ${platformpath().replaceAll(" ", "\\ ")}${sep}run.sh`, terminal, os)
|
||||
} else if (process.platform.includes("win")) {
|
||||
// if the OS is windows, just run the batch file
|
||||
command = await createCommandWithTerminal(`"${platformpath()}${sep}run.bat"`, terminal, os)
|
||||
} else if (process.platform.includes("darwin")) {
|
||||
//macOS
|
||||
}
|
||||
|
||||
// Run the final command
|
||||
if (document.getElementById("os-dropdown").selectedIndex !== 3) await console.debug("Command issued:\n--------\n" + command)
|
||||
await runCommand(command)
|
||||
}).catch(function (error) {
|
||||
if (error === "noDotnet") {
|
||||
// if dotnet is not found, show the dotnet warning
|
||||
document.getElementById("dotnetwarning2").hidden = true
|
||||
document.getElementById("emptywarning").hidden = true
|
||||
document.getElementById("dotnetwarning").hidden = false
|
||||
} else if (error === "emptyField") {
|
||||
// if a required field is empty, show the empty field warning
|
||||
document.getElementById("dotnetwarning2").hidden = true
|
||||
document.getElementById("dotnetwarning").hidden = true
|
||||
document.getElementById("emptywarning").hidden = false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// Combines all buttons that are supposed to open an external URL into one big function.
|
||||
function openRelevantPage(target) {
|
||||
const electron = require("electron")
|
||||
const os = process.platform.toString()
|
||||
/* eslint-disable indent */
|
||||
// why are you not indenting nicely eslint?
|
||||
switch (target) {
|
||||
case "dotnet":
|
||||
document.getElementById("dotnetwarning").hidden = true
|
||||
document.getElementById("dotnetwarning2").hidden = false
|
||||
if (os.includes("win")) {
|
||||
console.debug("Opened .NET download page for " + os.charAt(0).toUpperCase() + os.slice(1))
|
||||
void electron.shell.openExternal("https://aka.ms/dotnet/6.0/dotnet-sdk-win-x64.exe")
|
||||
}
|
||||
if (os.includes("linux")) {
|
||||
const electron = require("electron")
|
||||
console.debug("Opened .NET download page for " + os.charAt(0).toUpperCase() + os.slice(1))
|
||||
void electron.shell.openExternal("https://docs.microsoft.com/en-us/dotnet/core/install/linux")
|
||||
}
|
||||
if (os.includes("darwin")) {
|
||||
console.debug("Opened .NET download page for" + os)
|
||||
//TODO: Apple Silicon(ARM64) URL
|
||||
void electron.shell.openExternal("https://aka.ms/dotnet/6.0/dotnet-sdk-osx-x64.pkg")
|
||||
}
|
||||
break
|
||||
case "issues":
|
||||
console.debug("Opened GitHub issues page")
|
||||
void electron.shell.openExternal("https://github.com/mmvanheusden/SteamDepotDownloaderGUI/issues/new")
|
||||
break
|
||||
case "steamdb":
|
||||
console.debug("Opened SteamDB instant search page")
|
||||
void electron.shell.openExternal("https://steamdb.info/instantsearch/")
|
||||
break
|
||||
case "donate":
|
||||
console.debug("Opened donation page")
|
||||
void electron.shell.openExternal("https://my.fsf.org/donate")
|
||||
break
|
||||
case "instructions":
|
||||
console.debug("Opened instructions page")
|
||||
void electron.shell.openExternal("https://github.com/mmvanheusden/SteamDepotDownloaderGUI/#how-to-use")
|
||||
break
|
||||
default:
|
||||
return
|
||||
}
|
||||
/* eslint-enable indent */
|
||||
}
|
||||
|
||||
// Opens the chosen location where the game will be downloaded to
|
||||
function checkPath() {
|
||||
toggleFormAccessibility(false)
|
||||
shell.openPath(exportedFile).then(() => {
|
||||
console.log("Opened " + exportedFile + " in file explorer.")
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Fills the values for default os
|
||||
* Runs when the app is fully loaded.
|
||||
*/
|
||||
function fillDefaultValues() {
|
||||
// [0]: Windows, [1]: macOS [2]: Linux [3]: manual
|
||||
if (process.platform.toString().includes("linux")) {
|
||||
document.getElementById("default-os").innerText = "Linux"
|
||||
} else if (process.platform.toString().includes("win")) {
|
||||
document.getElementById("default-os").innerText = "Windows"
|
||||
} else if (process.platform.toString().includes("darwin")) {
|
||||
document.getElementById("default-os").innerText = "macOS"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validates the choice of the OS dropdown.
|
||||
* If the choice is 2 (Linux), enable the terminal selection dropdown.
|
||||
* If the choice is not 2 (Linux), disable the terminal selection dropdown.
|
||||
* If the choice is 4 (manual), enable the terminal selection dropdown.
|
||||
* If the choice is not 4 (manual), disable the terminal selection dropdown.
|
||||
*/
|
||||
function validateChoice() {
|
||||
// [0]: Windows, [1]: macOS [2]: Linux [3]: manual
|
||||
const os_dropdown = document.getElementById("os-dropdown")
|
||||
const terminal_dropdown = document.getElementById("terminal-dropdown")
|
||||
// if the choice = 2, enable the terminal selection dropdown.
|
||||
if (os_dropdown.selectedIndex === (2 || 3)) {
|
||||
terminal_dropdown.disabled = false
|
||||
} else {
|
||||
terminal_dropdown.disabled = true
|
||||
terminal_dropdown.selectedIndex = 11
|
||||
}
|
||||
if (os_dropdown.selectedIndex === 4) if (process.platform.includes("linux")) terminal_dropdown.disabled = false
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable the form.
|
||||
* @param disable Enable or disable the form.
|
||||
*
|
||||
* * true => disable everything
|
||||
*
|
||||
* * false => enable everything
|
||||
*/
|
||||
function toggleFormAccessibility(disable) {
|
||||
document.getElementById("username").disabled = disable
|
||||
document.getElementById("theform").disabled = disable
|
||||
document.getElementById("password").disabled = disable
|
||||
document.getElementById("appid").disabled = disable
|
||||
document.getElementById("depotid").disabled = disable
|
||||
document.getElementById("manifestid").disabled = disable
|
||||
document.getElementById("os-dropdown").disabled = disable
|
||||
|
||||
// if the OS dropdown value was 2 (Linux), don't disable the Terminal dropdown.
|
||||
document.getElementById("terminal-dropdown").disabled = (((document.getElementById("os-dropdown").selectedIndex !== 2)))
|
||||
|
||||
document.getElementById("pickpath").ariaDisabled = disable
|
||||
document.getElementById("pickpath").disabled = disable
|
||||
document.getElementById("downloadbtn").ariaDisabled = disable
|
||||
document.getElementById("downloadbtn").disabled = disable
|
||||
document.getElementById("settings-button").disabled = disable
|
||||
document.getElementById("downloadbtn").classList.replace(((disable) ? "btn-primary" : "btn-disabled"), ((!disable) ? "btn-primary" : "btn-disabled"))
|
||||
}
|
||||
|
||||
|
||||
function setTheme(theme) {
|
||||
document.getElementById("theme-auto").ariaSelected = (theme === "auto").toString()
|
||||
document.getElementById("theme-light").ariaSelected = (theme === "light").toString()
|
||||
document.getElementById("theme-dark").ariaSelected = (theme === "dark").toString()
|
||||
}
|
||||
|
||||
// main.js sends a ready message if the page is loaded in. This will be received here.
|
||||
ipcRenderer.on("ready", async () => {
|
||||
if (!ready) return
|
||||
|
||||
|
||||
await toggleFormAccessibility(true) // disables the form, while loading
|
||||
document.getElementById("loader").hidden = false
|
||||
|
||||
|
||||
console.debug("🐰🐰🐰🐰")
|
||||
|
||||
|
||||
await fillDefaultValues() // Set the default values based on OS
|
||||
|
||||
const terminals = await forceTerminals()
|
||||
/* forceTerminals() returns two values:
|
||||
[bol, list, list]
|
||||
1: true/false. if true, there are terminals found. if false none are, or not on linux
|
||||
2: a list of available terminals with their associated number in the terminal dropdown index.
|
||||
3: a list of available terminals with their associated name in the terminal dropdown.
|
||||
*/
|
||||
if (terminals[0]) {
|
||||
console.log(`${terminals[1].length} terminals found in PATH.`)
|
||||
document.getElementById("terminals-found").innerText = `${terminals[1].length.toString()} / ${document.getElementById("terminal-dropdown").length - 1}`
|
||||
document.getElementById("default-terminal").innerText = terminals[2][0]
|
||||
|
||||
} else {
|
||||
console.log("No terminals found in PATH. Continuing with default values") // when no terminals are found on the system, or when linux is not used.
|
||||
}
|
||||
|
||||
await toggleFormAccessibility(false) //enable the form again
|
||||
|
||||
await validateChoice() // updates the 'enabled/disabled' html value of the terminal dropdown.
|
||||
|
||||
console.debug(`DEBUGGING INFORMATION:
|
||||
--
|
||||
OS: ${process.platform}
|
||||
Version: ${app_version}
|
||||
--
|
||||
Working directory locating methods:
|
||||
process.cwd(): ${process.cwd()}
|
||||
__dirname: ${__dirname}
|
||||
PORTABLE_EXECUTABLE_DIR: ${process.env.PORTABLE_EXECUTABLE_DIR}
|
||||
--
|
||||
platformpath(): ${platformpath()}
|
||||
|
||||
`)
|
||||
document.getElementById("loader").hidden = true
|
||||
ready = false
|
||||
})
|
||||
|
||||
// Add event listeners to the buttons
|
||||
window.addEventListener("DOMContentLoaded", () => {
|
||||
document.getElementById("dotnetalertbtn").addEventListener("click", () => openRelevantPage("dotnet"))
|
||||
document.getElementById("smbtn1").addEventListener("click", () => openRelevantPage("issues"))
|
||||
document.getElementById("smbtn2").addEventListener("click", () => openRelevantPage("steamdb"))
|
||||
document.getElementById("smbtn3").addEventListener("click", () => openRelevantPage("donate"))
|
||||
document.getElementById("smbtn4").addEventListener("click", () => openRelevantPage("instructions"))
|
||||
document.getElementById("pickpath").addEventListener("click", () => {
|
||||
if (document.getElementById("pickpath").disabled === false) ipcRenderer.send("selectpath")
|
||||
})
|
||||
document.getElementById("checkpath").addEventListener("click", () => {
|
||||
if (document.getElementById("checkpath").disabled === false) checkPath()
|
||||
})
|
||||
document.getElementById("os-dropdown").addEventListener("input", validateChoice)
|
||||
document.getElementById("downloadbtn").addEventListener("click", () => {
|
||||
if (document.getElementById("downloadbtn").disabled === false) submitForm()
|
||||
})
|
||||
document.getElementById("settings-button").addEventListener("click", () => {
|
||||
if (document.getElementById("settings-button").disabled === false) {
|
||||
// show the modal. This is done by setting the display to block.
|
||||
document.getElementById("settings-surrounding").style.display = "block"
|
||||
}
|
||||
})
|
||||
document.getElementById("settings-surrounding").addEventListener("click", (event) => {
|
||||
if (event.target === document.getElementById("settings-surrounding")) {
|
||||
document.getElementById("settings-surrounding").style.display = "none"
|
||||
}
|
||||
})
|
||||
document.getElementById("theme-auto").addEventListener("click", () => {
|
||||
setTheme("auto")
|
||||
document.getElementById("theme").setAttribute("data-color-mode", "auto")
|
||||
})
|
||||
document.getElementById("theme-light").addEventListener("click", () => {
|
||||
setTheme("light")
|
||||
document.getElementById("theme").setAttribute("data-color-mode", "light")
|
||||
})
|
||||
document.getElementById("theme-dark").addEventListener("click", () => {
|
||||
setTheme("dark")
|
||||
document.getElementById("theme").setAttribute("data-color-mode", "dark")
|
||||
})
|
||||
document.getElementById("folder-name-appid").addEventListener("click", () => {
|
||||
document.getElementById("folder-name-custom").ariaSelected = false
|
||||
document.getElementById("folder-name-appid").ariaSelected = true
|
||||
document.getElementById("folder-name-custom-input").hidden = true
|
||||
document.getElementById("folder-name-custom-input").value = ""
|
||||
})
|
||||
document.getElementById("folder-name-custom").addEventListener("click", () => {
|
||||
document.getElementById("folder-name-appid").ariaSelected = false
|
||||
document.getElementById("folder-name-custom").ariaSelected = true
|
||||
document.getElementById("folder-name-custom-input").hidden = false
|
||||
})
|
||||
document.getElementById("version-info").addEventListener("click", () => {
|
||||
//todo: update checker
|
||||
electron.shell.openExternal(`https://github.com/mmvanheusden/SteamDepotDownloaderGUI/releases/v${app_version}`)
|
||||
})
|
||||
})
|
||||
|
||||
// make sure devtools open in external window.
|
||||
window.addEventListener("keydown", (e) => {
|
||||
if (e.key === "F12" || (e.ctrlKey && e.shiftKey && e.key === "I")) {
|
||||
e.preventDefault()
|
||||
ipcRenderer.send("open-devtools")
|
||||
}
|
||||
})
|
||||
|
||||
ipcRenderer.on("file", (event, file) => {
|
||||
console.log("path selected by user: " + file)
|
||||
document.getElementById("checkpath").ariaDisabled = false // Makes the check button active
|
||||
document.getElementById("checkpath").disabled = false // Makes the check button active
|
||||
exportedFile = file.toString()
|
||||
})
|
||||
|
||||
// receive the version from main.js
|
||||
ipcRenderer.on("version", (event, version) => {
|
||||
console.log("version: " + version)
|
||||
document.getElementById("version-info").innerText = `v${version}`
|
||||
app_version = version.toString()
|
||||
})
|
||||
33
electron-builder.yml
Normal file
33
electron-builder.yml
Normal file
@@ -0,0 +1,33 @@
|
||||
appId: rocks.maarten.depotdownloader
|
||||
productName: SteamDepotDownloaderGUI
|
||||
copyright: Copyright © mmvanheusden | This work is free. Licensed under the GNU GPLv3 Public License
|
||||
|
||||
linux:
|
||||
executableName: SteamDepotDownloaderGUI
|
||||
category: Utility;FileTools;
|
||||
maintainer: mmvanheusden
|
||||
target:
|
||||
- target: AppImage
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
- target: zip
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
|
||||
# lmao mac building only works on mac
|
||||
mac:
|
||||
category: public.app-category.utilities
|
||||
target:
|
||||
- target: dmg
|
||||
arch:
|
||||
- x64
|
||||
|
||||
win:
|
||||
legalTrademarks: Copyright © mmvanheusden | This work is free. Licensed under the GNU GPLv3 Public License
|
||||
target:
|
||||
- target: portable
|
||||
arch:
|
||||
- x64
|
||||
- arm64
|
||||
270
index.html
Normal file
270
index.html
Normal file
@@ -0,0 +1,270 @@
|
||||
<!DOCTYPE html>
|
||||
<!-- automatic dark mode :) -->
|
||||
<html data-color-mode="auto" data-dark-theme="dark" data-light-theme="light" id="theme" lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta content="width=device-width, initial-scale=1" name="viewport"/>
|
||||
<link href="https://unpkg.com/@primer/css@21.1.1/dist/primer.css" rel="stylesheet"/>
|
||||
<link href="style.css" rel="stylesheet">
|
||||
<title>SteamDepotDownloaderGUI</title>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js "></script>
|
||||
</head>
|
||||
<body>
|
||||
<script src="downloader.js"></script>
|
||||
<div class="mx-auto">
|
||||
<div hidden id="dotnetwarning">
|
||||
<div class="flash flash-error mx-2 mt-2 color-shadow-medium" id="dotnetalert">
|
||||
<svg class="octicon" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"
|
||||
fill-rule="evenodd"></path>
|
||||
</svg>
|
||||
<code><span class="text-italic">dotnet</span></code> was not found.
|
||||
<button class="btn btn-sm flash-action" id="dotnetalertbtn">
|
||||
<svg class="octicon" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5
|
||||
0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"
|
||||
fill-rule="evenodd"></path>
|
||||
</svg>
|
||||
<span class="text-bold">Download</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div hidden id="emptywarning">
|
||||
<div class="flash flash-warn mx-2 mt-2 color-shadow-medium" id="emptyalert">
|
||||
<svg class="octicon" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"
|
||||
fill-rule="evenodd"></path>
|
||||
</svg>
|
||||
Please fill in all required fields.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div hidden id="dotnetwarning2">
|
||||
<div class="flash mx-2 mt-2 color-shadow-medium">
|
||||
<svg class="octicon" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"
|
||||
fill-rule="evenodd"></path>
|
||||
</svg>
|
||||
Please re-open after installing .NET.
|
||||
</div>
|
||||
</div>
|
||||
<div class="f1-light text-center">Steam Depot Downloader</div>
|
||||
|
||||
<form id="theform">
|
||||
<div class="form-group mx-3 mt-1">
|
||||
<div class="form-group-header">
|
||||
<label for="username">Username</label>
|
||||
</div>
|
||||
<input class="form-control input-block" id="username" placeholder="Leave empty for anonymous download"
|
||||
type="text"/>
|
||||
</div>
|
||||
|
||||
<div class="form-group mx-3 mt-1">
|
||||
<div class="form-group-header">
|
||||
<label for="password">Password</label>
|
||||
</div>
|
||||
<input class="form-control input-block" id="password" placeholder="Leave empty for anonymous download"
|
||||
type="password"/>
|
||||
</div>
|
||||
|
||||
<div class="form-group mx-3 mt-1 required">
|
||||
<div class="form-group-header">
|
||||
<label for="appid">App ID</label>
|
||||
</div>
|
||||
<input class="form-control input-block" id="appid" type="number"/>
|
||||
</div>
|
||||
|
||||
<div class="form-group mx-3 mt-1 required">
|
||||
<div class="form-group-header">
|
||||
<label for="depotid">Depot ID</label>
|
||||
</div>
|
||||
<input class="form-control input-block" id="depotid" type="number"/>
|
||||
</div>
|
||||
|
||||
<div class="form-group mx-3 mt-1 required">
|
||||
<div class="form-group-header">
|
||||
<label for="manifestid">Manifest ID</label>
|
||||
</div>
|
||||
<input class="form-control input-block" id="manifestid" type="number"/>
|
||||
</div>
|
||||
|
||||
<div class="mx-3 mt-1 required">
|
||||
<div class="form-group-header">
|
||||
<label>Download Location</label>
|
||||
</div>
|
||||
<div aria-label="Pick the path/location where the game will be downloaded to."
|
||||
class="form-control btn btn-sm tooltipped tooltipped-ne" id="pickpath">
|
||||
Set location
|
||||
</div>
|
||||
|
||||
<div aria-disabled="true"
|
||||
aria-label="Check the location that has been selected."
|
||||
class="form-control btn btn-sm ml-2 tooltipped tooltipped-ne" id="checkpath">
|
||||
Open location
|
||||
</div>
|
||||
<span class="Label mt-1 ml-3 Label--warning" id="loader">
|
||||
<span aria-label="Loading" class="tooltipped tooltipped-n">Loading</span>
|
||||
<span class="AnimatedEllipsis"></span>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
<div class="form-group mt-3 ml-3 mr-3">
|
||||
<div class="BtnGroup d-flex">
|
||||
<button class="BtnGroup-item btn btn-block btn-primary flex-1" id="downloadbtn">
|
||||
<svg class="octicon filter-red" height="16"
|
||||
style="display: inline-block; user-select: none; vertical-align: text-bottom;" viewBox="0 0 16 16"
|
||||
width="16"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"
|
||||
fill-rule="evenodd"></path>
|
||||
</svg>
|
||||
Download
|
||||
</button>
|
||||
<button class="BtnGroup-item btn flex-0" id="settings-button">
|
||||
<svg fill="#8B949E" height="16"
|
||||
style="display: inline-block; user-select: none; vertical-align: text-bottom;" viewBox="0 0 16 16"
|
||||
width="16"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 0a8.2 8.2 0 0 1 .701.031C9.444.095 9.99.645 10.16 1.29l.288 1.107c.018.066.079.158.212.224.231.114.454.243.668.386.123.082.233.09.299.071l1.103-.303c.644-.176 1.392.021 1.82.63.27.385.506.792.704 1.218.315.675.111 1.422-.364 1.891l-.814.806c-.049.048-.098.147-.088.294.016.257.016.515 0 .772-.01.147.038.246.088.294l.814.806c.475.469.679 1.216.364 1.891a7.977 7.977 0 0 1-.704 1.217c-.428.61-1.176.807-1.82.63l-1.102-.302c-.067-.019-.177-.011-.3.071a5.909 5.909 0 0 1-.668.386c-.133.066-.194.158-.211.224l-.29 1.106c-.168.646-.715 1.196-1.458 1.26a8.006 8.006 0 0 1-1.402 0c-.743-.064-1.289-.614-1.458-1.26l-.289-1.106c-.018-.066-.079-.158-.212-.224a5.738 5.738 0 0 1-.668-.386c-.123-.082-.233-.09-.299-.071l-1.103.303c-.644.176-1.392-.021-1.82-.63a8.12 8.12 0 0 1-.704-1.218c-.315-.675-.111-1.422.363-1.891l.815-.806c.05-.048.098-.147.088-.294a6.214 6.214 0 0 1 0-.772c.01-.147-.038-.246-.088-.294l-.815-.806C.635 6.045.431 5.298.746 4.623a7.92 7.92 0 0 1 .704-1.217c.428-.61 1.176-.807 1.82-.63l1.102.302c.067.019.177.011.3-.071.214-.143.437-.272.668-.386.133-.066.194-.158.211-.224l.29-1.106C6.009.645 6.556.095 7.299.03 7.53.01 7.764 0 8 0Zm-.571 1.525c-.036.003-.108.036-.137.146l-.289 1.105c-.147.561-.549.967-.998 1.189-.173.086-.34.183-.5.29-.417.278-.97.423-1.529.27l-1.103-.303c-.109-.03-.175.016-.195.045-.22.312-.412.644-.573.99-.014.031-.021.11.059.19l.815.806c.411.406.562.957.53 1.456a4.709 4.709 0 0 0 0 .582c.032.499-.119 1.05-.53 1.456l-.815.806c-.081.08-.073.159-.059.19.162.346.353.677.573.989.02.03.085.076.195.046l1.102-.303c.56-.153 1.113-.008 1.53.27.161.107.328.204.501.29.447.222.85.629.997 1.189l.289 1.105c.029.109.101.143.137.146a6.6 6.6 0 0 0 1.142 0c.036-.003.108-.036.137-.146l.289-1.105c.147-.561.549-.967.998-1.189.173-.086.34-.183.5-.29.417-.278.97-.423 1.529-.27l1.103.303c.109.029.175-.016.195-.045.22-.313.411-.644.573-.99.014-.031.021-.11-.059-.19l-.815-.806c-.411-.406-.562-.957-.53-1.456a4.709 4.709 0 0 0 0-.582c-.032-.499.119-1.05.53-1.456l.815-.806c.081-.08.073-.159.059-.19a6.464 6.464 0 0 0-.573-.989c-.02-.03-.085-.076-.195-.046l-1.102.303c-.56.153-1.113.008-1.53-.27a4.44 4.44 0 0 0-.501-.29c-.447-.222-.85-.629-.997-1.189l-.289-1.105c-.029-.11-.101-.143-.137-.146a6.6 6.6 0 0 0-1.142 0ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM9.5 8a1.5 1.5 0 1 0-3.001.001A1.5 1.5 0 0 0 9.5 8Z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div aria-label="Visit the GitHub issues website." class="btn btn-sm ml-3 tooltipped tooltipped-ne mb-1"
|
||||
id="smbtn1">
|
||||
<svg fill="#8B949E" height="16" style="display: inline-block; vertical-align: text-bottom;" viewBox="0 0 16 16"
|
||||
width="16" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zM6.92 6.085c.081-.16.19-.299.34-.398.145-.097.371-.187.74-.187.28 0 .553.087.738.225A.613.613 0 019 6.25c0 .177-.04.264-.077.318a.956.956 0 01-.277.245c-.076.051-.158.1-.258.161l-.007.004a7.728 7.728 0 00-.313.195 2.416 2.416 0 00-.692.661.75.75 0 001.248.832.956.956 0 01.276-.245 6.3 6.3 0 01.26-.16l.006-.004c.093-.057.204-.123.313-.195.222-.149.487-.355.692-.662.214-.32.329-.702.329-1.15 0-.76-.36-1.348-.863-1.725A2.76 2.76 0 008 4c-.631 0-1.155.16-1.572.438-.413.276-.68.638-.849.977a.75.75 0 101.342.67z"
|
||||
fill-rule="evenodd"></path>
|
||||
</svg>
|
||||
Help
|
||||
</div>
|
||||
|
||||
<div aria-label="Visit the SteamDB instant search website." class="btn btn-sm ml-2 tooltipped tooltipped-n mb-1"
|
||||
id="smbtn2">
|
||||
<svg aria-hidden="true" class="octicon" fill="#8B949E" height="16" viewBox="0 0 128 128" width="16"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M63.9 0C30.5 0 3.1 11.9.1 27.1l35.6 6.7c2.9-.9 6.2-1.3 9.6-1.3l16.7-10c-.2-2.5 1.3-5.1 4.7-7.2 4.8-3.1 12.3-4.8 19.9-4.8 5.2-.1 10.5.7 15 2.2 11.2 3.8 13.7 11.1 5.7 16.3-5.1 3.3-13.3 5-21.4 4.8l-22 7.9c-.2 1.6-1.3 3.1-3.4 4.5-5.9 3.8-17.4 4.7-25.6 1.9-3.6-1.2-6-3-7-4.8L2.5 38.4c2.3 3.6 6 6.9 10.8 9.8C5 53 0 59 0 65.5c0 6.4 4.8 12.3 12.9 17.1C4.8 87.3 0 93.2 0 99.6 0 115.3 28.6 128 64 128c35.3 0 64-12.7 64-28.4 0-6.4-4.8-12.3-12.9-17 8.1-4.8 12.9-10.7 12.9-17.1 0-6.5-5-12.6-13.4-17.4 8.3-5.1 13.3-11.4 13.3-18.2 0-16.5-28.7-29.9-64-29.9zm22.8 14.2c-5.2.1-10.2 1.2-13.4 3.3-5.5 3.6-3.8 8.5 3.8 11.1 7.6 2.6 18.1 1.8 23.6-1.8s3.8-8.5-3.8-11c-3.1-1-6.7-1.5-10.2-1.5zm.3 1.7c7.4 0 13.3 2.8 13.3 6.2 0 3.4-5.9 6.2-13.3 6.2s-13.3-2.8-13.3-6.2c0-3.4 5.9-6.2 13.3-6.2zM45.3 34.4c-1.6.1-3.1.2-4.6.4l9.1 1.7a10.8 5 0 1 1-8.1 9.3l-8.9-1.7c1 .9 2.4 1.7 4.3 2.4 6.4 2.2 15.4 1.5 20-1.5s3.2-7.2-3.2-9.3c-2.6-.9-5.7-1.3-8.6-1.3zM109 51v9.3c0 11-20.2 19.9-45 19.9-24.9 0-45-8.9-45-19.9v-9.2c11.5 5.3 27.4 8.6 44.9 8.6 17.6 0 33.6-3.3 45.2-8.7zm0 34.6v8.8c0 11-20.2 19.9-45 19.9-24.9 0-45-8.9-45-19.9v-8.8c11.6 5.1 27.4 8.2 45 8.2s33.5-3.1 45-8.2z"
|
||||
fill-rule="evenodd"></path>
|
||||
</svg>
|
||||
SteamDB
|
||||
</div>
|
||||
|
||||
<div aria-label="Donate to the Free Software Foundation." class="btn btn-sm ml-2 tooltipped tooltipped-nw mb-1"
|
||||
id="smbtn3">
|
||||
<svg fill="#8B949E" height="16" style="display: inline-block; vertical-align: text-bottom;" viewBox="0 0 16 16"
|
||||
width="16" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z"
|
||||
fill-rule="evenodd"></path>
|
||||
</svg>
|
||||
Donate
|
||||
</div>
|
||||
|
||||
<div aria-label="View the instructions on how to use SteamDepotDownloaderGUI."
|
||||
class="btn btn-sm ml-2 tooltipped tooltipped-nw mb-1"
|
||||
id="smbtn4">
|
||||
<svg fill="#8B949E" height="16" style="display: inline-block; vertical-align: text-bottom;" viewBox="0 0 16 16"
|
||||
width="16">
|
||||
<path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path>
|
||||
</svg>
|
||||
Instructions
|
||||
</div>
|
||||
</div>
|
||||
<div class="settings-surrounding" id="settings-surrounding">
|
||||
<div class="settings-content mx-auto" id="settings-content">
|
||||
<label class="version-info" id="version-info">UNKNOWN</label>
|
||||
<h3><b>Settings</b></h3>
|
||||
<hr>
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<div class="form-group-header">
|
||||
<label>Theme</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<div class="BtnGroup">
|
||||
<button aria-selected="true" class="BtnGroup-item btn btn-sm" id="theme-auto" type="button">
|
||||
Auto
|
||||
</button>
|
||||
<button class="BtnGroup-item btn btn-sm" id="theme-light" type="button">
|
||||
Light
|
||||
</button>
|
||||
<button class="BtnGroup-item btn btn-sm" id="theme-dark" type="button">
|
||||
Dark
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="form-group-header">
|
||||
<label for="terminal-dropdown">Override terminal selection (for Linux only)</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<div class="mb-2">
|
||||
<select class="form-select" id="terminal-dropdown">
|
||||
<option>Gnome Terminal</option>
|
||||
<option>KDE Konsole</option>
|
||||
<option>Xfce Terminal</option>
|
||||
<option>Terminator</option>
|
||||
<option>Terminology</option>
|
||||
<option>xterm</option>
|
||||
<option>Kitty</option>
|
||||
<option>LXTerminal</option>
|
||||
<option>Tilix</option>
|
||||
<option>Deepin Terminal</option>
|
||||
<option>cool-retro-term</option>
|
||||
<option selected="selected">Auto</option>
|
||||
</select>
|
||||
found: <span class="Counter"><code id="terminals-found">none</code></span>
|
||||
<br>default: <span class="Counter"><code id="default-terminal">none</code></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="form-group-header">
|
||||
<label for="os-dropdown">Override OS selection</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<div class="mb-2">
|
||||
<select class="form-select" id="os-dropdown">
|
||||
<option>Windows</option>
|
||||
<option disabled>macOS (NOT YET IMPLEMENTED)</option>
|
||||
<option>Linux</option>
|
||||
<option>Print command in console (CTRL-SHIFT-I)</option>
|
||||
<option selected="selected">Auto</option>
|
||||
</select>
|
||||
default: <span class="Counter"><code id="default-os">none</code></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="form-group">
|
||||
<div class="form-group-header">
|
||||
<label for="os-dropdown">Folder name</label>
|
||||
</div>
|
||||
<div class="form-group-body">
|
||||
<div class="BtnGroup">
|
||||
<button aria-selected="true" class="BtnGroup-item btn btn-sm" id="folder-name-appid"
|
||||
type="button">
|
||||
App-ID
|
||||
</button>
|
||||
<button class="BtnGroup-item btn btn-sm" id="folder-name-custom" type="button">
|
||||
Custom
|
||||
</button>
|
||||
</div>
|
||||
<br>
|
||||
<input class="form-control input-block" hidden id="folder-name-custom-input"
|
||||
placeholder="Game directory name"
|
||||
type="text"/>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
82
main.js
Normal file
82
main.js
Normal file
@@ -0,0 +1,82 @@
|
||||
const {app, BrowserWindow, dialog, ipcMain} = require("electron")
|
||||
const {platformpath} = require("./utils")
|
||||
require("v8-compile-cache")
|
||||
|
||||
let mainWindow
|
||||
const createWindow = () => {
|
||||
// Create the browser window.
|
||||
mainWindow = new BrowserWindow({
|
||||
autoHideMenuBar: true,
|
||||
resizable: false,
|
||||
width: 445,
|
||||
height: 650,
|
||||
useContentSize: true,
|
||||
maximizable: false,
|
||||
webPreferences: {
|
||||
nodeIntegration: true, contextIsolation: false
|
||||
}
|
||||
})
|
||||
|
||||
// and load the index.html of the app.
|
||||
mainWindow.loadFile("index.html")
|
||||
|
||||
// @formatter:off
|
||||
// Open the DevTools for debugging, only if not in production. This is removed for release by the build script (package.sh) because it's unreliable.
|
||||
// disable formatting so the line always stays the same so sed can find it
|
||||
// eslint-disable-next-line no-undef
|
||||
if (!app.isPackaged) mainWindow.webContents.openDevTools({mode: "detach"})
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
// This method will be called when Electron has finished
|
||||
// initialization and is ready to create browser windows.
|
||||
// Some APIs can only be used after this event occurs.
|
||||
app.whenReady().then(() => {
|
||||
createWindow()
|
||||
|
||||
app.on("activate", () => {
|
||||
// On macOS it's common to re-create a window in the app when the
|
||||
// dock icon is clicked and there are no other windows open.
|
||||
if (BrowserWindow.getAllWindows().length === 0) createWindow()
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
// If the page is fully loaded in, send a sign.
|
||||
app.on("web-contents-created", (event, contents) => {
|
||||
contents.on("dom-ready", () => {
|
||||
contents.send("ready")
|
||||
contents.send("version", app.getVersion()) // send the version to the renderer
|
||||
})
|
||||
})
|
||||
|
||||
// Quit when all windows are closed, except on macOS. There, it's common
|
||||
// for applications and their menu bar to stay active until the user quits
|
||||
// explicitly with Cmd + Q.
|
||||
app.on("window-all-closed", () => {
|
||||
if (process.platform !== "darwin") app.quit()
|
||||
})
|
||||
|
||||
|
||||
ipcMain.on("selectpath", (event) => {
|
||||
dialog.showOpenDialog(mainWindow, {
|
||||
// Specifying the Directory Selector Property
|
||||
properties: ["openDirectory"],
|
||||
title: "Select the path where the game will be downloaded",
|
||||
defaultPath: platformpath(),
|
||||
buttonLabel: "Select"
|
||||
}).then(file => {
|
||||
//console.debug("Has path selection succeeded: " + ((file.canceled) ? "NO" : "YES; see below")) --- doesn't log to the dev console TODO
|
||||
if (!file.canceled) {
|
||||
const filepath = file.filePaths[0].toString()
|
||||
// console.debug("Path selected is " + filepath) --- same thing
|
||||
event.reply("file", filepath)
|
||||
}
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
})
|
||||
})
|
||||
|
||||
ipcMain.on("open-devtools", () => {
|
||||
mainWindow.webContents.openDevTools({mode: "detach"})
|
||||
})
|
||||
4468
package-lock.json
generated
Normal file
4468
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
41
package.json
Normal file
41
package.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "steamdepotdownloadergui",
|
||||
"version": "2.4.2",
|
||||
"description": "DepotDownloader Electron frontend",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "electron .",
|
||||
"build": "electron-builder -c electron-builder.yml -wl -p never",
|
||||
"buildall": "electron-builder -c electron-builder.yml -mwl -p never",
|
||||
"buildlinux": "electron-builder -c electron-builder.yml -l -p never",
|
||||
"buildwin": "electron-builder -c electron-builder.yml -w -p never",
|
||||
"buildmacos": "electron-builder -c electron-builder.yml -m -p never"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/mmvanheusden/SteamDepotDownloaderGUI.git"
|
||||
},
|
||||
"keywords": [
|
||||
"electron",
|
||||
"steam",
|
||||
"depotdownloader",
|
||||
"electron",
|
||||
"gui"
|
||||
],
|
||||
"author": "mmvanheusden",
|
||||
"license": "GPL-3.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/mmvanheusden/SteamDepotDownloaderGUI/issues"
|
||||
},
|
||||
"homepage": "https://github.com/mmvanheusden/SteamDepotDownloaderGUI#readme",
|
||||
"devDependencies": {
|
||||
"electron": "^30.0.2",
|
||||
"electron-builder": "^24.13.3",
|
||||
"eslint": "^9.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
"v8-compile-cache": "^2.4.0"
|
||||
}
|
||||
}
|
||||
25
package.sh
Executable file
25
package.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
version=`jq '.version' package.json`
|
||||
version="${version//\"}"
|
||||
echo "version that will be build is ${version}"
|
||||
rm -rf ./dist/
|
||||
|
||||
# Disable DevTools for release, because it's unreliable
|
||||
original_line=$(sed -n '/if (!app.isPackaged) mainWindow.webContents.openDevTools({mode: "detach"})/p' main.js)
|
||||
# original_line has 1 tab too much, so we remove it
|
||||
original_line="${original_line// /}"
|
||||
sed -i 's/if (!app.isPackaged) mainWindow.webContents.openDevTools({mode: "detach"})/\/\/REMOVED FOR RELEASE./g' main.js
|
||||
|
||||
|
||||
npm run build
|
||||
mkdir -p ./dist/release-ready
|
||||
|
||||
cp ./dist/SteamDepotDownloaderGUI*.exe ./dist/release-ready/SteamDepotDownloaderGUI-windows-"${version}".exe
|
||||
cp `ls -d1 dist/* | grep -E "SteamDepotDownloaderGUI-[0-9]+\.[0-9]+\.[0-9]+\.AppImage"` ./dist/release-ready/SteamDepotDownloaderGUI-linux-"${version}"-x64.AppImage
|
||||
cp `ls -d1 dist/* | grep -E "steamdepotdownloadergui-[0-9]+\.[0-9]+\.[0-9]+\.zip"` ./dist/release-ready/SteamDepotDownloaderGUI-linux-"${version}"-x64.zip
|
||||
cp `ls -d1 dist/* | grep -E "SteamDepotDownloaderGUI-[0-9]+\.[0-9]+\.[0-9]+\-arm64.AppImage"` ./dist/release-ready/SteamDepotDownloaderGUI-linux-"${version}"-arm64.AppImage
|
||||
cp `ls -d1 dist/* | grep -E "steamdepotdownloadergui-[0-9]+\.[0-9]+\.[0-9]+\-arm64.zip"` ./dist/release-ready/SteamDepotDownloaderGUI-linux-"${version}"-arm64.zip
|
||||
echo "done building!"
|
||||
echo "reverting changes to main.js"
|
||||
sed -i "s|\/\/REMOVED FOR RELEASE.|$original_line|g" main.js
|
||||
BIN
screenshot.png
Normal file
BIN
screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 75 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 19 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 76 KiB |
68
style.css
Normal file
68
style.css
Normal file
@@ -0,0 +1,68 @@
|
||||
@font-face {
|
||||
font-family: 'Hubot Sans';
|
||||
src: url('Hubot-Sans.woff2') format('woff2 supports variations'),
|
||||
url('Hubot-Sans.woff2') format('woff2-variations');
|
||||
font-weight: 700;
|
||||
font-stretch: expanded;
|
||||
}
|
||||
|
||||
.f1-light {
|
||||
font-family: 'Hubot Sans', sans-serif;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* The grey part */
|
||||
.settings-surrounding {
|
||||
display: none;
|
||||
position: fixed;
|
||||
z-index: 1;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
background-color: rgba(0, 0, 0, 0.33);
|
||||
}
|
||||
|
||||
.settings-content {
|
||||
position: relative;
|
||||
border-radius: 10px;
|
||||
overflow: auto;
|
||||
/*noinspection CssUnresolvedCustomProperty*/
|
||||
background-color: var(--bgColor-default, var(--color-canvas-default));
|
||||
margin: 5%;
|
||||
padding: 25px;
|
||||
border: 1px solid #b4dede;
|
||||
width: 90vw; /* 90vw -> 90% */
|
||||
height: 90vh; /* 90vh -> 90% */
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1), 0 6px 20px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: 0;
|
||||
height: 1px;
|
||||
background: #0d1117 linear-gradient(to right, #0d1117, #ccc, #0d1117);
|
||||
}
|
||||
[data-color-mode="light"] hr {
|
||||
filter: invert(1);
|
||||
}
|
||||
@media (prefers-color-scheme: light) {
|
||||
[data-color-mode="auto"] hr {
|
||||
filter: invert(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.version-info {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
font-size: 0.8em;
|
||||
padding: 5px 10px; /* space around text */
|
||||
font-family: monospace;
|
||||
}
|
||||
395
utils.js
Normal file
395
utils.js
Normal file
@@ -0,0 +1,395 @@
|
||||
var defaultTerminal = ""
|
||||
|
||||
/**
|
||||
* Checks if all required fields are filled and if dotnet is installed in the system path.
|
||||
* It returns a promise that resolves to true if dotnet is installed and all required fields are filled, false otherwise.
|
||||
*
|
||||
* @returns {Promise<unknown>} A promise that resolves to true if dotnet is installed and all required fields are filled, false otherwise.
|
||||
*
|
||||
* **rejects**:
|
||||
* `emptyField` -> One or more required field(s) are not filled in.
|
||||
* `noDotnet` -> `dotnet` has not been found in the path.
|
||||
*/
|
||||
function preDownloadCheck() {
|
||||
return new Promise((resolve, reject) => {
|
||||
// Check if all fields are filled
|
||||
const formInputs = document.forms["theform"]
|
||||
|
||||
let unfilledFields = 0
|
||||
for (const input of formInputs) {
|
||||
const isInvalid = input.value === "" && input.parentElement.classList.contains("required")
|
||||
input.parentElement.classList.toggle("errored", isInvalid) // toggle the 'errored' class depending on if isInvalid is true or false.
|
||||
if (isInvalid) unfilledFields++
|
||||
}
|
||||
if (unfilledFields > 0) {
|
||||
reject("emptyField")
|
||||
return
|
||||
}
|
||||
|
||||
// Check if dotnet is found, depending on the platform
|
||||
if (process.platform.toString().includes("win")) {
|
||||
// Windows
|
||||
const {exec} = require("child_process")
|
||||
const command = "dotnet.exe --version"
|
||||
exec(command, function (error) {
|
||||
if (error) {
|
||||
reject("noDotnet")
|
||||
} else {
|
||||
resolve(true)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
// Others
|
||||
// macOS seems to be broken.
|
||||
const {exec} = require("child_process")
|
||||
const command = "dotnet --version"
|
||||
exec(command, function (error) {
|
||||
if (error) {
|
||||
reject("noDotnet")
|
||||
} else {
|
||||
resolve(true)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Downloads a file from a given URL and saves it to the current directory.
|
||||
*
|
||||
* @param {string} url - The URL of the file to download.
|
||||
* @returns {Promise<void>} A promise that resolves when the download is finished, or rejects if an error occurs.
|
||||
*
|
||||
* @throws {Error} If an error occurs during the download or file writing process, the promise is rejected with the error.
|
||||
*/
|
||||
function download(url) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const {https} = require("follow-redirects") /* Using follow-redirects to follow redirects */
|
||||
const fs = require("fs")
|
||||
const path = require("path")
|
||||
const file = fs.createWriteStream(platformpath() + path.sep + url.split("/").pop())
|
||||
https.get(url, (response) => {
|
||||
response.pipe(file)
|
||||
file.on("finish", () => {
|
||||
file.close()
|
||||
resolve()
|
||||
})
|
||||
file.on("error", (error) => {
|
||||
console.error(error)
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a file from the current directory.
|
||||
*
|
||||
* @param {string} file - The name of the file to be removed.
|
||||
* @returns {Promise<void>} A promise that resolves when the file is successfully removed, or rejects if an error occurs.
|
||||
*
|
||||
* @throws {Error} If an error occurs during the file removal process, the promise is rejected with the error.
|
||||
*/
|
||||
function removeFile(file) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const fs = require("fs")
|
||||
const path = require("path")
|
||||
fs.unlink(platformpath() + path.sep + file, function (error) {
|
||||
if (error) {
|
||||
reject(error)
|
||||
console.error(error)
|
||||
} else resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a directory from the current directory.
|
||||
*
|
||||
* @param {string} dir - The name of the directory to be removed.
|
||||
* @returns {Promise<void>} A promise that resolves when the directory is successfully removed, or rejects if an error occurs.
|
||||
*
|
||||
* @throws {Error} If an error occurs during the directory removal process, the promise is rejected with the error.
|
||||
*/
|
||||
function removeDir(dir,) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const fs = require("fs")
|
||||
const path = require("path")
|
||||
fs.rm(platformpath() + path.sep + dir, {recursive: true, force: true}, function (error) {
|
||||
if (error) {
|
||||
reject(error)
|
||||
console.error(error)
|
||||
} else resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Unzips a file to a specified target directory.
|
||||
*
|
||||
* @param {string} file - The name of the zip file to be unzipped.
|
||||
* @param {string} target - The target directory where the file will be unzipped to.
|
||||
* @returns {Promise<void>} A promise that resolves when the unzip operation is complete, or rejects if an error occurs.
|
||||
*
|
||||
* @throws {Error} If an error occurs during the unzip operation, the promise is rejected with the error.
|
||||
*/
|
||||
function unzip(file, target) {
|
||||
const {exec} = require("child_process")
|
||||
const path = require("path")
|
||||
let finalPath = platformpath() + path.sep
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
if (process.platform.toString().includes("win")) {
|
||||
const command = `powershell.exe -Command Expand-Archive -Path '${finalPath + file}' -Destination '${finalPath + target}'`
|
||||
exec(command, function (error) {
|
||||
if (error) {
|
||||
reject(error)
|
||||
console.error(error)
|
||||
} else resolve()
|
||||
})
|
||||
} else {
|
||||
const command = `unzip -o ${platformpath().replaceAll(" ", "\\ ") + path.sep + file} -d ${platformpath().replaceAll(" ", "\\ ") + path.sep + target}${path.sep}`
|
||||
exec(command, function (error) {
|
||||
if (error) {
|
||||
reject(error)
|
||||
console.error(error)
|
||||
} else resolve()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
async function createCommandWithTerminal(command, terminal, os) {
|
||||
let cmd = ""
|
||||
|
||||
if (terminal === "auto") {
|
||||
terminal = defaultTerminal[0]
|
||||
}
|
||||
// if os is auto, choose the os for us.
|
||||
if (os === "auto") {
|
||||
if (process.platform.toString().includes("win")) {
|
||||
os = 0
|
||||
} else if (process.platform.toString().includes("linux")) {
|
||||
os = 2
|
||||
}
|
||||
} else console.log("OS is manually chosen")
|
||||
/* eslint-disable */
|
||||
if (os === 0) {
|
||||
cmd = `start cmd.exe /k ${command}`
|
||||
} else if (os === 1) {
|
||||
cmd = `osascript -c 'tell application "Terminal" to do script '${command}'`
|
||||
} else if (os === 2) {
|
||||
switch (terminal) {
|
||||
case 0:
|
||||
cmd = `gnome-terminal -e 'bash -c "${command};$SHELL"'`
|
||||
break
|
||||
case 1:
|
||||
cmd = `konsole --hold -e "${command}"`
|
||||
break
|
||||
case 2:
|
||||
cmd = `xfce4-terminal -H -e "${command}"`
|
||||
break
|
||||
case 3:
|
||||
cmd = `terminator -e 'bash -c "${command};$SHELL"'`
|
||||
break
|
||||
case 4:
|
||||
cmd = `terminology -H -e "${command}"`
|
||||
break
|
||||
case 5:
|
||||
cmd = `xterm -hold -T "Downloading Depot..." -e "${command}"`
|
||||
break
|
||||
case 6:
|
||||
cmd = `kitty --hold sh -c "${command}"`
|
||||
break
|
||||
case 7:
|
||||
cmd = `lxterminal -e "${command};$SHELL"`
|
||||
break
|
||||
case 8:
|
||||
cmd = `tilix -e sh -c "${command};$SHELL"`
|
||||
break
|
||||
case 9:
|
||||
cmd = `deepin-terminal -e 'sh -c "${command};$SHELL"'`
|
||||
break
|
||||
case 10:
|
||||
cmd = `cool-retro-term -e sh -c "${command}"`
|
||||
break
|
||||
default:
|
||||
console.log("NO TERMINAL. PANIC.")
|
||||
}
|
||||
} else if (os === 3) {
|
||||
if (process.platform.toString().includes("win")) {
|
||||
console.log(`COPY-PASTE THE FOLLOWING INTO THE TERMINAL:\n\n${command}`)
|
||||
} else console.log(`COPY-PASTE THE FOLLOWING INTO YOUR TERMINAL:\n\n${command}`)
|
||||
cmd = ""
|
||||
}
|
||||
|
||||
return cmd
|
||||
/* eslint-enable */
|
||||
}
|
||||
|
||||
async function generateRunScript(username, password, appid, depotid, manifestid, folderinput, chosenPath) {
|
||||
const path = require("path")
|
||||
const fs = require("fs")
|
||||
const sep = path.sep
|
||||
let foldername = ""
|
||||
|
||||
// allow enormous strings like &$§"&$="§$/"(§NJUIDW>;!%?aQ52V?*['YsDnRy|(+Q 1h6BmnDQp,(Xr& being used as password.
|
||||
// This is very janky and will be replaced with a better solution in the upcoming rewrite.
|
||||
password = password.replace(/"/g, "\"\"")
|
||||
if (process.platform.includes("win")) {
|
||||
// Replace all % with %% because batch scripts use % as a special character. This is not an elegant solution, but it should work.
|
||||
password = password.replace(/%/g, "%%")
|
||||
}
|
||||
|
||||
// if either the username or password fields is empty, anonymous login is used
|
||||
let anonymous = username === "" || password === ""
|
||||
|
||||
|
||||
/* put the username and password flags into one string, allowing for anonymous login.
|
||||
if anonymous: false true
|
||||
| |
|
||||
*/
|
||||
let userpass = anonymous ? "" : `-username ${username} -password "${password}"`
|
||||
|
||||
/* if nothing is inputted by the user in the folder input, it will be defaulted to the appid. else to the value */
|
||||
foldername = folderinput.value === "" ? appid : folderinput.value
|
||||
|
||||
/* if the path isn't selected by the user, go for the path the app is located in. else use the path the user chose. */
|
||||
chosenPath = chosenPath === "" ? platformpath() : chosenPath
|
||||
|
||||
let finalPath = (chosenPath + path.sep + foldername)
|
||||
if (process.platform.includes("win")) {
|
||||
if (finalPath.includes(" ")) {
|
||||
console.log("path contains spaces. adding quotes")
|
||||
finalPath = `"${finalPath}"`
|
||||
console.log("Result: " + finalPath)
|
||||
}
|
||||
} else {
|
||||
finalPath = finalPath.replaceAll(" ", "\\ ")
|
||||
}
|
||||
|
||||
/* / or \ if nothing is inputted its appid replaces " " with "\ ", so whitespaces can be in path names.
|
||||
finalpath: ((the path the user chose) + (seperator) + (the folder name the user chose)).replaceAll()
|
||||
*/
|
||||
|
||||
|
||||
/* The structure of a DepotDownloader command:
|
||||
.NET CLI Path to the DepotDownloader dll. Username/pass combination app id depot id manifest id the dir chosen by user or app path controls how much download servers and threads are used. Needs benchmark TODO
|
||||
| | | | | | | | |
|
||||
dotnet (path)(sep)depotdownloader(sep)DepotDownloader.dll (userpass) -app (appid) -depot (depotid) -manifest (manifestid) -dir (path)(sep) -max-servers 50 -max-downloads 16
|
||||
*/
|
||||
|
||||
if (process.platform.includes("linux")) {
|
||||
// if linux, write a bash script.
|
||||
let content = `#!/usr/bin/env bash
|
||||
dotnet ${platformpath().replaceAll(" ", "\\ ")}${sep}depotdownloader${sep}DepotDownloader.dll ${userpass} -app ${appid} -depot ${depotid} -manifest ${manifestid} -dir ${finalPath}${sep} -max-servers 50 -max-downloads 16
|
||||
`
|
||||
await fs.writeFileSync(`${platformpath()}${sep}run.sh`, content)
|
||||
await fs.chmodSync(`${platformpath()}${sep}run.sh`, "755") // make it executable
|
||||
console.log(`Writing:
|
||||
--------
|
||||
dotnet ${platformpath().replaceAll(" ", "\\ ")}${sep}depotdownloader${sep}DepotDownloader.dll ${userpass} -app ${appid} -depot ${depotid} -manifest ${manifestid} -dir ${finalPath}${sep} -max-servers 50 -max-downloads 16
|
||||
|
||||
to ${platformpath()}${sep}run.sh.
|
||||
`)
|
||||
} else if (process.platform.includes("win")) {
|
||||
// if windows, write a batch script
|
||||
let content = `dotnet "${platformpath()}${sep}depotdownloader${sep}DepotDownloader.dll" ${userpass} -app ${appid} -depot ${depotid} -manifest ${manifestid} -dir ${finalPath} -max-servers 50 -max-downloads 16`
|
||||
await fs.writeFileSync(`${platformpath()}${sep}run.bat`, content)
|
||||
console.log(`Writing:
|
||||
--------
|
||||
dotnet "${platformpath()}${sep}depotdownloader${sep}DepotDownloader.dll" ${userpass} -app ${appid} -depot ${depotid} -manifest ${manifestid} -dir ${finalPath} -max-servers 50 -max-downloads 16
|
||||
|
||||
to ${platformpath()}${sep}run.bat.
|
||||
`)
|
||||
} else { /* macos */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes a given command in a separate process.
|
||||
*
|
||||
* @param {string} command - The command to be executed.
|
||||
* @returns {Promise<void>} A promise that resolves when the command execution is successful, or rejects if an error occurs.
|
||||
*
|
||||
* @throws {Error} If an error occurs during the command execution, the promise is rejected with an error message.
|
||||
*/
|
||||
function runCommand(command) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const {exec} = require("child_process")
|
||||
exec(command, function (error) {
|
||||
if (error) {
|
||||
const msg = "Running command failed with error:\n" + error
|
||||
reject(msg)
|
||||
} else resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the path where the actual program is being run from, depending on the operating system.
|
||||
* Because __dirname is inconsistent across operating systems, this function is used to get the correct path.
|
||||
*
|
||||
* Windows -> Dev env: __dirname, Portable: process.env.PORTABLE_EXECUTABLE_DIR
|
||||
* Linux -> process.cwd()
|
||||
* @returns {string} The absolute path
|
||||
*/
|
||||
const platformpath = () => {
|
||||
// On linux, it must return process.cwd(). On windows, it must return process.env.PORTABLE_EXECUTABLE_DIR, but only if the program is running from a portable exe.
|
||||
// On linux, __dirname returns the correct path, but on windows, it returns the path to the app.asar file, which is not what we want. Only in dev environment it returns the correct path.
|
||||
|
||||
if (process.platform.includes("win")) {
|
||||
if (process.env.PORTABLE_EXECUTABLE_DIR !== undefined) {
|
||||
return process.env.PORTABLE_EXECUTABLE_DIR
|
||||
} else {
|
||||
return __dirname
|
||||
}
|
||||
} else {
|
||||
return process.cwd()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for the availability of terminal emulators on Linux.
|
||||
* It runs the '--version' command on each terminal emulator and checks if the command is successful.
|
||||
* If the command is successful, it means the terminal emulator is installed and available.
|
||||
* The function returns an array of the indices of the available terminal emulators.
|
||||
* If no terminal emulator is available, it returns false.
|
||||
* If the operating system is not Linux, it also returns false.
|
||||
*
|
||||
* @returns {string[]|boolean} An array of the indices of the available terminal emulators, or false if none are available or the OS is not Linux.
|
||||
*/
|
||||
const forceTerminals = async () => {
|
||||
const commands = [["gnome-terminal", "--version", 0], ["konsole", "--version", 1], ["xfce4-terminal", "--version", 2], ["terminator", "--version", 3], ["terminology", "--version", 4], ["xterm", "-v", 5], ["kitty", "--version", 6], ["lxterminal", "--version", 7], ["tilix", "--version", 8], ["deepin-terminal", "--version", 9], ["cool-retro-term", "--version", 10]]
|
||||
let availableTerminals = [] // list of IDs of terminals, corrospending to their index in the dropdown menu
|
||||
let availableNames = [] // list of names of found terminals
|
||||
if (process.platform === "linux") {
|
||||
for (let i = 0; i < commands.length; i++) {
|
||||
await runCommand(`${commands[i][0]} ${commands[i][1]}`).then(() => {
|
||||
console.log(`Found ${commands[i][0]}`)
|
||||
availableTerminals.push(commands[i][2])
|
||||
availableNames.push(commands[i][0])
|
||||
}).catch(() => {
|
||||
console.log(`${commands[i][0]} not found on system.`)
|
||||
})
|
||||
}
|
||||
if (availableTerminals.length > 0) {
|
||||
defaultTerminal = availableTerminals
|
||||
return [true, availableTerminals, availableNames] // [true, "2,4,7", "twox,fourterm,sevenemulator"] (example)
|
||||
} else return false
|
||||
} else return false
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
preDownloadCheck,
|
||||
download,
|
||||
runCommand,
|
||||
removeDir,
|
||||
removeFile,
|
||||
unzip,
|
||||
platformpath,
|
||||
forceTerminals,
|
||||
generateRunScript,
|
||||
createCommandWithTerminal
|
||||
}
|
||||
Reference in New Issue
Block a user