Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaClient/ClientSource/ContentManagement/ContentPackageManager.cs
Juan Pablo Arce 4206f6db42 Unstable 0.17.3.0
2022-03-22 14:44:56 -03:00

62 lines
2.2 KiB
C#

#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<ContentPackage>
{
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<IEnumerable<Steamworks.Ugc.Item>> EnqueueWorkshopUpdates()
{
ISet<Steamworks.Ugc.Item> 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;
}
}
}