コード例 #1
0
        protected virtual void PublishPage(ref LocalPublishingQueue queueItem, PublishingAction action)
        {
            var site = queueItem.Site;

            if (site != null)
            {
                var page = new Page(site, queueItem.ObjectUUID).AsActual();
                if (page != null)
                {
                    if (action == PublishingAction.Publish)
                    {
                        _pageManager.Publish(page, queueItem.PublishDraft, queueItem.UserId);
                        queueItem.UtcProcessedPublishTime = DateTime.UtcNow;
                    }
                    else if (action == PublishingAction.Unbpulish)
                    {
                        _pageManager.Unpublish(page, queueItem.UserId);
                        queueItem.UtcProcessedUnpublishTime = DateTime.UtcNow;
                    }
                }
                else
                {
                    NoSuchObjectMessage(ref queueItem);
                }
            }
        }
コード例 #2
0
        protected virtual void AddLog(PublishingQueue queueItem, PublishingAction action, Exception e = null)
        {
            PublishingLog log = new PublishingLog()
            {
                UUID             = Kooboo.UniqueIdGenerator.GetInstance().GetBase32UniqueId(20),
                QueueType        = QueueType.Publishing,
                QueueUUID        = queueItem.UUID,
                SiteName         = queueItem.SiteName,
                PublishingObject = queueItem.PublishingObject,
                ObjectUUID       = queueItem.ObjectUUID,
                //PublishingType = queueItem.PublishingType,
                RemoteEndpoint    = null,
                TextFolderMapping = null,
                UserId            = queueItem.UserId,
                Status            = queueItem.Status,
                Vendor            = null,
                UtcProcessedTime  = DateTime.UtcNow,
                Message           = e == null ? queueItem.Message : e.Message,
                StackTrace        = e == null ? "" : e.StackTrace,
                PublishingAction  = action,
                QueueObject       = queueItem
            };

            _publishingLogProvider.Add(log);
        }
コード例 #3
0
        protected virtual void PublishPage(ref RemotePublishingQueue queueItem, PublishingAction action, out RemoteEndpointSetting remoteEndpoint)
        {
            remoteEndpoint = new RemoteEndpointSetting()
            {
                SiteName = queueItem.SiteName, Name = queueItem.RemoteEndpoint
            }.AsActual();

            if (remoteEndpoint == null)
            {
                NoSuchEndpoint(ref queueItem, queueItem.RemoteEndpoint);
            }

            var site = new Site(queueItem.SiteName).AsActual();

            if (site != null)
            {
                var page = new Page(site, queueItem.ObjectUUID).AsActual();
                if (page != null)
                {
                    var cmisService = _cmisSession.OpenSession(remoteEndpoint.CmisService, remoteEndpoint.CmisUserName, remoteEndpoint.CmisPassword);
                    switch (action)
                    {
                    case PublishingAction.Publish:
                        if (queueItem.PublishDraft)
                        {
                            page = ((IPageProvider)_pageManager.Provider).GetDraft(page);
                        }
                        page.Published = true;
                        cmisService.AddPage(remoteEndpoint.RemoteRepositoryId, page);
                        queueItem.UtcProcessedPublishTime = DateTime.UtcNow;
                        break;

                    case PublishingAction.Unbpulish:
                        page.Published = false;
                        cmisService.DeletePage(remoteEndpoint.RemoteRepositoryId, page.FullName);
                        queueItem.UtcProcessedUnpublishTime = DateTime.UtcNow;
                        break;

                    case PublishingAction.None:
                    default:
                        queueItem.Status = QueueStatus.Processed;
                        break;
                    }
                }
                else
                {
                    NoSuchObjectMessage(ref queueItem);
                }
            }
            else
            {
                NoSuchObjectMessage(ref queueItem);
            }
        }
コード例 #4
0
        private void PublicTextContent(ref LocalPublishingQueue queueItem, PublishingAction action)
        {
            var site = queueItem.Site;

            if (site != null)
            {
                var contentIntegrateId = new ContentIntegrateId(queueItem.ObjectUUID);
                var repository         = new Repository(contentIntegrateId.Repository).AsActual();;
                if (repository != null)
                {
                    var textFolder = new TextFolder(repository, contentIntegrateId.FolderName).AsActual();
                    if (textFolder != null)
                    {
                        var contentUUID = contentIntegrateId.ContentUUID;
                        if (action == PublishingAction.Publish)
                        {
                            _textContentManager.Publish(textFolder, contentUUID, queueItem.UserId);
                            queueItem.UtcProcessedPublishTime = DateTime.UtcNow;
                        }
                        else if (action == PublishingAction.Unbpulish)
                        {
                            _textContentManager.Unpublish(textFolder, contentUUID, queueItem.UserId);
                            queueItem.UtcProcessedUnpublishTime = DateTime.UtcNow;
                        }
                    }
                    else
                    {
                        NoSuchObjectMessage(ref queueItem);
                    }
                }
                else
                {
                    NoSuchObjectMessage(ref queueItem);
                }
            }
        }
コード例 #5
0
        protected virtual void PublishTextContent(ref RemotePublishingQueue queueItem, PublishingAction action, out RemoteEndpointSetting remoteEndpoint)
        {
            remoteEndpoint = null;
            var mapping = new RemoteTextFolderMapping(queueItem.Site, queueItem.TextFolderMapping).AsActual();

            if (mapping == null)
            {
                NoSuchPublishingMapping(ref queueItem);
                return;
            }
            remoteEndpoint = new RemoteEndpointSetting(queueItem.Site, mapping.RemoteEndpoint).AsActual();

            if (remoteEndpoint == null)
            {
                NoSuchEndpoint(ref queueItem, mapping.RemoteEndpoint);
                return;
            }
            var contentIntegrateId = new ContentIntegrateId(queueItem.ObjectUUID);
            var repository         = new Repository(contentIntegrateId.Repository).AsActual();

            if (repository != null)
            {
                var textFolder = new TextFolder(repository, contentIntegrateId.FolderName).AsActual();
                if (textFolder != null)
                {
                    var contentUUID = contentIntegrateId.ContentUUID;

                    var content = textFolder.CreateQuery().WhereEquals("UUID", contentUUID).FirstOrDefault();
                    if (content != null)
                    {
                        var cmisService = _cmisSession.OpenSession(remoteEndpoint.CmisService, remoteEndpoint.CmisUserName, remoteEndpoint.CmisPassword);

                        switch (action)
                        {
                        case PublishingAction.Publish:
                            content.Published = true;
                            var categories = _textContentProvider.QueryCategories(content);
                            cmisService.AddTextContent(remoteEndpoint.RemoteRepositoryId, mapping.RemoteFolderId, content, categories);
                            queueItem.UtcProcessedPublishTime = DateTime.UtcNow;
                            break;

                        case PublishingAction.Unbpulish:
                            cmisService.DeleteTextContent(remoteEndpoint.RemoteRepositoryId, mapping.RemoteFolderId, content.UUID);
                            queueItem.UtcProcessedUnpublishTime = DateTime.UtcNow;
                            break;

                        case PublishingAction.None:
                        default:
                            break;
                        }
                        return;
                    }
                }
            }

            NoSuchObjectMessage(ref queueItem);
        }
コード例 #6
0
        public virtual void ProcessQueueItem(PublishingQueue queueItem, DateTime executeTime)
        {
            Exception        exception = null;
            bool             hasMoreAction;
            PublishingAction action = GetPublishingAction(queueItem, out hasMoreAction);

            if (action == PublishingAction.None && hasMoreAction == true)
            {
                return;
            }

            try
            {
                if (action == PublishingAction.None && hasMoreAction == false)
                {
                    queueItem.Status = QueueStatus.Processed;
                }
                else
                {
                    if (hasMoreAction)
                    {
                        queueItem.Status = QueueStatus.Pending;
                    }
                    else
                    {
                        queueItem.Status = QueueStatus.Processed;
                    }
                    if (action != PublishingAction.None)
                    {
                        switch (queueItem.PublishingType)
                        {
                        case PublishingType.Local:
                            LocalPublish(ref queueItem, action);
                            break;

                        case PublishingType.Remote:
                            RemotePublish(ref queueItem, action);
                            break;

                        default:
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Kooboo.HealthMonitoring.Log.LogException(e);
                queueItem.Status           = QueueStatus.Warning;
                queueItem.Message          = e.Message;
                queueItem.UtcProcessedTime = DateTime.UtcNow;
                exception = e;
            }

            if (queueItem.Status == QueueStatus.Processed)
            {
                _publishingQueueProvider.Remove(queueItem);
            }
            else
            {
                _publishingQueueProvider.Update(queueItem, queueItem);
            }


            AddLog(queueItem, action, exception);
        }
コード例 #7
0
        private void RemotePublish(ref PublishingQueue queueItem, PublishingAction action)
        {
            var site = queueItem.Site;

            if (site != null)
            {
                switch (queueItem.PublishingObject)
                {
                case PublishingObject.Page:
                    if (queueItem.RemoteEndpoints != null)
                    {
                        var page = new Page(site, queueItem.ObjectUUID).AsActual();
                        if (page != null)
                        {
                            foreach (var remote in queueItem.RemoteEndpoints)
                            {
                                var outgoingQueue = new OutgoingQueue(queueItem.Site, Kooboo.UniqueIdGenerator.GetInstance().GetBase32UniqueId(10));
                                outgoingQueue.PublishingObject = queueItem.PublishingObject;
                                outgoingQueue.ObjectUUID       = queueItem.ObjectUUID;
                                outgoingQueue.RemoteEndpoint   = remote;
                                outgoingQueue.UtcCreationDate  = DateTime.UtcNow;
                                outgoingQueue.Status           = QueueStatus.Pending;
                                outgoingQueue.RetryTimes       = 0;
                                outgoingQueue.Action           = action;
                                outgoingQueue.PublishDraft     = queueItem.PublishDraft;
                                _outgoingQueueProvider.Add(outgoingQueue);
                            }
                        }
                        else
                        {
                            NoSuchObjectMessage(ref queueItem);
                        }
                    }
                    NoAnyEndPoint(ref queueItem);
                    break;

                case PublishingObject.TextContent:
                    if (queueItem.PublishingMappings != null)
                    {
                        var contentIntegrateId = new ContentIntegrateId(queueItem.ObjectUUID);
                        var repository         = new Repository(contentIntegrateId.Repository).AsActual();;
                        if (repository != null)
                        {
                            var textFolder = new TextFolder(repository, contentIntegrateId.FolderName).AsActual();
                            if (textFolder != null)
                            {
                                var contentUUID = contentIntegrateId.ContentUUID;

                                foreach (var mappingName in queueItem.PublishingMappings)
                                {
                                    var mapping = new RemoteTextFolderMapping();    //todo:AsActual
                                    if (mapping != null)
                                    {
                                        var outgoingQueue = new OutgoingQueue(queueItem.Site, Kooboo.UniqueIdGenerator.GetInstance().GetBase32UniqueId(10));
                                        outgoingQueue.PublishingObject = queueItem.PublishingObject;
                                        outgoingQueue.ObjectUUID       = queueItem.ObjectUUID;
                                        outgoingQueue.RemoteEndpoint   = mapping.RemoteEndpoint;
                                        outgoingQueue.RemoteFolderId   = mapping.RemoteFolderId;
                                        outgoingQueue.UtcCreationDate  = DateTime.UtcNow;
                                        outgoingQueue.Status           = QueueStatus.Pending;
                                        outgoingQueue.RetryTimes       = 0;
                                        outgoingQueue.Action           = action;
                                        outgoingQueue.PublishDraft     = queueItem.PublishDraft;
                                        _outgoingQueueProvider.Add(outgoingQueue);
                                    }
                                }
                            }
                            else
                            {
                                NoSuchObjectMessage(ref queueItem);
                            }
                        }
                        else
                        {
                            NoSuchObjectMessage(ref queueItem);
                        }
                    }
                    NoAnyEndPoint(ref queueItem);
                    break;

                default:
                    NoSuchPublishingObject(ref queueItem);
                    break;
                }
            }
        }
コード例 #8
0
        protected virtual void LocalPublish(ref PublishingQueue queueItem, PublishingAction action)
        {
            var site = queueItem.Site;

            if (site != null)
            {
                switch (queueItem.PublishingObject)
                {
                case PublishingObject.Page:
                    var page = new Page(site, queueItem.ObjectUUID).AsActual();
                    if (page != null)
                    {
                        if (action == PublishingAction.Publish)
                        {
                            _pageManager.Publish(page, queueItem.PublishDraft, queueItem.UserId);
                        }
                        else if (action == PublishingAction.Unbpulish)
                        {
                            _pageManager.Unpublish(page, queueItem.UserId);
                        }
                    }
                    else
                    {
                        NoSuchObjectMessage(ref queueItem);
                    }
                    break;

                case PublishingObject.TextContent:
                    var contentIntegrateId = new ContentIntegrateId(queueItem.ObjectUUID);
                    var repository         = new Repository(contentIntegrateId.Repository).AsActual();;
                    if (repository != null)
                    {
                        var textFolder = new TextFolder(repository, contentIntegrateId.FolderName).AsActual();
                        if (textFolder != null)
                        {
                            var contentUUID = contentIntegrateId.ContentUUID;
                            if (action == PublishingAction.Publish)
                            {
                                _textContentManager.Publish(textFolder, contentUUID, queueItem.UserId);
                            }
                            else if (action == PublishingAction.Unbpulish)
                            {
                                _textContentManager.Unpublish(textFolder, contentUUID, queueItem.UserId);
                            }
                        }
                        else
                        {
                            NoSuchObjectMessage(ref queueItem);
                        }
                    }
                    else
                    {
                        NoSuchObjectMessage(ref queueItem);
                    }
                    break;

                default:
                    NoSuchPublishingObject(ref queueItem);
                    break;
                }
            }

            queueItem.UtcProcessedTime = DateTime.UtcNow;
        }
コード例 #9
0
        private PublishingAction GetPublishingAction(PublishingQueue queueItem, out bool hasMoreAction)
        {
            PublishingAction action = PublishingAction.None;

            hasMoreAction = false;
            if (queueItem.UtcTimeToPublish == null && queueItem.UtcTimeToUnpublish == null)
            {
                action = PublishingAction.None;
            }
            else
            {
                if (queueItem.UtcProcessedTime == null)
                {
                    if (queueItem.UtcTimeToUnpublish == null)
                    {
                        action = PublishingAction.Publish;
                    }
                    else if (queueItem.UtcTimeToPublish == null)
                    {
                        action = PublishingAction.Unbpulish;
                    }
                    else
                    {
                        if (queueItem.UtcTimeToPublish.Value > queueItem.UtcTimeToUnpublish.Value)
                        {
                            action = PublishingAction.Unbpulish;
                        }
                        else
                        {
                            action = PublishingAction.Publish;
                        }
                        hasMoreAction = true;
                    }
                }
                else if (queueItem.UtcTimeToPublish != null && queueItem.UtcTimeToUnpublish != null)
                {
                    if (queueItem.UtcTimeToPublish.Value > queueItem.UtcTimeToUnpublish.Value)
                    {
                        if (queueItem.UtcTimeToPublish.Value < DateTime.UtcNow)
                        {
                            action = PublishingAction.Publish;
                        }
                        else
                        {
                            action        = PublishingAction.None;
                            hasMoreAction = true;
                        }
                    }
                    else
                    {
                        if (queueItem.UtcTimeToUnpublish.Value < DateTime.UtcNow)
                        {
                            action = PublishingAction.Unbpulish;
                        }
                        else
                        {
                            action        = PublishingAction.None;
                            hasMoreAction = true;
                        }
                    }
                }
                else
                {
                    action = PublishingAction.None;
                }
            }

            return(action);
        }