Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ce9d4aed23 | |||
| 712a5ab33d | |||
| 6723f933b4 | |||
| 016fc35745 | |||
| ba5e3510ec | |||
| 7e2d7ee14b | |||
| b20de4f1d6 |
@@ -20,7 +20,7 @@ Because apps aren't natively formated in the PortableApps.com format, LinuxPA wi
|
|||||||
|
|
||||||
# AppImage Support
|
# AppImage Support
|
||||||
[AppImage Website](http://appimage.org)
|
[AppImage Website](http://appimage.org)
|
||||||
Right now AppImages are simply supported via the native linux executable support, and you can download AppImages. (Woo)
|
I'm looking into improving AppImage support. As of 2.1.5.0 IF `unsquashfs` is in $PATH then some advanced AppImage support is available and it will automagically get the name and possibly the icon of it. I'm looking into better support, but it might be a while.
|
||||||
|
|
||||||
# USB mount
|
# USB mount
|
||||||
Unfortunately Linux, by default, doesn't support running executables off of FAT formated flash drives, requiring you to mount your drive with special mount arguments or format in a linux friendly format (such as EXT4). I personally use the arguments `exec,noauto,nodev,nosuid,umask=0000`
|
Unfortunately Linux, by default, doesn't support running executables off of FAT formated flash drives, requiring you to mount your drive with special mount arguments or format in a linux friendly format (such as EXT4). I personally use the arguments `exec,noauto,nodev,nosuid,umask=0000`
|
||||||
@@ -30,6 +30,7 @@ Photos are found [Here](https://goo.gl/photos/VtBUL6DyZTMidj5n6). The screenshot
|
|||||||
|
|
||||||
# TODO (Might be in order)
|
# TODO (Might be in order)
|
||||||
1. MAKE IT BETTER
|
1. MAKE IT BETTER
|
||||||
|
1. Try to `chmod +x` executables if they don't have the permission
|
||||||
1. Manual update check
|
1. Manual update check
|
||||||
1. Better AppImage integrations (Specifically updating, getting information from the appimage, and better appimage downloading)
|
1. Better AppImage integrations (Specifically updating, getting information from the appimage, and better appimage downloading)
|
||||||
1. Automagic appimage updating (It will of course ask you beforehand)
|
1. Automagic appimage updating (It will of course ask you beforehand)
|
||||||
|
|||||||
@@ -1,60 +0,0 @@
|
|||||||
package appimg
|
|
||||||
|
|
||||||
import "reflect"
|
|
||||||
|
|
||||||
func convert(in string) (out []tag) {
|
|
||||||
for i := 0; i < len(in); i++ {
|
|
||||||
v := in[i]
|
|
||||||
if v == '<' {
|
|
||||||
for j := i; j < len(in); j++ {
|
|
||||||
val := in[j]
|
|
||||||
if val == '>' {
|
|
||||||
var tmp tag
|
|
||||||
tmp.process(in[i+1 : j+1])
|
|
||||||
if !tmp.end && tmp.typ == "a" {
|
|
||||||
tmp.index[0] = i
|
|
||||||
tmp.index[1] = j
|
|
||||||
nd := fndend(tmp, in[j+1:])
|
|
||||||
if !reflect.DeepEqual(nd, tag{}) {
|
|
||||||
tmp.Meat = in[j+1 : nd.index[0]]
|
|
||||||
out = append(out, tmp)
|
|
||||||
str := in[tmp.index[1]:nd.index[0]]
|
|
||||||
in = in[:i] + str + in[nd.index[1]+1:]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func fndend(fnt tag, area string) tag {
|
|
||||||
var count int
|
|
||||||
for i, v := range area {
|
|
||||||
if v == '<' {
|
|
||||||
for j, val := range area[i:] {
|
|
||||||
if val == '>' {
|
|
||||||
var tmp tag
|
|
||||||
tmp.process(area[i+1 : i+j+1])
|
|
||||||
if tmp.typ == fnt.typ {
|
|
||||||
if tmp.end {
|
|
||||||
if count == 0 {
|
|
||||||
tmp.index[0] = fnt.index[1] + 1 + i
|
|
||||||
tmp.index[1] = fnt.index[1] + j + i + 1
|
|
||||||
return tmp
|
|
||||||
}
|
|
||||||
count--
|
|
||||||
break
|
|
||||||
} else {
|
|
||||||
count++
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return tag{}
|
|
||||||
}
|
|
||||||
-115
@@ -1,115 +0,0 @@
|
|||||||
package appimg
|
|
||||||
|
|
||||||
import "strings"
|
|
||||||
|
|
||||||
type tag struct {
|
|
||||||
typ string
|
|
||||||
end bool
|
|
||||||
params map[string]string
|
|
||||||
index [2]int
|
|
||||||
Meat string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *tag) value(param string) string {
|
|
||||||
return t.params[param]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *tag) setValue(param, value string) {
|
|
||||||
if t.params == nil {
|
|
||||||
t.params = make(map[string]string)
|
|
||||||
}
|
|
||||||
t.params[strings.TrimSpace(strings.ToLower(param))] = strings.TrimSpace(value)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *tag) process(bbtag string) {
|
|
||||||
if strings.HasPrefix(bbtag, "/") {
|
|
||||||
t.end = true
|
|
||||||
t.typ = strings.ToLower(strings.TrimPrefix(bbtag[:len(bbtag)-1], "/"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for i, v := range bbtag {
|
|
||||||
if v == '=' || v == ' ' || v == '>' {
|
|
||||||
t.typ = strings.ToLower(bbtag[:i])
|
|
||||||
switch v {
|
|
||||||
case '=':
|
|
||||||
if qt := bbtag[i+1]; qt == '\'' || qt == '"' {
|
|
||||||
for j := i + 2; j < len(bbtag); j++ {
|
|
||||||
if bbtag[j] == qt {
|
|
||||||
t.setValue("starting", bbtag[i+2:j])
|
|
||||||
bbtag = bbtag[j+1:]
|
|
||||||
break
|
|
||||||
} else if bbtag[j] == '>' {
|
|
||||||
t.setValue("starting", bbtag[i+2:j])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for j := i + 1; j < len(bbtag); j++ {
|
|
||||||
if bbtag[j] == '>' {
|
|
||||||
t.setValue("starting", bbtag[i+1:j])
|
|
||||||
return
|
|
||||||
} else if bbtag[j] == ' ' {
|
|
||||||
t.setValue("starting", bbtag[i+1:j])
|
|
||||||
bbtag = bbtag[j+1:]
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case '>':
|
|
||||||
return
|
|
||||||
case ' ':
|
|
||||||
bbtag = bbtag[i:]
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
t.processFurther(bbtag)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *tag) processFurther(further string) {
|
|
||||||
further = strings.TrimSpace(further)
|
|
||||||
for i := 0; i < len(further); i++ {
|
|
||||||
switch further[i] {
|
|
||||||
case ' ':
|
|
||||||
t.setValue(strings.ToLower(further[:i]), further[:i])
|
|
||||||
further = strings.TrimSpace(further[i:])
|
|
||||||
i = -1
|
|
||||||
case '=':
|
|
||||||
if qt := further[i+1]; qt == '\'' || qt == '"' {
|
|
||||||
outloopqt:
|
|
||||||
for j := i + 2; j < len(further); j++ {
|
|
||||||
switch further[j] {
|
|
||||||
case '>':
|
|
||||||
t.setValue(strings.ToLower(further[:i]), further[i+2:j])
|
|
||||||
return
|
|
||||||
case qt:
|
|
||||||
t.setValue(strings.ToLower(further[:i]), further[i+2:j])
|
|
||||||
further = strings.TrimSpace(further[j+1:])
|
|
||||||
i = -1
|
|
||||||
break outloopqt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
outloop:
|
|
||||||
for j := i + 1; j < len(further); j++ {
|
|
||||||
switch further[j] {
|
|
||||||
case '>':
|
|
||||||
t.setValue(strings.ToLower(further[:i]), further[i+1:j])
|
|
||||||
return
|
|
||||||
case ' ':
|
|
||||||
t.setValue(strings.ToLower(further[:i]), further[i+1:j])
|
|
||||||
further = strings.TrimSpace(further[j:])
|
|
||||||
i = -1
|
|
||||||
break outloop
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case '>':
|
|
||||||
if i != 0 {
|
|
||||||
t.setValue(strings.ToLower(further[:i]), further[:i])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package appimg
|
|
||||||
|
|
||||||
type appimg struct {
|
|
||||||
full string
|
|
||||||
name string
|
|
||||||
version string
|
|
||||||
}
|
|
||||||
|
|
||||||
func newApp(name string) appimg {
|
|
||||||
var out appimg
|
|
||||||
out.full = name
|
|
||||||
return out
|
|
||||||
}
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
package appimg
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/gotk3/gotk3/gtk"
|
|
||||||
)
|
|
||||||
|
|
||||||
func downloadApp(parent *gtk.Window, ap appimg) {
|
|
||||||
parent.SetSensitive(false)
|
|
||||||
win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
|
|
||||||
win.SetTransientFor(parent)
|
|
||||||
win.Connect("destroy", func() {
|
|
||||||
parent.SetSensitive(true)
|
|
||||||
})
|
|
||||||
spn, _ := gtk.SpinnerNew()
|
|
||||||
spn.Start()
|
|
||||||
lbl, _ := gtk.LabelNew("Downloading " + ap.full + "...")
|
|
||||||
box, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
|
||||||
box.SetMarginStart(10)
|
|
||||||
box.SetMarginEnd(10)
|
|
||||||
box.SetMarginTop(10)
|
|
||||||
box.SetMarginBottom(10)
|
|
||||||
box.Add(spn)
|
|
||||||
box.Add(lbl)
|
|
||||||
win.Add(box)
|
|
||||||
win.SetPosition(gtk.WIN_POS_CENTER_ON_PARENT)
|
|
||||||
win.ShowAll()
|
|
||||||
win.Show()
|
|
||||||
go func(win *gtk.Window, ap appimg) {
|
|
||||||
defer win.Close()
|
|
||||||
check := http.Client{
|
|
||||||
CheckRedirect: func(r *http.Request, via []*http.Request) error {
|
|
||||||
r.URL.Opaque = r.URL.Path
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
}
|
|
||||||
resp, err := check.Get(urlBase + ap.full)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
name := strings.Split(ap.full, "-")[0]
|
|
||||||
var foldName string
|
|
||||||
if _, err = os.Open("PortableApps/" + name + "Portable"); err == nil {
|
|
||||||
foldName = "PortableApps/" + name + "Portable"
|
|
||||||
} else if _, err = os.Open("PortableApps/" + name); err == nil {
|
|
||||||
foldName = "PortableApps/" + name
|
|
||||||
} else {
|
|
||||||
os.Mkdir("PortableApps/"+name+"Portable", 0777)
|
|
||||||
foldName = "PortableApps/" + name + "Portable"
|
|
||||||
}
|
|
||||||
os.Remove(foldName + "/" + ap.full)
|
|
||||||
fil, err := os.Create(foldName + "/" + ap.full)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
io.Copy(fil, resp.Body)
|
|
||||||
fil.Chmod(0777)
|
|
||||||
}(win, ap)
|
|
||||||
}
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
//Package appimg is for downloading new AppImages for LinuxPA
|
|
||||||
package appimg
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"net/http"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/gotk3/gotk3/glib"
|
|
||||||
"github.com/gotk3/gotk3/gtk"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
urlBase = "https://dl.bintray.com/probono/AppImages/"
|
|
||||||
)
|
|
||||||
|
|
||||||
//ShowUI shows the list of possible AppImages to be downloaded in a gtk.Window
|
|
||||||
func ShowUI(newestVersionOnly bool, clsFunc func()) {
|
|
||||||
win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
|
|
||||||
win.Connect("destroy", func() {
|
|
||||||
clsFunc()
|
|
||||||
})
|
|
||||||
apps := make([]appimg, 0)
|
|
||||||
win.SetSizeRequest(400, 400)
|
|
||||||
box, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
|
||||||
appList, _ := gtk.ListBoxNew()
|
|
||||||
apch := make(chan appimg)
|
|
||||||
appList.SetHExpand(true)
|
|
||||||
appList.SetVExpand(true)
|
|
||||||
vScrollCat, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0)
|
|
||||||
hScrollCat, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0)
|
|
||||||
lst, _ := gtk.ScrolledWindowNew(hScrollCat, vScrollCat)
|
|
||||||
lst.SetSizeRequest(170, 500)
|
|
||||||
lst.Add(appList)
|
|
||||||
box.Add(lst)
|
|
||||||
win.Add(box)
|
|
||||||
appList.Connect("row-activated", func() {
|
|
||||||
if appList.GetSelectedRow().GetIndex() >= 0 {
|
|
||||||
downloadApp(win, apps[appList.GetSelectedRow().GetIndex()])
|
|
||||||
}
|
|
||||||
})
|
|
||||||
win.SetPosition(gtk.WIN_POS_CENTER_ON_PARENT)
|
|
||||||
win.ShowAll()
|
|
||||||
win.Show()
|
|
||||||
getList(win, apch)
|
|
||||||
go func(win *gtk.Window, apch chan appimg, list *gtk.ListBox) {
|
|
||||||
if newestVersionOnly {
|
|
||||||
imgs := make([]appimg, 0)
|
|
||||||
a := make(map[string][]appimg)
|
|
||||||
names := make([]string, 0)
|
|
||||||
for i := range apch {
|
|
||||||
imgs = append(imgs, i)
|
|
||||||
}
|
|
||||||
for i, v := range imgs {
|
|
||||||
sp := strings.Split(v.full, "-")
|
|
||||||
if len(sp) >= 2 {
|
|
||||||
vers := sp[1]
|
|
||||||
removeLetters(vers)
|
|
||||||
imgs[i].version = vers
|
|
||||||
imgs[i].name = sp[0]
|
|
||||||
if _, ok := a[imgs[i].name]; !ok {
|
|
||||||
names = append(names, imgs[i].name)
|
|
||||||
}
|
|
||||||
a[imgs[i].name] = append(a[imgs[i].name], imgs[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sort.Strings(names)
|
|
||||||
for _, name := range names {
|
|
||||||
glib.IdleAdd(func(name string, list *gtk.ListBox, i appimg) {
|
|
||||||
lbl, _ := gtk.LabelNew(name)
|
|
||||||
list.Add(lbl)
|
|
||||||
apps = append(apps, i)
|
|
||||||
lbl.Show()
|
|
||||||
}, name, list, a[name][compareVersions(a[name])])
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for i := range apch {
|
|
||||||
glib.IdleAdd(func(list *gtk.ListBox, i appimg) {
|
|
||||||
lbl, _ := gtk.LabelNew(i.full)
|
|
||||||
list.Add(lbl)
|
|
||||||
apps = append(apps, i)
|
|
||||||
lbl.Show()
|
|
||||||
}, list, i)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}(win, apch, appList)
|
|
||||||
}
|
|
||||||
|
|
||||||
func getList(parent *gtk.Window, apch chan appimg) {
|
|
||||||
win, _ := gtk.WindowNew(gtk.WINDOW_POPUP)
|
|
||||||
win.SetTransientFor(parent)
|
|
||||||
win.SetDestroyWithParent(true)
|
|
||||||
win.Connect("destroy", func() {
|
|
||||||
parent.SetSensitive(true)
|
|
||||||
})
|
|
||||||
parent.SetSensitive(false)
|
|
||||||
spin, _ := gtk.SpinnerNew()
|
|
||||||
spin.Start()
|
|
||||||
txt, _ := gtk.LabelNew("Getting List...")
|
|
||||||
box, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
|
||||||
box.SetMarginBottom(10)
|
|
||||||
box.SetMarginEnd(10)
|
|
||||||
box.SetMarginStart(10)
|
|
||||||
box.SetMarginTop(10)
|
|
||||||
box.Add(spin)
|
|
||||||
box.Add(txt)
|
|
||||||
win.Add(box)
|
|
||||||
win.SetPosition(gtk.WIN_POS_CENTER_ON_PARENT)
|
|
||||||
win.ShowAll()
|
|
||||||
win.Show()
|
|
||||||
go func(win *gtk.Window, apch chan appimg) {
|
|
||||||
check := http.Client{
|
|
||||||
CheckRedirect: func(r *http.Request, via []*http.Request) error {
|
|
||||||
r.URL.Opaque = r.URL.Path
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
}
|
|
||||||
resp, err := check.Get(urlBase)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
close(apch)
|
|
||||||
win.Close()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
btys, err := ioutil.ReadAll(resp.Body)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
close(apch)
|
|
||||||
win.Close()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
tgs := convert(string(btys))
|
|
||||||
for _, v := range tgs {
|
|
||||||
if strings.HasSuffix(strings.ToLower(v.Meat), ".appimage") {
|
|
||||||
apch <- newApp(v.Meat)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(apch)
|
|
||||||
win.Close()
|
|
||||||
}(win, apch)
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package appimg
|
|
||||||
|
|
||||||
import "strings"
|
|
||||||
|
|
||||||
func removeLetters(vers string) string {
|
|
||||||
vers = strings.ToLower(vers)
|
|
||||||
letters := []string{"abcdefghijklmnopqrstuvwxyz"}
|
|
||||||
for _, v := range letters {
|
|
||||||
vers = strings.Replace(vers, v, "", -1)
|
|
||||||
}
|
|
||||||
return vers
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
package appimg
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func compareVersions(imgs []appimg) int {
|
|
||||||
for i := range imgs {
|
|
||||||
imgs[i].version = removeLetters(imgs[i].version)
|
|
||||||
}
|
|
||||||
highest := 0
|
|
||||||
higharr := strings.Split(imgs[0].version, ".")
|
|
||||||
for i := 0; i < len(imgs); i++ {
|
|
||||||
if i != highest {
|
|
||||||
varr := strings.Split(imgs[i].version, ".")
|
|
||||||
if len(higharr) < len(varr) {
|
|
||||||
for j := 0; j < len(higharr); j++ {
|
|
||||||
h, _ := strconv.Atoi(higharr[j])
|
|
||||||
c, _ := strconv.Atoi(varr[j])
|
|
||||||
if h > c {
|
|
||||||
break
|
|
||||||
} else if c > h {
|
|
||||||
highest = i
|
|
||||||
higharr = varr
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return highest
|
|
||||||
}
|
|
||||||
@@ -3,7 +3,11 @@ module github.com/CalebQ42/LinuxPA
|
|||||||
go 1.15
|
go 1.15
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/CalebQ42/GoAppImage v0.1.1
|
github.com/CalebQ42/GoAppImage v0.4.0
|
||||||
github.com/gotk3/gotk3 v0.5.0
|
github.com/gotk3/gotk3 v0.5.0
|
||||||
github.com/mholt/archiver/v3 v3.5.0
|
github.com/mholt/archiver/v3 v3.5.0
|
||||||
|
github.com/pkg/browser v0.0.0-20201112035734-206646e67786
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//For testing local changes to my library
|
||||||
|
// replace github.com/CalebQ42/GoAppImage => ../GoAppImage
|
||||||
|
|||||||
@@ -1,135 +1,71 @@
|
|||||||
|
github.com/CalebQ42/GoAppImage v0.4.0 h1:aF+Y/vyo/RGhoyZEW1CMY6WyRWrZZO4ydsRFAtIGnaY=
|
||||||
|
github.com/CalebQ42/GoAppImage v0.4.0/go.mod h1:qHudJKAn/dlkNWNnH4h1YKXp29EZ7Bppsn7sNP2HuvU=
|
||||||
github.com/adrg/xdg v0.2.2 h1:A7ZHKRz5KGOLJX/bg7IPzStryhvCzAE1wX+KWawPiAo=
|
github.com/adrg/xdg v0.2.2 h1:A7ZHKRz5KGOLJX/bg7IPzStryhvCzAE1wX+KWawPiAo=
|
||||||
github.com/adrg/xdg v0.2.2/go.mod h1:7I2hH/IT30IsupOpKZ5ue7/qNi3CoKzD6tL3HwpaRMQ=
|
github.com/adrg/xdg v0.2.2/go.mod h1:7I2hH/IT30IsupOpKZ5ue7/qNi3CoKzD6tL3HwpaRMQ=
|
||||||
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs=
|
|
||||||
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
|
|
||||||
github.com/alokmenghrajani/gpgeez v0.0.0-20161206084504-1a06f1c582f9 h1:Zio/mdDEpJDG1yeH9y2Kcb9ATWXkE7WIBkO+IMqRbbM=
|
|
||||||
github.com/alokmenghrajani/gpgeez v0.0.0-20161206084504-1a06f1c582f9/go.mod h1:u65XFfs2+s//7QVkp5Q1NEZl4zVep2BtubxiSXJERN8=
|
|
||||||
github.com/andybalholm/brotli v1.0.0 h1:7UCwP93aiSfvWpapti8g88vVVGp2qqtGyePsSuDafo4=
|
github.com/andybalholm/brotli v1.0.0 h1:7UCwP93aiSfvWpapti8g88vVVGp2qqtGyePsSuDafo4=
|
||||||
github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
|
github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
|
||||||
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
|
|
||||||
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
|
|
||||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
|
|
||||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
|
|
||||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q=
|
github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q=
|
||||||
github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo=
|
github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo=
|
||||||
github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY=
|
github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY=
|
||||||
github.com/eclipse/paho.mqtt.golang v1.2.0 h1:1F8mhG9+aO5/xpdtFkW4SxOJB67ukuDC3t2y2qayIX0=
|
|
||||||
github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts=
|
|
||||||
github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
|
|
||||||
github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
|
|
||||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
|
|
||||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
|
||||||
github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0=
|
|
||||||
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
|
|
||||||
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
||||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
|
||||||
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
|
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
|
||||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY=
|
|
||||||
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
|
|
||||||
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
|
|
||||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gotk3/gotk3 v0.5.0 h1:GOkq4cFgAfeK6YAukLi64bz8zPayZKeCSSRr4mcFReQ=
|
github.com/gotk3/gotk3 v0.5.0 h1:GOkq4cFgAfeK6YAukLi64bz8zPayZKeCSSRr4mcFReQ=
|
||||||
github.com/gotk3/gotk3 v0.5.0/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
github.com/gotk3/gotk3 v0.5.0/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
|
||||||
github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI=
|
|
||||||
github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
|
||||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
|
|
||||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
|
|
||||||
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
|
||||||
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY=
|
|
||||||
github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
|
|
||||||
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||||
github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I=
|
github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I=
|
||||||
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||||
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
github.com/klauspost/pgzip v1.2.4 h1:TQ7CNpYKovDOmqzRHKxJh0BeaBI7UdQZYc6p7pMQh1A=
|
github.com/klauspost/pgzip v1.2.4 h1:TQ7CNpYKovDOmqzRHKxJh0BeaBI7UdQZYc6p7pMQh1A=
|
||||||
github.com/klauspost/pgzip v1.2.4/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
|
github.com/klauspost/pgzip v1.2.4/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
|
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/mholt/archiver/v3 v3.5.0 h1:nE8gZIrw66cu4osS/U7UW7YDuGMHssxKutU8IfWxwWE=
|
github.com/mholt/archiver/v3 v3.5.0 h1:nE8gZIrw66cu4osS/U7UW7YDuGMHssxKutU8IfWxwWE=
|
||||||
github.com/mholt/archiver/v3 v3.5.0/go.mod h1:qqTTPUK/HZPFgFQ/TJ3BzvTpF/dPtFVJXdQbCmeMxwc=
|
github.com/mholt/archiver/v3 v3.5.0/go.mod h1:qqTTPUK/HZPFgFQ/TJ3BzvTpF/dPtFVJXdQbCmeMxwc=
|
||||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||||
github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ=
|
github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ=
|
||||||
github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
|
github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
|
||||||
github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
|
|
||||||
github.com/pierrec/lz4/v4 v4.0.3 h1:vNQKSVZNYUEAvRY9FaUXAF1XPbSOHJtDTiP41kzDz2E=
|
github.com/pierrec/lz4/v4 v4.0.3 h1:vNQKSVZNYUEAvRY9FaUXAF1XPbSOHJtDTiP41kzDz2E=
|
||||||
github.com/pierrec/lz4/v4 v4.0.3/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
github.com/pierrec/lz4/v4 v4.0.3/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
|
||||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
github.com/pkg/browser v0.0.0-20201112035734-206646e67786 h1:4Gk0Dsp90g2YwfsxDOjvkEIgKGh+2R9FlvormRycveA=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/browser v0.0.0-20201112035734-206646e67786/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
|
|
||||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||||
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
||||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4=
|
|
||||||
github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI=
|
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
|
||||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8=
|
github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8=
|
||||||
github.com/ulikunitz/xz v0.5.7 h1:YvTNdFzX6+W5m9msiYg/zpkSURPPtOlzbqYjrFn7Yt4=
|
github.com/ulikunitz/xz v0.5.7 h1:YvTNdFzX6+W5m9msiYg/zpkSURPPtOlzbqYjrFn7Yt4=
|
||||||
github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||||
github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70=
|
|
||||||
github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
|
|
||||||
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
|
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
|
||||||
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
|
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
|
||||||
go.lsp.dev/uri v0.3.0 h1:KcZJmh6nFIBeJzTugn5JTU6OOyG0lDOo3R9KwTxTYbo=
|
go.lsp.dev/uri v0.3.0 h1:KcZJmh6nFIBeJzTugn5JTU6OOyG0lDOo3R9KwTxTYbo=
|
||||||
go.lsp.dev/uri v0.3.0/go.mod h1:P5sbO1IQR+qySTWOCnhnK7phBx+W3zbLqSMDJNTw88I=
|
go.lsp.dev/uri v0.3.0/go.mod h1:P5sbO1IQR+qySTWOCnhnK7phBx+W3zbLqSMDJNTw88I=
|
||||||
golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
|
||||||
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E=
|
|
||||||
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk=
|
|
||||||
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e h1:D5TXcfTk7xF7hvieo4QErS3qqCB4teTffacDWr7CI+0=
|
|
||||||
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
|
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
|
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
|
||||||
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg=
|
|
||||||
gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98=
|
|
||||||
gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 h1:ivZFOIltbce2Mo8IjzUHAFoq/IylO9WHhNOAJK+LsJg=
|
|
||||||
gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g=
|
|
||||||
gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE=
|
|
||||||
gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8=
|
|
||||||
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
|
|
||||||
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
version = "2.1.5.0"
|
version = "2.1.5.2"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -75,9 +75,11 @@ func processApp(fold string) (out app) {
|
|||||||
fis, _ := folder.Readdirnames(-1)
|
fis, _ := folder.Readdirnames(-1)
|
||||||
for _, v := range fis {
|
for _, v := range fis {
|
||||||
tmp, _ := os.Open(fold + "/" + v)
|
tmp, _ := os.Open(fold + "/" + v)
|
||||||
if stat, _ := tmp.Stat(); stat.IsDir() {
|
stat, _ := tmp.Stat()
|
||||||
|
if stat.IsDir() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
//TODO: check permission to see if it has exec permission
|
||||||
if strings.HasSuffix(strings.ToLower(v), ".appimage") {
|
if strings.HasSuffix(strings.ToLower(v), ".appimage") {
|
||||||
out.appimg = append(out.appimg, v)
|
out.appimg = append(out.appimg, v)
|
||||||
out.ex = append(out.ex, v)
|
out.ex = append(out.ex, v)
|
||||||
@@ -182,6 +184,7 @@ func processApp(fold string) (out app) {
|
|||||||
if portableHide {
|
if portableHide {
|
||||||
out.name = strings.TrimSuffix(out.name, "Portable")
|
out.name = strings.TrimSuffix(out.name, "Portable")
|
||||||
}
|
}
|
||||||
|
out.name = strings.TrimSpace(out.name)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/CalebQ42/LinuxPA/appimg"
|
|
||||||
"github.com/gotk3/gotk3/glib"
|
"github.com/gotk3/gotk3/glib"
|
||||||
"github.com/gotk3/gotk3/gtk"
|
"github.com/gotk3/gotk3/gtk"
|
||||||
|
"github.com/pkg/browser"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ui(win *gtk.Window) {
|
func ui(win *gtk.Window) {
|
||||||
@@ -140,22 +140,8 @@ func ui(win *gtk.Window) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
dnl.Connect("clicked", func() {
|
dnl.Connect("clicked", func() {
|
||||||
appimg.ShowUI(versionNewest, func() {
|
//TODO: detect if a webbrowser app is available and use that instead
|
||||||
master = make(map[string][]app)
|
browser.OpenURL("https://appimage.github.io/apps/")
|
||||||
linmaster = make(map[string][]app)
|
|
||||||
cats = make([]string, 0)
|
|
||||||
lin = make([]string, 0)
|
|
||||||
setup()
|
|
||||||
store.Clear()
|
|
||||||
for i := range ls {
|
|
||||||
catList.Remove(catList.GetRowAtIndex(len(ls) - i - 1))
|
|
||||||
}
|
|
||||||
ls = getCatRows()
|
|
||||||
for i, v := range ls {
|
|
||||||
catList.Insert(v, i)
|
|
||||||
}
|
|
||||||
catList.ShowAll()
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
settings.Connect("clicked", func() {
|
settings.Connect("clicked", func() {
|
||||||
settingsUI(win, func() {
|
settingsUI(win, func() {
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ import (
|
|||||||
const (
|
const (
|
||||||
versionURL = "https://www.dropbox.com/s/a0xizzo0a4vsfqt/Version?dl=1"
|
versionURL = "https://www.dropbox.com/s/a0xizzo0a4vsfqt/Version?dl=1"
|
||||||
downloadURL = "https://github.com/CalebQ42/LinuxPA/releases/download/vXXX/LinuxPA"
|
downloadURL = "https://github.com/CalebQ42/LinuxPA/releases/download/vXXX/LinuxPA"
|
||||||
changelogURL = "https://www.dropbox.com/s/nmbk318er5kej5h/Changelog?dl=1"
|
changelogURL = "https://www.dropbox.com/s/rk8ec9p14imkh03/Changelog?dl=1"
|
||||||
changelogBetaURL = "https://www.dropbox.com/s/m8mo2o3nsvfqbfx/ChangelogBeta?dl=1"
|
changelogBetaURL = "https://www.dropbox.com/s/h2u34g5s8qr8sef/ChangelogBeta?dl=1"
|
||||||
)
|
)
|
||||||
|
|
||||||
//Thanks to https://www.socketloop.com/tutorials/golang-download-file-example
|
//Thanks to https://www.socketloop.com/tutorials/golang-download-file-example
|
||||||
@@ -170,11 +170,13 @@ func update(win *gtk.Window, forced bool) {
|
|||||||
updateWin, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
|
updateWin, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
|
||||||
updateWin.SetTransientFor(win)
|
updateWin.SetTransientFor(win)
|
||||||
updateWin.SetPosition(gtk.WIN_POS_CENTER)
|
updateWin.SetPosition(gtk.WIN_POS_CENTER)
|
||||||
|
updateWin.SetDefaultSize(600, 300)
|
||||||
topLvl, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
topLvl, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
||||||
lbl, _ := gtk.LabelNew("There's a new update! Here's the changelog:")
|
lbl, _ := gtk.LabelNew("There's a new update! Here's the changelog:")
|
||||||
tagTbl, _ := gtk.TextTagTableNew()
|
tagTbl, _ := gtk.TextTagTableNew()
|
||||||
buf, _ := gtk.TextBufferNew(tagTbl)
|
buf, _ := gtk.TextBufferNew(tagTbl)
|
||||||
tv, _ := gtk.TextViewNewWithBuffer(buf)
|
tv, _ := gtk.TextViewNewWithBuffer(buf)
|
||||||
|
tv.SetWrapMode(gtk.WRAP_WORD)
|
||||||
tv.SetEditable(false)
|
tv.SetEditable(false)
|
||||||
buf.SetText(getChangelog())
|
buf.SetText(getChangelog())
|
||||||
butBox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 5)
|
butBox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 5)
|
||||||
|
|||||||
Reference in New Issue
Block a user