aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md43
1 files changed, 43 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3974f39
--- /dev/null
+++ b/README.md
@@ -0,0 +1,43 @@
+# VK Player Controller
+VK Player Controller - приложение для OS X, позволяющее контролировать аудиоплеер vk.com медиа-клавишами (F7-F9) и иметь доступ к плейлисту из статусбара.
+
+#### Поддерживаемые браузеры:
+* Chrome (+Opera, +Яндекс.Браузер) - *без расширения или с ним*
+* Safari - *только без расширения*
+* Firefox - *с расширением*
+
+#### Поддерживаемые системы
+Должно работать без проблем на OS X 10.8 и выше.
+
+# Скриншоты
+![](https://ch1p.com/vkpc/screenshots/dark_p.png) ![](https://ch1p.com/vkpc/screenshots/light_p.png)
+
+# Некоторые технические подробности
+#### Внедрение 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).
+Нужно собрать ее с поддержкой SSL, установить заголовочные файлы и подключить libwebsockets.dylib к проекту.
+
+# По вопросам
+... можно писать сюда: https://vk.com/ez
+
+
+P.S. Исторически сложилось, что однажды написанный говнокод в vkpc.js больше не менялся (нет желания туда лезть), его бы переписать...
+