import urllib.parse from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from PyQt6.QtWidgets import QComboBox from .session_tracker import StudySession def get_default_config() -> dict: return { 'yoten_url': 'https://yoten.app/session/new', 'activity_id': '81', 'default_language': 'en', 'min_cards_threshold': 5, 'min_duration_threshold': 30 } def get_config_value(config: dict, key: str) -> Any: defaults = get_default_config() return config.get(key, defaults.get(key)) def get_current_config(module_name: str) -> dict: from aqt import mw return mw.addonManager.getConfig(module_name) def build_yoten_url(session: 'StudySession', language_code: str, config: dict) -> str: base_url = get_config_value(config, 'yoten_url') activity_id = get_config_value(config, 'activity_id') hours, minutes, seconds = session.duration_parts params = { 'language_code': language_code, 'duration_hours': str(hours), 'duration_minutes': str(minutes), 'duration_seconds': str(seconds), 'description': session.description, 'activity_id': activity_id } query_string = urllib.parse.urlencode(params) return f"{base_url}?{query_string}" def populate_language_combo(combo_box: 'QComboBox', default_code: str = 'en') -> None: from .language_codes import get_common_languages common_languages = get_common_languages() for idx, (code, name) in enumerate(common_languages): # Handle separator item if code == "---": combo_box.addItem(name, code) # Make separator item disabled (not selectable) model = combo_box.model() item = model.item(idx) if item: item.setEnabled(False) else: combo_box.addItem(f"{name} ({code})", code) # Set default selection index = combo_box.findData(default_code) if index >= 0: combo_box.setCurrentIndex(index)