Skip to content

Commit

Permalink
cmd/vinegar: change from download-then-extract to download-and-extract
Browse files Browse the repository at this point in the history
  • Loading branch information
apprehensions committed Mar 7, 2024
1 parent 6553597 commit 2a85bce
Showing 1 changed file with 26 additions and 39 deletions.
65 changes: 26 additions & 39 deletions cmd/vinegar/binary_setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,14 +112,8 @@ func (b *Binary) Install() error {
return pm.Packages[i].ZipSize < pm.Packages[j].ZipSize
})

b.Splash.SetMessage("Downloading " + b.Alias)
if err := b.DownloadPackages(&pm); err != nil {
return fmt.Errorf("download: %w", err)
}

b.Splash.SetMessage("Extracting " + b.Alias)
if err := b.ExtractPackages(&pm); err != nil {
return fmt.Errorf("extract: %w", err)
if err := b.SetupPackages(&pm); err != nil {
return fmt.Errorf("setup: %w", err)
}

if b.Type == roblox.Studio {
Expand Down Expand Up @@ -148,21 +142,38 @@ func (b *Binary) Install() error {
return nil
}

func (b *Binary) PerformPackages(pm *boot.PackageManifest, fn func(boot.Package) error) error {
donePkgs := 0
pkgsLen := len(pm.Packages)
func (b *Binary) SetupPackages(pm *boot.PackageManifest) error {
dests := boot.BinaryDirectories(b.Type)
d := 0
n := len(pm.Packages) * 2 // download & extraction
eg := new(errgroup.Group)

done := func() {
d++
b.Splash.SetProgress(float32(d) / float32(n))
}

slog.Info("Installing Packages", "guid", pm.Deployment.GUID, "count", n)
for _, p := range pm.Packages {
p := p

eg.Go(func() error {
err := fn(p)
if err != nil {
dest, ok := dests[p.Name]
src := filepath.Join(dirs.Downloads, p.Checksum)

if !ok {
return fmt.Errorf("unhandled package: %s", p.Name)
}

if err := p.Download(src, pm.DeployURL); err != nil {
return err
}
done()

donePkgs++
b.Splash.SetProgress(float32(donePkgs) / float32(pkgsLen))
if err := p.Extract(src, filepath.Join(b.Dir, dest)); err != nil {
return err
}
done()

return nil
})
Expand All @@ -171,30 +182,6 @@ func (b *Binary) PerformPackages(pm *boot.PackageManifest, fn func(boot.Package)
return eg.Wait()
}

func (b *Binary) DownloadPackages(pm *boot.PackageManifest) error {
slog.Info("Downloading Packages", "guid", pm.Deployment.GUID, "count", len(pm.Packages))

return b.PerformPackages(pm, func(pkg boot.Package) error {
return pkg.Download(filepath.Join(dirs.Downloads, pkg.Checksum), pm.DeployURL)
})
}

func (b *Binary) ExtractPackages(pm *boot.PackageManifest) error {
slog.Info("Extracting Packages", "guid", pm.Deployment.GUID, "count", len(pm.Packages))

pkgDirs := boot.BinaryDirectories(b.Type)

return b.PerformPackages(pm, func(pkg boot.Package) error {
dest, ok := pkgDirs[pkg.Name]

if !ok {
return fmt.Errorf("unhandled package: %s", pkg.Name)
}

return pkg.Extract(filepath.Join(dirs.Downloads, pkg.Checksum), filepath.Join(b.Dir, dest))
})
}

func (b *Binary) SetupDxvk() error {
if b.State.DxvkVersion != "" && !b.Config.Dxvk {
b.Splash.SetMessage("Uninstalling DXVK")
Expand Down

0 comments on commit 2a85bce

Please sign in to comment.