Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a55c82483a | |||
| 9e9bb82025 |
+3
-1
@@ -1,11 +1,13 @@
|
||||
package appimg
|
||||
|
||||
type appimg struct {
|
||||
full string
|
||||
name string
|
||||
version string
|
||||
}
|
||||
|
||||
func newApp(name string) appimg {
|
||||
var out appimg
|
||||
out.name = name
|
||||
out.full = name
|
||||
return out
|
||||
}
|
||||
|
||||
+7
-6
@@ -19,7 +19,7 @@ func downloadApp(parent *gtk.Window, ap appimg) {
|
||||
})
|
||||
spn, _ := gtk.SpinnerNew()
|
||||
spn.Start()
|
||||
lbl, _ := gtk.LabelNew("Downloading " + ap.name + "...")
|
||||
lbl, _ := gtk.LabelNew("Downloading " + ap.full + "...")
|
||||
box, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
||||
box.SetMarginStart(10)
|
||||
box.SetMarginEnd(10)
|
||||
@@ -39,28 +39,29 @@ func downloadApp(parent *gtk.Window, ap appimg) {
|
||||
return nil
|
||||
},
|
||||
}
|
||||
resp, err := check.Get(urlBase + ap.name)
|
||||
resp, err := check.Get(urlBase + ap.full)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
name := strings.Split(ap.name, "-")[0]
|
||||
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, 0777)
|
||||
os.Mkdir("PortableApps/"+name+"Portable", 0777)
|
||||
foldName = "PortableApps/" + name
|
||||
}
|
||||
fil, err := os.Create(foldName + "/" + ap.name)
|
||||
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)
|
||||
fil.Chmod(0777)
|
||||
}(win, ap)
|
||||
}
|
||||
|
||||
+34
-2
@@ -5,6 +5,7 @@ import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/gotk3/gotk3/glib"
|
||||
@@ -16,7 +17,7 @@ const (
|
||||
)
|
||||
|
||||
//ShowUI shows the list of possible AppImages to be downloaded in a gtk.Window
|
||||
func ShowUI(clsFunc func()) {
|
||||
func ShowUI(newestVersionOnly bool, clsFunc func()) {
|
||||
win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
|
||||
win.Connect("destroy", func() {
|
||||
clsFunc()
|
||||
@@ -45,14 +46,45 @@ func ShowUI(clsFunc func()) {
|
||||
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.name)
|
||||
lbl, _ := gtk.LabelNew(i.full)
|
||||
list.Add(lbl)
|
||||
apps = append(apps, i)
|
||||
lbl.Show()
|
||||
}, list, i)
|
||||
}
|
||||
}
|
||||
}(win, apch, appList)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
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
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
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
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
version = "2.1.0.5"
|
||||
version = "2.1.1.0"
|
||||
defIni = ""
|
||||
)
|
||||
|
||||
@@ -21,6 +21,8 @@ var (
|
||||
wine bool
|
||||
comEnbld bool
|
||||
wineAvail bool
|
||||
portableHide bool
|
||||
versionNewest = true
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -52,15 +54,24 @@ func uiStart() {
|
||||
}
|
||||
|
||||
func savePrefs() {
|
||||
fil, err := os.Open("PortableApps/LinuxPACom/Prefs.gob")
|
||||
if os.IsNotExist(err) {
|
||||
fil, err = os.Create("PortableApps/LinuxPACom/Prefs.gob")
|
||||
}
|
||||
os.Remove("PortableApps/LinuxPACom/Prefs.gob")
|
||||
fil, err := os.Create("PortableApps/LinuxPACom/Prefs.gob")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
enc := gob.NewEncoder(fil)
|
||||
enc.Encode(wine)
|
||||
err = enc.Encode(wine)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = enc.Encode(portableHide)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = enc.Encode(versionNewest)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func loadPrefs() {
|
||||
@@ -69,7 +80,18 @@ func loadPrefs() {
|
||||
return
|
||||
}
|
||||
dec := gob.NewDecoder(fil)
|
||||
dec.Decode(&wine)
|
||||
err = dec.Decode(&wine)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = dec.Decode(&portableHide)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = dec.Decode(&versionNewest)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func contains(arr []string, str string) bool {
|
||||
|
||||
+55
-4
@@ -3,14 +3,22 @@ package main
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
||||
"github.com/gotk3/gotk3/glib"
|
||||
"github.com/gotk3/gotk3/gtk"
|
||||
)
|
||||
|
||||
func settingsUI() {
|
||||
func settingsUI(parent *gtk.Window, onExit func()) {
|
||||
win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
|
||||
win.SetTransientFor(parent)
|
||||
parent.SetSensitive(false)
|
||||
win.SetDefaultSize(600, 300)
|
||||
win.SetPosition(gtk.WIN_POS_CENTER)
|
||||
win.SetPosition(gtk.WIN_POS_CENTER_ON_PARENT)
|
||||
win.Connect("destroy", func() {
|
||||
parent.SetSensitive(true)
|
||||
onExit()
|
||||
})
|
||||
comTagTbl, _ := gtk.TextTagTableNew()
|
||||
comBuf, _ := gtk.TextBufferNew(comTagTbl)
|
||||
ntbk, _ := gtk.NotebookNew()
|
||||
@@ -20,8 +28,8 @@ func settingsUI() {
|
||||
gnrl.SetMarginTop(10)
|
||||
gnrl.SetMarginBottom(10)
|
||||
dlWine, _ := gtk.ButtonNewWithLabel("Download Wine")
|
||||
wineCheck, _ := gtk.CheckButtonNewWithLabel("Show Windows apps (Wine)")
|
||||
wineLbl, _ := gtk.LabelNew("PortableApps/LinuxPACom/Wine present")
|
||||
gnrl.Add(wineLbl)
|
||||
dlWine.Connect("clicked", func() {
|
||||
cb := make(chan bool)
|
||||
downloadWine(win, cb)
|
||||
@@ -31,13 +39,56 @@ func settingsUI() {
|
||||
setupTxt(comBuf)
|
||||
wineLbl.Show()
|
||||
}
|
||||
if _, err := os.Open("PortableApps/LinuxPACom/Wine"); os.IsNotExist(err) {
|
||||
if _, errd := exec.LookPath("wine"); errd == nil {
|
||||
wineAvail = true
|
||||
}
|
||||
} else if err == nil {
|
||||
wineAvail = true
|
||||
}
|
||||
glib.IdleAdd(func() {
|
||||
if !wineAvail {
|
||||
wineCheck.SetSensitive(false)
|
||||
wineCheck.SetTooltipText("Download wine to run windows apps")
|
||||
} else {
|
||||
wineCheck.SetSensitive(true)
|
||||
wineCheck.SetTooltipText("")
|
||||
}
|
||||
})
|
||||
}()
|
||||
})
|
||||
if !comEnbld {
|
||||
dlWine.SetSensitive(false)
|
||||
dlWine.SetTooltipText("common.sh needed")
|
||||
}
|
||||
pthdCheck, _ := gtk.CheckButtonNewWithLabel("Hide \"Portable\" from app name")
|
||||
pthdCheck.Connect("toggled", func() {
|
||||
portableHide = pthdCheck.GetActive()
|
||||
master = make(map[string][]app)
|
||||
linmaster = make(map[string][]app)
|
||||
cats = make([]string, 0)
|
||||
lin = make([]string, 0)
|
||||
setup()
|
||||
})
|
||||
pthdCheck.SetActive(portableHide)
|
||||
if !wineAvail {
|
||||
wineCheck.SetSensitive(false)
|
||||
wineCheck.SetTooltipText("Download wine to run windows apps")
|
||||
}
|
||||
wineCheck.SetActive(wine)
|
||||
wineCheck.Connect("toggled", func() {
|
||||
wine = wineCheck.GetActive()
|
||||
})
|
||||
versCheck, _ := gtk.CheckButtonNewWithLabel("Only show newest app version in downloads (A bit iffy ATM)")
|
||||
versCheck.SetActive(versionNewest)
|
||||
versCheck.Connect("toggled", func() {
|
||||
versionNewest = versCheck.GetActive()
|
||||
})
|
||||
gnrl.Add(wineLbl)
|
||||
gnrl.Add(dlWine)
|
||||
gnrl.Add(pthdCheck)
|
||||
gnrl.Add(wineCheck)
|
||||
gnrl.Add(versCheck)
|
||||
ntbk.AppendPage(gnrl, getLabel("General"))
|
||||
com, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 5)
|
||||
com.SetMarginStart(10)
|
||||
@@ -51,7 +102,6 @@ func settingsUI() {
|
||||
hScroll, _ := gtk.AdjustmentNew(0, 0, 0, 0, 0, 0)
|
||||
comScrl, _ := gtk.ScrolledWindowNew(hScroll, vScroll)
|
||||
comScrl.Add(comEdit)
|
||||
com.Add(comScrl)
|
||||
svBox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 5)
|
||||
sv, _ := gtk.ButtonNewWithLabel("Save")
|
||||
sv.Connect("clicked", func() {
|
||||
@@ -65,6 +115,7 @@ func settingsUI() {
|
||||
})
|
||||
svBox.Add(sv)
|
||||
svBox.Add(cnl)
|
||||
com.Add(comScrl)
|
||||
com.Add(svBox)
|
||||
ntbk.AppendPage(com, getLabel("common.sh"))
|
||||
win.Add(ntbk)
|
||||
|
||||
@@ -82,6 +82,9 @@ func processApp(fold string) (out app) {
|
||||
if out.cat == "" {
|
||||
out.cat = "Other"
|
||||
}
|
||||
if portableHide {
|
||||
out.name = strings.TrimSuffix(out.name, "Portable")
|
||||
}
|
||||
out.icon = getIcon(fold)
|
||||
folder, _ := os.Open(fold)
|
||||
fis, _ := folder.Readdirnames(-1)
|
||||
|
||||
@@ -14,9 +14,6 @@ func ui(win *gtk.Window) {
|
||||
header.SetTitle("LinuxPA")
|
||||
header.SetSubtitle("PortableApps.com type launcher")
|
||||
settings, _ := gtk.ButtonNewFromIconName("applications-system", gtk.ICON_SIZE_SMALL_TOOLBAR)
|
||||
settings.Connect("clicked", func() {
|
||||
settingsUI()
|
||||
})
|
||||
settings.SetTooltipText("Settings")
|
||||
dnl, _ := gtk.ButtonNewFromIconName("emblem-downloads", gtk.ICON_SIZE_SMALL_TOOLBAR)
|
||||
dnl.SetTooltipText("Download Apps")
|
||||
@@ -57,24 +54,6 @@ func ui(win *gtk.Window) {
|
||||
botBox.SetMarginEnd(10)
|
||||
botBox.SetMarginTop(10)
|
||||
botBox.SetMarginBottom(10)
|
||||
wineCheck, _ := gtk.CheckButtonNewWithLabel("Show Windows apps (Wine)")
|
||||
if !wineAvail {
|
||||
wineCheck.SetSensitive(false)
|
||||
wineCheck.SetTooltipText("Download wine to run windows apps")
|
||||
}
|
||||
wineCheck.SetActive(wine)
|
||||
wineCheck.Connect("toggled", func() {
|
||||
wine = wineCheck.GetActive()
|
||||
store.Clear()
|
||||
for i := range ls {
|
||||
catList.Remove(catList.GetRowAtIndex(len(ls) - i - 1))
|
||||
}
|
||||
ls = getCatRows()
|
||||
for _, v := range ls {
|
||||
catList.Add(v)
|
||||
}
|
||||
catList.ShowAll()
|
||||
})
|
||||
edit, _ := gtk.ButtonNewWithLabel("Edit App..")
|
||||
edit.Connect("clicked", func() {
|
||||
selec, _ := appsList.GetSelection()
|
||||
@@ -111,7 +90,6 @@ func ui(win *gtk.Window) {
|
||||
}
|
||||
}
|
||||
})
|
||||
botBox.Add(wineCheck)
|
||||
botBox.PackEnd(edit, false, false, 0)
|
||||
topLvl.Add(lrBox)
|
||||
topLvl.PackEnd(botBox, false, true, 0)
|
||||
@@ -162,7 +140,7 @@ func ui(win *gtk.Window) {
|
||||
}
|
||||
})
|
||||
dnl.Connect("clicked", func() {
|
||||
appimg.ShowUI(func() {
|
||||
appimg.ShowUI(versionNewest, func() {
|
||||
master = make(map[string][]app)
|
||||
linmaster = make(map[string][]app)
|
||||
cats = make([]string, 0)
|
||||
@@ -179,6 +157,19 @@ func ui(win *gtk.Window) {
|
||||
catList.ShowAll()
|
||||
})
|
||||
})
|
||||
settings.Connect("clicked", func() {
|
||||
settingsUI(win, func() {
|
||||
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()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func getCatRows() (out []*gtk.Label) {
|
||||
|
||||
Reference in New Issue
Block a user