/
carbonrom.go
114 lines (90 loc) · 3.11 KB
/
carbonrom.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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package get
import (
"github.com/gocolly/colly"
"github.com/amo13/anarchy-droid/helpers"
"github.com/amo13/anarchy-droid/logger"
"strings"
"sort"
"fmt"
)
// Download latest Carbonrom zip into flash folder and return the file name
func Carbonrom(codename string) (string, error) {
dl_url, err := CarbonromLatestAvailableHref(codename)
if err != nil {
return "", err
}
// Parse the file name from the href
file_name := helpers.ExtractFileNameFromHref(dl_url)
err = DownloadFile("flash/" + file_name, dl_url, ".md5sum")
if err != nil {
return "", err
}
return file_name, nil
}
// Returns file name of the latest available Carbonrom zip
func CarbonromLatestAvailableFileName(codename string) (string, error) {
href, err := CarbonromLatestAvailableHref(codename)
if err != nil {
return "", err
}
return helpers.ExtractFileNameFromHref(href), nil
}
// Returns download link of the latest available Carbonrom zip
func CarbonromLatestAvailableHref(codename string) (string, error) {
if A1.Upstream.Rom["Carbonrom"] != nil {
if A1.Upstream.Rom["Carbonrom"].Href != "" {
return A1.Upstream.Rom["Carbonrom"].Href, nil
}
}
url := "https://get.carbonrom.org/device-" + codename + ".html"
status_code, err := StatusCode(url)
if err != nil {
return "", err
}
if status_code == "404 Not Found" {
return "", fmt.Errorf("not available")
}
versions_available := make([]string, 0)
c := colly.NewCollector()
c.OnError(func(_ *colly.Response, err error) {
logger.LogError("Carbonrom:", err)
})
c.OnHTML("td dl dd a", func(e *colly.HTMLElement) {
versions_available = append(versions_available, e.Attr("href"))
})
c.Visit(url)
filter := func(s string) bool { return strings.HasSuffix(s, ".zip") }
versions_available_filtered := helpers.FilterStringSlice(versions_available, filter)
sort.Strings(versions_available_filtered)
latest_available := ""
if len(versions_available_filtered) > 0 {
latest_available = versions_available_filtered[len(versions_available_filtered)-1]
} else {
return "", nil
}
// Populate the A1 structs of availables
A1.Mutex.Lock()
defer A1.Mutex.Unlock()
A1.Upstream.Rom["Carbonrom"] = &Item{}
A1.Upstream.Rom["Carbonrom"].Name = "Carbonrom"
A1.Upstream.Rom["Carbonrom"].Href = latest_available
A1.Upstream.Rom["Carbonrom"].Checksum_url_suffix = ".md5sum"
A1.Upstream.Rom["Carbonrom"].Filename = helpers.ExtractFileNameFromHref(latest_available)
v, err := CarbonromParseVersion(A1.Upstream.Rom["Carbonrom"].Filename)
if err != nil {
return latest_available, fmt.Errorf("unable to parse Carbonrom version in %s", A1.Upstream.Rom["Carbonrom"].Filename)
}
A1.Upstream.Rom["Carbonrom"].Version = v
av, err := CarbonromParseAndroidVersion(v)
if err != nil {
return latest_available, fmt.Errorf("unable to parse Carbonrom Android version with %s", v)
}
A1.Upstream.Rom["Carbonrom"].Android_version = av
return latest_available, nil
}
func CarbonromParseVersion(filename string) (string, error) {
return helpers.GenericParseVersion(filename), nil
}
func CarbonromParseAndroidVersion(romversion string) (string, error) {
return ResurrectionRemixParseAndroidVersion(romversion)
}