diff --git a/fdroid/index.go b/fdroid/index.go index 119ea7e..07d5762 100644 --- a/fdroid/index.go +++ b/fdroid/index.go @@ -49,7 +49,7 @@ type App struct { Donate string `json:"donate"` Bitcoin string `json:"bitcoin"` Litecoin string `json:"litecoin"` - FlattrID string `json:"flattr"` + FlattrID string `json:"flattrID"` SugVersName string `json:"suggestedVersionName"` SugVersCode int `json:"suggestedVersionCode,string"` @@ -193,26 +193,46 @@ func (a *App) TextDesc(w io.Writer) { // Apk is an Android package type Apk struct { - VersName string `json:"versionName"` - VersCode int `json:"versionCode"` - Size int64 `json:"size"` - MinSdk int `json:"sdkver"` - MaxSdk int `json:"maxsdkver"` - ABIs []string `json:"nativecode"` - ApkName string `json:"apkname"` - SrcName string `json:"srcname"` - Sig HexVal `json:"sig"` - Signer HexVal `json:"signer"` - Added UnixDate `json:"added"` - Perms []string `json:"permissions"` - Feats []string `json:"features"` - Hash HexVal `json:"hash"` - HashType string `json:"hashType"` + VersName string `json:"versionName"` + VersCode int `json:"versionCode"` + Size int64 `json:"size"` + MinSdk int `json:"minSdkVersion"` + MaxSdk int `json:"maxSdkVersion"` + ABIs []string `json:"nativecode"` + ApkName string `json:"apkName"` + SrcName string `json:"srcname"` + Sig HexVal `json:"sig"` + Signer HexVal `json:"signer"` + Added UnixDate `json:"added"` + Perms []Permission `json:"uses-permission"` + Feats []string `json:"features"` + Hash HexVal `json:"hash"` + HashType string `json:"hashType"` AppID string `json:"-"` RepoURL string `json:"-"` } +type Permission struct { + Name string + MaxSdk string +} + +func (p *Permission) UnmarshalJSON(data []byte) error { + var v []interface{} + if err := json.Unmarshal(data, &v); err != nil { + fmt.Printf("Error while decoding %v\n", err) + return err + } + p.Name = string(v[0].(string)) + if v[1] == nil { + p.MaxSdk = "" + } else { + p.MaxSdk = fmt.Sprint(v[1].(float64)) + } + return nil +} + func (a *Apk) URL() string { return fmt.Sprintf("%s/%s", a.RepoURL, a.ApkName) } diff --git a/show.go b/show.go index 2e0ca58..e2d659b 100644 --- a/show.go +++ b/show.go @@ -140,8 +140,18 @@ func printAppDetailed(app fdroid.App) { if apk.ABIs != nil { fmt.Printf(" ABIs : %s\n", strings.Join(apk.ABIs, ", ")) } - if apk.Perms != nil { - fmt.Printf(" Perms : %s\n", strings.Join(apk.Perms, ", ")) + if apk.Perms != nil && len(apk.Perms) > 0 { + fmt.Printf(" Perms : ") + for i, value := range apk.Perms { + fmt.Print(value.Name) + if value.MaxSdk != "" { + fmt.Printf(" (MaxSdk %s)", value.MaxSdk) + } + if i != len(apk.Perms)-1 { + fmt.Print(", ") + } + } + fmt.Println() } } }