add autologin
This commit is contained in:
parent
b711734a68
commit
4276b147f2
@ -6,6 +6,7 @@ from app.core.models.mock_data import get_mock_chats # ← заглушка
|
||||
from typing import Optional
|
||||
from threading import Thread
|
||||
import time # эмуляция задержки от сервера
|
||||
from app.core.database import get_last_login, get_session, set_last_login
|
||||
|
||||
class MainController(QStackedWidget):
|
||||
def __init__(self):
|
||||
@ -16,12 +17,17 @@ class MainController(QStackedWidget):
|
||||
self.init_app()
|
||||
|
||||
def init_app(self):
|
||||
session_found = False # ← здесь позже будет логика автологина
|
||||
"""Проверяет наличие сессии для автологина."""
|
||||
last_login = get_last_login()
|
||||
if last_login:
|
||||
session = get_session(last_login)
|
||||
if session:
|
||||
# Если сессия найдена, сразу переходим к списку чатов
|
||||
self.handle_login_success(last_login)
|
||||
return
|
||||
|
||||
if session_found:
|
||||
self.handle_login_success("user_from_session")
|
||||
else:
|
||||
self.show_login()
|
||||
# Если сессия не найдена, показываем экран входа
|
||||
self.show_login()
|
||||
|
||||
def show_login(self):
|
||||
self.login_view = LoginView(on_login=self.handle_login_success)
|
||||
@ -30,8 +36,14 @@ class MainController(QStackedWidget):
|
||||
self.login_view.show()
|
||||
|
||||
def handle_login_success(self, username: str):
|
||||
"""Обрабатывает успешный вход в систему."""
|
||||
# Сохраняем пользователя как последнего вошедшего
|
||||
set_last_login(username)
|
||||
|
||||
if self.login_view:
|
||||
self.login_view.close()
|
||||
self.removeWidget(self.login_view)
|
||||
self.login_view = None
|
||||
|
||||
# 🔹 1. Загружаем чаты локально
|
||||
chat_items: list[PrivateChatListItem] = self.load_local_chats()
|
||||
|
||||
@ -33,6 +33,14 @@ def init_db():
|
||||
)
|
||||
''')
|
||||
|
||||
# Создаем таблицу для хранения состояния приложения (ключ-значение)
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS app_state (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL
|
||||
)
|
||||
''')
|
||||
|
||||
# Проверяем, есть ли в chats тестовые данные
|
||||
cursor.execute("SELECT COUNT(*) FROM chats")
|
||||
if cursor.fetchone()[0] == 0:
|
||||
@ -45,10 +53,9 @@ def add_session(login, access_token, refresh_token):
|
||||
"""Добавляет новую сессию или обновляет существующую."""
|
||||
conn = get_connection()
|
||||
cursor = conn.cursor()
|
||||
# Сначала удаляем, потом вставляем, чтобы гарантировать обновление.
|
||||
cursor.execute('DELETE FROM sessions WHERE login = ?', (login,))
|
||||
# REPLACE INTO - удобный способ для вставки или обновления
|
||||
cursor.execute('''
|
||||
INSERT INTO sessions (login, access_token, refresh_token, created_at)
|
||||
INSERT OR REPLACE INTO sessions (login, access_token, refresh_token, created_at)
|
||||
VALUES (?, ?, ?, ?)
|
||||
''', (login, access_token, refresh_token, datetime.now()))
|
||||
conn.commit()
|
||||
@ -79,3 +86,20 @@ def delete_session(login: str):
|
||||
cursor.execute('DELETE FROM sessions WHERE login = ?', (login,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def get_last_login():
|
||||
"""Получает логин последнего вошедшего пользователя."""
|
||||
conn = get_connection()
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("SELECT value FROM app_state WHERE key = 'last_login'")
|
||||
result = cursor.fetchone()
|
||||
conn.close()
|
||||
return result['value'] if result else None
|
||||
|
||||
def set_last_login(login: str):
|
||||
"""Сохраняет логин последнего вошедшего пользователя."""
|
||||
conn = get_connection()
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("INSERT OR REPLACE INTO app_state (key, value) VALUES ('last_login', ?)", (login,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user