/
ipsw.me.go
38 lines (32 loc) · 922 Bytes
/
ipsw.me.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package sites
import (
"os"
"github.com/nektro/SiteRippers/pkg/idata"
"github.com/nektro/SiteRippers/pkg/iutil"
"github.com/nektro/go-util/mbpp"
"github.com/nektro/go-util/util"
)
// ipsw.me
// https://ipsw.me
func init() {
idata.Handlers["ipsw.me"] = func(site, doneDir string) {
v, err := iutil.FetchJson("https://api.ipsw.me/v4/devices", nil)
util.DieOnError(err)
mbpp.CreateJob("ipsw.me", func(bar *mbpp.BarProxy) {
l := v.GetArray()
for _, item := range l {
iden := string(item.GetStringBytes("identifier"))
dir := doneDir + "/" + iden
os.Mkdir(dir, os.ModePerm)
w, err := iutil.FetchJson("https://api.ipsw.me/v4/device/"+iden+"?type=ipsw", nil)
util.DieOnError(err)
m := w.GetArray("firmwares")
bar.AddToTotal(int64(len(m)))
for _, jtem := range m {
urlS := string(jtem.GetStringBytes("url"))
go iutil.DownloadTo(urlS, dir, bar)
}
}
})
}
}