20 Commits
www ... v2.3.0

Author SHA1 Message Date
Maarten
369bd805c9 2.3.0 2023-11-14 16:14:27 +01:00
Maarten
61f1852db1 Add instructions button
* Add instructions button
* reformat code
2023-11-14 16:13:20 +01:00
Maarten
1a2b91b78a Update README.md 2023-11-14 15:56:40 +01:00
Maarten
5b27e4a2c9 Update README.md 2023-11-14 14:13:13 +01:00
Maarten
882f4aa252 Outrule the possibility that the page might not be fully loaded on older machines will break stuff 2023-11-14 13:21:30 +01:00
Maarten
e7a4964400 Require the terminal dropdown to be filled in...
* Require the terminal dropdown to be filled in
* Add a default value to the terminal selection
2023-11-14 12:51:49 +01:00
Maarten
62e487abfe Add arm64 support, add script for easy renaming 2023-11-14 12:04:35 +01:00
Maarten
1f604460a0 Simplify the check of selection
* Simplify the check of selection
* rephrase and add console debugging output
2023-11-14 10:41:55 +01:00
Maarten
8a53d80502 (possibly) fix .zip path finding on Linux 2023-11-13 22:50:59 +01:00
Maarten
f93d53f574 Merge remote-tracking branch 'origin/master' 2023-11-13 22:19:20 +01:00
Maarten
32b014a283 Remove copyright year 2023-11-13 22:19:07 +01:00
Maarten
50de5b676a Update README.md 2023-11-13 22:10:42 +01:00
Maarten
799dea18be Allow spaces in path names.
* Allow spaces in path names. This was previously broken.
* Fix cool-retro-term
2023-11-13 21:58:57 +01:00
Maarten
45e14398f3 Update screenshot 2023-11-12 15:57:57 +01:00
Maarten
120dbb257c Add drop shadow
https://graphicdesign.stackexchange.com/a/117404
2023-11-12 15:17:26 +01:00
Maarten
98a8e5f853 Update screenshot in README
* Update screenshot in README
* auto switch for require star
* New title
2023-11-12 15:07:27 +01:00
Maarten
912ec9927c Merge remote-tracking branch 'origin/master' 2023-11-11 18:22:19 +01:00
Maarten
00d80a603c add note 2023-11-11 18:22:02 +01:00
Maarten
6c0fc19381 Merge pull request #136 from mmvanheusden/dependabot/npm_and_yarn/electron-27.0.4
Bump electron from 27.0.3 to 27.0.4
2023-11-11 16:33:29 +01:00
dependabot[bot]
6360e4f553 Bump electron from 27.0.3 to 27.0.4
Bumps [electron](https://github.com/electron/electron) from 27.0.3 to 27.0.4.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v27.0.3...v27.0.4)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-08 21:54:50 +00:00
10 changed files with 191 additions and 111 deletions

View File

@@ -8,16 +8,16 @@
<p align="center">
<img alt="Screenshot of the downloader interface" src="screenshot.png"
style="max-width: 70%;"/>
style="max-width: 60%;"/>
</p>
## Features
* Cross platform
* **Cross platform**
- Windows
- <s>macOS</s> (in development™)
- Linux
* Cross terminal
* **Cross terminal**
- Gnome Terminal
- Konsole
- xfce4-terminal
@@ -30,16 +30,29 @@
- Deepin Terminal
- cool-retro-term
- Manual: produce a script that can be copy pasted into a terminal of choice
* Support for anonymous downloads
* **Support for anonymous downloads**
## Installation
## Download
If you haven't already, install [.NET SDK 6.0](https://dotnet.microsoft.com/en-us/download/dotnet/6.0) on your computer.
From then, download the appropriate build from [here](https://github.com/mmvanheusden/SteamDepotDownloaderGUI/releases/latest).
### 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:
* An official [AUR package](https://aur.archlinux.org/packages/steamdepotdownloadergui-appimage) has been made. this can be installed using `yay -S steamdepotdownloadergui-appimage`.
#### Other Linux distros:
* **You'll need `unzip`, .NET runtime 6.0 and .NET sdk 6.0.**
* **Ubuntu:**
`sudo apt install unzip dotnet-runtime-6.0 dotnet-sdk-6.0`
* **Fedora:**
`sudo dnf install unzip dotnet-sdk-6.0 dotnet-runtime-6.0`
> **Note:**
> No support will be provided for binaries downloaded from unofficial mirrors like softpedia.
* 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
@@ -58,7 +71,7 @@ This software makes use of the following projects:
- [Hubut Sans](https://github.com/github/hubot-sans) under [license](https://github.com/github/hubot-sans/blob/05d5ea150c20e6434485db8ffd2277ed18a9e911/LICENSE)
## Support
## Donate
Donations can be made through Liberapay :)
@@ -69,7 +82,7 @@ Donations can be made through Liberapay :)
## Contribute
If you want to contribute to SteamDepotDownloaderGUI, please make sure to follow
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.

View File

@@ -1,19 +1,18 @@
// 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 {ipcRenderer, shell} = require("electron")
const {
preDownloadCheck,
download,
createCommand,
runCommand,
removeDir,
removeFile,
unzip
preDownloadCheck, download, createCommand, runCommand, removeDir, removeFile, unzip
} = require("./utils")
// Initializes the variable that holds the path to the specified download location
let exportedFile
(async () => {
let r = await fetch("https://api.github.com/zen")
console.debug(await r.text())
})()
function submitForm() {
// Check if the form is filled in and if dotnet is installed
preDownloadCheck().then(async function () {
@@ -34,6 +33,7 @@ function submitForm() {
await removeFile("depotdownloader-2.5.0.zip")
// Run the final command
if (document.getElementById("osdropdown").selectedIndex !== 3) await console.debug("Command issued: " + createCommand())
await runCommand(createCommand())
}).catch(function (error) {
if (error === "noDotnet") {
@@ -55,44 +55,50 @@ function openRelevantPage(target) {
switch (target) {
// why are you not indenting nicely eslint?
/* eslint-disable indent */
case "dotnet":
document.getElementById("dotnetwarning").hidden = true
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://liberapay.com/barbapapa/")
break
default:
return
case "dotnet":
document.getElementById("dotnetwarning").hidden = true
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://liberapay.com/barbapapa/")
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() {
shell.openPath(exportedFile)
shell.openPath(exportedFile).then(() => {
console.log("Opened " + exportedFile + " in file explorer.")
})
}
// If Linux is selected in the dropdown menu, enable the second dropdown so the user can choose their terminal emulator.
@@ -103,20 +109,31 @@ function checkSelection() {
[2] - Linux
[3] - manual
*/
let docu = document.getElementById("osdropdown")
let docu2 = document.getElementById("osdropdown2")
let os_dropdown = document.getElementById("osdropdown")
let terminal_dropdown = document.getElementById("osdropdown2")
// if the choice = 2, enable the terminal selection dropdown.
docu2.disabled = docu.selectedIndex !== 2; docu2.selectedIndex = 0
if (os_dropdown.selectedIndex === 2) {
terminal_dropdown.disabled = false
document.getElementById("osdropdown2label").classList.add("required")
} else {
terminal_dropdown.disabled = true
terminal_dropdown.selectedIndex = 11
document.getElementById("osdropdown2label").classList.remove("required")
}
}
// This changes the dropdown selection, based on the platform being used.
ipcRenderer.on("update-value", (e, msg) => {
// main.js sends a ready message if the page is loaded in. This will be received here.
// process.platform -> 'linux' -> selectedIndex = 2 (Linux)
// process.platform -> 'win32' -> selectedIndex = 0 (Windows)
// process.platform -> 'darwin' -> selectedIndex = 1 (macOS)
ipcRenderer.on("ready", () => {
const osdropdown = document.getElementById("osdropdown")
if (msg === "linux") {
if (process.platform.toString().includes("linux")) {
osdropdown.selectedIndex = 2
} else if (msg === "win") {
} else if (process.platform.toString().includes("win")) {
osdropdown.selectedIndex = 0
} else if (msg === "darwin") {
} else if (process.platform.toString().includes("darwin")) {
osdropdown.selectedIndex = 1
}
checkSelection() // force check the selection so the terminal dropdown can be unhidden.
@@ -128,6 +145,7 @@ window.addEventListener("DOMContentLoaded", () => {
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", () => ipcRenderer.send("selectpath"))
document.getElementById("checkpath").addEventListener("click", checkPath)
document.getElementById("osdropdown").addEventListener("input", checkSelection)
@@ -135,7 +153,7 @@ window.addEventListener("DOMContentLoaded", () => {
})
ipcRenderer.on("file", (event, file) => {
console.log("obtained file from main process: " + file)
console.log("path selected by user: " + file)
document.getElementById("checkpath").ariaDisabled = false // Makes the check button active
exportedFile = file.toString()
})

View File

@@ -1,6 +1,6 @@
appId: rocks.maarten.depotdownloader
productName: SteamDepotDownloaderGUI
copyright: Copyright © 2022 mmvanheusden | This work is free. Licensed under the GNU GPLv3 Public License
copyright: Copyright © mmvanheusden | This work is free. Licensed under the GNU GPLv3 Public License
linux:
executableName: SteamDepotDownloaderGUI
@@ -25,8 +25,9 @@ mac:
- x64
win:
legalTrademarks: Copyright © 2022 mmvanheusden | This work is free. Licensed under the GNU GPLv3 Public License
legalTrademarks: Copyright © mmvanheusden | This work is free. Licensed under the GNU GPLv3 Public License
target:
- target: portable
arch:
- x64
- arm64

View File

@@ -15,14 +15,14 @@
<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>
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>
fill-rule="evenodd"></path>
</svg>
<span class="text-bold">Download</span>
</button>
@@ -33,8 +33,9 @@
<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.
fill-rule="evenodd"></path>
</svg>
Please fill in all required fields.
</div>
</div>
<div class="f1-light text-center">Steam Depot Downloader</div>
@@ -44,14 +45,16 @@
<div class="form-group-header">
<label for="username">Username</label>
</div>
<input class="form-control input-block" id="username" type="text" placeholder="Leave empty for anonymous download"/>
<input class="form-control input-block" id="username" type="text"
placeholder="Leave empty for anonymous download"/>
</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" type="password" placeholder="Leave empty for anonymous download"/>
<input class="form-control input-block" id="password" type="password"
placeholder="Leave empty for anonymous download"/>
</div>
<div class="form-group mx-3 mt-1 required">
@@ -79,11 +82,13 @@
<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">
<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-label="Check the location that has been selected." class="form-control btn btn-sm ml-2 tooltipped tooltipped-ne" id="checkpath" aria-disabled="true">
<div aria-label="Check the location that has been selected."
class="form-control btn btn-sm ml-2 tooltipped tooltipped-ne" id="checkpath" aria-disabled="true">
Open location
</div>
</div>
@@ -103,8 +108,8 @@
</div>
</div>
<div class="form-group mx-3 mt-3 required">
<div class="form-group-header ">
<div class="form-group mx-3 mt-3" id="osdropdown2label">
<div class="form-group-header">
<label for="osdropdown2">Terminal</label>
</div>
@@ -121,6 +126,7 @@
<option>Tilix</option>
<option>Deepin Terminal</option>
<option>cool-retro-term</option>
<option selected hidden disabled>Choose your terminal emulator</option>
</select>
</div>
</div>
@@ -128,40 +134,53 @@
<div class="form-group mt-3 ml-3 mr-3">
<button class="btn btn-block btn-primary" id="downloadbtn">
<svg class="octicon filter-red" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg">
<svg class="octicon filter-red" 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>
fill-rule="evenodd"></path>
</svg>
Download
</button>
</div>
<div aria-label="Visit the GitHub issues website." class="btn btn-sm ml-3 tooltipped tooltipped-ne mb-1" id="smbtn1">
<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">
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>
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">
<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" height="14" viewBox="0 0 128 128" width="14"
xmlns="http://www.w3.org/2000/svg">
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>
fill-rule="evenodd"></path>
</svg>
SteamDB
</div>
<div aria-label="Donate to the authors of the project." class="btn btn-sm ml-2 tooltipped tooltipped-nw mb-1" id="smbtn3">
<div aria-label="Donate to the authors of the project." 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">
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>
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" width="16" height="16" viewBox="0 0 16 16"
style="display: inline-block; vertical-align: text-bottom;">
<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>
</body>
</html>

20
main.js
View File

@@ -2,19 +2,17 @@ const {app, BrowserWindow, dialog, ipcMain} = require("electron")
const {platformpath} = require("./utils")
const createWindow = () => {
// Create the browser window.
const mainWindow = new BrowserWindow({
autoHideMenuBar: true,
resizable: false,
width: 430,
width: 440,
height: 730,
useContentSize: true,
maximizable: false,
webPreferences: {
nodeIntegration: true,
contextIsolation: false
nodeIntegration: true, contextIsolation: false
}
})
@@ -39,11 +37,13 @@ app.whenReady().then(() => {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
// Waits one second so the DOM is ready, and then sends the process platform to the downloader.
// TODO: On slow machine this WILL cause issues. Fix required!
setTimeout(() => {
BrowserWindow.getFocusedWindow().webContents.postMessage("update-value", (process.platform.toString() || "win"))
}, 1000)
})
// If the page is fully loaded in, send a sign.
app.on("web-contents-created", (event, contents) => {
contents.on("dom-ready", () => {
contents.send("ready")
})
})
// Quit when all windows are closed, except on macOS. There, it's common
@@ -62,7 +62,7 @@ ipcMain.on("selectpath", (event) => {
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
//console.debug("Has path selection succeeded: " + ((file.canceled) ? "NO" : "YES; see below")) --- doesn't log to the dev console
if (!file.canceled) {
const filepath = file.filePaths[0].toString()
// console.debug("Path selected is " + filepath) --- same thing

10
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{
"name": "steamdepotdownloadergui",
"version": "2.2.0",
"version": "2.3.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
@@ -13,7 +13,7 @@
"follow-redirects": "^1.15.3"
},
"devDependencies": {
"electron": "^27.0.3",
"electron": "^27.0.4",
"electron-builder": "^24.6.4",
"eslint": "^8.53.0"
}
@@ -1572,9 +1572,9 @@
"integrity": "sha512-RS2M4DrK1s0BV84bBVC4pJ1Fu9ZvZ6askTnBmz2ZurFFqeTe0nnYwvP4Iq89gPyzPZ/L5lYrrSP3SjRcIy9eJw=="
},
"node_modules/electron": {
"version": "27.0.3",
"resolved": "https://registry.npmjs.org/electron/-/electron-27.0.3.tgz",
"integrity": "sha512-VaB9cI1se+mUtz366NP+zxFVnkHLbCBNO4wwouw3FuGyX/m7/Bv1I89JhWOBv78tC+n11ZYMrVD23Jf6EZgVcg==",
"version": "27.0.4",
"resolved": "https://registry.npmjs.org/electron/-/electron-27.0.4.tgz",
"integrity": "sha512-ob29rN1mtiyAXzF8HsHd5jh8bYKd9OQDakfdOExi0F7epU97gXPHaj6JPjbBJ/vpki5d32SyKVePW4vxeNZk1A==",
"dev": true,
"hasInstallScript": true,
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "steamdepotdownloadergui",
"version": "2.2.0",
"version": "2.3.0",
"description": "DepotDownloader Electron frontend",
"main": "main.js",
"scripts": {
@@ -30,7 +30,7 @@
},
"homepage": "https://github.com/mmvanheusden/SteamDepotDownloaderGUI#readme",
"devDependencies": {
"electron": "^27.0.3",
"electron": "^27.0.4",
"electron-builder": "^24.6.4",
"eslint": "^8.53.0"
},

11
package.sh Executable file
View File

@@ -0,0 +1,11 @@
#!/usr/bin/env bash
version=`jq '.version' package.json`
version="${version//\"}"
echo "version = ${version}"
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!"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -1,5 +1,11 @@
/**
* Checks if dotnet is installed in the system path
*
* **rejects**:
*
* `emptyField` -> One or more required field(s) are not filled in.
*
* `noDotnet` -> `dotnet` has not been found in the path.
* @returns {Promise<unknown>} A promise that resolves to true if dotnet is installed, false otherwise
*/
function preDownloadCheck() {
@@ -13,6 +19,12 @@ function preDownloadCheck() {
input.parentElement.classList.toggle("errored", isInvalid) // toggle the 'errored' class depending on if isInvalid is true or false.
if (isInvalid) unfilledFields++
}
// If the selected OS is Linux, and the terminal selection is the default (11), error.
if (document.getElementById("osdropdown").selectedIndex === 2 && document.getElementById("osdropdown2").selectedIndex === 11) {
document.getElementById("osdropdown2label").classList.add("errored")
unfilledFields++
} else document.getElementById("osdropdown2label").classList.remove("errored")
if (unfilledFields > 0) {
reject("emptyField")
return
@@ -174,6 +186,7 @@ const createCommand = () => {
[8] - Tilix
[9] - Deepin Terminal
[10] - cool-retro-term
[11] (default, hidden) - Choose your terminal emulator
*/
// if either the username or password fields are empty, anonymous login is used
@@ -187,9 +200,7 @@ const createCommand = () => {
// for some reason exportedFile doesn't have to be imported or exported
// eslint-disable-next-line no-undef
const finalPath = exportedFile + path.sep + appid
console.debug("download path will be: " + finalPath)
const finalPath = (exportedFile + path.sep + appid).replaceAll(" ", "\\ ")
// The final command to run, returned by this function
if (os === 0) {
return `start cmd.exe /k dotnet ${platformpath()}${path.sep}depotdownloader${path.sep}DepotDownloader.dll ${userpass} -app ${appid} -depot ${depotid} -manifest ${manifestid} -dir ${finalPath}/ -max-servers 50 -max-downloads 16`
@@ -217,7 +228,7 @@ const createCommand = () => {
} else if (terminal === 9) {
return `deepin-terminal -e 'sh -c "dotnet ./depotdownloader/DepotDownloader.dll ${userpass} -app ${appid} -depot ${depotid} -manifest ${manifestid} -dir ${finalPath}/ -max-servers 50 -max-downloads 16;$SHELL"'`
} else if (terminal === 10) {
return `cool-retro-term -e sh -c "dotnet ./depotdownloader/DepotDownloader.dll ${userpass} -app ${appid} -depot ${depotid} -manifest ${manifestid} -dir ${finalPath}/ -max-servers 50 -max-downloads 16;$SHELL"`
return `cool-retro-term -e sh -c "cd ${platformpath()} && dotnet ./depotdownloader/DepotDownloader.dll ${userpass} -app ${appid} -depot ${depotid} -manifest ${manifestid} -dir ${finalPath}/ -max-servers 50 -max-downloads 16;$SHELL"`
}
} else if (os === 3) {
console.log(`COPY-PASTE THE FOLLOWING INTO YOUR TERMINAL OF CHOICE:\n\ndotnet ${platformpath()}/depotdownloader/DepotDownloader.dll ${userpass} -app ${appid} -depot ${depotid} -manifest ${manifestid} -dir ${finalPath} -max-servers 50 -max-downloads 16`)
@@ -244,20 +255,27 @@ function runCommand(command) {
/**
* 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
* Because __dirname is inconsistent across operating systems, this function is used to get the correct path.
*
* Windows .exe -> process.env.PORTABLE_EXECUTABLE_DIR
* Linux .appimage -> process.cwd()
* Linux .zip -> process.cwd()
* @returns {string} The absolute path
*/
const platformpath = () => {
if ((__dirname.includes("AppData") || __dirname.includes("Temp")) && process.platform.toString().includes("win")) {
// Windows portable exe
return process.env.PORTABLE_EXECUTABLE_DIR
} else if (__dirname.includes("/tmp/") && process.platform.toString().includes("linux")) {
// Linux AppImage
} else if (/*__dirname.includes("/tmp/") && */process.platform.toString().includes("linux")) {
// in a .zip, __dirname seems to return a broken path, ending with app.asar.
// using process.cwd() fixes that, but might not work on all distros as this has been an issue in the past.
// see commit 894197e75e774f4a17cced00d9862ab3942a8a5a
// Linux AppImage / .zip
return process.cwd()
} else {
// .zip binary
} /*else {
return __dirname
}
}*/
}
module.exports = {preDownloadCheck, download, createCommand, runCommand, removeDir, removeFile, unzip, platformpath}