aditya.chandel
63518b7eb8
Implement magic shelves with dynamic rule-based filters
2025-07-28 07:59:00 -06:00
Alexander Puzynia
a5003cb2aa
style(services): remove unused usings
...
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-07-23 14:11:27 -06:00
Alexander Puzynia
c1796769dc
style(services): remove unused usings
...
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-07-23 14:11:27 -06:00
Alexander Puzynia
0cfec8bcd8
style(services): remove unused usings
...
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-07-23 14:11:27 -06:00
Alexander Puzynia
f4207cf9b3
refactor(services): update BookFileProcessor to use BookFileType for processor retrieval
2025-07-23 14:11:27 -06:00
Alexander Puzynia
3f23e4a3eb
refactor(services): add LibraryFileProcessorRegistry to get processor based on scan mode
2025-07-23 14:11:27 -06:00
Alexander Puzynia
d6c3c8e4c6
test(service): add unit tests for FileAsBookProcessor to validate library file processing
2025-07-23 14:11:27 -06:00
Alexander Puzynia
31e4ae2972
refactor(service): integrate BookFileProcessorRegistry for handling multiple book file formats
2025-07-23 14:11:27 -06:00
Alexander Puzynia
3d17159c59
refactor(services): add common BookFileProcessorRegistry for all current and future book file processors
2025-07-23 14:11:27 -06:00
Alexander Puzynia
b7a17e1405
refactor(service): use full path instead of just name to sync book files
2025-07-23 14:11:27 -06:00
Alexander Puzynia
c9e05b1c28
refactor(library): extract processLibraryFiles into separate FileAsBookProcessor class
2025-07-23 14:11:27 -06:00
Alexander Puzynia
f084bb1da6
refactor(library): remove checked IOException
2025-07-23 14:11:27 -06:00
Alexander Puzynia
395fcca80d
refactor(api/services): don't scan library files twice on rescan
2025-07-23 14:11:27 -06:00
Alexander Puzynia
2e7bad742b
File processing minor refactoring ( #751 )
...
* refactor(service): remove finishAndReturnBook to avoid hash calculation twice
* refactor(service): remove forceProcess argument cause it always passed as false
* refactor(services): merge FileProcessor into BookFileProcessor
2025-07-23 12:15:13 -06:00
aditya.chandel
a15eb8684f
Fix incorrect file path resolution when using {currentFilename} in naming pattern
2025-07-21 23:09:42 -06:00
aditya.chandel
4fe00e3bce
Fix scheduled library rescan failing due to missing authentication
2025-07-21 18:42:27 -06:00
rahairston
a8ba708477
Adding minor code to Fix file permissions on Upload ( #752 )
...
Adding permission changes to temp file to allow proper upload
2025-07-21 09:25:22 -06:00
aditya.chandel
177528e640
Implement Bookdrop: Watch folder for file drops and auto-process uploads
2025-07-19 11:05:59 -06:00
aditya.chandel
c0e993c37a
Add support for updating read status of multiple books at once
2025-07-14 10:31:32 -06:00
aditya.chandel
77d68108ab
Add support for bulk reading progress reset
2025-07-14 09:19:22 -06:00
aditya.chandel
116f0c950e
Implement interactive metadata review for batch updates, with progress tracking and a unified notification system
2025-07-13 23:32:08 -06:00
Juror2372
6576f3351a
Update EmailService.java
...
# Enhanced Email Service: SSL Support and Extended Timeouts
## Problem Statement
The current `EmailService` has two significant limitations:
1. **Hardcoded short timeouts (15 seconds)** that cause failures with slow SMTP servers, particularly cPanel and shared hosting providers
2. **Missing SSL support** for port 465 connections - only STARTTLS is supported
This results in timeout errors when using SMTP servers that require longer response times or SSL connections.
## Changes Made
### 1. Extended Timeouts
- **Increased default timeouts from 15 seconds to 60 seconds**
- Added configurable timeouts via system properties
- Added write timeout configuration (previously missing)
**Before:**
```java
mailProps.put("mail.smtp.connectiontimeout", 15000); // 15 seconds
mailProps.put("mail.smtp.timeout", 15000); // 15 seconds
```
**After:**
```java
mailProps.put("mail.smtp.connectiontimeout", 60000); // 60 seconds
mailProps.put("mail.smtp.timeout", 60000); // 60 seconds
mailProps.put("mail.smtp.writetimeout", 60000); // 60 seconds (new)
```
### 2. Full SSL Support
- **Added SSL configuration for port 465**
- **Auto-detection based on port and `ssl_enable` field**
- **Enhanced security with modern TLS protocols**
**New SSL Configuration:**
```java
mailProps.put("mail.transport.protocol", "smtps");
mailProps.put("mail.smtp.ssl.enable", "true");
mailProps.put("mail.smtp.ssl.trust", emailProvider.getHost());
mailProps.put("mail.smtp.ssl.protocols", "TLSv1.2,TLSv1.3");
```
### 3. Improved Connection Type Detection
- **Automatic detection** of SSL, STARTTLS, or plain connections
- **Support for `ssl_enable` database field**
- **Port-based auto-configuration** (465=SSL, 587=STARTTLS)
### 4. Enhanced Debugging and Logging
- **Configurable debug mode** via system properties
- **Detailed connection type logging**
- **Better error context** for troubleshooting
## Database Schema Compatibility
This enhancement works with the existing database schema and is **fully backward compatible**. It also supports the enhanced schema with `ssl_enable` and `connection_type` fields:
```sql
ALTER TABLE email_provider
ADD COLUMN ssl_enable BOOLEAN NOT NULL DEFAULT FALSE,
ADD COLUMN connection_type VARCHAR(20) NOT NULL DEFAULT 'STARTTLS';
```
## Configuration Examples
### SSL (Port 465)
```
Host: smtp.gmail.com
Port: 465
ssl_enable: true
start_tls: false
```
### STARTTLS (Port 587)
```
Host: smtp.gmail.com
Port: 587
ssl_enable: false
start_tls: true
```
### Auto-Detection
- **Port 465** → Automatically configured as SSL
- **Port 587 + start_tls=true** → Automatically configured as STARTTLS
- **ssl_enable=true** → Forces SSL regardless of port
## System Property Overrides
Timeouts can be customized via system properties:
```bash
-Dmail.smtp.connectiontimeout=30000
-Dmail.smtp.timeout=30000
-Dmail.smtp.writetimeout=30000
-Dmail.debug=true
```
## Benefits
1. **Broader SMTP Server Compatibility** - Works with cPanel, Exchange, and slow SMTP servers
2. **Enhanced Security** - Full SSL support with modern TLS protocols
3. **Better Reliability** - Extended timeouts prevent premature failures
4. **Improved Debugging** - Better logging and configurable debug mode
5. **Backward Compatibility** - No breaking changes to existing configurations
## Testing
This enhancement has been tested with:
- ✅ cPanel SMTP servers (both SSL and STARTTLS)
- ✅ Gmail SMTP (ports 465 and 587)
- ✅ Corporate Exchange servers
- ✅ Various shared hosting providers
## Impact
- **Fixes timeout issues** with slow SMTP servers
- **Enables SSL email providers** that were previously unsupported
- **Maintains full backward compatibility**
- **No database migration required** (but supports enhanced schema)
---
**This fix resolves timeout issues reported by users with cPanel and other slow SMTP providers while adding comprehensive SSL support for enhanced security.**
2025-07-13 00:39:51 -06:00
aditya.chandel
480eb92f7d
Fix read status filter showing only “Unknown” with no results
2025-07-10 09:43:36 -06:00
aditya.chandel
ceac960943
Add ability to reset reading progress for a book
2025-07-08 17:33:19 -06:00
aditya.chandel
5afe0a1b0a
feat: move read status tracking to per-user progress entity
...
- Removed global `readStatus` field from `BookEntity`
- Added `read_status` column to `UserBookProgressEntity` for per-user tracking
- Added Flyway migration to introduce `read_status` column to `user_book_progress`
2025-07-08 17:06:45 -06:00
aditya.chandel
2c72790334
Feature: add table column visibility configuration
...
- Introduced a multi-select dropdown for customizing visible columns in the book browser table
- Implemented per-user persistence using UserService settings
- Saved preferences include visibility and column order
- Ensured all available columns are listed even when hidden
2025-07-08 15:20:32 -06:00
aditya.chandel
8edf589f3d
Fix 'Lock wait timeout exceeded exception' during library re-scan
2025-07-04 17:19:45 -06:00
aditya.chandel
841e359b92
Support File Move Operations with Watcher Refactor for Accurate Tracking
2025-07-04 11:19:23 -06:00
aditya.chandel
b155f567a4
Deleting books now cleans up empty directories left behind
2025-06-30 17:31:34 -06:00
aditya.chandel
f7db157689
Resolve broken Pocket ID auth and occasional Authentik failures
2025-06-29 16:10:05 -06:00
aditya.chandel
e8cd58cd42
Allow metadata fields to be explicitly cleared
2025-06-28 14:12:48 -06:00
aditya.chandel
86dfc515a7
Support writing metadata directly into PDF files
2025-06-27 14:48:49 -06:00
aditya.chandel
c34ab84200
Add configuration to launch Metadata Center as a dialog or full-page route
2025-06-26 23:24:02 -06:00
aditya.chandel
df5ebbe7c4
Improve EPUB Reader: UI Enhancements (Line Height, Letter Spacing, Flow, Fonts)
2025-06-25 01:10:16 -06:00
Prasanna Selvaraj
4bd30abebf
[OPDS] Fix search option not recognized by MoonReader ( #565 )
2025-06-23 20:54:08 -06:00
Prasanna Selvaraj
d348728f74
Update booklore-api/src/main/java/com/adityachandel/booklore/repository/BookRepository.java
...
Co-authored-by: Aditya Chandel <8075870+adityachandelgit@users.noreply.github.com >
2025-06-23 19:14:14 -06:00
Prasanna S
c7d16454a0
[OPDS] Add support for searching books in the catalog
...
Add new endpoint `/api/v1/opds/search.opds` to respond with the OpenSearchDescription
Add new endpoint `/api/v1/opds/search?q=` endpoint to support search
Match one of title, subtitle, seriesName, description or author name of the book metadata with the provided searchTerms
References:
OPDS Search specification: https://specs.opds.io/opds-1.2.html#3-search
Sample OPDS Search description from gutenberg project: https://www.gutenberg.org/catalog/osd-books.xml
2025-06-23 19:14:14 -06:00
aditya.chandel
6bfbff5d34
feat(read-status): Add Read Status tracking and filtering support
...
- Introduced `ReadStatus` enum and added `readStatus` field to `BookEntity`
- Updated database schema with Flyway migration to store read status
- Extended DTOs and backend API to handle read status updates
- Added `updateBookReadStatus()` in backend service and controller
- Integrated read status in Angular: display, update, and toast feedback
- Added read status filters and labels across book listing, sidebar filter, and viewer
- Refactored `MetadataViewerComponent` and extracted read status UI logic
- Simplified read status label resolution using a mapping function
2025-06-22 00:26:12 -06:00
aditya.chandel
cd4e14c8ad
feat: add support for personal book ratings
...
- Introduced 'personalRating' field in book metadata
- Added UI for 10-star rating input
- Persist personal ratings via updateBookMetadata API
- Updated filters and sorting to include personal rating range
2025-06-21 23:10:55 -06:00
aditya.chandel
ce96fcff6d
Add book deletion feature with admin permission control
2025-06-21 18:31:39 -06:00
aditya.chandel
0e8d1e6124
Fix cbx and pdf
2025-06-19 15:04:39 -06:00
aditya.chandel
30e1a0b4fa
Add timeout of 15 seconds for auto fetch button
2025-06-19 11:20:20 -06:00
aditya.chandel
551234f02a
Support Individual Metadata Editing for Multiple Books
2025-06-18 22:26:12 -06:00
aditya.chandel
82c843bbe5
Support Editing Metadata for Multiple Books at Once via Bulk Edit Interface
2025-06-18 17:01:50 -06:00
aditya.chandel
2d041f79f3
Embed original cover image in EPUB metadata
2025-06-18 12:22:12 -06:00
aditya.chandel
f451350dab
- Move "Restore Metadata" button to Metadata Editor tab.
...
- Fix duplicate KEY error for categories
2025-06-17 20:19:04 -06:00
aditya.chandel
dcd993af4f
Ignore hidden files (starting with .) while scanning library files
2025-06-17 19:50:04 -06:00
aditya.chandel
8439d31d1a
Introduce @CheckBookAccess and @CheckLibraryAccess annotations for endpoint-level access control
2025-06-17 18:01:09 -06:00
aditya.chandel
f43c71b1f1
Fix: Resolved Hibernate constraint violation caused by duplicate category mappings
2025-06-17 11:31:49 -06:00
aditya.chandel
8d09430043
Fix: Thumbnail not updating in metadata picker
2025-06-17 10:10:37 -06:00