I guess we doin cookies now
This commit is contained in:
parent
f42149125c
commit
e8fae1a14b
@ -1,6 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
from flask import request, session
|
from flask import request, make_response
|
||||||
|
|
||||||
class Localization:
|
class Localization:
|
||||||
"""Handles localization for IPMPV"""
|
"""Handles localization for IPMPV"""
|
||||||
@ -10,6 +10,8 @@ class Localization:
|
|||||||
self.default_language = default_language
|
self.default_language = default_language
|
||||||
self.translations = {}
|
self.translations = {}
|
||||||
self.available_languages = []
|
self.available_languages = []
|
||||||
|
self.cookie_name = 'ipmpv_language'
|
||||||
|
self.cookie_max_age = 31536000 # 1 year in seconds
|
||||||
self._load_translations()
|
self._load_translations()
|
||||||
|
|
||||||
def _load_translations(self):
|
def _load_translations(self):
|
||||||
@ -35,27 +37,43 @@ class Localization:
|
|||||||
self.translations[self.default_language] = {}
|
self.translations[self.default_language] = {}
|
||||||
|
|
||||||
def get_language(self):
|
def get_language(self):
|
||||||
"""Get the current language based on session or browser settings"""
|
"""Get the current language based on cookies or browser settings"""
|
||||||
# Check session first
|
# Check cookie first
|
||||||
if 'language' in session:
|
lang_cookie = request.cookies.get(self.cookie_name)
|
||||||
lang = session['language']
|
if lang_cookie and lang_cookie in self.available_languages:
|
||||||
if lang in self.available_languages:
|
return lang_cookie
|
||||||
return lang
|
|
||||||
|
|
||||||
# Check browser Accept-Language header
|
# Check browser Accept-Language header
|
||||||
if request.accept_languages:
|
if request.accept_languages:
|
||||||
for lang in request.accept_languages.values():
|
for lang in request.accept_languages.values():
|
||||||
if lang[:2] in self.available_languages:
|
if lang[:2] in self.available_languages:
|
||||||
session['language'] = lang[:2]
|
|
||||||
return lang[:2]
|
return lang[:2]
|
||||||
|
|
||||||
# Fallback to default language
|
# Fallback to default language
|
||||||
return self.default_language
|
return self.default_language
|
||||||
|
|
||||||
def set_language(self, language_code):
|
def set_language(self, language_code, response=None):
|
||||||
"""Set the current language"""
|
"""
|
||||||
|
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:
|
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 True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import re
|
|||||||
import subprocess
|
import subprocess
|
||||||
import threading
|
import threading
|
||||||
import flask
|
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 localization import localization, _
|
||||||
from utils import is_valid_url, change_resolution, get_current_resolution, is_wayland, get_or_create_secret_key
|
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.ipmpv_retroarch_cmd = ipmpv_retroarch_cmd
|
||||||
self.retroarch_p = None
|
self.retroarch_p = None
|
||||||
self.volume_control = volume_control
|
self.volume_control = volume_control
|
||||||
self.app.secret_key = get_or_create_secret_key()
|
|
||||||
|
|
||||||
# Register routes
|
# Register routes
|
||||||
self._register_routes()
|
self._register_routes()
|
||||||
@ -40,8 +39,9 @@ class IPMPVServer:
|
|||||||
|
|
||||||
@self.app.route("/switch_language/<language>")
|
@self.app.route("/switch_language/<language>")
|
||||||
def switch_language(language):
|
def switch_language(language):
|
||||||
localization.set_language(language)
|
response = make_response(redirect(request.referrer or url_for('index')))
|
||||||
return redirect(request.referrer or url_for('index'))
|
localization.set_language(language, response)
|
||||||
|
return response
|
||||||
|
|
||||||
@self.app.route("/")
|
@self.app.route("/")
|
||||||
def index():
|
def index():
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user