mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
5d53d0eec2
Lovely tool I wrote to do an admin permissions prompt on OS X for every file in the update folder and install it, kills qtox and relaunches it automatically tool. Go master race
97 lines
2.5 KiB
Go
97 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
"os/user"
|
|
)
|
|
|
|
func fs_type(path string) int {
|
|
//name := "FileOrDir"
|
|
f, err := os.Open(path)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return -1
|
|
}
|
|
defer f.Close()
|
|
fi, err := f.Stat()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return -1
|
|
}
|
|
switch mode := fi.Mode(); {
|
|
case mode.IsDir():
|
|
return 0
|
|
case mode.IsRegular():
|
|
return 1
|
|
}
|
|
|
|
return -1
|
|
}
|
|
|
|
func main() {
|
|
usr, e := user.Current()
|
|
if e != nil {
|
|
log.Fatal(e)
|
|
}
|
|
|
|
update_dir := usr.HomeDir + "/Library/Preferences/tox/update/"
|
|
if _, err := os.Stat(update_dir); os.IsNotExist(err) {
|
|
fmt.Println("Error: No update folder, is check for updates enabled?")
|
|
return
|
|
}
|
|
fmt.Println("qTox Updater")
|
|
|
|
files, _ := ioutil.ReadDir(update_dir)
|
|
killqtox := exec.Command("/usr/bin/killall", "qtox")
|
|
_ = killqtox.Run()
|
|
|
|
for _, file := range files {
|
|
if fs_type(update_dir+file.Name()) == 1 {
|
|
fmt.Print("Installing: ")
|
|
fmt.Println("/Applications/qtox.app/Contents/" + file.Name())
|
|
if _, err := os.Stat("/Applications/qtox.app/Contents/" + file.Name()); os.IsNotExist(err) {
|
|
newfile := exec.Command("/usr/libexec/authopen", "-c", "-x", "-m", "drwxrwxr-x+", "/Applications/qtox.app/Contents/"+file.Name())
|
|
newfile.Run()
|
|
}
|
|
|
|
cat := exec.Command("/bin/cat", update_dir+file.Name())
|
|
auth := exec.Command("/usr/libexec/authopen", "-w", "/Applications/qtox.app/Contents/"+file.Name())
|
|
auth.Stdin, _ = cat.StdoutPipe()
|
|
auth.Stdout = os.Stdout
|
|
auth.Stderr = os.Stderr
|
|
_ = auth.Start()
|
|
_ = cat.Run()
|
|
_ = auth.Wait()
|
|
|
|
} else {
|
|
files, _ := ioutil.ReadDir(update_dir + file.Name())
|
|
for _, file2 := range files {
|
|
fmt.Print("Installing: ")
|
|
fmt.Println("/Applications/qtox.app/Contents/" + file.Name() + "/" + file2.Name())
|
|
|
|
if _, err := os.Stat("/Applications/qtox.app/Contents/" + file.Name() + "/" + file2.Name()); os.IsNotExist(err) {
|
|
newfile := exec.Command("/usr/libexec/authopen", "-c", "-x", "-m", "drwxrwxr-x+", "/Applications/qtox.app/Contents/"+file.Name()+"/"+file2.Name())
|
|
newfile.Run()
|
|
}
|
|
|
|
cat := exec.Command("/bin/cat", update_dir+file.Name()+"/"+file2.Name())
|
|
auth := exec.Command("/usr/libexec/authopen", "-w", "/Applications/qtox.app/Contents/"+file.Name()+"/"+file2.Name())
|
|
auth.Stdin, _ = cat.StdoutPipe()
|
|
auth.Stdout = os.Stdout
|
|
auth.Stderr = os.Stderr
|
|
_ = auth.Start()
|
|
_ = cat.Run()
|
|
_ = auth.Wait()
|
|
}
|
|
}
|
|
|
|
}
|
|
os.RemoveAll(update_dir)
|
|
fmt.Println("Update metadata wiped, launching qTox")
|
|
launchqtox := exec.Command("/usr/bin/open", "-b", "im.tox.qtox")
|
|
}
|