コード例 #1
0
        public static BlogPost SafeRetrievePost(PostInfo postInfo, int timeoutMs)
        {
            try
            {
                // null for invalid blogs
                if (!BlogSettings.BlogIdIsValid(postInfo.BlogId))
                {
                    return(null);
                }

                // null if the user can't authenticate
                using (Blog blog = new Blog(postInfo.BlogId))
                {
                    if (!blog.VerifyCredentials())
                    {
                        return(null);
                    }
                }

                // fire up the get post thread
                GetPostThread getPostThread = new GetPostThread(postInfo);
                Thread        thread        = ThreadHelper.NewThread(new ThreadStart(getPostThread.ThreadMain), "GetPostThread", true, false, true);
                thread.Start();

                // wait for it to complete
                thread.Join(timeoutMs);

                // return the post if we successfully got one
                BlogPost blogPost = getPostThread.BlogPost;
                if (blogPost != null)
                {
                    // Clone in case there are ever issues sharing these accross threads
                    // (not aware of any right now)
                    return(blogPost.Clone() as BlogPost);
                }
                else
                {
                    return(null);
                }
            }
            catch
            {
                return(null);
            }
        }
コード例 #2
0
        public MissingPostLinkForm(PostInfo postInfo)
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            this.buttonOK.Text = Res.Get(StringId.OKButtonText);
            this.labelTitle.Text = Res.Get(StringId.MissingPostLinkCaption);
            this.labelExplanation.Text = Res.Get(StringId.MissingPostLinkExplanation);
            this.Text = Res.Get(StringId.MissingPostLinkTitle);

            this.labelTitle.Font = Res.GetFont(FontSize.XLarge, FontStyle.Bold);
            string entityName = postInfo.IsPage ? Res.Get(StringId.Page) : Res.Get(StringId.Post) ;
            string entityNameLower = postInfo.IsPage ? Res.Get(StringId.PageLower) : Res.Get(StringId.PostLower) ;

            labelTitle.Text = String.Format(CultureInfo.CurrentCulture, labelTitle.Text, entityName ) ;
            labelExplanation.Text = String.Format(CultureInfo.CurrentCulture, labelExplanation.Text, entityNameLower, ApplicationEnvironment.ProductName) ;
        }
コード例 #3
0
        public static BlogPost SafeRetrievePost(PostInfo postInfo, int timeoutMs)
        {
            try
            {
                // null for invalid blogs
                if (!BlogSettings.BlogIdIsValid(postInfo.BlogId))
                    return null;

                // null if the user can't authenticate
                using (Blog blog = new Blog(postInfo.BlogId))
                {
                    if (!blog.VerifyCredentials())
                        return null;
                }

                // fire up the get post thread
                GetPostThread getPostThread = new GetPostThread(postInfo);
                Thread thread = ThreadHelper.NewThread(new ThreadStart(getPostThread.ThreadMain), "GetPostThread", true, false, true);
                thread.Start();

                // wait for it to complete
                thread.Join(timeoutMs);

                // return the post if we successfully got one
                BlogPost blogPost = getPostThread.BlogPost;
                if (blogPost != null)
                {
                    // Clone in case there are ever issues sharing these accross threads
                    // (not aware of any right now)
                    return blogPost.Clone() as BlogPost;
                }
                else
                {
                    return null;
                }
            }
            catch
            {
                return null;
            }
        }
コード例 #4
0
        public override bool DeletePost(string postId, bool isPage)
        {
            FileInfo postFile = new FileInfo(postId);
            PostInfo postInfo = PostEditorFile.GetPostInfo(postFile);

            if (postInfo != null)
            {
                bool deletedRemotePost = PostDeleteHelper.SafeDeleteRemotePost(postInfo.BlogId, postInfo.BlogPostId, postInfo.IsPage);
                if (!deletedRemotePost)
                {
                    DialogResult result = DisplayMessage.Show(MessageId.LocalDeleteConfirmation, isPage ? Res.Get(StringId.PageLower) : Res.Get(StringId.PostLower));
                    if (result == DialogResult.No)
                    {
                        return(false);
                    }
                }

                return(PostDeleteHelper.SafeDeleteLocalPost(postFile));
            }
            else
            {
                return(false);
            }
        }
コード例 #5
0
        private string FormatDateString(PostInfo post)
        {
            if ( post.DateModifiedSpecified )
            {
                return post.PrettyDateDisplay ;
            }
            else
            {
                return String.Empty ;
            }

        }
コード例 #6
0
 private string FormatToolTipText(PostInfo post)
 {
     if (post.BlogName != string.Empty)
         return String.Format(CultureInfo.CurrentCulture, Res.Get(StringId.PostLinkTooltipFormat), post.Title, post.BlogName, FormatDateString(post)) ;
     else
         return String.Format(CultureInfo.CurrentCulture, Res.Get(StringId.PostLinkTooltipFormatNoBlogTitle), post.Title, FormatDateString(post)) ;
 }
コード例 #7
0
        public void SetPosts(PostInfo[] posts)
        {
            // copy posts into link labels
            for ( int i=0; i<MAX_POSTS; i++)
            {
                if ( posts.Length > i )
                {
                    string postType = posts[i].IsPage ? Res.Get(StringId.Page) : Res.Get(StringId.Post);
                    LinkLabels[i].AccessibleName = string.Format(CultureInfo.CurrentCulture, AccessibilityNameFormat, postType);
                    DeleteButtons[i].AccessibleName = string.Format(CultureInfo.CurrentCulture, Res.Get(StringId.DeleteSomething), LinkLabels[i].AccessibleName);

                    LinkLabels[i].Text = posts[i].Title ;
                    string tooltipText = FormatToolTipText(posts[i]);
                    LinkLabels[i].AccessibleDescription = tooltipText;
                    LinkLabels[i].LinkColor = ColorizedResources.Instance.SidebarLinkColor;
                    _toolTip.SetToolTip(LinkLabels[i], tooltipText);
                    LinkLabels[i].Tag = posts[i] ;
                    LinkLabels[i].Visible = true ;
                    _toolTip.SetToolTip(DeleteButtons[i], DeleteButtonToolTip);
                    DeleteButtons[i].Tag = posts[i] ;
                    DeleteButtons[i].Visible = true ;
                    DeleteButtons[i].AccessibleDescription = string.Format(CultureInfo.CurrentCulture, Res.Get(StringId.DeleteSomething), posts[i].Title);
                }
                else
                {
                    LinkLabels[i].Text = String.Empty ;
                    LinkLabels[i].Tag = null ;
                    LinkLabels[i].Visible = false ;
                    DeleteButtons[i].Tag = null ;
                    DeleteButtons[i].Visible = false ;
                }
            }

            // note whether we have posts to display
            _havePostsToDisplay = posts.Length > 0 ;
        }
コード例 #8
0
 public static PostInfo GetPostInfo(FileInfo file)
 {
     try
     {
         // get post
         using (Storage postStorage = new Storage(file.FullName, StorageMode.Open, false))
         {
             PostInfo postInfo = new PostInfo();
             postInfo.Id = file.FullName;
             postInfo.Title = ReadString(postStorage, POST_TITLE);
             postInfo.Permalink = SafeReadString(postStorage, POST_PERMALINK, String.Empty);
             postInfo.IsPage = SafeReadBoolean(postStorage, POST_ISPAGE, false);
             postInfo.BlogName = ReadBlogName(postStorage);
             postInfo.BlogId = ReadString(postStorage, DESTINATION_BLOG_ID);
             postInfo.BlogPostId = ReadString(postStorage, POST_ID);
             postInfo.Contents = ReadStringUtf8(postStorage, POST_CONTENTS);
             postInfo.DateModified = file.LastWriteTimeUtc;
             return postInfo;
         }
     }
     catch (Exception ex)
     {
         throw PostEditorStorageException.Create(ex);
     }
 }
コード例 #9
0
 public void DeleteLocalPost(PostInfo postInfo)
 {
     throw new NotImplementedException();
 }
コード例 #10
0
 public GetPostThread(PostInfo postInfo)
 {
     _postInfo = postInfo;
 }
コード例 #11
0
        private void openPostForm_UserDeletedPost(PostInfo deletedPost)
        {
            // See if the file currently being edited was deleted. In this case
            // clear out the post editor
            if (LocalFile != null && LocalFile.IsDeleted)
                ClearPost();

            // Fire notification
            if (UserDeletedPost != null)
                UserDeletedPost(this, EventArgs.Empty);
        }
コード例 #12
0
        public void DeleteLocalPost(PostInfo postInfo)
        {
            // get the post file associated with this post
            PostEditorFile postFile = PostEditorFile.GetExisting(new FileInfo(postInfo.Id));

            // prompt the user to confirm deletion
            string type = BlogPost.IsPage ? Res.Get(StringId.PageLower) : Res.Get(StringId.PostLower);
            MessageId messageId = postFile.IsDraft ? MessageId.ConfirmDeleteDraft : MessageId.ConfirmDeletePost;
            if (DisplayMessage.Show(messageId, _mainFrameWindow, type, postInfo.Title) == DialogResult.Yes)
            {
                // update main window to eliminate artifacts
                _mainFrameWindow.Update();

                // see if we are deleting the currently active file
                bool deletingCurrentDraft = (postFile.Equals(LocalFile));

                if (DeletePostFile(postFile))
                {
                    // fire notification of the delete
                    if (UserDeletedPost != null)
                        UserDeletedPost(this, EventArgs.Empty);

                    // open a new untitled post if we just deleted the current draft
                    if (deletingCurrentDraft)
                        ClearPost();
                }
            }

        }
コード例 #13
0
        public void OpenLocalPost(PostInfo postInfo)
        {
            using (new WaitCursor())
            {
                // get file path
                string postFilePath = postInfo.Id;

                // screen non-existent files
                if (!File.Exists(postFilePath))
                {
                    DisplayMessage.Show(MessageId.PostFileNoExist, _mainFrameWindow, postInfo.Title);
                }
                // screen invalid files
                else if (!PostEditorFile.IsValid(postInfo.Id))
                {
                    DisplayMessage.Show(MessageId.PostFileInvalid, _mainFrameWindow, postInfo.Title);
                }
                else
                {
                    PostEditorFile postEditorFile = PostEditorFile.GetExisting(new FileInfo(postInfo.Id));
                    IBlogPostEditingContext editingContext = postEditorFile.Load();
                    OpenPost(editingContext);
                }
            }
        }
コード例 #14
0
 public GetPostThread(PostInfo postInfo)
 {
     _postInfo = postInfo;
 }
コード例 #15
0
 private void _draftsPostList_PostDeleteRequested(PostInfo post)
 {
     _postEditingSite.DeleteLocalPost(post) ;
     UpdatePostLists() ;
 }
コード例 #16
0
 void IBlogPostEditingSite.OpenLocalPost(PostInfo postInfo)
 {
     _editingManager.OpenLocalPost(postInfo);
 }
コード例 #17
0
 private void _recentPostList_PostSelected(PostInfo post)
 {
     WindowCascadeHelper.SetNextOpenedLocation(_postEditingSite.FrameWindow.Location);
     _postEditingSite.OpenLocalPost(post);
 }
コード例 #18
0
 void IBlogPostEditingSite.DeleteLocalPost(PostInfo postInfo)
 {
     try
     {
         _editingManager.DeleteLocalPost(postInfo);
     }
     catch (Exception ex)
     {
         DisplayableExceptionDisplayForm.Show(_mainFrameWindow, ex);
     }
 }
コード例 #19
0
 public void DeleteLocalPost(PostInfo postInfo)
 {
     throw new NotImplementedException();
 }
コード例 #20
0
        private PostInfo[] GetPosts(RecentPostRequest request, bool getPages)
        {
            using (Blog blog = new Blog(_blogId))
            {
                if (getPages)
                    _blogPosts = blog.GetPages(request.NumberOfPosts);
                else
                    _blogPosts = blog.GetRecentPosts(request.NumberOfPosts, false);

                ArrayList recentPosts = new ArrayList();
                foreach (BlogPost blogPost in _blogPosts)
                {
                    PostInfo postInfo = new PostInfo();
                    postInfo.Id = blogPost.Id;
                    postInfo.IsPage = blogPost.IsPage;
                    postInfo.Title = blogPost.Title;
                    postInfo.Permalink = blogPost.Permalink;
                    postInfo.BlogId = blog.Id;
                    postInfo.BlogName = blog.Name;
                    postInfo.BlogPostId = blogPost.Id;
                    postInfo.Contents = blogPost.Contents;
                    postInfo.DateModified = blogPost.DatePublished;
                    recentPosts.Add(postInfo);
                }
                return (PostInfo[])recentPosts.ToArray(typeof(PostInfo));
            }
        }