All notable changes to NC Connector for Outlook will be documented in this file.
This project follows the principles of Keep a Changelog and Semantic Versioning.
- Configurable local IFB listener port in settings and runtime.
- Runtime API logging and JSON serialization helpers were centralized.
- Cleanup and guard-related consolidation was streamlined across the active runtime paths.
- Talk and Sharing wording was updated across all supported locales.
- Removed the dead Talk appointment HTML read fallback path.
- Password notification icon cleanup is now marshaled onto the captured UI context.
- Talk help URL and block-marker detection were hardened.
- Daily runtime log rotation with 7-file retention and 30-day cleanup.
- Log anonymization option with redaction of sensitive runtime diagnostics.
- Backend HTML template hardening with fail-closed sanitizer policy.
- Shared helper refactor for URL launch, size formatting, and COM release cleanup.
- Refactor cleanup pass to normalize shell/COM patterns and remove leftover redundancies.
- Runtime HTTP request handling centralized via
NcHttpClientandNcJson. - Cleanup refactor: removed duplicated helpers and redundant conditions.
- Password-notification icon lifecycle marshaled to the captured UI context.
- Removed ineffective password-selection JavaScript handlers for Outlook HTML rendering.
- New runtime TLS controls in Outlook settings (
Use OS default TLS policy,Enable TLS 1.2,Enable TLS 1.3) with immediate test/login-flow usage and persisted profile-specific configuration.
- Release line/version references were aligned to
3.0.2across assembly and installer defaults. - TLS hint text in advanced settings/docs was tightened and no longer makes assumptions about machine-wide registry changes.
- TLS diagnostics guidance text was updated to be mode-neutral (no hardcoded OS-default assumption) and aligned across all supported locale files.
- Admin-controlled
?hint glyph placement in advanced settings now avoids overlapping adjacent inputs in tight rows (language override section and neighboring fields). - Connection diagnostics and login-flow connectivity checks now force fresh HTTP/TLS handshakes (no pooled keep-alive reuse), so runtime TLS mode switches are validated deterministically without requiring an Outlook restart.
- The FileLink wizard now accepts Explorer drag & drop for files/folders across the entire file step (queue, surrounding pane, and action area), not just via explicit add buttons.
- TLS defaults are now hardened at add-in scope via
NcTalkOutlookAddIn.dll.config, explicitly enabling strong crypto and OS-default TLS negotiation without changing machine-wide .NET registry settings. - Settings connection diagnostics now classify transport failures (TLS handshake, certificate trust, DNS, proxy/connectivity, timeout) and surface actionable guidance instead of only generic secure-channel errors.
- Release line/version references were aligned to
3.0.1across assembly metadata, installer defaults, readmes, and admin/development docs. - The new connection diagnostics strings were translated across all supported Outlook locales, so non-English users do not fall back to generic English placeholders.
- Compose attachment automation now evaluates attachments pre-add via
BeforeAttachmentAdd; threshold/always flows can cancel the host add and open NC share mode before Outlook post-add handling. - Compose automation subscription coverage was expanded with
ApplicationEvents_11.ItemLoadso mail items loaded outsideNewInspector(for example inline compose contexts) are also tracked for attachment automation. - Repository text-format policy was standardized with new
.editorconfigand.gitattributes; project text files were normalized to consistent CRLF line endings. - With debug logging enabled, compose pre-add attachment automation now logs detailed candidate/decision/fallback diagnostics (including unresolved-path reasons) to improve support traceability.
NextcloudTalkAddInwas split into dedicatedpartialunits for runtime hooks and logging to reduce orchestration density in the main source file.- COM cleanup now uses shared
ComInteropScopehelpers (including scoped wrappers), and high-risk recipient/explorer release paths were migrated to the centralized implementation. - Oversized UI forms were modularized with
partialfeature files (FileLinkWizardForm.DragDrop,SettingsForm.Language,TalkLinkForm.Moderator) to improve maintainability and test focus. - Talk body/template rendering and block sanitation were extracted into
Controllers/TalkDescriptionTemplateController. - Appointment attendee e-mail discovery and SMTP recipient resolution were extracted into
Controllers/OutlookRecipientResolverController. - Compose subscription lifecycle (get-or-create/remove/dispose-all) now runs through
Controllers/MailComposeSubscriptionRegistryControllerinstead of direct list/lock management in the add-in root. - Talk appointment lifecycle logic (
ApplyRoomToAppointment, runtime room trait resolution, room mutation sync, delegation and participant sync) was extracted intoControllers/TalkAppointmentController. - Compose share cleanup and separate-password dispatch flow (including recipient normalization, auto-send, and manual fallback) was extracted into
Controllers/ComposeShareLifecycleController. - Legacy recipient helper forwarders in
NextcloudTalkAddInwere removed; compose recipient normalization now callsComposeShareLifecycleControllerhelpers directly. - Remaining recipient CSV/normalization passthrough wrappers were removed from the add-in root to avoid duplicate helper paths.
ComposeShareLifecycleControllerCOM release paths now use centralizedComInteropScope.TryRelease(...)for consistent exception-safe cleanup.build.ps1now supports-SkipIceValidationfor environments where WiX ICE execution is unavailable (WIX0217), while keeping the default validated build path unchanged.- Large nested runtime subscription classes were moved out of the root file into dedicated partial units:
NextcloudTalkAddIn.MailComposeSubscription.csNextcloudTalkAddIn.AppointmentSubscription.cs
- Minor UI redundancy cleanup (no behavior change) was applied in
FileLinkWizardForm,SettingsForm, andTalkLinkForm(shared helpers for selection validation, resize wiring, and settings-option checkbox setup).
- Pre-add multi-file drag/drop is now debounced and batched into a single wizard launch instead of opening one wizard per file.
- Folder uploads in the FileLink wizard now correctly create required subfolders for mixed file+directory queues; reserved-name tracking no longer suppresses required DAV
MKCOLcalls. - Upload status/progress UI now flushes buffered per-item progress updates immediately on failure/cancel/finalize paths, preventing stale bars or missing final state labels.
- Admin-controlled
?hint glyphs now support explicit row anchors, preventing them from drifting into adjacent password and attachment threshold input fields in the FileLink wizard, sharing settings, and Talk password block. - Pre-add attachment interception now also probes
Attachment.FileNameandAttachment.DisplayNamefor resolvable local paths whenAttachment.PathNameis unavailable, improving early capture reliability for drag/drop scenarios. - Pre-add attachment candidate materialization now falls back to
Attachment.SaveAsFile(...)and compares COM-reported size vs. measured file size, reducing false below-threshold decisions for unresolved path scenarios. ApplicationEvents_11.ItemLoadcompose subscription is now limited to active inline-compose contexts to prevent duplicate compose subscriptions and duplicate threshold prompts when inspector-based subscriptions are already active.- Add-in lifecycle teardown was de-duplicated by centralizing shutdown/disconnect cleanup into a shared idempotent path.
- Optional NC Connector backend policy runtime for Talk and Sharing:
- backend status endpoint is queried on Talk wizard open, Sharing wizard open, and Settings open/save
- active valid seats enable backend policy values and
policy_editablelocks - paused/invalid seat states show an in-product warning and fall back to local add-in settings
- central templates are supported for share HTML/password blocks and Talk description text
- separate password follow-up delivery is explicitly gated behind backend endpoint + active assigned seat
- backend custom text templates are only activated when the language override is set to
Custom, otherwise local UI-default text remains active - backend attachment-threshold policy now treats
attachments_min_size_mb: nullas an explicit "disabled" state
- Release line/version references were aligned to
3.0.0across assembly metadata, installer defaults, readmes, and admin/development docs. - Backend policy runtime is now fetched live on the relevant entry points and evaluated by compose attachment automation as well as in Settings/Wizard UI, so locked backend attachment rules stay authoritative without reusing stale cached policy data.
- Backend policy runtime now targets
/apps/ncc_backend_4mc/api/v1/status; if the backend is unreachable, the license/seat state is no longer usable, or the backend grace window has expired, Outlook falls back to local add-in settings. - Talk event descriptions now honor backend
event_description_type; HTML templates are written into the open Outlook appointment editor with stable NC block markers whileBodystays aligned for room-description sync. - Locked settings and wizard controls now expose their admin/seat/backend explanation through active hint anchors instead of relying on WinForms tooltips on disabled controls.
- Outlook issue #4 (
HTTP 400at final share creation) was hardened in the sharing service:- create-share now extracts and surfaces OCS server error details instead of only generic WebException text
- share creation now follows the documented Nextcloud OCS contract more closely:
labelis sent on create, mutable metadata is updated separately through form-encoded OCS update arguments - the previous
HTTP 400retry path that silently dropped optionallabel/notemetadata was removed
- Runtime exceptions are now always written to
addin-runtime.log, even when the optional debug log switch is off. - Backend custom share HTML in attachment mode now removes only the
RIGHTSrow, preventing truncated or fragmentary HTML blocks. - Compose mail insertion now prefers the
HTMLBodypath for backend HTML blocks, avoiding partial insertion from the old Word-editor fallback path. - Talk appointment save handling now performs a short deferred post-write lobby verification so start-time changes from externally created appointments are still picked up after Outlook commits the final value.
- Compose attachment automation settings:
Always handle attachments via NC ConnectorOffer upload above X MB
- Two-action threshold prompt in compose:
Share with NC ConnectorRemove last selected attachments
- Attachment-mode wizard launch context (direct file-step start, fixed
email_attachmentshare naming with deterministic suffixes,yyyyMMdddate prefix). - Separate password mail flow:
- new default setting
Send password separately - wizard toggle
Send password in separate email - password-only follow-up HTML and post-send dispatch queue.
- new default setting
- Compose share cleanup lifecycle for unsent drafts (armed/cleared/delayed/delete runtime states).
- Built-in host large-attachment conflict guard with live setting checks in Settings UI and runtime flow gates.
- System-addressbook hardening for Talk defaults and Talk wizard:
- centralized runtime availability contract (
available,error,count,forceRefresh) - live checks on Talk click, settings open/save, and wizard open
- deterministic lock state with context-specific tooltips and red warning blocks (Settings + Wizard).
- centralized runtime availability contract (
- Sharing HTML output in attachment mode:
- ZIP download URL now uses
/s/<token>/download - permissions row is hidden in attachment mode
- inline password is hidden when separate password dispatch is enabled.
- ZIP download URL now uses
- Attachment-mode permissions are enforced as read-only regardless of sharing defaults.
- Logging depth for compose sharing flows now includes attachment-evaluation decisions, prompt actions, cleanup lifecycle transitions, and separate-password dispatch outcomes.
- Settings persistence is profile-aware and XML-based:
%LOCALAPPDATA%\NC4OL\settings_<OutlookProfile>.xml- encrypted
AppPasswordProtected(Windows DPAPI, CurrentUser scope) - automatic migration from legacy
settings.inipaths.
- Runtime data path has been consolidated to
%LOCALAPPDATA%\NC4OL:- debug log (
addin-runtime.log) - IFB address book cache.
- debug log (
- Installer defaults have been renamed for consistent product naming:
- install directory:
C:\Program Files\NC4OL - IFB marker key:
HKLM\Software\NC4OL\HttpUrl - legacy installer key
HKLM\Software\NextcloudTalkOutlookAddIn\HttpUrlis removed on install.
- install directory:
- Delegation write-flow in appointment
OnWritewas tightened:- pre-step execution order is deterministic (
room name->lobby->description->participants) - per-step pre-sync status is logged explicitly before moderator handover
- pending delegation is no longer silently blocked by pre-step failures (handover still executes, failures stay visible in runtime logs).
- pre-step execution order is deterministic (
- Debounced attachment evaluation to prevent duplicate triggers during rapid multi-selection.
- Runtime guard enforcement now blocks compose attachment automation not only in UI, but also before evaluation, before threshold action handling, and before attachment-mode finalize.
- Password policy capability parsing is now compatible with current Nextcloud payload variants (
minLengthetc.) and normalized generator URL formats. - Password policy HTTP handling now enables gzip/deflate decompression and sanitizes JSON wrappers before parsing.
- Cross-client Talk edit interoperability was hardened for Thunderbird-created appointments:
- missing local room traits are now bootstrapped from Talk server endpoints (
/object,/webinar/lobby) - resolved room traits are persisted back into Outlook appointment properties
- prevents false room-description update failures like
...: eventwhen editing TB-created event conversations.
- missing local room traits are now bootstrapped from Talk server endpoints (
- MSI maintenance behavior was aligned for support scenarios:
- reinstall/update now supports same/older/newer package installation over an existing installation (
AllowDowngrades="yes").
- reinstall/update now supports same/older/newer package installation over an existing installation (
- Room creation path no longer falls back from event conversation to standard conversation on create errors:
- requested room type is now kept deterministic
- if event conversation prerequisites are missing, creation fails fast with a clear service error.
- Updated
README.md/README.de.mdwith 2.3.0 operational behavior:- profile-based settings XML + legacy migration cleanup
- consolidated runtime path
%LOCALAPPDATA%\NC4OL - compose cleanup and separate-password follow-up flow semantics.
- Clarified MSI reinstall/update semantics in README/admin docs (same/older/newer package install over existing installation).
- Expanded
docs/ADMIN.md/docs/ADMIN.de.mdwith compose-sharing lifecycle details (cleanup contract and password follow-up dispatch behavior). - Expanded
docs/DEVELOPMENT.md/docs/DEVELOPMENT.de.mdwith explicit 2.3.0 implementation deltas and runtime contracts used for parity work.
- More UI translations (see
Translations.md). - Tooltips across Settings and the wizards.
- Optional auto-add of event invitees to the Talk room (Nextcloud users via system address book, others via e-mail).
- Live Nextcloud password policy support for Talk and Sharing (minimum length + generator API, with secure fallback).
- Unified, modernized UI across Talk wizard, Sharing wizard, and Settings.
- Legal/branding update: renamed to NC Connector for Outlook, with new app icon and header assets.
- Buggy muzzle feature.
- Dark mode/theme handling to better follow the Outlook/Office theme.
- Expanded admin and developer documentation.