You've already forked panic-cli
mirror of
https://github.com/Print-and-Panic/panic-cli.git
synced 2026-01-21 10:17:41 -08:00
73 lines
1.4 KiB
Go
73 lines
1.4 KiB
Go
package software
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/Print-and-Panic/panic-cli/internal/ai"
|
|
"github.com/Print-and-Panic/panic-cli/internal/github"
|
|
githubAPI "github.com/google/go-github/v80/github"
|
|
|
|
_ "embed"
|
|
)
|
|
|
|
var _ Launchable = (*BambuStudio)(nil)
|
|
var _ Updateable = (*BambuStudio)(nil)
|
|
var _ Summarizer = (*BambuStudio)(nil)
|
|
|
|
//go:embed bambuReleaseSummarizer.md
|
|
var BambuReleaseSummarizer string
|
|
|
|
type BambuStudio struct {
|
|
AppImage
|
|
github.GitHubProject
|
|
ai.GeminiProvider
|
|
}
|
|
|
|
func (b *BambuStudio) Name() string {
|
|
return "Bambu Studio"
|
|
}
|
|
|
|
func (b *BambuStudio) ID() string {
|
|
return "bambu"
|
|
}
|
|
|
|
func (b *BambuStudio) Install(version string) error {
|
|
assets, err := b.GetAssetByTag(version)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var nextVersion *githubAPI.ReleaseAsset
|
|
for _, asset := range assets {
|
|
if strings.Contains(*asset.Name, "ubuntu-24") {
|
|
nextVersion = asset
|
|
break
|
|
}
|
|
}
|
|
if nextVersion == nil {
|
|
return fmt.Errorf("no ubuntu-24 asset found")
|
|
}
|
|
|
|
downloadURL := nextVersion.GetBrowserDownloadURL()
|
|
if downloadURL == "" {
|
|
return fmt.Errorf("no download URL found")
|
|
}
|
|
|
|
resp, err := http.Get(downloadURL)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
return b.AppImage.Install(version, resp.Body)
|
|
}
|
|
|
|
func (b *BambuStudio) GetVersion() (string, error) {
|
|
appVersion, err := b.AppImage.GetVersion()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return "v" + appVersion, nil
|
|
}
|