Files
panic-cli/internal/software/bambu_studio.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
}