#nullable enable using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Barotrauma.IO; using Barotrauma.Steam; namespace Barotrauma { public static partial class ContentPackageManager { public sealed partial class PackageSource : ICollection { public string SaveRegularMod(ModProject modProject) { if (modProject.IsCore) { throw new ArgumentException("ModProject must not be a core package"); } string fileListPath = Path.Combine(directory, ToolBox.RemoveInvalidFileNameChars(modProject.Name), ContentPackage.FileListFileName) .CleanUpPathCrossPlatform(correctFilenameCase: false); modProject.Save(fileListPath); Refresh(); EnabledPackages.DisableRemovedMods(); return fileListPath; } public RegularPackage GetRegularModByPath(string fileListPath) { return Regular.First(p => p.Path == fileListPath); } public RegularPackage SaveAndEnableRegularMod(ModProject modProject) { string fileListPath = SaveRegularMod(modProject); var package = GetRegularModByPath(fileListPath); EnabledPackages.EnableRegular(package); return package; } } private static async Task> EnqueueWorkshopUpdates() { ISet subscribedItems = await SteamManager.Workshop.GetAllSubscribedItems(); var needInstalling = subscribedItems.Where(item => !WorkshopPackages.Any(p => item.Id == p.SteamWorkshopId && p.InstallTime.HasValue && item.LatestUpdateTime <= p.InstallTime)) .ToArray(); if (needInstalling.Any()) { await Task.WhenAll( needInstalling.Select(SteamManager.Workshop.DownloadModThenEnqueueInstall)); } return needInstalling; } } }