Giter Site home page Giter Site logo

hikiko4ern / coub-addons Goto Github PK

View Code? Open in Web Editor NEW
0.0 3.0 0.0 1.5 MB

Coub.com дополнительный функционал / additional features

Home Page: https://coub.com

License: The Unlicense

JavaScript 0.96% TypeScript 91.88% SCSS 0.67% Fluent 4.79% HTML 0.38% Rust 1.31%
coub webextension

coub-addons's Introduction

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, соглашаемся с установкой непроверенного расширения

Сборка из подготовленных исходников версии

С новыми релизами также публикуется архив coub-addons-x.x.x-sources.zip, содержащий исходный код для Firefox-based браузеров с скомпилированными и оптимизированными некоторыми пакетами (на данный момент только segmenter-utils), из которых можно собрать код, соответствующий опубликованному в coub-addons-x.x.x-firefox.zip.

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

  1. распаковываем архив coub-addons-x.x.x-sources.zip

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

    pnpm i -P --frozen-lockfile
  3. собираем

    pnpm zip:ff

NOTE: контрольные суммы архивов не совпадут из-за хранимых в 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 с содержимым:

    [email protected]
    # см. 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 3

coub-addons's People

Contributors

hikiko4ern avatar

Watchers

Lucian avatar  avatar  avatar

coub-addons's Issues

добавить экспорт/импорт настроек

при экспорте собирать все настройки вместе с их версиями в одну JSONку

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

кнопка "Блокировать" добавляется не во все дропдауны канала

на данный момент не работает как минимум с [data-no-initial] дропдаунами в комментах - там данные канала подгружаются асинхронно, но т.к. дропдаун маунтится сразу (скрытым), CS обрабатывает его, но из-за отсутствия необходимого контента не добавляет свой

вроде можно отказаться от текущего подхода с MutationObserver, вклиниться в ChannelDropdown.prototype.setDropdownContent и докидывать контент в CS при вызове этого метода

добавить блокировку коубов по тегам

вероятно, стоит сделать два типа фильтров:

  • по словам как простой, тупой фильтр
  • по RegExp для более сложных правил

оба типа должны работать вместе (возможно, сначала фильтр по словам, потом фильтры по регуляркам)

вопросы:

добавить страницу настроек

в настройках:

  • выводить список заблокированных каналов с ссылкой на канал и возможность удалить из списка
  • выводить список заблокированных тегов с возможностью удалить из списка
  • позволить экспортировать/импортировать все настройки

загружать следующую страницу, если все коубы были выкинуты

сейчас при выкидывании всех коубов со страницы следующая страница загружена не будет

например, если на первой странице 10 коубов, и все они были выкинуты при фильтрации, вторая страница загружена не будет, и вместо ленты будет показана пустота

добавить дополнительные keyboard shortcuts

добавить шорткаты:

  • перейти в полноэкранный режим (F, Fullscreen, как в плеере того же YouTube?)
  • добавить в закладки (B, Bookmark?)
  • поставить дизлайк (D, Dislike?)

в идеале они должны срабатывать только в тех же условиях, когда срабатывают шорткаты самого Coub.com (когда плеер в фокусе?)
шорткаты, которые нашёл:

  • L ставит лайк
  • P ставит на паузу
  • R рестартит коуб
  • J переходит к следующему коубу
  • K переходит к предыдущему коубу
  • W ускоряет воспроизведение
  • S замедляет воспроизведение

💭 может здесь же добавить настройку, предотвращаюую срабатывание W и S? в 99% случаев они бесполезны и раздражают

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

сейчас permalink вместе с остальными данными канала сохраняются один раз при блокировке канала, но т.к. они могут быть изменены юзером, данные неизбежно устареют

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

при блокировании каналов с разных вкладок перетирается состояние

кейс:

  1. открыть страницу канала A и заблокировать канал A
  2. открыть страницу канала B и заблокировать канал B
  3. вернуться на вкладку с открытым каналом A и разблокировать канал A

ожидаемое поведение:
канал A разблокируется, канал B останется заблокирован

текущее поведение:
разблокируются оба канала

отменять запросы коубов для заблокированных каналов

сейчас при открытии страницы заблокированного канала уходят запросы /api/v2/timeline/channel/[permalink], из которых потом удаляются все коубы, которые не были лайкнуты или добавлены в закладки

чтобы "отменить" запрос, можно вернуть { redirectUrl: 'data:application/json;base64,DATA' }, где DATA:

{
  "page": 1,
  "per_page": 10,
  "total_pages": 0,
  "coubs": []
}

при этом:

  1. запросы с ?type=likes отменять и фильтровать не надо
  2. на странице вместо [title] нет коубов стоит писать [title] заблокирован?

управление через Media Session API

сейчас Coub.com не взаимодействует с Media Session API, из-за чего воспроизведение коубов не реагирует на команды управления воспроизведением (play/pause влияет только на аудио, но не на видео)

хочется:

  • ставить на паузу аудио вместе с видео
  • перелистывать коубы вперёд/назад
  • видеть информацию о текущем коубе в интерфейсе ОС

не скрываются дизлайкнутые коубы в `/api/v2/coubs/*/category_suggestions`

в ответе приходит { coubs: [...] }
пример:

{
	"id": 196903034,
	"title": "Everlasting winter",
	"views_count": 20514,
	"permalink": "3c9t5r",
	"image_url": "https://3fc4ed44-3fbc-419a-97a1-a29742511391.selcdn.net/coub_storage/coub/simple/cw_image/aa21e8b434f/c281fdc1ebed236a05873/med_1691301992_00027.jpg",
	"image_width": 484,
	"image_height": 480,
	"video_url": "https://3fc4ed44-3fbc-419a-97a1-a29742511391.selcdn.net/coub_storage/coub/simple/cw_file/2511eb8c0dc/071e707d1d97be9918a78/muted_mp4_med_size_1691301930_muted_med.mp4"
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.