private async Task <bool> _RowAction(IGRRow _Row) { GRRow <BookDisplay> Row = (GRRow <BookDisplay>)_Row; BookInstruction Payload = ( BookInstruction )Row.Source.Payload; if (Payload != null) { // Save the book here Payload.SaveInfo(); // Reload the BookDisplay as Entry might changed from SaveInfo Row.Source = new BookDisplay(Payload.Entry); } SpiderBook Item = await SpiderBook.CreateSAsync(Row.Source.Entry.ZoneId, Row.Source.Entry.ZItemId, Payload?.BookSpiderDef); Item.PropertyChanged += Item_PropertyChanged; XParameter Metadata = Item.PSettings.Parameter("METADATA") ?? new XParameter("METADATA"); Metadata.SetValue(new XKey("payload", Row.Source.Entry.Meta[AppKeys.GLOBAL_SSID])); Item.PSettings.SetParameter(Metadata); if (!Item.ProcessSuccess && Item.CanProcess) { await ItemProcessor.ProcessLocal(Item); } Item.PropertyChanged -= Item_PropertyChanged; (( BookDisplayPageExt )Extension).OpenItem(_Row); return(true); }
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); }