The GTK+ Client (an MP3 streaming player with an XMPP chat)
Python
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
data
debian/DEBIAN
src
.gitignore
CHANGES
COPYING
Makefile
README.md
setup.py
simple.py

README.md

Функции

  • Проигрывание потока.
  • Перезапуск проигрывания при обрыве связи.
  • Настраиваемый адрес потока.
  • Доступ к покдастам. Пока выводится простой список с возможностью открыть страницу эпизода и скачать файл. В будущем планируется добавить проигрывание прямо из программы.

Благодарности

  • hakimovis@gmail.com (Хакимов Ирик): за патчи
  • iconshock.com: за иконку
  • defaulticon.com (Interactivemania): за иконки для интерфейса на Tk.

Интерфейс

Обычно используется интерфейс на GTK.

Когда использование GTK невозможно, используется альтернативный интерфейс на Tk. Выбрать его принудительно можно при запуске клиента с ключом --tk или установив переменную окружения TMCLIENT=tk.

Настройка

Настройки хранятся в файле ~/.tmradio-client.yaml, самые важные из них редактируются прямо в самом клиенте. Полный список используемых параметров:

  • chat_log (str), имя файла для сообщений из чата.
  • debug (bool), установка аналогична запуску с --debug.
  • highlight_bgcolor (str), цвет упоминаний (фон).
  • highlight_color (str), цвет упоминаний (текст).
  • highlight_re (str), выражение для подсветки в чате.
  • jabber_bot (str), jid бота радиостанции.
  • jabber_chat_nick (str), предпочитаемый ник в чате.
  • jabber_chat_room (str), адрес чата.
  • jabber_id (str), логин в джаббере.
  • jabber_password (str), пароль к джабберу, закодирован в base64.
  • log (str), имя файла для отладочных сообщений.
  • notify_icon (str), иконка для всплывающих уведомлений, по умолчанию "audio-volume-medium".
  • notify_title (str), заголовок всплывающих уведомлений, по умолчанию "TMRadio Client".
  • stream_uri (str), URL потока для проигрывания.
  • twitter_search (str), строка для поиска новостей в твиттере.
  • volume (float), текущая громкость.
  • socket_timeout (int), предельное время ожидания соединения с джаббер-сервером, в секундах, по умолчанию 2.

Как работает jabber

Для максимальной эффективности работа вынесена в отдельный тред. Взаимодействовать с интерфейсом должен только один поток, поэтому взаимодействие джаббера и интерфейса минимизировано. Входящие события, о которых сообщает jabber, бывают следующими:

  • Стала известна новая информация о текущей дорожке.
  • Пришло сообщение в чат.

Исходящие сообщения:

  • Сообщение в чат.
  • Голосование за дорожку.
  • Редактирование свойств дорожки.

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

Информация о дорожках может выдаваться как очередь пар ключ-значение, то есть в интерфейсный поток будет приходить набор примерно таких данных:

("track_id", "3892")
("artist", "Mobil")
("title", "The Winter's Story")
("labels", "calm electronic instrumental music")

Для надёжности (атомарности) можно передавать полученные данные сразу списком, чтобы исключить не очень вероятную, но возможную ситуацию, когда пользователь отправляет изменённое название дорожки, в этот момент меняется свойство track_id, заголовок устанавливается для другой дорожки.

Материал для внеклассного чтения