File size: 4,132 Bytes
c001f24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from flask import Blueprint, render_template, request, redirect, url_for, flash, current_app
from flask_login import login_required, current_user
from utils import get_db_connection
import os

settings_bp = Blueprint('settings', __name__)

@settings_bp.route('/settings', methods=['GET', 'POST'])
@login_required
def settings():
    if request.method == 'POST':
        # --- Handle Client Secret Upload ---
        if 'client_secret' in request.files:
            file = request.files['client_secret']
            if file and file.filename:
                if file.filename.endswith('.json'):
                    try:
                        save_path = os.path.join(current_app.root_path, 'client_secret.json')
                        file.save(save_path)
                        flash('Client Secret uploaded successfully!', 'success')
                    except Exception as e:
                        flash(f'Error saving file: {e}', 'danger')
                else:
                    flash('Invalid file type. Please upload a JSON file.', 'danger')

        # --- Handle NeetPrep Toggle ---
        neetprep_enabled = 1 if request.form.get('neetprep_enabled') else 0
        
        # --- Handle V2 Default Toggle ---
        v2_default = 1 if request.form.get('v2_default') else 0
        
        # --- Handle Magnifier Toggle ---
        magnifier_enabled = 1 if request.form.get('magnifier_enabled') else 0

        # --- Handle Classifier Model Setting ---
        classifier_model = request.form.get('classifier_model', 'gemini')
        if classifier_model not in ['gemini', 'nova', 'gemma']:
            classifier_model = 'gemini'

        # --- Handle DPI Setting ---
        dpi_input = request.form.get('dpi')
        if not dpi_input:
            dpi = 300
        else:
            try:
                dpi = int(dpi_input)
                if not (72 <= dpi <= 900):
                    flash('Invalid DPI value. Please enter a number between 72 and 900.', 'danger')
                    return redirect(url_for('settings.settings'))
            except (ValueError, TypeError):
                flash('Invalid DPI value. Please enter a valid number.', 'danger')
                return redirect(url_for('settings.settings'))

        # --- Handle Color RM DPI Setting ---
        color_rm_dpi_input = request.form.get('color_rm_dpi')
        if not color_rm_dpi_input:
            color_rm_dpi = 200
        else:
            try:
                color_rm_dpi = int(color_rm_dpi_input)
                if not (72 <= color_rm_dpi <= 600):
                    flash('Invalid Color Removal DPI value. Please enter a number between 72 and 600.', 'danger')
                    return redirect(url_for('settings.settings'))
            except (ValueError, TypeError):
                flash('Invalid Color Removal DPI value. Please enter a valid number.', 'danger')
                return redirect(url_for('settings.settings'))

        # --- Update Database ---
        conn = get_db_connection()
        conn.execute('UPDATE users SET neetprep_enabled = ?, v2_default = ?, magnifier_enabled = ?, dpi = ?, color_rm_dpi = ?, classifier_model = ? WHERE id = ?', 
                     (neetprep_enabled, v2_default, magnifier_enabled, dpi, color_rm_dpi, classifier_model, current_user.id))
        conn.commit()
        conn.close()
        
        # --- Update current_user object for the session ---
        current_user.neetprep_enabled = neetprep_enabled
        current_user.v2_default = v2_default
        current_user.magnifier_enabled = magnifier_enabled
        current_user.dpi = dpi
        current_user.color_rm_dpi = color_rm_dpi
        current_user.classifier_model = classifier_model
        
        flash('Settings saved successfully!', 'success')
        return redirect(url_for('settings.settings'))

    client_secret_exists = os.path.exists(os.path.join(current_app.root_path, 'client_secret.json'))
    drive_redirect_uri = url_for('drive.oauth2callback', _external=True)
    return render_template('settings.html', client_secret_exists=client_secret_exists, drive_redirect_uri=drive_redirect_uri)