示例#1
0
        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);
        }
示例#2
0
        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);
        }