From 7bd595db44ce44c1ce3df22deebd9d5c040f5800 Mon Sep 17 00:00:00 2001 From: mollusk Date: Sun, 14 Jan 2018 23:25:46 -0700 Subject: [PATCH] flatpace.go: Added -y option to update to prevent crashing --- flatface/flatface.go | 247 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 flatface/flatface.go diff --git a/flatface/flatface.go b/flatface/flatface.go new file mode 100644 index 0000000..43a53b5 --- /dev/null +++ b/flatface/flatface.go @@ -0,0 +1,247 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "os" + "os/exec" + "strings" + + "github.com/fatih/color" +) + +func clearScreen() { + cmd := exec.Command("clear") + out, err := cmd.CombinedOutput() + if err != nil { + searchRepo() + } + fmt.Print(string(out)) +} +func input(s string) (string, error) { + stdinBuf := bufio.NewReader(os.Stdin) + + fmt.Print(s) + + text, err := stdinBuf.ReadString('\n') + if err != nil { + panic(err) + } + return text[:len(text)-1], err +} + +func searchRepo() { + color.Set(color.FgHiCyan) + print("\n| Search Repositories |\n") + print("Enter a search term and copy the namespace to clipboard\n") + print("Paste this later to the install menu.\n\n") + print("Type: 'm' for main menu\n") + print("Type: 'q' to quit the application\n\n") + color.Unset() + + var programName, _ = input(">> ") + + trimInput := strings.TrimSpace(programName) + + if trimInput == "m" { + return + } else if trimInput == "q" { + os.Exit(0) + } else { + cmd := exec.Command("flatpak", "search", trimInput) + out, err := cmd.CombinedOutput() + if err != nil { + searchRepo() + } + color.Set(color.FgHiGreen) + print("\n==============================================================\n") + fmt.Print("Results for ", trimInput, ": \n\n", string(out), "\n") + print("\n\n==============================================================\n") + color.Unset() + searchRepo() + } +} + +func installPak() { + color.Set(color.FgHiCyan) + print("\n| Install Menu |\n\n") + print("To Use: Copy paste a flatpak namespace from search results\n\n") + print("EXAMPLE: 'com.play0ad.zeroad' - installs the Game '0ad'\n\n") + print("Type: 'm' for main menu\n") + print("Type: 'q' to quit the application\n\n") + print("NOTE: install can take several seconds and appear to hang. Please be patient...\n\n") + color.Unset() + var programName, _ = input(">> ") + + trimInput := strings.TrimSpace(programName) + + if trimInput == "m" { + return + + } else if trimInput == "q" { + os.Exit(0) + + } else { + cmd := exec.Command("flatpak", "install", "-y", "flathub", trimInput) + out, err := cmd.CombinedOutput() + + if err != nil { + installPak() + } + color.Set(color.FgHiGreen) + print("\n==========================================================================\n\n") + fmt.Print(string(out), "\n") + print("\n============================================================================\n\n") + color.Unset() + installPak() + } +} + +func listPak() { + color.Set(color.FgHiGreen) + print("\n| List of installed Flatpaks |\n") + color.Unset() + cmd := exec.Command("flatpak", "list") + out, err := cmd.CombinedOutput() + if err != nil { + log.Fatalf("cmd.Run() failed with %s\n", err) + } + + color.Set(color.FgHiYellow) + print("\n============================================================================\n\n") + fmt.Print(string(out), "\n\n") + print("\n============================================================================\n\n") + color.Unset() +} + +func removePak() { + color.Set(color.FgHiCyan) + print("\n| Remove Flatpaks |\n") + color.Unset() + listPak() + color.Set(color.FgHiCyan) + print("\n\nCopy and paste a namespace above and press enter to remove from system\n\n") + print("Type: 'm' for main menu\n") + print("Type: 'q' to quit the application\n\n") + color.Unset() + var programName, _ = input(">> ") + + trimInput := strings.TrimSpace(programName) + + if trimInput == "m" { + return + } else if trimInput == "q" { + os.Exit(0) + } else { + cmd := exec.Command("flatpak", "uninstall", trimInput) + out, err := cmd.CombinedOutput() + if err != nil { + removePak() + } + color.Set(color.FgHiRed) + print("\n==========================================================================\n\n") + fmt.Print(string(out), "\n\n") + print("\n==========================================================================\n\n") + color.Unset() + removePak() + } +} + +//// TODO +/* +func optionsMenu() { + var choice string + print("\n| FlatFace Options |\n\n") + print("\n1. Add Repository\n\n") + + choice, _ = input(">> ") + + if choice == "1" { + + } +} +*/ +func syncRepo() { + color.Set(color.FgHiMagenta) + print("Syncing repo data...\n") + color.Unset() + cmd := exec.Command("flatpak", "update", "--appstream") + + out, err := cmd.CombinedOutput() + + if err != nil { + log.Fatalf("cmd.Run() failed with %s\n", err) + } + color.Set(color.FgHiGreen) + fmt.Print(string(out)) + color.Unset() +} + +func checkRepo() { + color.Set(color.FgHiYellow) + print("\nAdding flathub repo if needed...\n") + cmd := exec.Command("flatpak", "remote-add", "--if-not-exists", "flathub", "https://flathub.org/repo/flathub.flatpakrepo") + out, err := cmd.CombinedOutput() + syncRepo() + if err != nil { + log.Fatalf("cmd.Run() failed with %s\n", err) + } + fmt.Print(string(out)) +} + +func updatePak() { + color.Set(color.FgHiYellow) + print("Checking for app upgrades..\n") + color.Unset() + cmd := exec.Command("flatpak", "update", "-y") + out, err := cmd.CombinedOutput() + if err != nil { + log.Fatalf("cmd.Run() failed with %s\n", err) + } + color.Set(color.FgHiGreen) + fmt.Print(string(out)) + color.Unset() +} +func mainMenu() { + color.Set(color.FgHiCyan) + print("\n\n| FlatFace v0.0.1a-4 |\n\n") + var choice string + + print("[s] Search remote for flatpaks\n") + print("[l] Install flatpaks from remote\n") + print("[r] Remove local flatpaks\n") + print("[l] List install flatpaks\n") + print("[u] Update\n") + print("[q] Quit\n\n") + color.Unset() + + choice, _ = input(">> ") + + trimInput := strings.TrimSpace(choice) + + if trimInput == "s" { + searchRepo() + + } else if trimInput == "i" { + installPak() + } else if trimInput == "r" { + removePak() + } else if trimInput == "l" { + listPak() + } else if trimInput == "u" { + updatePak() + } else if trimInput == "q" { + os.Exit(0) + } else { + print("Unknown option") + } + +} + +func main() { + checkRepo() + for { + mainMenu() + } +}