Beispiel #1
0
        private async Task InitControllerAsync()
        {
            try
            {
                DatController = new DatController(DatFilePath);

                if (DatController.IsValid)
                {
                    await DatController.GetMarkAsync();
                }
            }
            catch (Exception e)
            {
                Logger.Write(e.Message);
            }
        }
Beispiel #2
0
        private async Task <Dictionary <Patch, int> > RunAsync(DatController mainDatController, IEnumerable <Patch> patches)
        {
            var results    = new Dictionary <Patch, int>();
            var enumerable = patches as Patch[] ?? patches.ToArray();

            foreach (var patch in enumerable)
            {
                if (!mainDatController.InstallOrNot(patch))
                {
                    continue;
                }

                // recognize and prepare appropriate client dat files
                var clientDatList = new Dictionary <int, DatController> {
                    { ClientDat.LocalEnglish.Id, mainDatController }
                };
                foreach (var clientDatId in patch.ClientDatRelated)
                {
                    if (clientDatId == ClientDat.LocalEnglish.Id)
                    {
                        continue;
                    }

                    var cdat = ClientDat.GetById(clientDatId);
                    if (cdat == null)
                    {
                        continue;
                    }

                    var controller = new DatController(cdat.FullPath);
                    if (controller.IsValid)
                    {
                        clientDatList.Add(clientDatId, controller);
                    }
                }

                int result;

                switch (patch.ContentType)
                {
                case PatchContentType.Text:
                case PatchContentType.Image:
                case PatchContentType.Sound:
                case PatchContentType.Font:
                case PatchContentType.Texture:
                    result = await PatchDat(clientDatList, patch);

                    break;

                case PatchContentType.Loadscreen:
                    result = ReplaceLoadScreens(Settings.Default.LotroPath, patch);
                    break;

                default:
                    result = -1;
                    break;
                }

                if (result > -1)
                {
                    mainDatController.RenewMark(patch);
                }

                results.Add(patch, result);
                Logger.Write($"завершена установка патча {patch.PatchVersion.Full} с результатом {result}.");

                // old client dat, have to update it first
                if (result == -2)
                {
                    break;
                }
            }

            if (results.Count > 0)
            {
                if (!await mainDatController.WriteNinjaMark())
                {
                    Logger.Write("не удалось записать метку применения патчей.");
                }
            }

            return(results);
        }
Beispiel #3
0
 public async Task <Dictionary <Patch, int> > PatchAsync(DatController datController, IEnumerable <Patch> patches)
 {
     return(await Task.Run(() => RunAsync(datController, patches)));
 }
Beispiel #4
0
 public void CloseController()
 {
     DatController?.Close();
     DatController = null;
 }
Beispiel #5
0
 public ApplySubscriptionViewModel(DatController datController)
 {
     _patches = datController.DatPatches;
 }