diff --git a/app/routes/imap.py b/app/routes/imap.py
index d2c8a84..f8374b5 100644
--- a/app/routes/imap.py
+++ b/app/routes/imap.py
@@ -39,37 +39,40 @@ def imap_folders_modal():
if not imap_folders:
return jsonify({'error': 'No folders found on IMAP server'}), 400
- # Deduplicate folders by name to prevent creating multiple entries for the same folder
+ # Get all existing folders in a single query
+ existing_folders = Folder.query.filter(
+ Folder.user_id == current_user.id
+ ).all()
+
+ # Create a dictionary for quick lookup
+ existing_folders_dict = {folder.name: folder for folder in existing_folders}
+
+ # Process folders
unique_folders = []
- seen_names = set()
for imap_folder in imap_folders:
- folder_name = imap_folder['name']
+ folder_name = imap_folder['name'].strip()
# Skip special folders that might not be needed
if folder_name.lower() in ['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:
- # Check if this folder already exists in the database
- existing_folder = Folder.query.filter_by(
- user_id=current_user.id,
- name=folder_name
- ).first()
-
- # Add folder type if it exists
- if existing_folder:
- imap_folder['folder_type'] = existing_folder.folder_type
- imap_folder['selected'] = True
- else:
- # Set default folder type
- imap_folder['folder_type'] = 'tidy' if folder_name.lower().strip() == 'inbox' else 'destination'
- imap_folder['selected'] = True
-
- unique_folders.append(imap_folder)
- seen_names.add(folder_name_lower)
+ # Check if this folder already exists in the database
+ existing_folder = existing_folders_dict.get(folder_name)
+
+ # Add folder type and subscribed status if it exists
+ if existing_folder:
+ imap_folder['folder_type'] = existing_folder.folder_type
+ imap_folder['subscribed'] = True
+ imap_folder['selected'] = True
+ else:
+ # Set default folder type
+ imap_folder['folder_type'] = 'tidy' if folder_name.lower() == 'inbox' else 'destination'
+ imap_folder['subscribed'] = False
+ imap_folder['selected'] = True
+
+ unique_folders.append(imap_folder)
+ print(unique_folders, existing_folders_dict)
# Return the folder selection modal
response = make_response(render_template('partials/folder_selection_modal.html', folders=unique_folders))
response.headers['hx-retarget'] = "#modal-holder"
@@ -137,7 +140,7 @@ def test_imap_connection():
# Redirect to folder selection modal after successful connection
response = make_response('')
response.headers['HX-Trigger'] = 'open-modal'
- response.headers['HX-Location'] = '/api/imap/folders/modal'
+ response.headers['HX-location'] = '/api/imap/folders/modal'
else:
print(message)
response = make_response(render_template('partials/imap_config_modal.html',
diff --git a/app/static/css/animations.css b/app/static/css/animations.css
deleted file mode 100644
index 1881c4e..0000000
--- a/app/static/css/animations.css
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Modal transition animations using Tailwind classes */
-/*
-.slide-left-move {
- transform: translateX(0);
- opacity: 1;
- transition: all 300ms ease-out;
-}
-
-.slide-left-enter-from {
- transform: translateX(100%);
- opacity: 0;
-}
-
-.slide-left-enter-to {
- transform: translateX(0);
- opacity: 1;
- transition: all 300ms ease-out;
-}
-
-.slide-left-leave-from {
- transform: translateX(0);
- opacity: 1;
-}
-
-.slide-left-leave-to {
- transform: translateX(-100%);
- opacity: 0;
- transition: all 300ms ease-in;
-}
-
-.slide-right-move {
- transform: translateX(0);
- opacity: 1;
- transition: all 300ms ease-out;
-}
-
-.slide-right-enter-from {
- transform: translateX(-100%);
- opacity: 0;
-}
-
-.slide-right-enter-to {
- transform: translateX(0);
- opacity: 1;
- transition: all 300ms ease-out;
-}
-
-.slide-right-leave-from {
- transform: translateX(0);
- opacity: 1;
-}
-
-.slide-right-leave-to {
- transform: translateX(100%);
- opacity: 0;
- transition: all 300ms ease-in;
-}
-
-.translate-up-move {
- transform: translateY(0);
- opacity: 1;
- transition: all 300ms ease-out;
-}
-
-.translate-up-enter-from {
- transform: translateY(100%);
- opacity: 0;
-}
-
-.translate-up-enter-to {
- transform: translateY(0);
- opacity: 1;
- transition: all 300ms ease-out;
-}
-
-.translate-up-leave-from {
- transform: translateY(0);
- opacity: 1;
-}
-
-.translate-up-leave-to {
- transform: translateY(-100%);
- opacity: 0;
- transition: all 300ms ease-in;
-}
-
-.step-1 .steps .step:first-child,
-.step-2 .steps .step:last-child {
- --tw-step-text: hsl(var(--bc));
- --tw-step-primary: hsl(var(--p));
-}
-
-.step-1 .steps .step:last-child,
-.step-2 .steps .step:first-child {
- --tw-step-text: hsl(var(--bc));
- color: hsl(var(--bc));
-}
-*/
\ No newline at end of file
diff --git a/app/templates/base.html b/app/templates/base.html
index 078f792..b5eb412 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -13,7 +13,6 @@
-