CodeBlog: створення розширення для блогів в Visual Studio 2010 Частина 2, Різне, Програмування, статті

Обрамлення коду


В 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 використовується для відображення як у примітці до обрамленому тексту, так і у вікні інструментів записів блогу і Твіттера.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*