aboutsummaryrefslogtreecommitdiff
path: root/etc/get.lua
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2011-05-25 20:57:22 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2011-05-25 20:57:22 +0000
commit3a8ba90dfb0c2eb224f317dd692ede426691e72a (patch)
treefe1cc5379a2e0e031663fe9c15d908653844bc73 /etc/get.lua
parentbce60be30fe8e9c1b0eb33128c23c93d7bca5303 (diff)
downloadluasocket-3a8ba90dfb0c2eb224f317dd692ede426691e72a.tar.gz
luasocket-3a8ba90dfb0c2eb224f317dd692ede426691e72a.tar.bz2
luasocket-3a8ba90dfb0c2eb224f317dd692ede426691e72a.zip
Saving before big changes to support IPv6.
Diffstat (limited to 'etc/get.lua')
-rw-r--r--etc/get.lua106
1 files changed, 53 insertions, 53 deletions
diff --git a/etc/get.lua b/etc/get.lua
index 09f639d..0d631c2 100644
--- a/etc/get.lua
+++ b/etc/get.lua
@@ -12,53 +12,53 @@ local ltn12 = require("ltn12")
12 12
13-- formats a number of seconds into human readable form 13-- formats a number of seconds into human readable form
14function nicetime(s) 14function nicetime(s)
15 local l = "s" 15 local l = "s"
16 if s > 60 then 16 if s > 60 then
17 s = s / 60 17 s = s / 60
18 l = "m" 18 l = "m"
19 if s > 60 then 19 if s > 60 then
20 s = s / 60 20 s = s / 60
21 l = "h" 21 l = "h"
22 if s > 24 then 22 if s > 24 then
23 s = s / 24 23 s = s / 24
24 l = "d" -- hmmm 24 l = "d" -- hmmm
25 end 25 end
26 end 26 end
27 end 27 end
28 if l == "s" then return string.format("%5.0f%s", s, l) 28 if l == "s" then return string.format("%5.0f%s", s, l)
29 else return string.format("%5.2f%s", s, l) end 29 else return string.format("%5.2f%s", s, l) end
30end 30end
31 31
32-- formats a number of bytes into human readable form 32-- formats a number of bytes into human readable form
33function nicesize(b) 33function nicesize(b)
34 local l = "B" 34 local l = "B"
35 if b > 1024 then 35 if b > 1024 then
36 b = b / 1024 36 b = b / 1024
37 l = "KB" 37 l = "KB"
38 if b > 1024 then 38 if b > 1024 then
39 b = b / 1024 39 b = b / 1024
40 l = "MB" 40 l = "MB"
41 if b > 1024 then 41 if b > 1024 then
42 b = b / 1024 42 b = b / 1024
43 l = "GB" -- hmmm 43 l = "GB" -- hmmm
44 end 44 end
45 end 45 end
46 end 46 end
47 return string.format("%7.2f%2s", b, l) 47 return string.format("%7.2f%2s", b, l)
48end 48end
49 49
50-- returns a string with the current state of the download 50-- returns a string with the current state of the download
51local remaining_s = "%s received, %s/s throughput, %2.0f%% done, %s remaining" 51local remaining_s = "%s received, %s/s throughput, %2.0f%% done, %s remaining"
52local elapsed_s = "%s received, %s/s throughput, %s elapsed " 52local elapsed_s = "%s received, %s/s throughput, %s elapsed "
53function gauge(got, delta, size) 53function gauge(got, delta, size)
54 local rate = got / delta 54 local rate = got / delta
55 if size and size >= 1 then 55 if size and size >= 1 then
56 return string.format(remaining_s, nicesize(got), nicesize(rate), 56 return string.format(remaining_s, nicesize(got), nicesize(rate),
57 100*got/size, nicetime((size-got)/rate)) 57 100*got/size, nicetime((size-got)/rate))
58 else 58 else
59 return string.format(elapsed_s, nicesize(got), 59 return string.format(elapsed_s, nicesize(got),
60 nicesize(rate), nicetime(delta)) 60 nicesize(rate), nicetime(delta))
61 end 61 end
62end 62end
63 63
64-- creates a new instance of a receive_cb that saves to disk 64-- creates a new instance of a receive_cb that saves to disk
@@ -89,10 +89,10 @@ end
89 89
90-- determines the size of a http file 90-- determines the size of a http file
91function gethttpsize(u) 91function gethttpsize(u)
92 local r, c, h = http.request {method = "HEAD", url = u} 92 local r, c, h = http.request {method = "HEAD", url = u}
93 if c == 200 then 93 if c == 200 then
94 return tonumber(h["content-length"]) 94 return tonumber(h["content-length"])
95 end 95 end
96end 96end
97 97
98-- downloads a file using the http protocol 98-- downloads a file using the http protocol
@@ -101,7 +101,7 @@ function getbyhttp(u, file)
101 -- only print feedback if output is not stdout 101 -- only print feedback if output is not stdout
102 if file then save = ltn12.sink.chain(stats(gethttpsize(u)), save) end 102 if file then save = ltn12.sink.chain(stats(gethttpsize(u)), save) end
103 local r, c, h, s = http.request {url = u, sink = save } 103 local r, c, h, s = http.request {url = u, sink = save }
104 if c ~= 200 then io.stderr:write(s or c, "\n") end 104 if c ~= 200 then io.stderr:write(s or c, "\n") end
105end 105end
106 106
107-- downloads a file using the ftp protocol 107-- downloads a file using the ftp protocol
@@ -114,29 +114,29 @@ function getbyftp(u, file)
114 gett.sink = save 114 gett.sink = save
115 gett.type = "i" 115 gett.type = "i"
116 local ret, err = ftp.get(gett) 116 local ret, err = ftp.get(gett)
117 if err then print(err) end 117 if err then print(err) end
118end 118end
119 119
120-- determines the scheme 120-- determines the scheme
121function getscheme(u) 121function getscheme(u)
122 -- this is an heuristic to solve a common invalid url poblem 122 -- this is an heuristic to solve a common invalid url poblem
123 if not string.find(u, "//") then u = "//" .. u end 123 if not string.find(u, "//") then u = "//" .. u end
124 local parsed = url.parse(u, {scheme = "http"}) 124 local parsed = url.parse(u, {scheme = "http"})
125 return parsed.scheme 125 return parsed.scheme
126end 126end
127 127
128-- gets a file either by http or ftp, saving as <name> 128-- gets a file either by http or ftp, saving as <name>
129function get(u, name) 129function get(u, name)
130 local fout = name and io.open(name, "wb") 130 local fout = name and io.open(name, "wb")
131 local scheme = getscheme(u) 131 local scheme = getscheme(u)
132 if scheme == "ftp" then getbyftp(u, fout) 132 if scheme == "ftp" then getbyftp(u, fout)
133 elseif scheme == "http" then getbyhttp(u, fout) 133 elseif scheme == "http" then getbyhttp(u, fout)
134 else print("unknown scheme" .. scheme) end 134 else print("unknown scheme" .. scheme) end
135end 135end
136 136
137-- main program 137-- main program
138arg = arg or {} 138arg = arg or {}
139if table.getn(arg) < 1 then 139if table.getn(arg) < 1 then
140 io.write("Usage:\n lua get.lua <remote-url> [<local-file>]\n") 140 io.write("Usage:\n lua get.lua <remote-url> [<local-file>]\n")
141 os.exit(1) 141 os.exit(1)
142else get(arg[1], arg[2]) end 142else get(arg[1], arg[2]) end