private async void LoadInstruction(BookInstruction B, bool useCache) { if (!BookInstruction.OpLocks.AcquireLock(B.GID, out AsyncLocks <string, bool> .QueueToken QT)) { await QT.Task; } SpiderBook SBook = await SpiderBook.CreateSAsync(B.ZoneId, B.ZItemId, B.BookSpiderDef); if (Shared.Storage.FileExists(SBook.MetaLocation)) { B.LastCache = Shared.Storage.FileTime(SBook.MetaLocation).LocalDateTime; } if (useCache && (B.Packed == true || Shared.BooksDb.Volumes.Any(x => x.Book == B.Entry))) { if (B.Packed != true) { B.PackSavedVols(SBook.PSettings); } } else { bool UpdateFailed = true; await SBook.Process(); if (SBook.Processed && SBook.ProcessSuccess) { B.LastCache = DateTime.Now; BookInstruction BUpdate = SBook.GetBook(); if (BUpdate.Packable && BUpdate.Packed != true) { BUpdate.PackVolumes(SBook.GetPPConvoy()); B.Update(BUpdate); UpdateFailed = false; } } // Cannot download content, use cache if available if (UpdateFailed && Shared.BooksDb.Volumes.Any(x => x.Book == B.Entry)) { Logger.Log(ID, "Spider failed to produce instructions, using cache instead", LogType.WARNING); B.PackSavedVols(SBook.PSettings); } } QT.TrySetResult(true); OnComplete(B); }
private async void LoadInst(BookInstruction b) { if (!BookInstruction.OpLocks.AcquireLock(b.GID, out AsyncLocks <string, bool> .QueueToken QT)) { await QT.Task; } foreach (VolInstruction VInst in b.GetVolInsts()) { Shared.LoadMessage("SubProcessRun", VInst.Title); // This should finalize the chapter info var Convoy = await VInst.Process(b); } Shared.LoadMessage("CompilingTOC", b.Title); IEnumerable <Volume> Vols = b.GetVolInsts().Remap(x => x.ToVolume(b.Entry)); if (Vols.Any()) { List <Volume> NewVolumes = new List <Volume>(); Vols.ExecEach(Vol => { string VID = Vol.Meta[AppKeys.GLOBAL_VID]; Volume NVol = b.Entry.Volumes.FirstOrDefault(x => x.Meta[AppKeys.GLOBAL_VID] == VID) ?? Vol; if (NVol != Vol) { NVol.Title = Vol.Title; NVol.Index = Vol.Index; NVol.Json_Meta = Vol.Json_Meta; } Shared.BooksDb.LoadCollection(NVol, x => x.Chapters, x => x.Index); List <Chapter> NewChapters = new List <Chapter>(); Vol.Chapters.ExecEach(Ch => { string CID = Ch.Meta[AppKeys.GLOBAL_CID]; Chapter NCh = NVol.Chapters.FirstOrDefault(x => x.Meta[AppKeys.GLOBAL_CID] == CID) ?? Ch; if (NCh != Ch) { NCh.Title = Ch.Title; NCh.Index = Ch.Index; NCh.Json_Meta = Ch.Json_Meta; } NewChapters.Add(NCh); }); NewVolumes.Add(NVol); }); b.Entry.Volumes = NewVolumes; b.SaveInfo(); } else { MessageBus.SendUI(GetType(), AppKeys.HS_NO_VOLDATA, b); } QT.TrySetResult(true); OnComplete(b); }