# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.3.0] - 2025-08-12
### Added
- **Hot Folders**: Monitor directories for changes and trigger actions on file events
- `Sambex.HotFolder` GenServer for monitoring directories
- `Sambex.HotFolderSupervisor` for managing hot folder processes
- Named hot folders via Registry for easy reference to multiple folders
- Anonymous hot folders for simple use cases
- Hot folder pooling and lifecycle management
- Automatic supervision and fault tolerance
## [0.2.0] - 2025-08-12
### Added
- **Connection-based API**: New GenServer-based connection management for more idiomatic Elixir usage
- `Sambex.Connection` GenServer for persistent SMB connections
- `Sambex.ConnectionSupervisor` for managing connection processes
- Named connections via Registry for easy reference to multiple shares
- Anonymous connections for simple use cases
- Connection pooling and lifecycle management
- Automatic supervision and fault tolerance
### Features
#### Connection Management
- **Named Connections**: Register connections with atoms for easy reference
```elixir
{:ok, _} = Sambex.Connection.start_link(
url: "smb://server/share",
username: "user",
password: "pass",
name: :main_share
)
Sambex.Connection.list_dir(:main_share, "/")
```
- **Anonymous Connections**: Simple connection creation without names
```elixir
{:ok, conn} = Sambex.Connection.connect("smb://server/share", "user", "pass")
Sambex.Connection.read_file(conn, "/file.txt")
```
- **Supervised Connections**: Full OTP supervision tree integration
```elixir
{:ok, conn} = Sambex.ConnectionSupervisor.start_connection(
url: "smb://server/share",
username: "user",
password: "pass",
name: :supervised_share
)
```
#### API Improvements
- All existing SMB operations now available through connections:
- `Sambex.Connection.list_dir/2`
- `Sambex.Connection.read_file/2`
- `Sambex.Connection.write_file/3`
- `Sambex.Connection.delete_file/2`
- `Sambex.Connection.move_file/3`
- `Sambex.Connection.get_file_stats/2`
- `Sambex.Connection.upload_file/3`
- `Sambex.Connection.download_file/3`
- Connection management functions:
- `Sambex.Connection.disconnect/1`
- `Sambex.ConnectionSupervisor.list_connections/0`
- `Sambex.ConnectionSupervisor.stop_connection/1`
### Benefits
- **Security**: Credentials stored in GenServer state, not passed on every operation
- **Performance**: Connection reuse and persistent state
- **Fault Tolerance**: OTP supervision ensures connections can be restarted
- **Multiple Shares**: Easy management of connections to different SMB shares
- **Elixir Idioms**: Follows OTP patterns and Elixir best practices
### Documentation
- Updated module documentation with both API usage patterns
- Added comprehensive examples for connection-based API
- Migration guide from direct API to connection API
- Complete function documentation for all new modules
### Testing
- **69 total tests** with comprehensive coverage of new connection API
- Tests for anonymous and named connections
- Supervisor behavior verification
- Registry integration testing
- Function export and documentation validation
- Fixed segfault issues in test suite
### Backwards Compatibility
- **100% backwards compatible** - all existing code continues to work unchanged
- Original direct API (`Sambex.list_dir/3`, etc.) remains fully functional
- No breaking changes to existing function signatures
- Existing applications can migrate incrementally
### Technical Implementation
- **OTP Application**: `Sambex.Application` starts supervision tree automatically
- **Registry**: Named connection management via `Sambex.Registry`
- **Dynamic Supervisor**: `Sambex.DynamicConnectionSupervisor` for connection processes
- **GenServer**: `Sambex.Connection` manages individual SMB connection state
- **URL Building**: Automatic path resolution for connection-relative operations
## [0.1.1]
### Added
- **File Statistics/Metadata Functionality**: Added `get_file_stats/3` function to get file metadata from SMB shares
- Returns comprehensive file information including size, type, permissions, timestamps
- Supports both files and directories
- Cross-platform compatibility (macOS stat structure handling)
- Proper error handling for non-existent files and authentication failures
- Comprehensive test coverage with 8 new integration tests
### Changed
- Updated README.md to include file stats documentation
- Updated roadmap to reflect completed file stats feature
### Technical Details
- Added `get_file_stats` function to Sambex.Nif module using `smbc_stat` from libsmbclient
- Added corresponding Elixir wrappers with automatic data conversion
- Enhanced sys/stat.h support for cross-platform compatibility
- All tests pass (46 total tests, 0 failures)
## [0.1.0]
### Added
- **Move/Rename File Functionality**: Added `move_file/4` function to move or rename files on SMB shares
- Supports renaming files within the same directory
- Supports moving files between directories on the same share
- Handles overwriting existing destination files
- Proper error handling for non-existent files and authentication failures
- Comprehensive test coverage with 5 new integration tests
### Changed
- Updated README.md to include move/rename functionality documentation
- Updated roadmap to reflect completed move/rename feature
### Technical Details
- Added `move_file` function to Sambex.Nif module using `smbc_rename` from libsmbclient
- Added corresponding Elixir wrapper in main Sambex module
- Maintains consistent error handling patterns with existing functions
- All tests pass (38 total tests, 0 failures)
## [0.1.0-alpha2] - Previous Release
### Added
- Complete SMB operations support
- File deletion functionality (fixed VFS module issues)
- Comprehensive test suite with 33 tests
- CI/CD pipeline with GitHub Actions
- Docker-based test environment
- Code quality tools (Credo, ExCoveralls, Dialyxir)
### Features
- Connect to SMB shares with authentication
- List directory contents
- Read files from SMB shares
- Write/create files on SMB shares
- Delete files from SMB shares
- Upload local files to SMB shares
- Download files from SMB shares
### Technical Implementation
- Written in Zig with Elixir NIF interface
- Proper error handling and context management
- Support for binary and Unicode content
- Large file operations
- Multiple share support
- Robust testing infrastructure
### Testing
- Unit tests for module structure and function exports
- Integration tests against real SMB server
- File statistics and metadata validation tests
- File move/rename operation tests
- Error handling tests for edge cases
- Performance tests for large files
- Unicode and binary content tests
### CI/CD
- Multi-version testing (Elixir 1.17-1.18 × OTP 26-27)
- Automated code quality checks
- Test coverage reporting
- Docker-based integration testing