aboutsummaryrefslogtreecommitdiff

VK Player Controller

VK Player Controller - приложение для OS X, позволяющее контролировать аудиоплеер vk.com медиа-клавишами (F7-F9) и иметь доступ к плейлисту из статусбара.

Поддерживаемые браузеры:

  • Chrome, Яндекс.Браузер - без расширения или с ним
  • Safari - только без расширения
  • Firefox, Opera - с расширением

Поддерживаемые системы

Должно работать без проблем на OS X 10.8 и выше.

Скриншоты

Некоторые технические подробности

Внедрение JavaScript

Для того, чтобы получить доступ к плееру в браузере, нужно внедрить свой JavaScript-код во вкладку. Существует два способа сделать это:

  • через AppleScript (работает в Chrome, Яндекс.Браузере и Safari)
  • через расширение (работает в Firefox, Opera + опционально в Chrome и Яндекс.Браузере)

Поскольку у Firefox и Opera нет AppleScript API для выполнения JavaScript-кода в контексте вкладки, им нужно расширение.

Судя по тому, что сообщали некоторые пользователи, метод AppleScript иногда не работает. Не очень понятно, от чего это зависит и как это воспроизвести, но на этот случай есть возможность включить режим расширения - для Chrome и Яндекс.Браузера. Теоретически такой workaround возможен и в Safari, но под него расширение еще не портировано (предлагаю желающим заняться этим :), поэтому там альтернативы нет.

Как приложение общается с браузером

Для того, чтобы внедренный во вкладку скрипт имел возможность отправлять данные приложению и принимать их от него, приложение поднимает локальный WebSocket-сервер (с поддержкой SSL) на 127.0.0.1:56130 (в данный момент для SSL используется сертификат, выданный для домена vkpc-local.ch1p.com и истекающий 16 августа 2017 года. О том, зачем это нужно – ниже).

Когда в плеере на сайте происходит какое-то событие (например, вы переключаете трек), скрипт через WS отправляет его приложению. Когда происходит событие в самом приложении (например, вы нажали F7 или кликнули на трек в плейлисте из статусбара), сообщение отправляется скрипту, который уже переключает трек на сайте.

Если vk.com открыт по https, браузер запрещает открывать WebSocket-соединение по http. Поэтому в качестве хака скрипт подключается не к 127.0.0.1, а к vkpc-local.ch1p.com, который указывает на 127.0.0.1.

libwebsockets

Для реализации WebSocket используется библиотека libwebsockets (https://github.com/warmcat/libwebsockets), версии 1.3. Нужно собрать ее с поддержкой SSL, установить заголовочные файлы и подключить libwebsockets.dylib к проекту.

По вопросам

... можно писать сюда: https://vk.com/ez

P.S. Исторически сложилось, что однажды написанный говнокод в vkpc.js больше не менялся (нет желания туда лезть), его бы переписать...

P.P.S. HostsHack - более не используемая часть приложения. До того, как я додумался прописать в A-запись домена адрес 127.0.0.1, локальное подключение через этот домен требовало модификации /etc/hosts с запросом от пользователя root-прав на такое действие. К счастью, нашлось лучшее решение, так что эти файлы более не используются в проекте и остались для истории.