fix: add flatpak detection and update (#192)

Drew Smirnoff created

Change summary

main.go | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)

Detailed changes

main.go 🔗

@@ -1562,6 +1562,21 @@ func detectInstalledVersion() string {
 				}
 			}
 		}
+
+		if _, err := exec.LookPath("flatpak"); err == nil {
+			if out, err := exec.Command("flatpak", "info", "com.floatpane.matcha").Output(); err == nil {
+				lines := strings.Split(strings.TrimSpace(string(out)), "\n")
+				for _, line := range lines {
+					line = strings.TrimSpace(line)
+					if strings.HasPrefix(line, "Version:") {
+						fields := strings.Fields(line)
+						if len(fields) >= 2 {
+							return fields[1]
+						}
+					}
+				}
+			}
+		}
 	}
 
 	return v
@@ -1670,6 +1685,23 @@ func runUpdateCLI() error {
 			// fallthrough
 		}
 	}
+	// Detect flatpak
+	if _, err := exec.LookPath("flatpak"); err == nil {
+		// Check if matcha is installed as a flatpak
+		cmdCheck := exec.Command("flatpak", "info", "com.floatpane.matcha")
+		if err := cmdCheck.Run(); err == nil {
+			fmt.Println("Detected Flatpak package — attempting to update.")
+			cmd := exec.Command("flatpak", "update", "-y", "com.floatpane.matcha")
+			cmd.Stdout = os.Stdout
+			cmd.Stderr = os.Stderr
+			if err := cmd.Run(); err == nil {
+				fmt.Println("Successfully updated flatpak.")
+				return nil
+			}
+			fmt.Printf("Flatpak update failed: %v\n", err)
+			// fallthrough
+		}
+	}
 
 	// Otherwise attempt to download the proper release asset and replace the binary.
 	osName := runtime.GOOS