Server LuaCsForBarotrauma
ModSender.cs
1 using System;
2 using Barotrauma.IO;
3 using System.Linq;
4 using System.Threading.Tasks;
5 
6 namespace Barotrauma.Networking
7 {
8  class ModSender : IDisposable
9  {
10  public const string UploadFolder = "TempMods_Upload";
11  public const string Extension = ".barodir.gz";
12 
13  public bool Ready { get; private set; } = false;
14 
15  public ModSender()
16  {
17  DeleteDir();
18  Directory.CreateDirectory(UploadFolder);
19  TaskPool.Add(
20  "ModSender",
21  Task.WhenAll(
22  ContentPackageManager.EnabledPackages.All
23  .Where(p => p != ContentPackageManager.VanillaCorePackage && p.HasMultiplayerSyncedContent)
24  .Select(CompressMod)),
25  t =>
26  {
27  var innermostException = t.Exception?.GetInnermost();
28  if (innermostException != null)
29  {
30  DebugConsole.ThrowError($"An error occurred when compressing mods", innermostException);
31  }
32  Ready = true;
33  });
34  }
35 
36  public static string GetCompressedModPath(ContentPackage mod)
37  {
38  string dir = mod.Dir;
39  string resultFileName
40  = dir.StartsWith(ContentPackage.LocalModsDir)
41  ? $"Local_{mod.Name}"
42  : $"Workshop_{mod.Name}_{(mod.UgcId.TryUnwrap(out var ugcId) ? ugcId.ToString() : "NULL")}";
43  resultFileName = ToolBox.RemoveInvalidFileNameChars(resultFileName.Replace('\\', '_').Replace('/', '_'));
44  resultFileName = $"{resultFileName}{Extension}";
45  return Path.Combine(UploadFolder, resultFileName);
46  }
47 
48  public async Task CompressMod(ContentPackage mod)
49  {
50  await Task.Yield();
51  string dir = mod.Dir;
52  SaveUtil.CompressDirectory(dir, GetCompressedModPath(mod));
53  }
54 
55  private void DeleteDir()
56  {
57  if (Directory.Exists(UploadFolder)) { Directory.Delete(UploadFolder, recursive: true); }
58  }
59 
60  public bool IsDisposed { get; private set; } = false;
61  public void Dispose()
62  {
63  IsDisposed = true;
64  DeleteDir();
65  }
66  }
67 }
static string GetCompressedModPath(ContentPackage mod)
Definition: ModSender.cs:36
async Task CompressMod(ContentPackage mod)
Definition: ModSender.cs:48