CloudMailRu v23022026
Description
cloud.mail.ru support for Total Commander. Download link (binaries and source code): https://github.com/pozitronik/CloudMailRu/releasesWhat’s new
Added
- VK ID authorization support.
- OAuth authorization support.
- Thumbnail previews for cloud files in Total Commander panel. Supported formats: jpg, jpeg, png, gif, bmp, heic, heif, webp, tiff, mp4, avi, mov, mkv, wmv, flv, 3gp, m4v, mpg, mpeg. Configurable via ThumbnailExtensions INI key.
- Hash calculator strategy selection: BCrypt (hardware-accelerated SHA-NI), OpenSSL, or Delphi. BCrypt is default on modern CPUs for 2-3x speedup. Configurable in plugin settings.
- Cipher profile selection per account: AES-256 and Twofish-256 via DCPCrypt, plus OpenSSL AES-256 and BCrypt AES-256 backends.
- Quota pre-check for chunked uploads with confirmation dialog when space may be insufficient.
- Chunked upload progress now shows overall [X of Y] format instead of per-chunk progress.
- Paginated directory listing to handle cloud API's ~8000 item cap.
- OAuth session re-authentication on HTTP 403 token expiry.
- Custom server support via tucha self-hosted implementation.
- Self-hosted server improvements: arbitrary logins without @ accepted.
- Full i18n support via .lng files with TranslationManager (English and Russian included).
- Hash file format: block comments and inline comments after closing quote.
- HTTP request/response tracing via LOG_LEVEL_HTTP (64) bitmask.
- File timestamp preservation: stores and restores original modification times on upload/download via .cloud_timestamps metadata files.
- OpenSSL 3.x support via IndySecOpenSSL library with TLS 1.3.
- Account test buttons in settings to verify credentials and public share URLs before saving.
- File version history tab in file properties dialog: view versions, restore as copy, or rollback. Paid accounts show hash per version; free accounts show date/size only. Controlled by a global "Show file history" setting.
- Stale-mark connection invalidation after settings dialog closes; settings apply immediately without reconnect.
- Metadata file visibility and download settings: descript.ion and .cloud_timestamps can be shown in listings and copied locally. Controlled per-file-type in account settings.
- Directory listing cache: disk-based TTL cache reducing API calls on repeated navigations. Configurable TTL and max size via Cache tab.
- File content cache: disk-based cache keyed by content hash. Unchanged files served from local cache. Configurable independently from directory cache.
- Cross-server file transfer: copy/move between accounts on different servers via in-memory stream with progress reporting.
Changed
- Settings UI redesign: resizable Accounts dialog, redesigned Streaming Settings tab with TListView and dirty tracking, improved tooltips and layout.
- Account/extension name shown in save-changes confirmation dialogs.
- Stream-based encryption/decryption with constant memory usage instead of buffering entire files.
- File splitting settings moved from global to per-account with 2GB validation for unpaid accounts.
- Unified timestamp settings into a single TimestampMode enum (Disabled / CloudTime / FullSync), replacing 4 overlapping boolean options.
- Extracted shared metadata sync lifecycle into TBaseRemoteMetadataSyncManager using Template Method + Adapter pattern.
Removed
- Account registration (no longer supported by mail.ru).
- Filename encryption option.
- Legacy login methods removed (no longer supported by mail.ru)
- Download Links feature (mail.ru API returns time-limited URLs that expire quickly).
Fixed
- Memory leak in CreateRemoveDirSkippedPath when called twice for the same thread.
- Shard/endpoint URL normalization before path concatenation.
- Default http:// scheme for server URLs entered without protocol prefix.
- ServerProfileManager reading from wrong config file; custom server endpoints never resolved.
- Server profiles now stored in the global INI file, not the accounts INI.
- Authentication error details surfaced on login failure instead of being silently discarded.
- Timestamp metadata stored UTC instead of local time, fixing DST and timezone sync errors.
- Downloaded files write back actual cloud modification time to metadata for conflict detection.
- Metadata file naming consistency across description and timestamp subsystems.
- Missing timestamp metadata cleanup when a downloaded file was deleted during a move.
- Dialog form positioning, DPI scaling, and control anchors across all dialogs.
- Dialog centering on multi-monitor setups with different DPI scaling.
- Dialog position after cross-monitor drag during DPI change events.
Internal
- Complete migration to Clean Architecture / DDD with four layers (Domain, Application, Infrastructure, Presentation).
- Interface-based dependency injection throughout the codebase.
- MVP pattern for all UI forms.
- 2600+ unit and integration tests (DUnitX) with comprehensive mock infrastructure.
- Self-contained integration test infrastructure with auto-started mock server.
- Extended test coverage across ConnectionManager, CloudHTTP, FileStreamExecutor, CloudFileDownloader, CloudFileUploader, TCHandler, PluginSettingsManager, OpenSSL, CipherProfile.
- Extracted 40+ dedicated service classes from monolithic MailRuCloudWFX.pas.
- Null Object pattern applied consistently (TNullLogger, TNullCipher, TNullFileSystem, etc.).
- TSafeJSON wrapper for null-safe JSON navigation.
- Centralized OpenSSL provider for unified library loading.
- Token retry logic centralized in TRetryOperation.
- IfEmpty coalesce helper in StringHelper.