Adds in logging messages to the generated script. Has it store files in
OS and language folders.
This commit is contained in:
parent
89fad8b62b
commit
b2a34ab235
75
main.go
75
main.go
@ -178,6 +178,8 @@ type DownloadLinks struct {
|
|||||||
InstallerName string
|
InstallerName string
|
||||||
Filename string
|
Filename string
|
||||||
Md5 string
|
Md5 string
|
||||||
|
Os string
|
||||||
|
Language string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dl *DownloadLinks) String() string {
|
func (dl *DownloadLinks) String() string {
|
||||||
@ -207,6 +209,8 @@ func getDownloadLinks(p *Product) []*DownloadLinks {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dl.InstallerName = sanitizeName(i.Name)
|
dl.InstallerName = sanitizeName(i.Name)
|
||||||
|
dl.Os = i.Os
|
||||||
|
dl.Language = i.Language
|
||||||
links = append(links, dl)
|
links = append(links, dl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -218,39 +222,14 @@ func sanitizeName(name string) string {
|
|||||||
// s := strings.Replace(name, " ", "_", -1)
|
// s := strings.Replace(name, " ", "_", -1)
|
||||||
// s = strings.Replace(s, "'", "", -1)
|
// s = strings.Replace(s, "'", "", -1)
|
||||||
// s = strings.Replace(s, "™", "", -1)
|
// s = strings.Replace(s, "™", "", -1)
|
||||||
re := regexp.MustCompile("[^0-1a-zA-Z.-_]+")
|
re := regexp.MustCompile("[^0-9a-zA-Z_.-]+")
|
||||||
s := name
|
s := name
|
||||||
s = re.ReplaceAllString(s, "_")
|
s = re.ReplaceAllString(s, "")
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
// func writeChecksumIfNeeded(dl *DownloadLinks, folder string) {
|
|
||||||
// // TODO: reuse an existing checksum file somehow
|
|
||||||
// res, err := client.Get(dl.Checksum)
|
|
||||||
// if err != nil {
|
|
||||||
// log.Fatalf("Failed to get file checksum info (%s): %v", dl.Checksum, err)
|
|
||||||
// }
|
|
||||||
// defer res.Body.Close()
|
|
||||||
// body, err := ioutil.ReadAll(res.Body)
|
|
||||||
// if err != nil {
|
|
||||||
// log.Fatalf("Failed to parse file checksum body (%s): %v", dl.Checksum, err)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// re := regexp.MustCompile(`<file name="([^"]+)".*md5="([^"]+)`)
|
func updateBashScriptProductFolder(p *Product, folder string, scriptName string, productNumber int, totalProducts int) {
|
||||||
// m := re.FindSubmatch(body)
|
|
||||||
// if m != nil {
|
|
||||||
// dl.Filename = sanitizeName(string(m[1]))
|
|
||||||
// dl.Md5 = string(m[2])
|
|
||||||
|
|
||||||
// // err = ioutil.WriteFile(folder + "/" + sanitizeName(dl.InstallerName) + "/" + dl.Filename + ".md5", m[2], 0664)
|
|
||||||
// // if err != nil {
|
|
||||||
// // log.Fatalf("Failed to write the checksum file: %v", err)
|
|
||||||
// // }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
func updateBashScriptProductFolder(p *Product, folder string, scriptName string) {
|
|
||||||
|
|
||||||
f, err := os.OpenFile("./" + scriptName, os.O_APPEND|os.O_WRONLY, 0664)
|
f, err := os.OpenFile("./" + scriptName, os.O_APPEND|os.O_WRONLY, 0664)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -258,14 +237,39 @@ func updateBashScriptProductFolder(p *Product, folder string, scriptName string)
|
|||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
_, err = f.WriteString("mkdir -p " + folder + "/" + sanitizeName(p.Title) + "\n")
|
// Get a list of the OS's
|
||||||
|
var osList []string
|
||||||
|
for _, i := range p.Downloads.Installers {
|
||||||
|
exists := false
|
||||||
|
for _, o := range osList {
|
||||||
|
if o == sanitizeName(i.Os) + "/" + sanitizeName(i.Language) {
|
||||||
|
exists = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !exists {
|
||||||
|
osList = append(osList, sanitizeName(i.Os) + "/" + sanitizeName(i.Language))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print out the product
|
||||||
|
_, err = f.WriteString("echo \"[" + strconv.Itoa(productNumber) + " of " + strconv.Itoa(totalProducts) + "]Downloading files for: " + sanitizeName(p.Title) + "\"\n")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to update the script: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a folder for each os installers
|
||||||
|
for _, o := range osList {
|
||||||
|
_, err = f.WriteString("mkdir -p " + folder + "/" + sanitizeName(p.Title) + "/" + o + "\n")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Failed to update the script: %v", err)
|
log.Fatalf("Failed to update the script: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func writeBashScript(dl *DownloadLinks, folder string, scriptName string) {
|
|
||||||
|
func writeBashScript(dl *DownloadLinks, folder string, scriptName string, productNumber int, totalProducts int, fileNumber int, totalFiles int) {
|
||||||
// Find out file name and size; have to follow redirects
|
// Find out file name and size; have to follow redirects
|
||||||
res, err := client.Head(dl.Downlink)
|
res, err := client.Head(dl.Downlink)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -278,8 +282,9 @@ func writeBashScript(dl *DownloadLinks, folder string, scriptName string) {
|
|||||||
dl.Filename = sanitizeName(pp[len(pp) - 1])
|
dl.Filename = sanitizeName(pp[len(pp) - 1])
|
||||||
|
|
||||||
// Add the lines to the script
|
// Add the lines to the script
|
||||||
line := "wget --no-clobber --continue --quiet --show-progress -O \"" + folder + "/" + sanitizeName(dl.InstallerName) + "/" + dl.Filename + ".xml\" \"" + dl.Checksum + "\"\n"
|
line := "echo \"[" + strconv.Itoa(productNumber) + " of " + strconv.Itoa(totalProducts) + "]{" + strconv.Itoa(fileNumber) + "/" + strconv.Itoa(totalFiles) + "}Getting installers for (" + dl.InstallerName + ")" + "\"\n"
|
||||||
line += "wget --no-clobber --continue --quiet --show-progress -O \"" + folder + "/" + sanitizeName(dl.InstallerName) + "/" + dl.Filename + "\" \"" + dl.Downlink + "\"\n"
|
line += "wget --no-clobber --continue --quiet --show-progress -O \"" + folder + "/" + sanitizeName(dl.InstallerName) + "/" + sanitizeName(dl.Os) + "/" + sanitizeName(dl.Language) + "/" + dl.Filename + ".xml\" \"" + dl.Checksum + "\"\n"
|
||||||
|
line += "wget --no-clobber --continue --quiet --show-progress -O \"" + folder + "/" + sanitizeName(dl.InstallerName) + "/" + sanitizeName(dl.Os) + "/" + sanitizeName(dl.Language) + "/" + dl.Filename + "\" \"" + dl.Downlink + "\"\n"
|
||||||
|
|
||||||
f, err := os.OpenFile("./" + scriptName, os.O_APPEND|os.O_WRONLY, 0664)
|
f, err := os.OpenFile("./" + scriptName, os.O_APPEND|os.O_WRONLY, 0664)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -348,11 +353,11 @@ func main() {
|
|||||||
log.Printf("Inspecting product: %d of %d - %d", index, len(gl.Owned), id)
|
log.Printf("Inspecting product: %d of %d - %d", index, len(gl.Owned), id)
|
||||||
p := getProduct(id)
|
p := getProduct(id)
|
||||||
dl := getDownloadLinks(p)
|
dl := getDownloadLinks(p)
|
||||||
updateBashScriptProductFolder(p, productsFolder, scriptName)
|
updateBashScriptProductFolder(p, productsFolder, scriptName, index+1, len(gl.Owned))
|
||||||
|
|
||||||
for _, d := range dl {
|
for idx, d := range dl {
|
||||||
//writeChecksumIfNeeded(d, productsFolder + "/" + sanitizeName(p.Title))
|
//writeChecksumIfNeeded(d, productsFolder + "/" + sanitizeName(p.Title))
|
||||||
writeBashScript(d, productsFolder, scriptName)
|
writeBashScript(d, productsFolder, scriptName, index+1, len(gl.Owned), idx+1, len(dl))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user