понеділок, 8 жовтня 2012 р.

Unity Ubuntu изнутри. Меню сообщений

Новая оболочка в Ubuntu Unity состоит из разных компонентов, взаимодействующих между собой. Данная техническая статья описывает такое понятие как меню сообщений (messaging menu).

Введение.

Меню сообщений создано, чтобы сделать взаимодействие людей проще. Например, легко сменить статус в программах мгновенных сообщений, не вызывая саму программу. Или предоставить быстрый доступ к предназначенным вам сообщениям, которые вы может ещё не видели. Понятие "предназначенным вам" зависит от приложения. К примеру, почтовые программы часто обладают функционалом, помогающим отличать важные письма от простых. Аналогично поступают IRC клиенты, которые позволяют задавать термины, появление которых в чате, вызывает уведомления для вас.

Меню сообщений Ubuntu

Регистрация вашего приложения.

Автоматически.

Приложение автоматически регистрируется в меню сообщений если:

  • В /usr/share/indicators/messages/applications/ или $HOME/.config/indicators/messages/applications/ есть текстовый файл .desktop с полным путём к приложению.
  • файл .desktop должен существовать.
  • полный путь к файл приложения должно существовать.

В файле .desktop приложение может указать действия, которые могут быть вызваны независимо от того запущена ли программа или нет. Синтаксис описан в Ubuntu Wiki ApplicationShortcuts.

Во время запуска.

Для появления приложения в меню сообщений во время запуска нужно использовать libindicate и указать, что ваше приложение для обмена сообщениями.

# импортирование
import indicate
# создание элемента сервера
mm = indicate.indicate_server_ref_default()
# если кто-то щёлкает по нашему элементу в меню сообщений
# то нужно подписаться на получение сигнала
mm.connect("server-display", show_window_function)
# указываем тип сообщений, которые мы используем
mm.set_type("message.im")
# нужно указать .desktop файл, откуда меню получит имя приложения
mm.set_desktop_file("/usr/share/applications/myapp.desktop")
# показываем пункт в меню сообщений.
mm.show()

Добавление счётчика сообщений.

Во время работы, зарегистрированное приложение может сообщать об одиночном счётчике сообщений или предоставлять раздельные счётчики от разных источников сообщений. Для примера, почтовые папки или RSS ленты могут иметь свои собственные счётчики различных сообщений.

Когда приложение предоставляет раздельные источники сообщений, то каждый источник должен иметь 6 компонент:

  • name. Название источника. Например, имя человека, заголовок ленты или имя группы обсуждения. name различных источников должны различаться.
  • icon. Векторное или растровое изображения для представления источника в меню сообщений. В идеале, нужно использовать тот же значок, который использует в самой программе для отображения данного источника. Настоятельно просим обеспечивать значком только значимые вещи, типа аватара отправителя сообщения. Другие типы сообщений или обычные вещи типа "почта", "чат", "FedEX" лучше не сопровождать значком.
  • count. Количество новых сообщений от данного источника. В настоящее время count взаимоисключает time, но в будущем это может измениться.
  • time. Метка времени последнего сообщения сообщения от данного источника в ISO 8601 формате. Меню сообщений стремится отобразить время в удобном для чтения виде и с учётом локали пользователя. Время не в формате ISO 8601 принимается как есть, но не отображается как время. В настоящее время time взаимоисключает count, но в будущем это может измениться.
  • draw-attention. Сигнал о том, что есть очень важное для пользователя. В настоящее время это зелённая точка в названии.
  • signal. Сигнал о том, что пользователь выбрал данный пункт и приложению стоит немедленно отобразить данный источник сообщения. В идеале, сразу отобразить первое соответствующее сообщение у себя.

# создать элемент источника
mm_source = indicate.Indicator()
# подтипы из вашего приложения
mm_source.set_property("subtype", "im")
# текст который будет показан в меню сообщений
mm_source.set_property("sender", "Unread")
# если будет щелчок по элементу, то будет выслан сигнал user-display
mm_source.connect("user-display", show_window_function)
# уведомляем пользователя о важном событии
mm_source.set_property("draw-attention", "true")
# устанавливаем счётчик в 15
mm_source.set_property("count", "15")
#
# Если вы хотите, то можете установить время time с последнего события
# вместо счётчика count. Но не оба вместе. Вместо количества меню сообщений
# покажет что-то типа "2m" или "1h".
# mm_source.set_property_time("time", time.time())
#
# отображаем пункт
mm_source.show()

Цикл статей об Unity
Unity Ubuntu изнутри. Launcher.
Unity Ubuntu изнутри. Линзы и области.
Unity 6.8.0

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments