I guess we doin cookies now

This commit is contained in:
Ignacio Rivero 2025-03-15 13:57:10 -03:00
parent f42149125c
commit e8fae1a14b
2 changed files with 100 additions and 82 deletions

View File

@ -1,6 +1,6 @@
import os
import json
from flask import request, session
from flask import request, make_response
class Localization:
"""Handles localization for IPMPV"""
@ -10,6 +10,8 @@ class Localization:
self.default_language = default_language
self.translations = {}
self.available_languages = []
self.cookie_name = 'ipmpv_language'
self.cookie_max_age = 31536000 # 1 year in seconds
self._load_translations()
def _load_translations(self):
@ -35,27 +37,43 @@ class Localization:
self.translations[self.default_language] = {}
def get_language(self):
"""Get the current language based on session or browser settings"""
# Check session first
if 'language' in session:
lang = session['language']
if lang in self.available_languages:
return lang
"""Get the current language based on cookies or browser settings"""
# Check cookie first
lang_cookie = request.cookies.get(self.cookie_name)
if lang_cookie and lang_cookie in self.available_languages:
return lang_cookie
# Check browser Accept-Language header
if request.accept_languages:
for lang in request.accept_languages.values():
if lang[:2] in self.available_languages:
session['language'] = lang[:2]
return lang[:2]
# Fallback to default language
return self.default_language
def set_language(self, language_code):
"""Set the current language"""
def set_language(self, language_code, response=None):
"""
Set the current language in a cookie
Args:
language_code (str): The language code to set
response (flask.Response, optional): A Flask response object to add the cookie to
Returns:
bool: Whether the language was set successfully
"""
if language_code in self.available_languages:
session['language'] = language_code
# If a response was provided, add the cookie to it
if response:
response.set_cookie(
self.cookie_name,
language_code,
max_age=self.cookie_max_age,
path='/',
httponly=True,
samesite='Strict'
)
return True
return False

View File

@ -6,7 +6,7 @@ import re
import subprocess
import threading
import flask
from flask import request, jsonify, send_from_directory, session, redirect, url_for
from flask import request, jsonify, send_from_directory, redirect, url_for, make_response
from localization import localization, _
from utils import is_valid_url, change_resolution, get_current_resolution, is_wayland, get_or_create_secret_key
@ -26,7 +26,6 @@ class IPMPVServer:
self.ipmpv_retroarch_cmd = ipmpv_retroarch_cmd
self.retroarch_p = None
self.volume_control = volume_control
self.app.secret_key = get_or_create_secret_key()
# Register routes
self._register_routes()
@ -40,8 +39,9 @@ class IPMPVServer:
@self.app.route("/switch_language/<language>")
def switch_language(language):
localization.set_language(language)
return redirect(request.referrer or url_for('index'))
response = make_response(redirect(request.referrer or url_for('index')))
localization.set_language(language, response)
return response
@self.app.route("/")
def index():