예제 #1
0
 public static void Postfix(MyWorkshop.ResultData __result)
 {
     if (__result.Success)
     {
         return;
     }
     _log.Warn("Missing Mods:");
     __result.MismatchMods?.ForEach(b => _log.Info($"\t{b}"));
 }
예제 #2
0
        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");
                }
            }
        }
예제 #3
0
        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);
        }