Основное средство общения в нашей компании — это чат Skype. Статус "в сети" означает присутствие на рабочем месте. Иногда ждёшь кого-то, начальству не напишешь "зайди плиз срочно" — в общем, уведомление о появлении в сети определённого человека было бы полезно.
В Skype для Linux нет такой "галочки" для отдельных контактов (думаю, что и пользователи других ОС с этим знакомы). Зато есть неоспоримое преимущество — почти безграничные возможности командной строки:
Наша задача — усовершенствовать эти уведомления. Мы хотим фильтровать контакты до обращения к libnotify. Настройки должны быть достаточно удобными, чтобы не запоминать skype-идентификаторы и не беспокоиться о потере настроек при переименовании контакта в клиенте.
Первый скрипт reload_contacts.py — получаем список контактов
Чтобы получить те имена, которые мы видим в Skype-клиенте, на помощь приходит Valery Yundin и его скрипт, который достаёт всё необходимое из нескольких файлов, расположенных, скорее всего, по адресу ~/.Skype/ваш-skype-id/user*.dbb.
Данные о контактах, полученные из этого скрипта, отсортируем по имени и сохраним в файл filter_notify.conf. Пусть по умолчанию все контакты будут закомментированы символом решётки. Тогда для добавления контакта в "избранное" достаточно будет его раскомментировать.
Кстати, наш скрипт должен обновлять контакт-лист, но сохранять имеющиеся настройки контактов: какие из контактов были закомментированы на момент запуска скрипта. Поэтому сначала прочитаем файл filter_notify.conf, если он уже есть, и сохраним настройки.
Всё абсолютно тривиально, поэтому вот ссылка на готовый код reload_contacts.py и файл конфигурации settings.py.
Второй скрипт filter_notify.py — управляем показом уведомления
А этот скрипт мы будем вызывать из скайпа (см. скриншот выше), передавая Skype-идентификатор контакта (%sskype) и имя, отображаемое в клиенте (%sname). Скрипт проверяет, нужно ли уведомлять об этом человеке. Если да, то выполняет notify-send.
Если контакт не найден в нашем списке, то имеет смысл обновить контакт-лист, запустив вышеупомянутый reload_contacts.py.
В итоге, тоже ничего сложного: filter_notify.py.
Инструкция по применению
- Сложить в одну папку все 4 скрипта:
- skypelog.py
- reload_contacts.py
- filter_notify.py
- settings.py
- Одним архивом
- Дать права на выполнение:
1chmod + x reload_contacts .py filter_notify .py - Найти путь к папке Вашего профиля Skype. Для тех, кто не дружит с командной строкой: открыть "Домашнюю папку" и нажать Ctrl+H для отображения скрытых папок (.Skype — скрытая папка). Внутри папки .Skype будет папка с профилем. Прописать путь к этой папке в settings.py, параметр SKYPE_FOLDER. Файлы настроек для разных учётных записей должны лежать в разных папках
- При желании: прописать путь к нашему файлу настроек контактов filter_notify.conf (по умолчанию я его положил в папку ~) — параметр CONTACTS_NOTIFY_LIST
- Запустить reload_contacts.py и убедиться, что файл filter_notify.conf создан (по адресу, указанном в CONTACTS_NOTIFY_LIST) и содержит список Ваших контактов
- В настройках Skype:
- перейти на вкладку "Notifications" ("Уведомления")
- выбрать нужное нам событие: "Contact Came Online" ("Контакт появился в сети")
- включить "Advanced View" ("Больше настроек")
- появится галочка "Execute the following script:" ("Запускать следующий скрипт:") — включить её
- ввести имя нашего скрипта с двумя параметрами "%sskype" "%sname"
- снять галочки "Play sound file" ("Проиграть звуковой файл") и "Display pop-up notification" ("Отображать всплывающее уведомление")… КО утверждает, что наш фильтр на них не распространяется
- нажать "Apply" ("Применить") и закрыть окно настроек
Готово! Теперь можно раскомментировать нужные контакты, чтобы уведомления о них (и только о них) отправлялись в notify-send.