+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 92.51 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

CodeBlog: создание расширения для блогов в Visual Studio 2010 Часть 2

30.03.2010 10:40

Обрамление кода

В Visual Studio графические эффекты в редакторе кода называются обрамлениями. Обрамления это WPF UI элементы (UIElements), которые размещены в специальном z-упорядоченном (z-ordered) слое в области видимости редактора. Для CodeBlog нам нужно добавить обрамление, которое нарисует серо-голубую окантовку вокруг кода, который мы будем отсылать в блог, и текстовую метку, которая показывает URL соответствующего поста в блоге.
Обрамление теста. Visual Studio 2010
Эти обрамления  управляются и отрисовываются отдельным проектом в рамках CodeBlog расширения. Этот проект выполнен с помощью MEF. MEF это главный механизм для хостинга плагинов, в котором отдельные компоненты экспортируют и импортируют функциональность из остальных компонентов, основанных на соглашениях (contracts). Visual Studio использует MEF в качестве платформы для обработки расширений редактора, таких как CodeBlog , в котором отрисовывается обрамление текста.
MEF проект включает класс Connector, который содержит несколько функций. Во-первых, Connector реализует IWpfTextViewCreationListener. Реализация и экспортирование этого интерфейса позволяет  Connector"у получать уведомления, когда создано представление нового текста. Он экспортирует интерфейс примерно так:
[Export(typeof(IWpfTextViewCreationListener))]
[ContentType("text")]

[TextViewRole(PredefinedTextViewRoles.Document)]
public sealed class Connector : IWpfTextViewCreationListener

Атрибут ContentType определяет интересующие нас типы контента (любые варианты текста). TextViewRole определяет виды интересующих нас текстовых представлений (documents, т.е. любые, файловые представления). Когда же новое текстовое представление с соответствующими атрибутами создано, фреймворк вызывает метод Connector"а TextViewCreated.

Когда TextViewCreated вызван, Connector создает Manager класс  для нового представления. Manager, вместе со связанным с ним Provider классом, реагирует на отслеживающий его набор Adornment объектов, которые отображают фактические фрагменты текста, из которых создаются записи блога.

Вторая функция Connector"а используется для экспорта описания слоя:

[Export(typeof(AdornmentLayerDefinition))]
[Name("PostAdornmentLayer")]
[Order(After = PredefinedAdornmentLayers.Selection,
Before =  PredefinedAdornmentLayers.Text)]
public AdornmentLayerDefinition postLayerDefinition;

Здесь определяется, порядок, в котором будет вписываться слой обрамления для записей блога, и назначается его имя ("PostAdornmentLayer"). Когда Manager для представления текста (text view) создан, он находит этот слой по имени. Визуальное отображение это WPF канва (canvas), созданная из Adornment объекта, на котором отрисованы подсвеченный блоки и URL.
Наконец, Connector обеспечивает метод Execute, который отдельно вызывается пакетом CodeBlog, когда пункт меню выбран (пакет имеет ссылку на MEF компонент). Метод Execute ищет adornment Provider для представления, указанного в пакете, и использует его для того, что бы добавить новое обрамление в это представление с выделением текста и URL поста в блоге.

Передача сообщения

Постинг выделенного текста в Tweeter и блог является ключевой функциональностью CodeBlog, и она легко реализуема. Мы, всего лишь, используем Web-службы и, запуская управляемый VSPackage, мы получаем  всю мощь C # и .NET в свое распоряжение. Вдобавок к этому, здесь мы обретаем некую точку опоры. Twitter клиент в CodeBlog, это урезанная версия клиента в демонстрационной панели, - примера полнофункционального расширения Visual Studio, которое вы можете получить из CodePlex, в то время, как MetaWebLog клиент CodeBlog"а построен на основе библиотеки классов XML-RPC.NET Чарльза Кука.
Клиенты CodeBlog реализуют минимальную функциональность. Они делают только то, что необходимо в CodeBlog для отсылки сообщений, хотя, сами по себе API, значительно более функциональны. CodeBlog"s Twitter клиент реализует только один вызов, UpdateStatus, в котором уведомляется об отправке фрагмента кода.

internal void UpdateStatus(string message)
{
string uri = "http://www.twitter.com/statuses/update.xml";
PostToTwitter(uri, string.Concat("status=", Uri.EscapeDataString(message)));
}

PostToTwitter формирует HTTP POST запрос и отсылает его. Вначале производится аутентификация, путем вызова verify_credentials API Twitter"а в тот момент, когда клиент создан. Вызов возвращает куку сессии, которую запоминает и отсылает в последующем POST запросе CodeBlog.
В случае с блогом, CodeBlog  взаимодействует с WordPress посредствам MetaWebLog XML-RPC API. И здесь CodeBlog  использует только один вызов, NewPost:

public string NewPost(Post content, bool publish)
{

// 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.categories = new string[] {"Code"};

post.title = "Code I"m Working On";

post.description = "[sourcecode]" +  selectedText +
"[/sourcecode]";
post.dateCreated = DateTime.Now;

string postId = blogClient.NewPost(post, false);

Мы помещаем выделенный текст в тег  [sourcecode], который уведомляет WordPress о том, что данная запись является исходным кодом и должна быть соответствующим образом отформатирована. С тех пор, как WordPress поддерживает языковое форматирование, в том числе и C# и Visual Basic, появилась еще одна замечательная возможность (опять же TTD) определять тип кода в редакторе, что позволяет нам настраивать установить атрибут языка в теге.
Мы используем postId , возвращаемый WordPress для форматирования черновика и постоянной ссылки URL.  URL черновика используется для обращения к записи черновика с целью ее редактирования в браузере. Это мы делаем с помощью следующей строки кода:

System.Diagnostics.Process.Start(draftUrl);

Постоянная URL используется для отображения как в примечании к обрамленному тексту, так и в окне инструментов записей блога и Твиттера.

Ссылки по теме

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года