CodeBlog: создание расширения для блогов в Visual Studio 2010 Часть 2Источник: msvisualstudio2010
Обрамление кодаВ Visual Studio графические эффекты в редакторе кода называются обрамлениями. Обрамления это WPF UI элементы (UIElements), которые размещены в специальном z-упорядоченном (z-ordered) слое в области видимости редактора. Для CodeBlog нам нужно добавить обрамление, которое нарисует серо-голубую окантовку вокруг кода, который мы будем отсылать в блог, и текстовую метку, которая показывает URL соответствующего поста в блоге. [TextViewRole(PredefinedTextViewRoles.Document)] Атрибут ContentType определяет интересующие нас типы контента (любые варианты текста). TextViewRole определяет виды интересующих нас текстовых представлений (documents, т.е. любые, файловые представления). Когда же новое текстовое представление с соответствующими атрибутами создано, фреймворк вызывает метод Connector"а TextViewCreated. Когда TextViewCreated вызван, Connector создает Manager класс для нового представления. Manager, вместе со связанным с ним Provider классом, реагирует на отслеживающий его набор Adornment объектов, которые отображают фактические фрагменты текста, из которых создаются записи блога. Вторая функция Connector"а используется для экспорта описания слоя:
Здесь определяется, порядок, в котором будет вписываться слой обрамления для записей блога, и назначается его имя ("PostAdornmentLayer"). Когда Manager для представления текста (text view) создан, он находит этот слой по имени. Визуальное отображение это WPF канва (canvas), созданная из Adornment объекта, на котором отрисованы подсвеченный блоки и URL. Передача сообщенияПостинг выделенного текста в Tweeter и блог является ключевой функциональностью CodeBlog, и она легко реализуема. Мы, всего лишь, используем Web-службы и, запуская управляемый VSPackage, мы получаем всю мощь C # и .NET в свое распоряжение. Вдобавок к этому, здесь мы обретаем некую точку опоры. Twitter клиент в CodeBlog, это урезанная версия клиента в демонстрационной панели, - примера полнофункционального расширения Visual Studio, которое вы можете получить из CodePlex, в то время, как MetaWebLog клиент CodeBlog"а построен на основе библиотеки классов XML-RPC.NET Чарльза Кука.
PostToTwitter формирует HTTP POST запрос и отсылает его. Вначале производится аутентификация, путем вызова verify_credentials API Twitter"а в тот момент, когда клиент создан. Вызов возвращает куку сессии, которую запоминает и отсылает в последующем POST запросе CodeBlog.
// first paramter, blogId, is ignored by wordpress. return protocol.newPost("", userName, password, content, publish); } Объект protocol является прокси для XML-RPC вызова на сервере. Он предоставляется XML-RPC.NET. Параметр content это структура POST, которая включает в себя код для отправки, а также заголовок, дату и информацию о категории. Publish это флаг, указывающий должна ли запись публиковаться как пост или нет. Если мы хотим создать черновик в WordPress, мы определяем параметр publish как false. Здесь показано как настраивается обращение к WordPress из класса основного пакета. Post post = new Post(); post.title = "Code I"m Working On"; post.description = "[sourcecode]" + selectedText + string postId = blogClient.NewPost(post, false); Мы помещаем выделенный текст в тег [sourcecode], который уведомляет WordPress о том, что данная запись является исходным кодом и должна быть соответствующим образом отформатирована. С тех пор, как WordPress поддерживает языковое форматирование, в том числе и C# и Visual Basic, появилась еще одна замечательная возможность (опять же TTD) определять тип кода в редакторе, что позволяет нам настраивать установить атрибут языка в теге. System.Diagnostics.Process.Start(draftUrl); Постоянная URL используется для отображения как в примечании к обрамленному тексту, так и в окне инструментов записей блога и Твиттера. |