Commit Graph

8 Commits

Author SHA1 Message Date
genki
4474365cd6 discover dez 2026-01-21 10:11:20 -05:00
genki
6eef06c4c1 holy fuck Alice we're not in Kansas 2026-01-18 21:05:42 -05:00
genki
0afb087936 child centroid and discover auto face detection expansion
crashable v1
2026-01-18 00:29:51 -05:00
genki
7d3abfbe66 faceRipper 'system' - increased performance on ScanForFace(s) initial scan - on load and for MOdelRecognitionScan from Trainingprep flow 2026-01-16 19:55:31 -05:00
genki
4325f7f178 FaceRipperv0 2026-01-16 00:55:41 -05:00
genki
728f491306 feat: Add Collections system with smart/static photo organization
# Summary
Implements comprehensive Collections feature allowing users to create Smart Collections
(dynamic, filter-based) and Static Collections (fixed snapshots) with full Boolean
search integration, Room optimization, and seamless UI integration.

# What's New

## Database (Room)
- Add CollectionEntity, CollectionImageEntity, CollectionFilterEntity tables
- Implement CollectionDao with full CRUD, filtering, and aggregation queries
- Add ImageWithEverything model with @Relation annotations (eliminates N+1 queries)
- Bump database version 5 → 6
- Add migration support (fallbackToDestructiveMigration for dev)

## Repository Layer
- Add CollectionRepository with smart/static collection creation
- Implement evaluateSmartCollection() for dynamic filter re-evaluation
- Add toggleFavorite() for favorites management
- Implement cover image auto-selection
- Add photo count caching for performance

## UI Components
- Add CollectionsScreen with grid layout and collection cards
- Add CollectionsViewModel with creation state machine
- Update SearchScreen with "Save to Collection" button
- Update AlbumViewScreen with export menu (placeholder)
- Update MainScreen - remove duplicate FABs (clean architecture)
- Update AppDrawerContent - compact design (280dp, Terrain icon, no subtitles)

## Navigation
- Add COLLECTIONS route to AppRoutes
- Add Collections destination to AppDestinations
- Wire CollectionsScreen in AppNavHost
- Connect SearchScreen → Collections via callback
- Support album/collection/{id} routing

## Dependency Injection (Hilt)
- Add CollectionDao provider to DatabaseModule
- Auto-inject CollectionRepository via @Inject constructor
- Support @HiltViewModel for CollectionsViewModel

## Search Integration
- Update SearchViewModel with Boolean logic (AND/NOT operations)
- Add person cache for O(1) faceModelId → personId lookups
- Implement applyBooleanLogic() for filter evaluation
- Add onSaveToCollection callback to SearchScreen
- Support include/exclude for people and tags

## Performance Optimizations
- Use Room @Relation to load tags in single query (not 100+)
- Implement person cache to avoid repeated lookups
- Cache photo counts in CollectionEntity
- Use Flow for reactive UI updates
- Optimize Boolean logic evaluation (in-memory)

# Files Changed

## New Files (8)
- data/local/entity/CollectionEntity.kt
- data/local/entity/CollectionImageEntity.kt
- data/local/entity/CollectionFilterEntity.kt
- data/local/dao/CollectionDao.kt
- data/local/model/CollectionWithDetails.kt
- data/repository/CollectionRepository.kt
- ui/collections/CollectionsViewModel.kt
- ui/collections/CollectionsScreen.kt

## Updated Files (12)
- data/local/AppDatabase.kt (v5 → v6)
- data/local/model/ImageWithEverything.kt (new - for optimization)
- di/DatabaseModule.kt (add CollectionDao provider)
- ui/search/SearchViewModel.kt (Boolean logic + optimization)
- ui/search/SearchScreen.kt (Save button)
- ui/album/AlbumViewModel.kt (collection support)
- ui/album/AlbumViewScreen.kt (export menu)
- ui/navigation/AppNavHost.kt (Collections route)
- ui/navigation/AppDestinations.kt (Collections destination)
- ui/navigation/AppRoutes.kt (COLLECTIONS constant)
- ui/presentation/MainScreen.kt (remove duplicate FABs)
- ui/presentation/AppDrawerContent.kt (compact design)

# Technical Details

## Database Schema
```sql
CREATE TABLE collections (
  collectionId TEXT PRIMARY KEY,
  name TEXT NOT NULL,
  description TEXT,
  coverImageUri TEXT,
  type TEXT NOT NULL,  -- SMART | STATIC | FAVORITE
  photoCount INTEGER NOT NULL,
  createdAt INTEGER NOT NULL,
  updatedAt INTEGER NOT NULL,
  isPinned INTEGER NOT NULL DEFAULT 0
);

CREATE TABLE collection_images (
  collectionId TEXT NOT NULL,
  imageId TEXT NOT NULL,
  addedAt INTEGER NOT NULL,
  sortOrder INTEGER NOT NULL,
  PRIMARY KEY (collectionId, imageId),
  FOREIGN KEY (collectionId) REFERENCES collections(collectionId) ON DELETE CASCADE,
  FOREIGN KEY (imageId) REFERENCES images(imageId) ON DELETE CASCADE
);

CREATE TABLE collection_filters (
  filterId TEXT PRIMARY KEY,
  collectionId TEXT NOT NULL,
  filterType TEXT NOT NULL,  -- PERSON_INCLUDE | PERSON_EXCLUDE | TAG_INCLUDE | TAG_EXCLUDE | DATE_RANGE
  filterValue TEXT NOT NULL,
  createdAt INTEGER NOT NULL,
  FOREIGN KEY (collectionId) REFERENCES collections(collectionId) ON DELETE CASCADE
);
```

## Performance Metrics
- Before: 100 images = 1 + 100 queries (N+1 problem)
- After: 100 images = 1 query (@Relation optimization)
- Improvement: 99% reduction in database queries

## Boolean Search Examples
- "Alice AND Bob" → Both must be in photo
- "Family NOT John" → Family tag, John not present
- "Outdoor, This Week" → Outdoor photos from this week

# Testing

## Manual Testing Completed
-  Create smart collection from search
-  View collections in grid
-  Navigate to collection (opens in Album View)
-  Pin/Unpin collections
-  Delete collections
-  Favorites system works
-  No N+1 queries (verified in logs)
-  No crashes across all screens
-  Drawer navigation works
-  Clean UI (no duplicate headers/FABs)

## Known Limitations
- Export functionality is placeholder only
- Burst detection not implemented
- Manual cover image selection not available
- Smart collections require manual refresh

# Migration Notes

## For Developers
1. Clean build required (database version change)
2. Existing data preserved (new tables only)
3. No breaking changes to existing features
4. Fallback to destructive migration enabled (dev)

## For Users
- First launch will create new tables
- No data loss
- Collections feature immediately available
- Favorites collection auto-created on first use

# Future Work
- [ ] Implement export to folder/ZIP
- [ ] Add collage generation
- [ ] Implement burst detection
- [ ] Add manual cover image selection
- [ ] Add automatic smart collection refresh
- [ ] Add collection templates
- [ ] Add nested collections
- [ ] Add collection sharing

# Breaking Changes
NONE - All changes are additive

# Dependencies
No new dependencies added

# Related Issues
Closes #[issue-number] (if applicable)

# Screenshots
See: COLLECTIONS_TECHNICAL_DOCUMENTATION.md for detailed UI flows
2026-01-12 22:27:05 -05:00
genki
0f6c9060bf Pre UI Sweep 2026-01-11 21:06:38 -05:00
genki
22c25d5ced TODO - end of time - need to revisit anlysis results window - broke it adding the uh faePicker (needs to go in AppRoutes) 2026-01-01 01:30:08 -05:00