309 lines
7.2 KiB
Go
309 lines
7.2 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"github.com/gotk3/gotk3/gdk"
|
|
"github.com/gotk3/gotk3/gtk"
|
|
)
|
|
|
|
type app struct {
|
|
name string
|
|
cat string
|
|
appimg []string
|
|
lin []string
|
|
ex []string
|
|
icon *gdk.Pixbuf
|
|
dir string
|
|
ini *os.File
|
|
}
|
|
|
|
func (a *app) getTreeIter(store *gtk.TreeStore) *gtk.TreeIter {
|
|
it := store.Append(nil)
|
|
store.SetValue(it, 0, a.icon)
|
|
store.SetValue(it, 1, a.name)
|
|
if len(a.ex) > 1 {
|
|
for _, v := range a.ex {
|
|
i := store.Append(it)
|
|
store.SetValue(i, 1, v)
|
|
}
|
|
}
|
|
return it
|
|
}
|
|
|
|
func (a *app) launch() {
|
|
if len(a.ex) == 1 {
|
|
if wine {
|
|
var cmd *exec.Cmd
|
|
if !contains(a.lin, a.ex[0]) {
|
|
cmd = exec.Command("/bin/sh", "-c", "cd \""+a.dir+"\"; wine \""+a.ex[0]+"\"")
|
|
} else {
|
|
if comEnbld {
|
|
cmd = exec.Command("/bin/sh", "-c", ". PortableApps/LinuxPACom/common.sh || exit 1;cd \""+a.dir+"\"; \"./"+a.ex[0]+"\"")
|
|
} else {
|
|
cmd = exec.Command("/bin/sh", "-c", "cd \""+a.dir+"\"; \"./"+a.ex[0]+"\"")
|
|
}
|
|
}
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
cmd.Start()
|
|
} else {
|
|
var cmd *exec.Cmd
|
|
if comEnbld {
|
|
cmd = exec.Command("/bin/sh", "-c", ". PortableApps/LinuxPACom/common.sh || exit 1;cd \""+a.dir+"\"; \"./"+a.ex[0]+"\"")
|
|
} else {
|
|
cmd = exec.Command("/bin/sh", "-c", "cd \""+a.dir+"\"; \"./"+a.ex[0]+"\"")
|
|
}
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
cmd.Start()
|
|
}
|
|
} else {
|
|
if wine {
|
|
var cmd *exec.Cmd
|
|
if len(a.lin) == 0 {
|
|
cmd = exec.Command("/bin/sh", "-c", "cd \""+a.dir+"\"; wine \""+a.ex[0]+"\"")
|
|
} else {
|
|
var ind int
|
|
for i, v := range a.lin {
|
|
if strings.HasSuffix(v, ".sh") {
|
|
ind = i
|
|
break
|
|
}
|
|
}
|
|
if comEnbld {
|
|
cmd = exec.Command("/bin/sh", "-c", ". PortableApps/LinuxPACom/common.sh || exit 1;cd \""+a.dir+"\"; \"./"+a.lin[ind]+"\"")
|
|
} else {
|
|
cmd = exec.Command("/bin/sh", "-c", "cd \""+a.dir+"\"; \"./"+a.lin[ind]+"\"")
|
|
}
|
|
}
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
cmd.Start()
|
|
} else {
|
|
if len(a.lin) != 0 {
|
|
var ind int
|
|
for i, v := range a.lin {
|
|
if strings.HasSuffix(v, ".sh") {
|
|
ind = i
|
|
break
|
|
}
|
|
}
|
|
var cmd *exec.Cmd
|
|
if comEnbld {
|
|
cmd = exec.Command("/bin/sh", "-c", ". PortableApps/LinuxPACom/common.sh || exit 1;cd \""+a.dir+"\"; \"./"+a.lin[ind]+"\"")
|
|
} else {
|
|
cmd = exec.Command("/bin/sh", "-c", "cd \""+a.dir+"\"; \"./"+a.lin[ind]+"\"")
|
|
}
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
cmd.Start()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func (a *app) launchSub(sub int) {
|
|
if wine {
|
|
var cmd *exec.Cmd
|
|
if !contains(a.lin, a.ex[sub]) {
|
|
cmd = exec.Command("/bin/sh", "-c", "cd \""+a.dir+"\"; wine \""+a.ex[sub]+"\"")
|
|
} else {
|
|
if comEnbld {
|
|
cmd = exec.Command("/bin/sh", "-c", ". PortableApps/LinuxPACom/common.sh || exit 1;cd \""+a.dir+"\"; \"./"+a.ex[sub]+"\"")
|
|
} else {
|
|
cmd = exec.Command("/bin/sh", "-c", "cd \""+a.dir+"\"; \"./"+a.ex[sub]+"\"")
|
|
}
|
|
}
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
cmd.Start()
|
|
}
|
|
var cmd *exec.Cmd
|
|
if comEnbld {
|
|
cmd = exec.Command("/bin/sh", "-c", ". PortableApps/LinuxPACom/common.sh || exit 1;cd \""+a.dir+"\"; \"./"+a.ex[sub]+"\"")
|
|
} else {
|
|
cmd = exec.Command("/bin/sh", "-c", "cd \""+a.dir+"\"; \"./"+a.ex[sub]+"\"")
|
|
}
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
cmd.Start()
|
|
}
|
|
|
|
// type appExNode struct {
|
|
// ap app
|
|
// exInd int
|
|
// }
|
|
//
|
|
// func (a *appExNode) launch() {
|
|
// if wine {
|
|
// var cmd *exec.Cmd
|
|
// if !contains(a.ap.lin, a.ap.ex[a.exInd]) {
|
|
// cmd = exec.Command("/bin/sh", "-c", "cd \""+a.ap.dir+"\"; wine \""+a.ap.ex[a.exInd]+"\"")
|
|
// } else {
|
|
// if comEnbld {
|
|
// cmd = exec.Command("/bin/sh", "-c", ". PortableApps/LinuxPACom/common.sh || exit 1;cd \""+a.ap.dir+"\"; \"./"+a.ap.ex[a.exInd]+"\"")
|
|
// } else {
|
|
// cmd = exec.Command("/bin/sh", "-c", "cd \""+a.ap.dir+"\"; \"./"+a.ap.ex[a.exInd]+"\"")
|
|
// }
|
|
// }
|
|
// cmd.Stdout = os.Stdout
|
|
// cmd.Stderr = os.Stderr
|
|
// cmd.Start()
|
|
// }
|
|
// var cmd *exec.Cmd
|
|
// if comEnbld {
|
|
// cmd = exec.Command("/bin/sh", "-c", ". PortableApps/LinuxPACom/common.sh || exit 1;cd \""+a.ap.dir+"\"; \"./"+a.ap.ex[a.exInd]+"\"")
|
|
// } else {
|
|
// cmd = exec.Command("/bin/sh", "-c", "cd \""+a.ap.dir+"\"; \"./"+a.ap.ex[a.exInd]+"\"")
|
|
// }
|
|
// cmd.Stdout = os.Stdout
|
|
// cmd.Stderr = os.Stderr
|
|
// cmd.Start()
|
|
// }
|
|
|
|
// func (a *appExNode) Count() int {
|
|
// return 0
|
|
// }
|
|
//
|
|
// func (a *appExNode) NodeAt(int) gxui.TreeNode {
|
|
// return nil
|
|
// }
|
|
//
|
|
// func (a *appExNode) ItemIndex(gxui.AdapterItem) int {
|
|
// return -1
|
|
// }
|
|
//
|
|
// func (a *appExNode) Item() gxui.AdapterItem {
|
|
// if wine {
|
|
// return a.ap.ex[a.exInd]
|
|
// }
|
|
// return a.ap.lin[a.exInd]
|
|
// }
|
|
//
|
|
// func (a *appExNode) Create(the gxui.Theme) gxui.Control {
|
|
// box := the.CreateLinearLayout()
|
|
// box.SetDirection(gxui.LeftToRight)
|
|
// box.SetVerticalAlignment(gxui.AlignMiddle)
|
|
// img := the.CreateImage()
|
|
// img.SetTexture(a.ap.icon)
|
|
// img.SetExplicitSize(math.Size{H: 32, W: 32})
|
|
// lbl := the.CreateLabel()
|
|
// lbl.SetText(a.ap.ex[a.exInd])
|
|
// box.AddChild(img)
|
|
// box.AddChild(lbl)
|
|
// box.OnDoubleClick(func(gxui.MouseEvent) {
|
|
// a.launch()
|
|
// })
|
|
// return box
|
|
// }
|
|
|
|
// func (a *appNode) Count() int {
|
|
// if wine {
|
|
// if len(a.ex) > 1 {
|
|
// return len(a.ap.ex)
|
|
// }
|
|
// return 0
|
|
// }
|
|
// if len(a.ap.lin) > 1 {
|
|
// return len(a.ap.lin)
|
|
// }
|
|
// return 0
|
|
// }
|
|
//
|
|
// func (a *appNode) NodeAt(i int) gxui.TreeNode {
|
|
// return &appExNode{ap: a.ap, exInd: i}
|
|
// }
|
|
//
|
|
// func (a *appNode) ItemIndex(item gxui.AdapterItem) int {
|
|
// if wine {
|
|
// for i, v := range a.ap.ex {
|
|
// if v == item {
|
|
// return i
|
|
// }
|
|
// }
|
|
// } else {
|
|
// for i, v := range a.ap.lin {
|
|
// if v == item {
|
|
// return i
|
|
// }
|
|
// }
|
|
// }
|
|
// return -1
|
|
// }
|
|
//
|
|
// func (a *appNode) Item() gxui.AdapterItem {
|
|
// return a.ap.name
|
|
// }
|
|
//
|
|
// func (a *appNode) Create(the gxui.Theme) gxui.Control {
|
|
// box := the.CreateLinearLayout()
|
|
// box.SetDirection(gxui.LeftToRight)
|
|
// box.SetPadding(math.CreateSpacing(2))
|
|
// box.SetVerticalAlignment(gxui.AlignMiddle)
|
|
// img := the.CreateImage()
|
|
// if a.ap.icon != nil {
|
|
// img.SetTexture(a.ap.icon)
|
|
// }
|
|
// img.SetExplicitSize(math.Size{H: 32, W: 32})
|
|
// lbl := the.CreateLabel()
|
|
// lbl.SetText(a.ap.name)
|
|
// box.AddChild(img)
|
|
// box.AddChild(lbl)
|
|
// box.OnDoubleClick(func(gxui.MouseEvent) {
|
|
// a.launch()
|
|
// })
|
|
// return box
|
|
// }
|
|
|
|
// type catAdap struct {
|
|
// gxui.AdapterBase
|
|
// cat string
|
|
// }
|
|
//
|
|
// func (a *catAdap) setCat(cat string) {
|
|
// a.cat = cat
|
|
// a.DataChanged(false)
|
|
// }
|
|
//
|
|
// func (a *catAdap) refresh() {
|
|
// a.DataChanged(false)
|
|
// }
|
|
//
|
|
// func (a *catAdap) Count() int {
|
|
// if wine {
|
|
// return len(master[a.cat])
|
|
// }
|
|
// return len(linmaster[a.cat])
|
|
// }
|
|
//
|
|
// func (a *catAdap) NodeAt(i int) gxui.TreeNode {
|
|
// if wine {
|
|
// return &appNode{ap: master[a.cat][i]}
|
|
// }
|
|
// return &appNode{ap: linmaster[a.cat][i]}
|
|
// }
|
|
//
|
|
// func (a *catAdap) Size(gxui.Theme) math.Size {
|
|
// return math.Size{H: 34, W: math.MaxSize.W}
|
|
// }
|
|
//
|
|
// func (a *catAdap) ItemIndex(item gxui.AdapterItem) int {
|
|
// if wine {
|
|
// for i, v := range master[a.cat] {
|
|
// if v.name == item {
|
|
// return i
|
|
// }
|
|
// }
|
|
// } else {
|
|
// for i, v := range linmaster[a.cat] {
|
|
// if v.name == item {
|
|
// return i
|
|
// }
|
|
// }
|
|
// }
|
|
// return -1
|
|
// }
|