public static void Postfix(MyWorkshop.ResultData __result) { if (__result.Success) { return; } _log.Warn("Missing Mods:"); __result.MismatchMods?.ForEach(b => _log.Info($"\t{b}")); }
public static void Update(IEnumerable <ulong> ids) { if (!ids.Any()) { return; } var modItems = new List <MyObjectBuilder_Checkpoint.ModItem>(ids.Select(x => new MyObjectBuilder_Checkpoint.ModItem(x, "Steam"))); LogFile.WriteLine($"Updating {modItems.Count} workshop items"); // Source: MyWorkshop.DownloadWorldModsBlocking MyWorkshop.ResultData result = new MyWorkshop.ResultData(); Task task = Parallel.Start(delegate { result = UpdateInternal(modItems); }); while (!task.IsComplete) { MyGameService.Update(); Thread.Sleep(10); } if (!result.Success) { Exception[] exceptions = task.Exceptions; if (exceptions != null && exceptions.Length > 0) { StringBuilder sb = new StringBuilder(); sb.AppendLine("An error occurred while updating workshop items:"); foreach (Exception e in exceptions) { sb.Append(e); } LogFile.WriteLine(sb.ToString()); } else { LogFile.WriteLine("Unable to update workshop items"); } } }
public static MyWorkshop.ResultData UpdateInternal(List <MyObjectBuilder_Checkpoint.ModItem> mods) { // Source: MyWorkshop.DownloadWorldModsBlockingInternal MyLog.Default.IncreaseIndent(); List <WorkshopId> list = new List <WorkshopId>(mods.Select(x => new WorkshopId(x.PublishedFileId, x.PublishedServiceName))); if (DownloadModsBlocking == null) { DownloadModsBlocking = AccessTools.Method(typeof(MyWorkshop), "DownloadModsBlocking"); } MyWorkshop.ResultData resultData = (MyWorkshop.ResultData)DownloadModsBlocking.Invoke(mods, new object[] { mods, new MyWorkshop.ResultData() { Success = true }, list, new MyWorkshop.CancelToken() }); MyLog.Default.DecreaseIndent(); return(resultData); }