diff --git a/app/imap_service.py b/app/imap_service.py index 72b7947..c905199 100644 --- a/app/imap_service.py +++ b/app/imap_service.py @@ -263,8 +263,9 @@ class IMAPService: if not imap_folders: return False, "No folders found on IMAP server" - # Process each folder - synced_count = 0 + # Deduplicate folders by name to prevent creating multiple entries for the same folder + unique_folders = [] + seen_names = set() for imap_folder in imap_folders: folder_name = imap_folder['name'] @@ -272,6 +273,17 @@ class IMAPService: if folder_name.lower() in ['inbox', 'sent', 'drafts', 'spam', 'trash']: continue + # Use case-insensitive comparison for deduplication + folder_name_lower = folder_name.lower() + if folder_name_lower not in seen_names: + unique_folders.append(imap_folder) + seen_names.add(folder_name_lower) + + # Process each unique folder + synced_count = 0 + for imap_folder in unique_folders: + folder_name = imap_folder['name'] + # Handle nested folder names (convert slashes to underscores or keep as-is) # According to requirements, nested folders should be created with slashes in the name display_name = folder_name diff --git a/app/routes.py b/app/routes.py index 3e5866e..9f827c9 100644 --- a/app/routes.py +++ b/app/routes.py @@ -171,7 +171,7 @@ def update_folder(folder_id): # Folder not found folders = Folder.query.filter_by(user_id=current_user.id).all() return render_template('partials/folders_list.html', folders=folders) - + # Get form data name = request.form.get('name') rule_text = request.form.get('rule_text') @@ -234,6 +234,7 @@ def imap_config_modal(): server=current_user.imap_config.get('server') if current_user.imap_config else None, port=current_user.imap_config.get('port') if current_user.imap_config else None, username=current_user.imap_config.get('username') if current_user.imap_config else None, + password=current_user.imap_config.get('password') if current_user.imap_config else None, use_ssl=current_user.imap_config.get('use_ssl', True) if current_user.imap_config else True)) response.headers['HX-Trigger'] = 'open-modal' return response @@ -243,8 +244,6 @@ def imap_config_modal(): def test_imap_connection(): """Test IMAP connection with provided configuration.""" try: - import time - time.sleep(5) # Get form data server = request.form.get('server') port = request.form.get('port') @@ -337,4 +336,23 @@ def sync_imap_folders(): except Exception as e: logging.exception("Error syncing IMAP folders: %s", e) print(e) - return jsonify({'error': 'An unexpected error occurred. Please try again.'}), 500 + +@main.route('/api/folders', methods=['GET']) +@login_required +def get_folders(): + """Get folders with optional filtering.""" + # Get filter parameter from query string + filter_type = request.args.get('filter', 'all') + + # Get folders for the current authenticated user + if filter_type == 'high': + # Get high priority folders (priority = 1) + folders = Folder.query.filter_by(user_id=current_user.id, priority=1).all() + elif filter_type == 'normal': + # Get normal priority folders (priority = 0 or not set) + folders = Folder.query.filter_by(user_id=current_user.id).filter(Folder.priority != 1).all() + else: + # Get all folders + folders = Folder.query.filter_by(user_id=current_user.id).all() + + return render_template('partials/folders_list.html', folders=folders) diff --git a/app/templates/base.html b/app/templates/base.html index d4b4034..e303d43 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -22,6 +22,19 @@ .shake { animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both; } + + .fade-in-htmx.htmx-added { + opacity: 0; + } + .fade-in-htmx { + opacity: 1; + transition: opacity 1s ease-out; + } + /* Fade out transition for HTMX */ + .fade-out-htmx.htmx-swapping { + opacity: 0; + transition: opacity 1s ease-out; + } {% block head %}{% endblock %} diff --git a/app/templates/index.html b/app/templates/index.html index 3c717f3..f4d8690 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -96,12 +96,12 @@
- - - + + +
- +
{% include 'partials/folders_list.html' %}
diff --git a/app/templates/partials/folder_card.html b/app/templates/partials/folder_card.html index 9c0a367..fce45a9 100644 --- a/app/templates/partials/folder_card.html +++ b/app/templates/partials/folder_card.html @@ -1,4 +1,4 @@ -
+
@@ -14,10 +14,10 @@ -