Compare commits

...

4 Commits

Author SHA1 Message Date
Fijxu
fda8d1b528 Remove trailing whitespaces from codebase (#5634)
Removes trailing whitespaces found across the codebase using `find . -type f -exec grep -lE ' +$' {} +`

[skip ci]
2026-02-19 14:28:22 -03:00
Jeroen Boersma
e7f8b15b21 Add title listen button time updates (#5625)
When switching between Listen and Watching the timestamp in the url of
the listen of watch button is now updated automatically.

This means if you switch between listening and viewing you keep in sync
with time.
2026-02-16 16:39:44 -03:00
Fijxu
60c31e3069 Remove sort by rating and date in video search filters (#5629)
* Remove sort by rating and date in video search filters

Closes https://github.com/iv-org/invidious/issues/5626

* Remove check of protobug generation of rating and date sort filters in Invidious spec
2026-02-16 14:06:06 -03:00
Emilien
11db343cfb Prepare for next release 2026-02-07 22:10:11 +01:00
11 changed files with 24 additions and 20 deletions

View File

@@ -1,5 +1,7 @@
# CHANGELOG # CHANGELOG
## vX.Y.0 (future)
## v2.20260207.0 ## v2.20260207.0
### Wrap-up ### Wrap-up

View File

@@ -211,9 +211,9 @@ window.helpers = window.helpers || {
helpers.storage.remove(key); helpers.storage.remove(key);
} }
}, },
set: function (key, value) { set: function (key, value) {
let encoded_value = encodeURIComponent(JSON.stringify(value)) let encoded_value = encodeURIComponent(JSON.stringify(value))
localStorage.setItem(key, encoded_value); localStorage.setItem(key, encoded_value);
}, },
remove: function (key) { localStorage.removeItem(key); } remove: function (key) { localStorage.removeItem(key); }
}; };

View File

@@ -143,7 +143,7 @@ player.on('timeupdate', function () {
let base_url_yt_watch = elem_yt_watch.getAttribute('data-base-url'); let base_url_yt_watch = elem_yt_watch.getAttribute('data-base-url');
elem_yt_watch.href = addCurrentTimeToURL(base_url_yt_watch); elem_yt_watch.href = addCurrentTimeToURL(base_url_yt_watch);
} }
let elem_yt_embed = document.getElementById('link-yt-embed'); let elem_yt_embed = document.getElementById('link-yt-embed');
if (elem_yt_embed) { if (elem_yt_embed) {
let base_url_yt_embed = elem_yt_embed.getAttribute('data-base-url'); let base_url_yt_embed = elem_yt_embed.getAttribute('data-base-url');
@@ -160,12 +160,18 @@ player.on('timeupdate', function () {
let base_url_iv_embed = elem_iv_embed.getAttribute('data-base-url'); let base_url_iv_embed = elem_iv_embed.getAttribute('data-base-url');
elem_iv_embed.href = addCurrentTimeToURL(base_url_iv_embed, domain); elem_iv_embed.href = addCurrentTimeToURL(base_url_iv_embed, domain);
} }
let elem_iv_other = document.getElementById('link-iv-other'); let elem_iv_other = document.getElementById('link-iv-other');
if (elem_iv_other) { if (elem_iv_other) {
let base_url_iv_other = elem_iv_other.getAttribute('data-base-url'); let base_url_iv_other = elem_iv_other.getAttribute('data-base-url');
elem_iv_other.href = addCurrentTimeToURL(base_url_iv_other, domain); elem_iv_other.href = addCurrentTimeToURL(base_url_iv_other, domain);
} }
let elem_iv_listen = document.getElementById('link-iv-listen');
if (elem_iv_listen) {
let base_url_iv_listen = elem_iv_listen.getAttribute('data-base-url');
elem_iv_listen.href = addCurrentTimeToURL(base_url_iv_listen, domain);
}
}); });
@@ -628,7 +634,7 @@ function toggle_caption_window() {
player.textTrackSettings.setValues({ windowOpacity: options.windowOpacity[newIndex] }); player.textTrackSettings.setValues({ windowOpacity: options.windowOpacity[newIndex] });
update_captions(); update_captions();
} }
function toggle_caption_opacity() { function toggle_caption_opacity() {
const numOptions = options.textOpacity.length; const numOptions = options.textOpacity.length;
const textOpacity = player.textTrackSettings.getValues().textOpacity || '1'; const textOpacity = player.textTrackSettings.getValues().textOpacity || '1';
@@ -733,7 +739,7 @@ addEventListener('keydown', function (e) {
case '>': action = increase_playback_rate.bind(this, 1); break; case '>': action = increase_playback_rate.bind(this, 1); break;
case '<': action = increase_playback_rate.bind(this, -1); break; case '<': action = increase_playback_rate.bind(this, -1); break;
case '=': action = increase_caption_size.bind(this, 1); break; case '=': action = increase_caption_size.bind(this, 1); break;
case '-': action = increase_caption_size.bind(this, -1); break; case '-': action = increase_caption_size.bind(this, -1); break;

View File

@@ -53,7 +53,7 @@ db:
## ##
## When this setting is commented out, Invidious companion is not used. ## When this setting is commented out, Invidious companion is not used.
## Otherwise, Invidious will proxy the requests to Invidious companion. ## Otherwise, Invidious will proxy the requests to Invidious companion.
## ##
## Note: multiple URL can be configured. In this case, Invidious will ## Note: multiple URL can be configured. In this case, Invidious will
## randomly pick one every time video data needs to be retrieved. This ## randomly pick one every time video data needs to be retrieved. This
## URL is then kept in the video metadata cache to allow video playback ## URL is then kept in the video metadata cache to allow video playback
@@ -63,7 +63,7 @@ db:
## The parameter private_url is required for the internal communication ## The parameter private_url is required for the internal communication
## between Invidious companion and Invidious. ## between Invidious companion and Invidious.
## ##
## The optional parameter public_url is the public URL from which ## The optional parameter public_url is the public URL from which
## Invidious companion is listening to the requests from the user(s). ## Invidious companion is listening to the requests from the user(s).
## When this setting is commented out, Invidious proxy all requests to ## When this setting is commented out, Invidious proxy all requests to
## Invidious companion. Useful for simple setups. ## Invidious companion. Useful for simple setups.
@@ -232,7 +232,7 @@ https_only: false
## Configuration for using a HTTP proxy ## Configuration for using a HTTP proxy
## If unset, then no HTTP proxy will be used. ## If unset, then no HTTP proxy will be used.
## Proxy type supported: HTTP, HTTPS ## Proxy type supported: HTTP, HTTPS
## ##
## This is not used for loading the video streams from YouTube servers (circumvent YouTube restrictions) ## This is not used for loading the video streams from YouTube servers (circumvent YouTube restrictions)
## Please instead configure the proxy in Invidious companion: ## Please instead configure the proxy in Invidious companion:
## https://github.com/iv-org/invidious-companion/blob/master/config/config.example.toml ## https://github.com/iv-org/invidious-companion/blob/master/config/config.example.toml
@@ -885,7 +885,7 @@ default_user_preferences:
## Default: true ## Default: true
## ##
#vr_mode: true #vr_mode: true
## ##
## Save the playback position ## Save the playback position
## Allow to continue watching at the previous position when ## Allow to continue watching at the previous position when

View File

@@ -3,7 +3,7 @@
# Crystal linter # Crystal linter
# This is a modified version of the pre-commit hook from the crystal repo. https://github.com/crystal-lang/crystal/blob/master/scripts/git/pre-commit # This is a modified version of the pre-commit hook from the crystal repo. https://github.com/crystal-lang/crystal/blob/master/scripts/git/pre-commit
# Please refer to that if you'd like an version that doesn't automatically format staged files. # Please refer to that if you'd like an version that doesn't automatically format staged files.
changed_cr_files=$(git diff --cached --name-only --diff-filter=ACM | grep '\.cr$') changed_cr_files=$(git diff --cached --name-only --diff-filter=ACM | grep '\.cr$')
if [ ! -z "$changed_cr_files" ]; then if [ ! -z "$changed_cr_files" ]; then
if [ -x bin/crystal ]; then if [ -x bin/crystal ]; then

View File

@@ -1,5 +1,5 @@
name: invidious name: invidious
version: 2.20260207.0 version: 2.20260207.0-dev
authors: authors:
- Invidious team <contact@invidious.io> - Invidious team <contact@invidious.io>

View File

@@ -48,9 +48,7 @@ FEATURE_FILTERS = {
SORT_FILTERS = { SORT_FILTERS = {
Invidious::Search::Filters::Sort::Relevance => "8AEB", Invidious::Search::Filters::Sort::Relevance => "8AEB",
Invidious::Search::Filters::Sort::Date => "CALwAQE%3D",
Invidious::Search::Filters::Sort::Views => "CAPwAQE%3D", Invidious::Search::Filters::Sort::Views => "CAPwAQE%3D",
Invidious::Search::Filters::Sort::Rating => "CAHwAQE%3D",
} }
Spectator.describe Invidious::Search::Filters do Spectator.describe Invidious::Search::Filters do

View File

@@ -57,8 +57,6 @@ module Invidious::Search
# Values correspond to { "1:varint": <X> } # Values correspond to { "1:varint": <X> }
enum Sort enum Sort
Relevance = 0 Relevance = 0
Rating = 1
Date = 2
Views = 3 Views = 3
end end

View File

@@ -25,7 +25,7 @@
audio_streams.each_with_index do |fmt, i| audio_streams.each_with_index do |fmt, i|
src_url = "/latest_version?id=#{video.id}&itag=#{fmt["itag"]}" src_url = "/latest_version?id=#{video.id}&itag=#{fmt["itag"]}"
src_url += "&local=true" if params.local src_url += "&local=true" if params.local
src_url = invidious_companion.public_url.to_s + src_url + src_url = invidious_companion.public_url.to_s + src_url +
"&check=#{invidious_companion_check_id}" if (invidious_companion) "&check=#{invidious_companion_check_id}" if (invidious_companion)
bitrate = fmt["bitrate"] bitrate = fmt["bitrate"]

View File

@@ -159,7 +159,7 @@
<% end %> <% end %>
@ <%= CURRENT_BRANCH %> @ <%= CURRENT_BRANCH %>
<% if CURRENT_TAG != "" %> <% if CURRENT_TAG != "" %>
( (
<% if CONFIG.modified_source_code_url %> <% if CONFIG.modified_source_code_url %>
<a href="<%= CONFIG.modified_source_code_url %>/releases/tag/<%= CURRENT_TAG %>"><%= CURRENT_TAG %></a> <a href="<%= CONFIG.modified_source_code_url %>/releases/tag/<%= CURRENT_TAG %>"><%= CURRENT_TAG %></a>
<% else %> <% else %>

View File

@@ -79,11 +79,11 @@ we're going to need to do it here in order to allow for translations.
<h1> <h1>
<%= title %> <%= title %>
<% if params.listen %> <% if params.listen %>
<a title="<%=translate(locale, "Video mode")%>" href="/watch?<%= env.params.query %>&listen=0"> <a title="<%=translate(locale, "Video mode")%>" id="link-iv-listen" data-base-url="/watch?<%= env.params.query %>&listen=0" href="/watch?<%= env.params.query %>&listen=0">
<i class="icon ion-ios-videocam"></i> <i class="icon ion-ios-videocam"></i>
</a> </a>
<% else %> <% else %>
<a title="<%=translate(locale, "Audio mode")%>" href="/watch?<%= env.params.query %>&listen=1"> <a title="<%=translate(locale, "Audio mode")%>" id="link-iv-listen" data-base-url="/watch?<%= env.params.query %>&listen=1" href="/watch?<%= env.params.query %>&listen=1">
<i class="icon ion-md-headset"></i> <i class="icon ion-md-headset"></i>
</a> </a>
<% end %> <% end %>