F-Droid desktop client
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
2.6 KiB

/* Copyright (c) 2015, Daniel Martí <mvdan@mvdan.cc> */
/* See LICENSE for licensing information */
package main
import (
"fmt"
"log"
"os"
"strings"
"github.com/mvdan/fdroidcl"
)
var cmdShow = &Command{
UsageLine: "show <appid...>",
Short: "Show detailed info about an app",
}
func init() {
cmdShow.Run = runShow
}
func findApps(ids []string) []*fdroidcl.App {
index := mustLoadIndex()
apps := make(map[string]*fdroidcl.App, len(index.Apps))
for i := range index.Apps {
app := &index.Apps[i]
apps[app.ID] = app
}
result := make([]*fdroidcl.App, len(ids))
for i, id := range ids {
app, _ := apps[id]
result[i] = app
}
return result
}
func runShow(args []string) {
apps := findApps(args)
for i, app := range apps {
if app == nil {
log.Fatalf("Could not find app with ID '%s'", args[i])
}
if i > 0 {
fmt.Printf("\n--\n\n")
}
printAppDetailed(*app)
}
}
func printAppDetailed(app fdroidcl.App) {
p := func(title string, format string, args ...interface{}) {
if format == "" {
fmt.Println(title)
} else {
fmt.Printf("%s %s\n", title, fmt.Sprintf(format, args...))
}
}
p("Package :", "%s", app.ID)
p("Name :", "%s", app.Name)
p("Summary :", "%s", app.Summary)
p("Current Version :", "%s (%d)", app.CurApk.VName, app.CurApk.VCode)
p("Upstream Version :", "%s (%d)", app.CVName, app.CVCode)
p("License :", "%s", app.License)
if app.Categs != nil {
p("Categories :", "%s", strings.Join(app.Categs, ", "))
}
if app.Website != "" {
p("Website :", "%s", app.Website)
}
if app.Source != "" {
p("Source :", "%s", app.Source)
}
if app.Tracker != "" {
p("Tracker :", "%s", app.Tracker)
}
if app.Changelog != "" {
p("Changelog :", "%s", app.Changelog)
}
if app.Donate != "" {
p("Donate :", "%s", app.Donate)
}
if app.Bitcoin != "" {
p("Bitcoin :", "bitcoin:%s", app.Bitcoin)
}
if app.Litecoin != "" {
p("Litecoin :", "litecoin:%s", app.Litecoin)
}
if app.Dogecoin != "" {
p("Dogecoin :", "dogecoin:%s", app.Dogecoin)
}
if app.FlattrID != "" {
p("Flattr :", "https://flattr.com/thing/%s", app.FlattrID)
}
fmt.Println()
p("Description :", "")
fmt.Println()
app.TextDesc(os.Stdout)
fmt.Println()
p("Available Versions :", "")
for _, apk := range app.Apks {
fmt.Println()
p(" Name :", "%s (%d)", apk.VName, apk.VCode)
p(" Size :", "%d", apk.Size)
p(" MinSdk :", "%d", apk.MinSdk)
if apk.MaxSdk > 0 {
p(" MaxSdk :", "%d", apk.MaxSdk)
}
if apk.ABIs != nil {
p(" ABIs :", "%s", strings.Join(apk.ABIs, ", "))
}
}
}