Skip to content

hikiko4ern/coub-addons

Repository files navigation

coub-addons

Web Extension, добавляющий дополнительный функционал на Coub.com

Warning

Расширение находится на раннем этапе разработки, поэтому временно:

  • тестируется только на Firefox-based браузерах (Firefox, Waterfox, LibreWolf и прочие лисьи форки) и может не работать в других
    например, фильтрация запросов сейчас построена на webRequest.filterResponseData и не будет работать в Chromium-based браузерах и Safari, в которых используемое API всё ещё не реализовано
  • не публикуется в сторах и не подписывается, из-за чего для постоянной установки требует отключенной проверки подписи (в Firefox это настройка xpinstall.signatures.required)
  • периодически могут вноситься обратно несовместимые изменения, требующие ручной миграции настроек (хотя такого ещё ни разу не было, и, я надеюсь, не будет, но бэкапы делай, бэкапы - это здорово)
  • проект не следует SemVer и плохо сконфигурирован (да и в целом ведёт себя плохо)

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

Минимальные поддерживаемые версии браузеров:

  • Firefox 101

Features

  • скрытие дизлайкнутых коубов

  • скрытие коубов от заблокированных каналов

  • скрытие коубов по названию и тегам, содержащим указанные фразы или соответствующим регулярным выражениям

  • скрытие рекоубов

  • быстрое копирование/блокировка тега через контекстное меню

  • предотвращение изменения скорости воспроизведения при нажатии W/S

  • дополнительные клавиатурные сокращения:

    действие сочетание по умолчанию
    поставить/убрать дизлайк D (Dislike)
    добавить/убрать из закладок B (Bookmark)
    переключить полноэкранный режим F (Fullscreen)

    NOTE: если сокращения не работают (особенно если расширение только что было установлено/обновлено), попробуйте обновить страницу - данный функционал работает через вклинивание в виджеты Coub'а и требует применения патчей до момента создания виджетов.

Tip

Фильтрация коубов (дизлайкнутых, от заблокированных каналов и т.д.) применяется к ответам запросов к API, в связи с чем:

  • изменение фильтров не влияет на уже загруженные коубы

    так, если открыть сообщество Anime и поставить дизлайк первому коубу, он будет скрыт не сразу, а только при следующем запросе списка (например, после обновления страницы или после перехода на другую страницу и возвращения в сообщество)

  • в некоторых ситуациях может порождать состояния, которые логика самого Coub.com не учитывает (пример - #5)

Building

Для сборки требуются глобально установленные:

  1. устанавливаем зависимости

    pnpm i -P
  2. собираем

    pnpm zip:ff
  3. открываем about:addons, жмём на шестерню, Install Add-on From File..., выбираем .output/coub-addons-x.x.x-firefox.zip, соглашаемся с установкой непроверенного расширения

TODO

Ссылки на некоторые интересные лейблы:

  • планируемый новый функционал: T-feature New feature or request
  • вызываемые этим расширением баги на Coub.com: T-site bug Issues leading to bugs on Coub.com

Contributing

  1. устанавливаем Node.js1 и Rust

    для удобства в Taskfile собраны некоторые команды
    посмотреть их список: pnpm task -l, запустить: pnpm task {task} (например, pnpm task su:watch)

  2. устанавливаем зависимости

    pnpm i
  3. если не хочется, чтобы dev-версия расширения конфликтовала с prod-версией, создаём файл .env.local с содержимым:

    VITE_GECKO_ID=some@ext.id
    # см. https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings#extension_id_format
  4. выполняем pnpm dev:ff для дев-сборки под Firefox-based браузеры

  5. загружаем расширение из директории .output/firefox-mv2

Сгенерировать N фейковых каналов для стора blockedChannels:

  1. выполняем
    node ./utils/fakeBlockedChannels.js N # где N - положительное число
  2. открываем настройки расширения и импортируем бэкап из созданного файла

Footnotes

  1. требуемая версия указана в .nvmrc. Рекомендуется использовать менеджеры версий Node.js, поддерживающие Corepack - например, fnm. 2