Telegram +

STELLAR STELS
2025-07-29T16:53:20Z

Видео, истории и скачивание файлов и другие функции ↴

Основные изменения и улучшения:
Заголовок Userscript:

Добавлено // @grant unsafeWindow для явного разрешения использования unsafeWindow. Это хорошая практика.

Обновлена версия до 1.31.

Константы:

UI_REFRESH_DELAY (500 мс) и PROGRESS_BAR_REMOVE_DELAY (3000 мс) теперь явно определены для лучшей читаемости и настройки.

Утилиты:

Добавлена getExtensionFromMime(mime): Универсальная функция для преобразования MIME-типа в стандартное расширение файла, что делает именование файлов более точным.

Прогресс-бары:

setupProgressBarContainer(): Эта функция теперь создает контейнер прогресс-баров только один раз и по запросу (лениво).

createProgressBar(id, fileName):

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

Улучшены стили (закругление, тень, выравнивание текста) для лучшего внешнего вида.

Текст fileName теперь обрезается с многоточием (text-overflow: ellipsis) для длинных имен.

Прогресс-бар теперь инициализируется на 0%.

completeProgress(id) / abortProgress(id, errorMessage):

Автоматическое удаление прогресс-бара через 3 секунды после завершения или отмены.

abortProgress может принимать дополнительное сообщение об ошибке.

progressFill: Переименована внутренняя переменная для заполнения прогресс-бара для ясности.

Функции загрузки (tel_download_video, tel_download_audio, tel_download_image):

Унификация: Создана общая функция tel_download_media_stream(url, type) для обработки потоковых загрузок (видео/аудио), уменьшая дублирование кода.

Имя файла: Улучшена логика извлечения имени файла из URL для видео и аудио, а также для изображений, делая ее более надежной. Теперь учитываются расширения из MIME-типов.

Прогресс-бары: createProgressBar теперь вызывается в начале всех функций загрузки (video, audio, image), гарантируя отображение прогресса для любого типа медиа.

Обработка Content-Range: Улучшена обработка случаев, когда заголовок Content-Range отсутствует (например, при полной загрузке файла со статусом 200).

Обработка ошибок fetch: Более явная обработка ошибок в промисах fetch.

saveBlob: Переименована функция сохранения для ясности.

FileSystem Access API: Улучшена обработка ошибок, если пользователь отменяет диалог сохранения файла.

Внедрение кнопок UI (addDownloadButton):

Унификация: Создана общая функция addDownloadButton, которая инкапсулирует логику создания и добавления кнопок.

Предотвращение дубликатов: Кнопки теперь имеют атрибут data-url, и addDownloadButton проверяет его наличие, чтобы избежать многократного добавления одной и той же кнопки для одного и того же медиафайла.

Адаптивные стили: Функция автоматически применяет соответствующие классы для стилизации в разных версиях Telegram Web (webz и webk).

e.stopPropagation(): Важно для предотвращения конфликтов событий.

Главный цикл UI (setInterval):

Логика разделена на блоки для webk и webz для лучшей организации.

Теперь используется addDownloadButton для всех типов медиа и мест размещения кнопок, что значительно сокращает дублирование кода.

Патч ограничения скорости загрузки (removeTelegramSpeedLimit):

Добавлена проверка unsafeWindow.fetch, чтобы избежать ошибок, если unsafeWindow недоступен.

Патч теперь также применяется к изображениям (/^image\//.test(contentType)).

Добавлен try-catch вокруг resClone.blob() для большей устойчивости.

Добавлено логирование для подтверждения применения патча.

Удаление рекламы (removeTelegramAds):

Добавлен Node.ELEMENT_NODE для более точной проверки узла в MutationObserver.

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

Добавлено логирование количества удаленных элементов.

Управление видеоплеером с клавиатуры:

Улучшена логика отображения уведомлений (плавное исчезновение, анимация пульса).

Стили уведомлений (glassmorphism) теперь добавляются только один раз.

Добавлена проверка document.pictureInPictureEnabled && !video.disablePictureInPicture перед попыткой входа/выхода из PiP.

e.preventDefault() и e.stopPropagation() вызываются только при обработанной клавише.

Сохранение прогресса видео:

MutationObserver: Использование MutationObserver для отслеживания появления/исчезновения медиа-просмотрщика, что делает сохранение прогресса более надежным и менее зависимым от setInterval для этой конкретной задачи.

Очистка интервала: Интервал для сохранения прогресса теперь очищается, когда видео завершается или медиа-просмотрщик закрывается, предотвращая утечки памяти.

Логирование для подтверждения сохранения и восстановления прогресса.

Унифицированный поиск элементов nameEl и dateEl для обеих версий Telegram Web.

Этот исправленный скрипт стал значительно более надежным, удобным и чистым. Рекомендую протестировать его на всех версиях Telegram Web, которые вы используете (web.telegram.org, webk.telegram.org, webz.telegram.org).СЛАВА УКРАИНА