public async Task InstallNewPackage(PackageState packageState, LocalPackage package, string tribesExePath) { // Only one update or install may occur at once, if a second is attempted it will do nothing bool acquiredLock = await updateSemaphore.WaitAsync(0); if (!acquiredLock) { return; } try { List <RemotePackage> packages = new List <RemotePackage>(); packages.Add(package.Remote); // Ensure dependencies are also installed packages.AddRange(packageState.GetPackageDependenciesForInstall(package).Select((p) => p.Remote)); await InstallPackages(packages, tribesExePath); } finally { updateSemaphore.Release(); } }
public List <LocalPackage> GetPackageDependenciesForInstall(LocalPackage package) => GetPackagesByIdRelevantForInstallOrUpdate(package.Remote.Dependencies).ToList();