From 19600fb67fac127bc5c6b092eb9ff6fee0d0eed2 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Sun, 14 Dec 2025 15:34:46 -0300 Subject: [PATCH] feat: Add preferences cookie URL to import and export preferences --- assets/css/default.css | 20 ++++++++++++++++++++ locales/en-US.json | 2 ++ src/invidious/routes/preferences.cr | 15 +++++++++++++++ src/invidious/views/user/preferences.ecr | 12 +++++++++++- 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/assets/css/default.css b/assets/css/default.css index 644d91c2..e2faaa65 100644 --- a/assets/css/default.css +++ b/assets/css/default.css @@ -555,6 +555,10 @@ span > select { border: 1px solid black; } +.light-theme .cookie-url-box { + border: 2px solid #444 +} + @media (prefers-color-scheme: light) { .no-theme a:hover, .no-theme a:active, @@ -605,6 +609,10 @@ span > select { .no-theme .error-card { border: 1px solid black; } + + .no-theme .cookie-url-box { + border: 2px solid #444 + } } @@ -671,6 +679,10 @@ body.dark-theme { border: 1px solid #5e5e5e; } +.dark-theme .cookie-url-box { + border: 2px solid #ccc +} + @media (prefers-color-scheme: dark) { .no-theme a:hover, .no-theme a:active, @@ -736,6 +748,10 @@ body.dark-theme { .no-theme .error-card { border: 1px solid #5e5e5e; } + + .no-theme .cookie-url-box { + border: 2px solid #ccc + } } @@ -886,4 +902,8 @@ h1, h2, h3, h4, h5, p, .error-issue-template { padding: 20px; background: rgba(0, 0, 0, 0.12345); +} + +.cookie-url-box { + padding: 4px } \ No newline at end of file diff --git a/locales/en-US.json b/locales/en-US.json index 6fd1ab0b..05c62b3c 100644 --- a/locales/en-US.json +++ b/locales/en-US.json @@ -149,6 +149,8 @@ "preferences_default_home_label": "Default homepage: ", "preferences_feed_menu_label": "Feed menu: ", "preferences_show_nick_label": "Show nickname on top: ", + "preferences_category_cookies": "Preferences cookies", + "preferences_cookie_desccription": "With this URL you can restore your preferences on any other browser.", "Popular enabled: ": "Popular enabled: ", "Top enabled: ": "Top enabled: ", "CAPTCHA enabled: ": "CAPTCHA enabled: ", diff --git a/src/invidious/routes/preferences.cr b/src/invidious/routes/preferences.cr index d9fad1b1..7706c236 100644 --- a/src/invidious/routes/preferences.cr +++ b/src/invidious/routes/preferences.cr @@ -4,6 +4,21 @@ module Invidious::Routes::PreferencesRoute def self.show(env) preferences = env.get("preferences").as(Preferences) locale = preferences.locale + saved_preferences = env.params.query["preferences"]? + + if saved_preferences + decoded_preferences = Base64.decode_string(saved_preferences) + preferences = Preferences.from_json(decoded_preferences) + if user = env.get? "user" + user = user.as(User) + user.preferences = preferences + Invidious::Database::Users.update_preferences(user) + else + env.response.cookies["PREFS"] = Invidious::User::Cookies.prefs(CONFIG.domain, preferences) + end + end + + encoded_preferences = Base64.urlsafe_encode(preferences.to_json.to_s) referer = get_referer(env) diff --git a/src/invidious/views/user/preferences.ecr b/src/invidious/views/user/preferences.ecr index 23cb89f6..d4bee861 100644 --- a/src/invidious/views/user/preferences.ecr +++ b/src/invidious/views/user/preferences.ecr @@ -371,6 +371,16 @@
- + + + + <%= translate(locale, "preferences_category_cookies") %> + <% + url = "#{HOST_URL}/preferences?preferences=#{encoded_preferences}" + %> +

<%= translate(locale, "preferences_cookie_desccription") %>

+