diff options
author | Araq <rumpf_a@web.de> | 2017-01-23 00:36:39 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2017-01-23 00:36:39 +0100 |
commit | 26a8364ed7655e6994cb0f24682151ea8539820f (patch) | |
tree | c57132106e288a2a548531e7552e080ac34909a0 | |
parent | 7652d15ed2097ac4db47e30cfe5ea0f547923641 (diff) | |
download | Nim-26a8364ed7655e6994cb0f24682151ea8539820f.tar.gz |
downloader tool works
-rw-r--r-- | tools/downloader.nim | 29 | ||||
-rw-r--r-- | tools/finish.nim | 6 |
2 files changed, 26 insertions, 9 deletions
diff --git a/tools/downloader.nim b/tools/downloader.nim index f0d4266f1..9b7f4a129 100644 --- a/tools/downloader.nim +++ b/tools/downloader.nim @@ -1,8 +1,7 @@ - -# Test & show the new high level wrapper +# Helper that is run after Nim's installation. import - "../ui", asyncdispatch, httpclient, zip/zipfiles, os + ui, asyncdispatch, httpclient, os, finish, registry, strutils type Actions = object @@ -28,6 +27,9 @@ proc download(pkg: string; c: Controls) {.async.} = # XXX make this async somehow: writeFile(z, contents) c.bar.value = 100 + if os.execShellCmd("7zG x " & z) != 0: + c.lab.text = "Unpacking failed: " & z + when false: var a: ZipArchive if open(a, z, fmRead): @@ -41,13 +43,28 @@ proc apply(a: Actions; c: Controls) {.async.} = await download("mingw" & arch, c) if a.aporia: await download("aporia-0.4.0", c) - if a.startMenu: - discard "add start menu entry" + + if a.addToPath: + let desiredPath = expandFilename(getCurrentDir() / "bin") + let p = getUnicodeValue(r"Environment", "Path", + HKEY_CURRENT_USER) + var alreadyInPath = false + for x in p.split(';'): + if x.len == 0: continue + let y = try: expandFilename(if x[0] == '"' and x[^1] == '"': + substr(x, 1, x.len-2) else: x) + except: "" + if y == desiredPath: alreadyInPath = true + if not alreadyInPath: + addToPathEnv(desiredPath) + + if a.startMenu: + createStartMenuEntry() c.apply.text = "Quit" proc main() = - var mainwin = newWindow("Nim installer", 640, 480, true) + var mainwin = newWindow("Nim installer", 640, 280, true) mainwin.margined = true mainwin.onClosing = (proc (): bool = return true) diff --git a/tools/finish.nim b/tools/finish.nim index abdafebf1..73d4ae9bc 100644 --- a/tools/finish.nim +++ b/tools/finish.nim @@ -53,7 +53,7 @@ when defined(windows): except IOError: echo "Could not access 'config/nim.cfg' [Error]" - proc addToPathEnv(e: string) = + proc addToPathEnv*(e: string) = let p = getUnicodeValue(r"Environment", "Path", HKEY_CURRENT_USER) let x = if e.contains(Whitespace): "\"" & e & "\"" else: e setUnicodeValue(r"Environment", "Path", p & ";" & x, HKEY_CURRENT_USER) @@ -65,13 +65,13 @@ when defined(windows): cmd.add " \"" & icon & "\" 0" discard execShellCmd(cmd) - proc createStartMenuEntry() = + proc createStartMenuEntry*(override = false) = let appdata = getEnv("APPDATA") if appdata.len == 0: return let dest = appdata & r"\Microsoft\Windows\Start Menu\Programs\Nim-" & NimVersion if dirExists(dest): return - if askBool("Would like to add Nim-" & NimVersion & + if override or askBool("Would like to add Nim-" & NimVersion & " to your start menu? (y/n) "): createDir(dest) createShortcut(getCurrentDir() / "tools" / "start.bat", dest / "Nim", |