From 1eca7f3ff9378379bd8c41548c0ab03e6c8c855f Mon Sep 17 00:00:00 2001 From: Bryce Date: Tue, 5 Aug 2025 07:32:56 -0700 Subject: [PATCH] support toggle. --- app/models.py | 1 + app/routes.py | 24 +++++++ app/templates/partials/folder_card.html | 50 ++++++++++++++ app/templates/partials/folders_list.html | 43 +----------- .../versions/f8ba65458ba2_adding_toggle.py | 32 +++++++++ tests/test_routes.py | 63 +++++++++++++++++- tmp/.hold | 0 .../example.com/user1/dovecot-uidlist | 1 + .../example.com/user1/dovecot-uidvalidity | 1 + .../user1/dovecot-uidvalidity.6891fad8 | 0 .../example.com/user1/dovecot.index.log | Bin 0 -> 232 bytes .../example.com/user1/dovecot.list.index.log | Bin 0 -> 512 bytes .../example.com/user1/dovecot.mailbox.log | Bin 0 -> 24 bytes tmp/imap-data/example.com/user1/maildirfolder | 0 tmp/imap-data/example.com/user1/subscriptions | 3 + 15 files changed, 177 insertions(+), 41 deletions(-) create mode 100644 app/templates/partials/folder_card.html create mode 100644 migrations/versions/f8ba65458ba2_adding_toggle.py create mode 100644 tmp/.hold create mode 100644 tmp/imap-data/example.com/user1/dovecot-uidlist create mode 100644 tmp/imap-data/example.com/user1/dovecot-uidvalidity create mode 100644 tmp/imap-data/example.com/user1/dovecot-uidvalidity.6891fad8 create mode 100644 tmp/imap-data/example.com/user1/dovecot.index.log create mode 100644 tmp/imap-data/example.com/user1/dovecot.list.index.log create mode 100644 tmp/imap-data/example.com/user1/dovecot.mailbox.log create mode 100644 tmp/imap-data/example.com/user1/maildirfolder create mode 100644 tmp/imap-data/example.com/user1/subscriptions diff --git a/app/models.py b/app/models.py index 8b88d17..4156eab 100644 --- a/app/models.py +++ b/app/models.py @@ -39,5 +39,6 @@ class Folder(Base): name = db.Column(db.String(255), nullable=False) rule_text = db.Column(db.Text) priority = db.Column(db.Integer) + organize_enabled = db.Column(db.Boolean, default=True) user = db.relationship('User', backref=db.backref('folders', lazy=True)) \ No newline at end of file diff --git a/app/routes.py b/app/routes.py index 731d2d6..a3a591f 100644 --- a/app/routes.py +++ b/app/routes.py @@ -116,6 +116,30 @@ def delete_folder(folder_id): folders = Folder.query.filter_by(user_id=current_user.id).all() return render_template('partials/folders_list.html', folders=folders) +@main.route('/api/folders//toggle', methods=['PUT']) +@login_required +def toggle_folder_organize(folder_id): + try: + # Find the folder by ID and ensure it belongs to the current user + folder = Folder.query.filter_by(id=folder_id, user_id=current_user.id).first() + + if not folder: + return jsonify({'error': 'Folder not found'}), 404 + + # Toggle the organize_enabled flag + folder.organize_enabled = not folder.organize_enabled + + db.session.commit() + + # Return just the updated folder card HTML for this specific folder + return render_template('partials/folder_card.html', folder=folder) + + except Exception as e: + # Print unhandled exceptions to the console as required + logging.exception("Error toggling folder organize flag: %s", e) + db.session.rollback() + return jsonify({'error': 'An unexpected error occurred'}), 500 + @main.route('/api/folders//edit', methods=['GET']) @login_required def edit_folder_modal(folder_id): diff --git a/app/templates/partials/folder_card.html b/app/templates/partials/folder_card.html new file mode 100644 index 0000000..9dad1da --- /dev/null +++ b/app/templates/partials/folder_card.html @@ -0,0 +1,50 @@ +
+
+
+

{{ folder.name }}

+
+ + +
+
+ +
+

{{ folder.rule_text }}

+
+ +
+ {% if folder.priority == 1 %} + High Priority + {% elif folder.priority == -1 %} + Low Priority + {% else %} + Normal Priority + {% endif %} +
+ Organize: + + +
+
+
+
\ No newline at end of file diff --git a/app/templates/partials/folders_list.html b/app/templates/partials/folders_list.html index c416aa8..9fec5a4 100644 --- a/app/templates/partials/folders_list.html +++ b/app/templates/partials/folders_list.html @@ -1,43 +1,6 @@ -
+
{% for folder in folders %} -
-
-
-

{{ folder.name }}

-
- - -
-
- -
-

{{ folder.rule_text }}

-
- -
- {% if folder.priority == 1 %} - High Priority - {% elif folder.priority == -1 %} - Low Priority - {% else %} - Normal Priority - {% endif %} - 0 emails -
-
-
+ {% include 'partials/folder_card.html' %} {% else %}
@@ -45,7 +8,7 @@

No folders yet

Add your first folder to get started organizing your emails.

-