예제 #1
0
        // ReSharper enable InconsistentNaming

        private LoadPostDataContext CreateLoadContext(IEsentSession session, bool openMedia, bool openQuotes)
        {
            var r = new LoadPostDataContext();

            try
            {
                r.table = OpenPostsTable(session, OpenTableGrbit.ReadOnly);
                if (openMedia)
                {
                    r.mediaTable = OpenMediaFilesTable(session, OpenTableGrbit.ReadOnly);
                    r.mediaTable.Indexes.SequencesIndex.SetAsCurrentIndex();
                }
                if (openQuotes)
                {
                    r.quotesTable = OpenPostsTable(session, OpenTableGrbit.ReadOnly);
                    r.quotesTable.Indexes.QuotedPostsIndex.SetAsCurrentIndex();
                }
            }
            catch
            {
                r.Dispose();
                throw;
            }
            return(r);
        }
예제 #2
0
        private IBoardPostEntity LoadBoardEntity(IEsentSession session, ref LoadPostDataContext loadContext, PostStoreLoadMode loadMode)
        {
            var entityType = (PostStoreEntityType)loadContext.table.Columns.EntityType;
            var dl         = loadContext.table.Columns.DataLoaded;

            if (loadMode.EntityLoadMode != PostStoreEntityLoadMode.EntityOnly &&
                loadMode.EntityLoadMode != PostStoreEntityLoadMode.LinkOnly && dl == false)
            {
                var loadMode1 = loadMode.Clone();
                loadMode1.EntityLoadMode = PostStoreEntityLoadMode.EntityOnly;
                loadMode = loadMode1;
            }
            switch (entityType)
            {
            case PostStoreEntityType.Post:
            case PostStoreEntityType.ThreadPreviewPost:
            case PostStoreEntityType.CatalogPost:
                return(LoadPost(session, ref loadContext, loadMode, entityType));

            case PostStoreEntityType.Thread:
            case PostStoreEntityType.Catalog:
                return(LoadPostCollection(session, ref loadContext, loadMode, entityType));

            case PostStoreEntityType.ThreadPreview:
                return(LoadThreadPreview(session, ref loadContext, loadMode, entityType));

            case PostStoreEntityType.BoardPage:
                return(LoadThreadCollection(session, ref loadContext, loadMode, entityType));

            default:
                return(null);
            }
        }
예제 #3
0
        private IBoardPostEntity LoadPost(IEsentSession session, ref LoadPostDataContext loadContext, bool getPostCount, PostStoreEntityType?entityType)
        {
            BasicEntityInfo    bi = default(BasicEntityInfo);
            PostModelStorePost r  = IsOriginalPageSequence(entityType) ? new PostModelStorePostWithSequence() : new PostModelStorePost();

            SetPostData(session, ref loadContext, getPostCount, r, ref bi);
            return(r);
        }
예제 #4
0
        private void SetPostData(IEsentSession session, ref LoadPostDataContext loadContext, PostsTable.ViewValues.PostFullLoadView v, bool getPostCount, PostModelStorePost data, ref BasicEntityInfo bi)
        {
            SetPostLightData(session, v, getPostCount, data, ref bi);
            var posterName = v.PosterName;
            var otherData  = DeserializeDataContract <PostOtherData>(v.OtherDataBinary);

            otherData?.FillPostData(data, LinkSerialization, posterName);
            data.Comment    = ObjectSerializationService.Deserialize(v.Document) as IPostDocument;
            data.LoadedTime = FromUtcToOffset(v.LoadedTime) ?? DateTimeOffset.MinValue;
            data.MediaFiles = LoadPostMedia(loadContext.mediaTable ?? throw new InvalidOperationException("Таблица медиафайлов не открыта"), ref bi, false);
            data.Quotes     = LoadQuotesForPost(loadContext.quotesTable ?? throw new InvalidOperationException("Таблица цитат не открыта"), false, ref bi);
        }
예제 #5
0
        private IBoardPostEntity LoadThreadCollection(IEsentSession session, ref LoadPostDataContext loadContext, PostStoreLoadMode loadMode, PostStoreEntityType entityType)
        {
            switch (loadMode.EntityLoadMode)
            {
            case PostStoreEntityLoadMode.LinkOnly:
                return(LoadLinkOnly(loadContext.table));

            case PostStoreEntityLoadMode.EntityOnly:
                return(LoadBareEntity(loadContext.table, entityType));

            case PostStoreEntityLoadMode.Light:
            case PostStoreEntityLoadMode.Full:
                return(LoadThreadCollection(loadContext.table));

            default:
                return(null);
            }
        }
예제 #6
0
        private IBoardPostEntity LoadPost(IEsentSession session, ref LoadPostDataContext loadContext, PostStoreLoadMode loadMode, PostStoreEntityType entityType)
        {
            switch (loadMode.EntityLoadMode)
            {
            case PostStoreEntityLoadMode.LinkOnly:
                return(LoadLinkOnly(loadContext.table));

            case PostStoreEntityLoadMode.EntityOnly:
                return(LoadBareEntity(loadContext.table, entityType));

            case PostStoreEntityLoadMode.Light:
                return(LoadPostLight(session, loadContext.table, loadMode.RetrieveCounterNumber, entityType));

            case PostStoreEntityLoadMode.Full:
                return(LoadPost(session, ref loadContext, loadMode.RetrieveCounterNumber, entityType));

            default:
                return(null);
            }
        }
예제 #7
0
 private void SetPostData(IEsentSession session, ref LoadPostDataContext loadContext, bool getPostCount, PostModelStorePost data, ref BasicEntityInfo bi)
 {
     SetPostData(session, ref loadContext, loadContext.table.Views.PostFullLoadView.Fetch(), getPostCount, data, ref bi);
 }