Commit Graph

2330 Commits

Author SHA1 Message Date
Christian Krakau-Louis ab97c3a7f2 New translations en.json (Romanian) 2026-03-12 23:34:39 +01:00
github-actions[bot] 95af9ffe5e docs(changelog): update changelog [skip ci] 2026-03-12 22:34:36 +00:00
Christian Krakau-Louis 4458b18530 Add configuration for Crowdin project 2026-03-12 23:34:18 +01:00
github-actions[bot] ca88d7d425 docs(changelog): update changelog [skip ci] 2026-03-12 22:23:25 +00:00
Christian Krakau-Louis 3b0e7b27cc Update Crowdin configuration file 2026-03-12 23:23:04 +01:00
copilot-swe-agent[bot] 5ab7226f1a feat(i18n): add complete Spanish translations for 744 keys in es.json
Translated all UI text, labels, messages, error messages, and descriptions
from English placeholders to proper Spanish. Preserved:
- Brand names (DocuElevate, Dropbox, Google Drive, OneDrive, Amazon S3, etc.)
- Proper names (Christian Krakau-Louis)
- Technical abbreviations (IP, ID, ENV, API, OCR, FTP, SFTP, IMAP, SMTP)
- Native language names (language.* keys)
- Placeholder variables ({name}, {count}, {query}, {year}, etc.)
- Numeric error codes (404, 500)

Result: 901 keys total, 0 missing keys, only 55 language-neutral
same-value keys remaining (all correctly untranslated).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-12 22:14:39 +00:00
copilot-swe-agent[bot] f737f2903a feat(i18n): add missing Polish translations to pl.json
Translated 285 keys that had English values in pl.json. All sections
now have proper Polish translations including auth, error pages, files
UI, help center, index/landing page, integrations, navigation, search,
status, and upload pages. Language names are now in Polish (e.g.,
Angielski for English, Francuski for French).

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 22:12:02 +00:00
copilot-swe-agent[bot] f70fa65969 Merge branch 'main' into copilot/add-conditional-routing
Resolve conflicts in app/api/__init__.py and app/models.py.
Renumber migration 027_add_routing_rules → 035_add_routing_rules.
Fix migration chain: down_revision → 034_add_user_profile_settings.
Add PipelineRoutingRule to migrations/env.py.
2026-03-12 22:07:54 +00:00
github-actions[bot] 3201733a50 chore(release): update build metadata files [skip ci] 2026-03-12 22:06:57 +00:00
semantic-release 7cb82bb6ac 0.125.1
Automatically generated by python-semantic-release
2026-03-12 22:06:54 +00:00
Christian Krakau-Louis 2c36b7dc95 Merge pull request #609 from christianlouis/copilot/ensure-de-json-translations
fix(i18n): sync all translation files to match en.json key set
2026-03-12 23:06:30 +01:00
copilot-swe-agent[bot] bb2c3ac759 fix(i18n): use plain plural form for files.files_selected in fr.json
Changed 'fichier(s) sélectionné(s)' to 'fichiers sélectionnés' for
consistency with the English source which uses 'files selected' (plain
plural), not 'file(s) selected'.

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 22:05:11 +00:00
copilot-swe-agent[bot] 5de7e01a86 feat(i18n): add complete French translations to fr.json
Translated 677 previously untranslated keys in fr.json from English to French.
The file now has 825 properly translated keys (up from 148), with the
remaining 76 keys intentionally the same as English (brand names like
DocuElevate/Dropbox/Google Drive, language names in their native form,
and technical terms like IP/ID/ENV/404/500 that are identical in French).

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 22:03:12 +00:00
copilot-swe-agent[bot] d3349e649e fix(i18n): sync de.json keys with en.json — add 26 missing keys to en.json and all language files
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 21:57:31 +00:00
copilot-swe-agent[bot] fd23c49f20 Initial plan 2026-03-12 21:51:27 +00:00
copilot-swe-agent[bot] 0c9e413cd0 Initial plan 2026-03-12 21:51:21 +00:00
copilot-swe-agent[bot] 2aebf04ff5 Initial plan 2026-03-12 21:51:16 +00:00
copilot-swe-agent[bot] c9dd5cce11 Initial plan 2026-03-12 21:51:10 +00:00
github-actions[bot] 77f392b29b chore(release): update build metadata files [skip ci] 2026-03-12 21:44:46 +00:00
semantic-release 4c81b1bd1f 0.125.0
Automatically generated by python-semantic-release
2026-03-12 21:44:42 +00:00
Christian Krakau-Louis 4345d5128f Merge pull request #607 from christianlouis/copilot/add-user-settings-management
fix(tests): update whoami_handler call sites to pass required db argument
2026-03-12 22:44:13 +01:00
copilot-swe-agent[bot] 270e1a56b5 fix(tests): pass mock db to whoami_handler in test_api_auth_enabled.py
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 17:03:30 +00:00
copilot-swe-agent[bot] 9583d6d96f fix(profile): address code review feedback - early size check, CSRF helper, test constants
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 13:10:46 +00:00
github-actions[bot] 01e27ac905 chore(release): update build metadata files [skip ci] 2026-03-12 13:08:52 +00:00
semantic-release 709964b207 0.124.0
Automatically generated by python-semantic-release
2026-03-12 13:08:48 +00:00
Christian Krakau-Louis 028f592817 Merge pull request #596 from christianlouis/copilot/refactor-template-localization
fix(i18n): wire _ into all Jinja2 instances, sync translation files, fix pipelines.html orphan tag
2026-03-12 14:08:26 +01:00
copilot-swe-agent[bot] b0d6f1ab60 feat(profile): add user self-service profile settings page and API
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 13:00:19 +00:00
copilot-swe-agent[bot] b483ed16fc fix(i18n): register _ in all Jinja2 template instances, sync translation files, fix pipelines.html
- Register _() translation function in app/auth.py, app/api/local_auth.py, and
  app/api/billing.py template env globals to fix jinja2.exceptions.UndefinedError
- Update test_settings_template_has_db_wizard_link to assert i18n key instead of
  literal "DB Wizard" (template now uses {{ _("settings.db_wizard_btn") }})
- Add 418 missing en.json keys to all 30 non-English translation files as English
  fallbacks to fix test_all_languages_have_same_keys
- Fix orphan </template> tag in pipelines.html by adding missing
  <template x-if="pipelineModal.saving"> opening tag (fixes djlint H025)

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 12:46:11 +00:00
copilot-swe-agent[bot] 13161994da Initial plan 2026-03-12 12:45:32 +00:00
Christian Krakau-Louis dd7f7dfd97 Merge branch 'main' into copilot/refactor-template-localization 2026-03-12 12:44:33 +01:00
github-actions[bot] 5a546dc0f1 chore(release): update build metadata files [skip ci] 2026-03-12 11:43:33 +00:00
semantic-release 75b522e36c 0.123.1
Automatically generated by python-semantic-release
2026-03-12 11:43:30 +00:00
Christian Krakau-Louis 5d239e904b Merge pull request #606 from christianlouis/copilot/fix-ruff-not-clearing-main
fix(tests): repair two broken tests — missing DB table and MagicMock ip_address
2026-03-12 12:43:08 +01:00
copilot-swe-agent[bot] cdd1524def fix(i18n): restore social providers block in login.html, fix escaped quotes
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 11:39:13 +00:00
copilot-swe-agent[bot] be6b49c872 fix(tests): fix two failing tests - missing DB table and MagicMock IP address
- tests/test_database.py: add user_imap_accounts table to the regression
  test's initial DB setup (migration 022 creates it before rev 026, so it
  must exist for migration 032's ALTER TABLE to succeed)
- tests/test_local_auth.py: configure mock_request.headers.get to return
  None and client=None so get_client_ip() returns "unknown" instead of an
  un-serialisable MagicMock that broke the audit_logs INSERT in
  test_local_login_success and test_local_login_by_email

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 10:49:49 +00:00
copilot-swe-agent[bot] 6de11e25bf feat(i18n): localize 404, 500, billing_success, about, verify_email_sent templates
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 10:25:34 +00:00
copilot-swe-agent[bot] 8060a79b9c style: fix ruff formatting in tests/test_imap_profiles.py
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 10:25:32 +00:00
copilot-swe-agent[bot] bc94825877 Initial plan 2026-03-12 10:24:27 +00:00
github-actions[bot] d7d0413bc8 chore(release): update build metadata files [skip ci] 2026-03-12 07:54:06 +00:00
semantic-release d3443b034a 0.123.0
Automatically generated by python-semantic-release
2026-03-12 07:54:04 +00:00
Christian Krakau-Louis 7f644a2388 Merge pull request #604 from christianlouis/copilot/configure-attachment-ingestion
feat(imap): fine-grained attachment ingestion profiles with per-category selection
2026-03-12 08:53:45 +01:00
github-actions[bot] 338f4fa9bd chore(release): update build metadata files [skip ci] 2026-03-12 07:51:39 +00:00
semantic-release 44cebeab2a 0.122.0
Automatically generated by python-semantic-release
2026-03-12 07:51:35 +00:00
Christian Krakau-Louis 87fca21c7f Merge pull request #605 from christianlouis/copilot/enable-disable-storage-locations
feat(storage): explicit enable/disable flag per global storage destination
2026-03-12 08:51:14 +01:00
copilot-swe-agent[bot] 2e087731b9 fix(imap): address code review feedback on ingestion profiles
- Improve warning log in _resolve_categories_for_profile() to include
  exception type name for better troubleshooting
- Add SQLAlchemy IS NULL comment to imap_profiles.py filter
- Pass default_categories from server to template to avoid hardcoded
  category list in JS (now uses {{ default_categories | tojson }})
- Simplify view profiles query (remove redundant unauthenticated path)
- Update docs: ConfigurationGuide.md and EmailIngestion.md with
  full profiles documentation including category table and API reference

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 01:19:32 +00:00
copilot-swe-agent[bot] c9f554465d feat(imap): add ImapIngestionProfile model, API, migration and UI
Replaces the simple binary attachment_filter string with a full
ingestion profiles system:

- Add FILE_TYPE_CATEGORIES dict to allowed_types.py (6 categories:
  pdf, office, opendocument, text, web, images) + DEFAULT_CATEGORIES
  / ALL_CATEGORIES + get_allowed_types_for_categories() helper
- Add ImapIngestionProfile model (id, name, description, owner_id,
  allowed_categories JSON, is_builtin)
- Update UserImapAccount: replace attachment_filter string with
  profile_id FK to imap_ingestion_profiles
- Migration 033: creates profiles table, seeds 2 built-in profiles
  (Documents Only, All Files), migrates attachment_filter → profile_id
- New /api/imap-profiles/ CRUD endpoints (list, create, get, update,
  delete) with category validation
- Register imap_profiles router in app/api/__init__.py
- Update imap_tasks.py: replace attachment_filter string param with
  profile-based allowed_categories; add _resolve_categories_for_profile()
- Update imap_accounts.py API to use profile_id instead of attachment_filter
- Update imap_accounts view to pass profiles + categories to template
- Full UI overhaul: profiles panel + profile create/edit modal with
  category checkboxes; profile selector in account modal
- 17 new tests (141 total), all passing

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 01:14:19 +00:00
copilot-swe-agent[bot] fd75961580 docs(storage): document explicit enable/disable flags in ConfigurationGuide and .env.demo
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 01:10:31 +00:00
copilot-swe-agent[bot] b72ab3b318 feat(storage): add explicit enable/disable flag for each global storage destination
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 01:04:28 +00:00
copilot-swe-agent[bot] 554bb21d32 feat(imap): add attachment type filter for IMAP ingestion
Add a configurable switch to control which attachment types are ingested
via IMAP. Images are excluded by default; office files and PDFs are ingested.

- Add global `IMAP_ATTACHMENT_FILTER` config setting (default: `documents_only`)
- Add `attachment_filter` column to `UserImapAccount` model for per-user override
- Migration 032 adds the column to `user_imap_accounts` table
- Update `fetch_attachments_and_enqueue()` to respect filter (documents_only/all)
- Update `pull_inbox()`, `_pull_user_imap_accounts()`, and
  `_pull_user_integration_imap()` to pass the resolved filter
- Update IMAP accounts API (schemas, create/update handlers, response serializer)
- Update IMAP accounts UI to show attachment filter dropdown in modal and
  display filter badges on account cards
- Add 6 new tests covering attachment filter behaviour
- Update ConfigurationGuide.md, EmailIngestion.md, and .env.demo

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
2026-03-12 00:59:54 +00:00
github-actions[bot] 8898d3ccc8 chore(release): update build metadata files [skip ci] 2026-03-12 00:56:46 +00:00