| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | using InABox.Core;using NPOI.SS.Formula.Functions;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace InABox.Poster.Timberline{    public class TimberlinePostResult<TExport, TPostable> : IPostResult<TPostable>        where TPostable : IPostable        where TExport : class    {        private List<Tuple<TPostable, TExport?>> items = new List<Tuple<TPostable, TExport?>>();        private Dictionary<Type, List<IPostableFragment<TPostable>>> fragments = new Dictionary<Type, List<IPostableFragment<TPostable>>>();        public IEnumerable<TExport> Exports => items            .Where(x => x.Item2 is not null && x.Item1.PostedStatus == PostedStatus.Posted)            .Select(x => x.Item2!);        public IEnumerable<TPostable> PostedEntities => items.Select(x => x.Item1);        public IEnumerable<Tuple<TPostable, TExport?>> Items => items;        public IEnumerable<KeyValuePair<Type, IEnumerable<IPostableFragment<TPostable>>>> Fragments =>            fragments.Select(x => new KeyValuePair<Type, IEnumerable<IPostableFragment<TPostable>>>(x.Key, x.Value));        public void AddSuccess(TPostable post, TExport? export)        {            post.Post();            items.Add(new Tuple<TPostable, TExport?>(post, export));        }        public void AddFailed(TPostable post, string note)        {            post.FailPost(note);            items.Add(new Tuple<TPostable, TExport?>(post, null));        }        public void AddFragment(IPostableFragment<TPostable> fragment)        {            if (!fragments.TryGetValue(fragment.GetType(), out var fragmentList))            {                fragmentList = new List<IPostableFragment<TPostable>>();                fragments[fragment.GetType()] = fragmentList;            }            fragmentList.Add(fragment);        }    }}
 |