From 86d00284462aabc1a4b0c32252eb9a2c5c0dec04 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Sun, 17 Aug 2025 18:36:11 -0700 Subject: [PATCH 01/12] setup --- main.py | 28 +- multi-server-database-plan.md | 197 ++++++++ server-source.md | 370 +++++++++++++++ ui/assets/jellyfin_icon.png | Bin 0 -> 235069 bytes ui/assets/plex_icon.png | Bin 0 -> 52870 bytes ui/pages/dashboard.py | 45 +- ui/pages/settings.py | 865 ++++++++++++++++++++++++++++++++-- ui/sidebar.py | 24 +- 8 files changed, 1461 insertions(+), 68 deletions(-) create mode 100644 multi-server-database-plan.md create mode 100644 server-source.md create mode 100644 ui/assets/jellyfin_icon.png create mode 100644 ui/assets/plex_icon.png diff --git a/main.py b/main.py index 81a8fd34..31882030 100644 --- a/main.py +++ b/main.py @@ -33,6 +33,10 @@ class ServiceStatusThread(QThread): self.plex_client = plex_client self.soulseek_client = soulseek_client self.running = True + + # Import here to avoid circular imports + from config.settings import config_manager + self.config_manager = config_manager def run(self): while self.running: @@ -41,9 +45,27 @@ class ServiceStatusThread(QThread): spotify_status = self.spotify_client.sp is not None self.status_updated.emit("spotify", spotify_status) - # Check Plex connection - plex_status = self.plex_client.is_connected() - self.status_updated.emit("plex", plex_status) + # Check active media server connection + active_server = self.config_manager.get_active_media_server() + if active_server == "plex": + server_status = self.plex_client.is_connected() + self.status_updated.emit("plex", server_status) + elif active_server == "jellyfin": + # For now, do a basic config check for Jellyfin until JellyfinClient is implemented + jellyfin_config = self.config_manager.get_jellyfin_config() + jellyfin_status = bool(jellyfin_config.get('base_url')) and bool(jellyfin_config.get('api_key')) + if jellyfin_status: + # Do a quick HTTP test to verify connection + try: + import requests + base_url = jellyfin_config.get('base_url', '').rstrip('/') + api_key = jellyfin_config.get('api_key', '') + headers = {'X-Emby-Token': api_key} if api_key else {} + response = requests.get(f"{base_url}/System/Info", headers=headers, timeout=3) + jellyfin_status = response.status_code == 200 + except: + jellyfin_status = False + self.status_updated.emit("jellyfin", jellyfin_status) # Check Soulseek connection (simplified check to avoid event loop issues) soulseek_status = self.soulseek_client.is_configured() diff --git a/multi-server-database-plan.md b/multi-server-database-plan.md new file mode 100644 index 00000000..6be9d930 --- /dev/null +++ b/multi-server-database-plan.md @@ -0,0 +1,197 @@ +# Multi-Server Database Update Implementation Plan + +## Overview + +This document outlines the plan to extend SoulSync's database update functionality to support both Plex and Jellyfin media servers, moving from the current Plex-only architecture to a unified multi-server approach. + +## Current Architecture Analysis + +### Existing Plex-Centric System + +**DatabaseUpdateWorker** (`core/database_update_worker.py`): +- Hardcoded to accept `plex_client` parameter +- Uses Plex-specific API methods: `get_all_artists()`, `albums()`, `tracks()` +- Relies on Plex `ratingKey` attributes as primary identifiers +- Implements smart incremental updates using Plex's `recentlyAdded` and `updatedAt` sorting + +**Database Schema** (`database/music_database.py`): +- `insert_or_update_artist(plex_artist)` - expects Plex artist objects with `ratingKey` +- `insert_or_update_album(plex_album, artist_id)` - expects Plex album objects +- `insert_or_update_track(plex_track, album_id, artist_id)` - expects Plex track objects +- All database operations depend on `.ratingKey`, `.title`, `.artist()`, `.album()` methods + +**Dashboard Tools**: +- "Update SoulSync Database" button β†’ `DatabaseUpdateWorker` with Plex client +- "Plex Metadata Updater" β†’ separate tool for enhancing artist photos via Spotify API +- Both tools assume Plex connectivity and data structures + +## Implementation Strategy + +### Recommended Approach: Universal Database Worker + +Extend the existing architecture rather than creating duplicate tools to maintain consistency and user experience. + +#### Key Benefits: +- **Unified Database**: Both servers populate same tables for consistent search/sync +- **Single User Interface**: One "Update Database" button that works with active server +- **Code Reuse**: Share database logic, incremental update strategies, and UI components +- **Seamless Switching**: Users don't need to learn different tools for different servers + +#### Architecture Changes: + +1. **Server Abstraction Layer**: + ```python + # Create common interface for both servers + class MediaServerClient(ABC): + @abstractmethod + def get_all_artists(self) -> List[MediaServerArtist] + @abstractmethod + def get_recently_added_content(self) -> List[MediaServerAlbum] + + class JellyfinClient(MediaServerClient): + # Implement Jellyfin-specific API calls + + class PlexClient(MediaServerClient): + # Existing implementation + ``` + +2. **Database Worker Updates**: + ```python + class DatabaseUpdateWorker(QThread): + def __init__(self, media_client: MediaServerClient, server_type: str, ...): + self.media_client = media_client + self.server_type = server_type # "plex" or "jellyfin" + ``` + +3. **Dynamic Dashboard Tools**: + - "Update SoulSync Database" β†’ detects active server and uses appropriate client + - "Metadata Updater" β†’ works with both server types using abstracted artist data + +## Technical Concerns & Design Decisions + +### 1. Database Schema Strategy + +**Option A: Shared Tables with Server Source Column** (Recommended) +```sql +-- Add server_source column to existing tables +ALTER TABLE artists ADD COLUMN server_source TEXT DEFAULT 'plex'; +ALTER TABLE albums ADD COLUMN server_source TEXT DEFAULT 'plex'; +ALTER TABLE tracks ADD COLUMN server_source TEXT DEFAULT 'plex'; +``` + +**Pros**: +- Single source of truth for all music data +- Unified search and sync operations +- Easy migration path from current Plex-only setup + +**Cons**: +- Potential ID conflicts between servers +- Need to handle server-switching scenarios + +**Option B: Separate Tables per Server** +```sql +-- Create parallel table structures +CREATE TABLE jellyfin_artists (...); +CREATE TABLE jellyfin_albums (...); +CREATE TABLE jellyfin_tracks (...); +``` + +**Pros**: +- Complete isolation between server data +- No ID conflicts + +**Cons**: +- Duplicate database logic +- Complex search/sync operations across multiple tables +- User confusion about data sources + +### 2. ID Handling Strategy + +**Challenge**: Plex uses `ratingKey` (e.g., "12345"), Jellyfin uses GUIDs (e.g., "f2a6c4e8-1234-5678-9abc-def012345678") + +**Option A: Native ID Storage** (Recommended) +- Store server-specific IDs as-is in existing `id` columns +- Add `server_source` column to identify which server the ID belongs to +- Update queries to filter by both ID and server source + +**Option B: Universal ID Mapping** +- Create internal UUID system that maps to server-specific IDs +- Maintain mapping tables for translation +- More complex but server-agnostic + +### 3. Incremental Update Strategy + +**Plex Approach**: Uses `recentlyAdded()` and `updatedAt` sorting for smart incremental updates + +**Jellyfin Equivalent**: +- `/Users/{userId}/Items?SortBy=DateCreated&SortOrder=Descending` for recently added +- `/Users/{userId}/Items?SortBy=DateLastMediaAdded&SortOrder=Descending` for updated content +- Similar early-stopping logic when consecutive items are already in database + +### 4. Metadata Enhancement Compatibility + +**Current "Plex Metadata Updater"**: +- Scans Plex artists for missing/low-quality photos +- Uses Spotify API to find and download better artist images +- Updates Plex server with enhanced metadata + +**Jellyfin Compatibility Question**: +- Can Jellyfin accept metadata updates via API? +- Should this be server-agnostic or Plex-specific? +- Recommendation: Make server-agnostic if Jellyfin supports metadata updates + +### 5. Error Handling & Fallbacks + +**Server Switching Scenarios**: +- What happens when user switches from Plex to Jellyfin mid-update? +- How to handle existing database with Plex data when switching to Jellyfin? +- Should we clear database on server switch or maintain both datasets? + +**API Differences**: +- Different error types and handling between Plex and Jellyfin APIs +- Different rate limiting and authentication mechanisms +- Need abstraction layer for consistent error handling + +## Implementation Phases + +### Phase 1: Foundation +1. Create `JellyfinClient` class matching `PlexClient` interface +2. Add `server_source` column to database tables +3. Update database methods to handle server-agnostic data structures + +### Phase 2: Worker Updates +1. Modify `DatabaseUpdateWorker` to accept generic media server client +2. Implement Jellyfin-specific data extraction methods +3. Update incremental update logic for Jellyfin API patterns + +### Phase 3: UI Integration +1. Update dashboard tools to detect active server +2. Make tool names dynamic ("Update Database" instead of "Update Plex Database") +3. Update progress messages and activity logs to show current server + +### Phase 4: Metadata Enhancement +1. Evaluate Jellyfin metadata update capabilities +2. Create server-agnostic metadata enhancement workflow +3. Update UI to reflect server-specific capabilities + +## Questions Requiring Decision + +1. **Database Strategy**: Shared tables with `server_source` column vs. separate tables? + +2. **ID Handling**: Store native server IDs vs. create universal mapping system? + +3. **Data Isolation**: Should switching servers clear existing data or maintain both? + +4. **Metadata Updates**: Extend metadata enhancement to Jellyfin or keep Plex-specific? + +5. **Migration Strategy**: How to handle existing Plex databases when introducing multi-server support? + +## Recommended Next Steps + +1. **Decide on database schema approach** (shared vs. separate tables) +2. **Create basic JellyfinClient class** with artist/album/track enumeration +3. **Test Jellyfin API** for incremental update patterns +4. **Update database schema** with chosen approach +5. **Modify DatabaseUpdateWorker** for server abstraction + +This plan prioritizes maintaining the existing user experience while adding Jellyfin support seamlessly. \ No newline at end of file diff --git a/server-source.md b/server-source.md new file mode 100644 index 00000000..2de02b81 --- /dev/null +++ b/server-source.md @@ -0,0 +1,370 @@ +# Multi-Server Support Feature Specification + +## Overview +Add Jellyfin support alongside existing Plex functionality to provide users with media server choice and flexibility. This feature will allow SoulSync to work with either Plex or Jellyfin as the source for music library data, with the same level of functionality for both platforms. + +## Goals +- **Server Choice**: Allow users to choose between Plex and Jellyfin as their media server +- **Feature Parity**: Maintain all existing functionality regardless of server choice +- **Future-Proof Architecture**: Design extensible system for additional servers (Emby, etc.) +- **Backward Compatibility**: Existing Plex users experience no disruption +- **Unified Experience**: Same SoulSync interface and features regardless of backend + +## User Experience + +### Settings Page UI Changes +#### Server Selection Interface +- **Toggle Buttons**: Two prominent buttons at top of API Configuration section + - `[🟦 Plex]` - Plex logo button (active state shown with filled background) + - `⬜ Jellyfin` - Jellyfin logo button (inactive state shown with outline) +- **Dynamic Settings Container**: Only show settings for selected server +- **Smooth Transitions**: Animated transitions when switching between servers +- **Clear Visual Feedback**: Active server button is highlighted, inactive is dimmed + +#### Plex Settings Container (Existing) +``` +Plex Configuration +β”œβ”€β”€ Server URL: [text input with auto-detect button] +β”œβ”€β”€ Token: [password input with help text] +└── Auto-detect: [checkbox] +``` + +#### Jellyfin Settings Container (New) +``` +Jellyfin Configuration +β”œβ”€β”€ Server URL: [text input with auto-detect button] +β”œβ”€β”€ API Key: [password input with help text] +└── Auto-detect: [checkbox] +``` + +### Default Behavior +- **First-time users**: Default to Plex selection (maintains current onboarding) +- **Existing users**: Migrate to new system with Plex pre-selected +- **Settings validation**: Real-time validation for active server only +- **Connection status**: Show connection status for selected server only + +## Configuration Change Behavior + +### Restart Required for Server Changes +**Design Decision**: Changing the active media server requires application restart to take effect. + +#### Implementation +- **Config Update**: Settings are saved to `config.json` immediately when changed +- **Runtime Behavior**: Application continues using current server until restart +- **User Feedback**: Clear messaging that restart is required for changes to take effect +- **Validation**: New server settings are validated before saving, but not activated + +#### UI Messaging +``` +Settings Page when server is changed: +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ ⚠️ Server change requires restart β”‚ +β”‚ Click "Save Settings" then restart β”‚ +β”‚ SoulSync to use Jellyfin β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +#### Benefits of Restart Requirement + +**Stability**: +- Avoids complex runtime server switching logic +- Prevents issues with active connections and workers +- Ensures clean initialization of new server client +- No risk of mixed server data or state conflicts + +**Data Integrity**: +- Clean separation between server data sources +- No risk of cross-contamination during switch +- Ensures database connections are properly established +- Prevents orphaned connections or incomplete switches + +**Development Simplicity**: +- Much simpler implementation without runtime switching +- Fewer edge cases and error conditions to handle +- Cleaner architecture without complex state management +- Easier testing and debugging + +**User Experience**: +- Clear expectations about when changes take effect +- Follows common application patterns for major config changes +- Prevents confusion about which server is currently active +- Allows users to review settings before committing to switch + +#### User Workflow +1. User selects different server (Plex β†’ Jellyfin) +2. User configures new server settings +3. User clicks "Save Settings" +4. Warning appears: "Restart required for server change" +5. User restarts SoulSync +6. Application loads with new server configuration + +## Technical Architecture + +### Database Design +#### Shared Database with Server-Specific Tables +**File**: `music_library.db` (single database file) + +**Table Structure**: +```sql +-- Server-specific music data +plex_artists, plex_albums, plex_tracks +jellyfin_artists, jellyfin_albums, jellyfin_tracks +[future: emby_artists, emby_albums, emby_tracks] + +-- Shared functionality tables (unchanged) +wishlist_tracks +watchlist_artists +sync_history +download_history +settings +``` + +**Benefits**: +- Clean separation per server type +- Easy to query specific server data +- Simple to add new servers +- Shared functionality works across servers +- Single database file for easy backup/migration + +#### Data Consistency Requirements +**All servers must provide same core metadata**: + +**Artist Data**: +- `id` (server-specific identifier) +- `name` (artist name) +- `genres` (array/comma-separated) +- `image_url` (artist photo) +- `server_path` (internal server path) + +**Album Data**: +- `id` (server-specific identifier) +- `title` (album title) +- `artist_id` (reference to artist) +- `release_year` (integer) +- `track_count` (integer) +- `image_url` (album artwork) +- `server_path` (internal server path) + +**Track Data**: +- `id` (server-specific identifier) +- `title` (track title) +- `artist_id` (reference to artist) +- `album_id` (reference to album) +- `track_number` (integer) +- `duration_ms` (integer) +- `file_path` (absolute file system path) +- `server_path` (internal server path) + +**Removed from Scope**: +- Artist biographies/summaries (unnecessary complexity) +- Extended metadata (focus on core music data) +- Social features (ratings, reviews) + +### Configuration System + +#### Config File Structure +```json +{ + "active_media_server": "plex", + "plex": { + "base_url": "http://localhost:32400", + "token": "xxx-plex-token-xxx", + "auto_detect": true + }, + "jellyfin": { + "base_url": "http://localhost:8096", + "api_key": "xxx-jellyfin-api-key-xxx", + "auto_detect": true + } +} +``` + +#### Configuration Management +- **Active Server Setting**: `active_media_server` determines which client to use +- **Server-Specific Configs**: Each server maintains separate configuration +- **Validation**: Only validate settings for currently active server +- **Migration**: Automatic migration of existing Plex configs to new structure +- **Restart Requirement**: Server changes only take effect after application restart + +### API Client Architecture + +#### Abstract Base Class +```python +class MediaServerClient(ABC): + @abstractmethod + def is_connected(self) -> bool + + @abstractmethod + def get_music_library(self) + + @abstractmethod + def get_all_artists(self) -> List[Artist] + + @abstractmethod + def get_artist_albums(self, artist_id: str) -> List[Album] + + @abstractmethod + def get_album_tracks(self, album_id: str) -> List[Track] + + @abstractmethod + def search_tracks(self, query: str) -> List[Track] +``` + +#### Implementation Classes +- **PlexClient**: Existing implementation adapted to new interface +- **JellyfinClient**: New implementation following same patterns +- **Future**: EmbyClient, KodiClient, etc. + +#### Client Factory Pattern +```python +def get_media_server_client() -> MediaServerClient: + active_server = config_manager.get('active_media_server', 'plex') + + if active_server == 'plex': + return PlexClient() + elif active_server == 'jellyfin': + return JellyfinClient() + else: + raise ValueError(f"Unsupported server: {active_server}") +``` + +## Implementation Strategy + +### Phase 1: Foundation (Database & Config) +1. **Database Schema Migration** + - Create Jellyfin tables mirroring Plex structure + - Migrate existing Plex data to new `plex_*` tables + - Update database access methods to be server-aware + - Test data migration with existing user databases + +2. **Configuration System Updates** + - Add `active_media_server` config option + - Create Jellyfin configuration section + - Update settings validation logic + - Implement configuration migration for existing users + - Add restart requirement logic and UI messaging + +3. **Settings UI Foundation** + - Create server toggle button components + - Implement dynamic settings container switching + - Add Jellyfin settings form (URL + API Key) + - Update settings page layout and styling + - Add restart warning system + +### Phase 2: Jellyfin Integration +1. **JellyfinClient Development** + - Research Jellyfin API endpoints and authentication + - Implement MediaServerClient interface + - Handle Jellyfin-specific data formats and responses + - Add comprehensive error handling and logging + +2. **Database Abstraction Layer** + - Create server-agnostic database access methods + - Update existing Plex code to use abstraction layer + - Implement Jellyfin data persistence + - Ensure cross-server functionality (wishlist/watchlist) + +3. **Core Service Updates** + - Update DatabaseUpdateWorker to support both servers + - Modify matching engine to handle server-specific data + - Update download/sync services for multi-server support + - Add server-aware logging and error messages + +### Phase 3: Integration & Polish +1. **Dashboard Integration** + - Update connection status indicators for active server + - Modify service health checks for selected server + - Update statistics and activity feeds + - Add server type indicators in UI + +2. **Feature Testing & Validation** + - Comprehensive testing with both server types + - Data consistency verification + - Performance testing and optimization + - User experience testing and refinement + +3. **Documentation & Migration** + - Update user documentation for multi-server setup + - Create migration guides for existing users + - Add troubleshooting guides for each server type + - Update installation instructions + +## Jellyfin Integration Requirements + +### API Research Needs +- **Authentication**: API key format and usage patterns +- **Library Structure**: How Jellyfin organizes music libraries +- **Endpoint Discovery**: Artist, album, track retrieval methods +- **Search Capabilities**: Track/artist search functionality +- **Error Handling**: Common error responses and status codes + +### Data Mapping +- **Field Mapping**: Jellyfin β†’ SoulSync data field mappings +- **ID Handling**: Jellyfin ID formats and uniqueness +- **Path Resolution**: File system path access from Jellyfin +- **Image URLs**: Album art and artist image retrieval + +### Connection Management +- **Auto-Detection**: Jellyfin server discovery on local network +- **Health Checks**: Connection validation and status monitoring +- **Rate Limiting**: Jellyfin API rate limits and best practices +- **Session Management**: API key validation and renewal + +## Migration Strategy + +### Existing User Impact +- **Zero Disruption**: Existing Plex users see no functional changes +- **Opt-in Jellyfin**: New server support is additive, not replacement +- **Data Preservation**: All existing data, settings, and functionality preserved +- **Seamless Upgrade**: Automatic config migration during app update +- **Clear Restart Process**: Users understand when changes take effect + +### New User Onboarding +- **Server Choice**: Present server options during initial setup +- **Guided Configuration**: Step-by-step setup for chosen server +- **Validation Feedback**: Clear error messages and connection testing +- **Fallback Options**: Graceful handling of connection failures + +## Future Extensibility + +### Additional Server Support +- **Emby**: Natural next addition with similar API patterns +- **Kodi**: Potential integration for advanced users +- **Subsonic**: API-compatible servers +- **Custom Servers**: Plugin architecture for community additions + +### Advanced Features +- **Multi-Server Mode**: Theoretical support for multiple active servers +- **Server Synchronization**: Cross-server library comparison +- **Server Migration**: Tools for moving between server types +- **Hybrid Workflows**: Different servers for different purposes + +## Success Criteria + +### Functional Requirements +- βœ… Users can switch between Plex and Jellyfin servers +- βœ… All existing features work with both server types +- βœ… Database maintains data for both servers simultaneously +- βœ… Settings UI clearly shows active server and appropriate options +- βœ… Performance is equivalent between server types +- βœ… Server changes require restart and users are clearly informed + +### User Experience Requirements +- βœ… Switching servers is intuitive with clear restart messaging +- βœ… Error messages are server-specific and helpful +- βœ… Connection status is always clear and accurate +- βœ… Existing Plex users experience no disruption +- βœ… New Jellyfin users have equivalent functionality +- βœ… Restart requirement is clearly communicated and expected + +### Technical Requirements +- βœ… Clean, extensible architecture for future servers +- βœ… Comprehensive error handling and logging +- βœ… Backward compatibility with existing configurations +- βœ… Efficient database design with clear separation +- βœ… Consistent API patterns across server implementations +- βœ… Stable configuration management with restart-based activation + +--- + +*This specification provides the foundation for implementing multi-server support in SoulSync, starting with Jellyfin integration while maintaining the high-quality user experience and robust functionality that users expect.* \ No newline at end of file diff --git a/ui/assets/jellyfin_icon.png b/ui/assets/jellyfin_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..71ee43a37fc99d4f4b42c411b9333906a69f892d GIT binary patch literal 235069 zcmeFZc~n!`_BBeCxAfXl6e=oBN~i*n&K3lOXbGYsL_k2KiGqss(o2_MSqg%H3WCxF z=^`K?(n=RQKtMp+&`0TeBoH7W$$9G>%6segz4wjr-oI~rRf7R4d!K#QUVE*%=9)YA z>uH-mq(ffPlc})2Fly1qA*LKmJ?b-)rI9D{AXL`1UW`<9f#h1o9#_axeb`fBx0x zl%bx0fUmTGK;T~j0v!0Oz%c;aYptuJC4iv+Csj}* z;cwP?oYvD`H@Gm6EO1)u`1zaNQ++-qS9Q$x%;YYr_KlzY_4a`#$sa@h z_;KgI&)g6YyHQdka?1PPMkjtbAahKB_3s0rJAReAb?n#H^?%xIHRwrIeSxcTc+loj7i ze_T$;)wXUfEqI|lnA=pZ$_v<~fbh7Dhsnqzxd@I*AsQ?^UtuQOdtKSe?GK@j2FslM(0j{@{^rL(zbU@bT6HNVQTx7Tar}IPLrlwT z$-+lJx4{vgm zmhD5zRV6LSpDj~}eK*>hi7ln*D2uSwV^c$exp;?n5G4ACAifXg3Ly z9A;gZWF_yk;3j#UQvQsmcL1|3G#m*rSqJa!d;uLTpkQu6JF?V%0>?ZdH2&AtxfCJS zkNnDH!Y&?TaR}Kuy6mRK^=%xtK^C6dXy(6s5FM}!eW=EEbnr3VoFjJgw{`X-kHp5? zh33XwX^Ey{JQ|IO{49j)el4Y_#?+e_E6E`b&!;Vi4#zXR>AQ)X&hc5~S($$bJn)hlw#YYIHA(M^R^+q0=30Umx`S_y z<&f3CU0J@b&!2T`^drtIsaE~&;N8!wM>hufYJ@H`%LesZffw)Eb2}H4#MQmy#U3^W z2fK97&qkg^2(cV8*Ig{h-=4j^qB^=^m=^D5u|I^{7(-qzAv0yyz^ZFkS1nvJkSdD9 z*QLx$r3p(~PgmC6<1>)7Q69nz|L9t^XTUOd`SU>}h9C})yU%+p3g3=Ah@e^bypM^A zCP^!e#%PDId5@jcIkf3o^a_f{Ow<<=>GK)w?a`-Aj483BRv)?q z551(Ukb`i$)wl2lcFGR0R0sHx@M@y%|Mpev2DGoz9D?Zilia8e^1MJZaMb}GSa#U%p;$V zjtzY3$*y;KjdUmI;zb_nhXud3r2QVscNyaqXt0sZ>e23{HxJQ9Y>A#-50UZK&FDZZ z+5|q$XLrSoB1=;A#6&}WS8&N}BIAKW1fSx;q*XYCH*Oc0GNdAp+{?eVu8BcTK8(|`V;je5-s~L> zm;jSL*@ijqKH=>uPPEws@4mT_T&znn@uji_3Qk#44s1C3P{SVIk#vyN)MrJi^^Lu2^!qI-j_%uH^5vioQh-0Cr z`tCngOA*dcd1I#MpTr25@XeM(wY&!Xv8|)zfm>@Kfgf( zPFUcxJak;(arQ@DXHxH;svybH*@PkUyfNf%KS3uFDXX~V8M;?f1D9f2&Sa(_$8%9f z+jBA#9ku)8!`2$BS65pthVYYQChY-pvmQUDtAB-7y+4QjTHS`Nq~u$r5Vs%!zkT-) z6i*6ddbigX9rg0@S@`;q?N<}qJF}04(1}tU^0pe6Lo9^9f$R0+o@t_gZ65Mm1s-

^mzgzIJ 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⪻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 z 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

&-uDgT| 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 Date: Mon, 18 Aug 2025 10:36:57 -0700 Subject: [PATCH 02/12] better --- core/database_update_worker.py | 620 +++++++++++++----- core/jellyfin_client.py | 1078 ++++++++++++++++++++++++++++++++ core/watchlist_scanner.py | 6 +- database/music_database.py | 532 +++++++++++++--- main.py | 32 +- services/sync_service.py | 73 ++- ui/pages/artists.py | 12 +- ui/pages/dashboard.py | 91 ++- ui/pages/sync.py | 18 +- 9 files changed, 2148 insertions(+), 314 deletions(-) create mode 100644 core/jellyfin_client.py diff --git a/core/database_update_worker.py b/core/database_update_worker.py index c86e1cc5..6471a2ab 100644 --- a/core/database_update_worker.py +++ b/core/database_update_worker.py @@ -14,7 +14,7 @@ from config.settings import config_manager logger = get_logger("database_update_worker") class DatabaseUpdateWorker(QThread): - """Worker thread for updating SoulSync database with Plex library data""" + """Worker thread for updating SoulSync database with media server library data (Plex or Jellyfin)""" # Signals for progress reporting progress_updated = pyqtSignal(str, int, int, float) # current_item, processed, total, percentage @@ -23,9 +23,20 @@ class DatabaseUpdateWorker(QThread): error = pyqtSignal(str) # error_message phase_changed = pyqtSignal(str) # current_phase (artists, albums, tracks) - def __init__(self, plex_client, database_path: str = "database/music_library.db", full_refresh: bool = False): + def __init__(self, media_client, database_path: str = "database/music_library.db", full_refresh: bool = False, server_type: str = "plex"): super().__init__() - self.plex_client = plex_client + # Support both old plex_client parameter and new media_client parameter for backward compatibility + if hasattr(media_client, '__class__') and 'plex' in media_client.__class__.__name__.lower(): + self.media_client = media_client + self.server_type = "plex" + # Keep old attribute for backward compatibility + self.plex_client = media_client + else: + self.media_client = media_client + self.server_type = server_type + # Keep old attribute for backward compatibility with existing code that expects it + self.plex_client = media_client if server_type == "plex" else None + self.database_path = database_path self.full_refresh = full_refresh self.should_stop = False @@ -39,8 +50,19 @@ class DatabaseUpdateWorker(QThread): # Threading control - get from config or default to 5 database_config = config_manager.get('database', {}) - self.max_workers = database_config.get('max_workers', 5) - logger.info(f"Using {self.max_workers} worker threads for database update") + base_max_workers = database_config.get('max_workers', 5) + + # Optimize worker count - reduce for database concurrency safety + if self.server_type == "jellyfin": + # Reduce workers to prevent database lock issues with bulk inserts + self.max_workers = min(base_max_workers, 3) # Max 3 workers for database safety + if base_max_workers > 3: + logger.info(f"Reducing worker count from {base_max_workers} to {self.max_workers} for Jellyfin database safety") + else: + # Plex uses standard worker count + self.max_workers = base_max_workers + + logger.info(f"Using {self.max_workers} worker threads for {self.server_type} database update") self.thread_lock = threading.Lock() # Database instance @@ -49,6 +71,15 @@ class DatabaseUpdateWorker(QThread): def stop(self): """Stop the database update process""" self.should_stop = True + + # Clear Jellyfin cache when user stops scan to free memory + if self.server_type == "jellyfin" and hasattr(self, 'media_client'): + try: + cache_stats = self.media_client.get_cache_stats() + self.media_client.clear_cache() + logger.info(f"🧹 Cleared Jellyfin cache after user stop - freed ~{cache_stats.get('bulk_albums_cached', 0) + cache_stats.get('bulk_tracks_cached', 0)} items from memory") + except Exception as e: + logger.warning(f"Could not clear Jellyfin cache on stop: {e}") def run(self): """Main worker thread execution""" @@ -57,14 +88,22 @@ class DatabaseUpdateWorker(QThread): self.database = get_database(self.database_path) if self.full_refresh: - logger.info("Performing full database refresh - clearing existing data") - self.database.clear_all_data() - # For full refresh, use the old method (all artists) + logger.info(f"Performing full database refresh for {self.server_type} - clearing existing {self.server_type} data") + self.database.clear_server_data(self.server_type) + + # Show cache preparation phase for Jellyfin and set up progress callback + if self.server_type == "jellyfin": + self.phase_changed.emit("Preparing Jellyfin cache for fast processing...") + # Connect Jellyfin client progress to UI + if hasattr(self.media_client, 'set_progress_callback'): + self.media_client.set_progress_callback(lambda msg: self.phase_changed.emit(msg)) + + # For full refresh, get all artists artists_to_process = self._get_all_artists() if not artists_to_process: - self.error.emit("No artists found in Plex library or connection failed") + self.error.emit(f"No artists found in {self.server_type} library or connection failed") return - logger.info(f"Full refresh: Found {len(artists_to_process)} artists in Plex library") + logger.info(f"Full refresh: Found {len(artists_to_process)} artists in {self.server_type} library") else: logger.info("Performing smart incremental update - checking recently added content") # For incremental, use smart recent-first approach @@ -78,7 +117,13 @@ class DatabaseUpdateWorker(QThread): # Phase 2: Process artists and their albums/tracks self.phase_changed.emit("Processing artists, albums, and tracks...") - self._process_all_artists(artists_to_process) + + # FAST PATH: For Jellyfin track-based incremental, process new tracks directly + if self.server_type == "jellyfin" and hasattr(self, '_jellyfin_new_tracks'): + self._process_jellyfin_new_tracks_directly(artists_to_process) + else: + # Standard artist processing for Plex or full refresh + self._process_all_artists(artists_to_process) # Record full refresh completion for tracking purposes if self.full_refresh and self.database: @@ -88,6 +133,15 @@ class DatabaseUpdateWorker(QThread): except Exception as e: logger.warning(f"Could not record full refresh completion: {e}") + # Clear Jellyfin cache after full refresh to free memory + if self.full_refresh and self.server_type == "jellyfin": + try: + cache_stats = self.media_client.get_cache_stats() + self.media_client.clear_cache() + logger.info(f"🧹 Cleared Jellyfin cache after full refresh - freed ~{cache_stats.get('bulk_albums_cached', 0) + cache_stats.get('bulk_tracks_cached', 0)} items from memory") + except Exception as e: + logger.warning(f"Could not clear Jellyfin cache: {e}") + # Cleanup orphaned records after incremental updates (catches fixed matches) if not self.full_refresh and self.database: try: @@ -121,33 +175,38 @@ class DatabaseUpdateWorker(QThread): self.error.emit(f"Database update failed: {str(e)}") def _get_all_artists(self) -> List: - """Get all artists from Plex library""" + """Get all artists from media server library""" try: - if not self.plex_client.ensure_connection(): - logger.error("Could not connect to Plex server") + if not self.media_client.ensure_connection(): + logger.error(f"Could not connect to {self.server_type} server") return [] - artists = self.plex_client.get_all_artists() + artists = self.media_client.get_all_artists() return artists except Exception as e: - logger.error(f"Error getting artists from Plex: {e}") + logger.error(f"Error getting artists from {self.server_type}: {e}") return [] def _get_artists_for_incremental_update(self) -> List: """Get artists that need processing for incremental update using smart early-stopping logic""" try: - if not self.plex_client.ensure_connection(): - logger.error("Could not connect to Plex server") + if not self.media_client.ensure_connection(): + logger.error(f"Could not connect to {self.server_type} server") return [] - if not self.plex_client.music_library: + # Check for music library (Plex-specific check) + if self.server_type == "plex" and not self.media_client.music_library: logger.error("No music library found in Plex") return [] - # Check if database has enough content for incremental updates + # Check if database has enough content for incremental updates (server-specific) try: - stats = self.database.get_database_info() + # Get stats for the specific server we're updating + if hasattr(self.database, 'get_database_info_for_server'): + stats = self.database.get_database_info_for_server(self.server_type) + else: + stats = self.database.get_database_info() track_count = stats.get('tracks', 0) if track_count < 100: # Minimum threshold for meaningful incremental updates @@ -165,105 +224,34 @@ class DatabaseUpdateWorker(QThread): return self._get_all_artists() # Enhanced Strategy: Get both recently added AND recently updated content - # This catches both new content and metadata corrections done in Plex + # This catches both new content and metadata corrections done on the server - logger.info("Getting recently added and recently updated content...") + logger.info(f"Getting recently added and recently updated content from {self.server_type}...") - # Get both recently added and recently updated albums - all_recent_content = [] + # For Jellyfin, we need to set up progress callback for potential cache population during incremental + if self.server_type == "jellyfin": + if hasattr(self.media_client, 'set_progress_callback'): + self.media_client.set_progress_callback(lambda msg: self.phase_changed.emit(f"Incremental: {msg}")) - try: - # Get recently added albums (up to 400 to catch more recent content) - try: - recently_added = self.plex_client.music_library.recentlyAdded(libtype='album', maxresults=400) - all_recent_content.extend(recently_added) - logger.info(f"Found {len(recently_added)} recently added albums") - except: - # Fallback to general recently added - recently_added = self.plex_client.music_library.recentlyAdded(maxresults=400) - all_recent_content.extend(recently_added) - logger.info(f"Found {len(recently_added)} recently added items (mixed types)") - - # Get recently updated albums (catches metadata corrections) - increased limit - try: - recently_updated = self.plex_client.music_library.search(sort='updatedAt:desc', libtype='album', limit=400) - # Remove duplicates (items that are both recently added and updated) - added_keys = {getattr(item, 'ratingKey', None) for item in all_recent_content} - unique_updated = [item for item in recently_updated if getattr(item, 'ratingKey', None) not in added_keys] - all_recent_content.extend(unique_updated) - logger.info(f"Found {len(unique_updated)} additional recently updated albums (after deduplication)") - except Exception as e: - logger.warning(f"Could not get recently updated content: {e}") - - recent_content = all_recent_content - logger.info(f"Combined total: {len(recent_content)} recent albums (added + updated)") - - # Filter to only get Album objects and convert Artist objects to their albums - recent_albums = [] - artist_count = 0 - album_count = 0 - - for item in recent_content: - try: - item_type = type(item).__name__ - logger.info(f"Processing recently added item: {item_type} - '{getattr(item, 'title', 'Unknown')}'") - - if hasattr(item, 'tracks') and hasattr(item, 'artist'): - # This is an Album - add directly - recent_albums.append(item) - album_count += 1 - logger.info(f"βœ… Added album directly: '{item.title}'") - elif hasattr(item, 'albums'): - # This is an Artist - get their albums - try: - artist_albums = list(item.albums()) - if artist_albums: - recent_albums.extend(artist_albums) - artist_count += 1 - logger.info(f"βœ… Added {len(artist_albums)} albums from artist '{item.title}'") - else: - logger.info(f"⚠️ Artist '{item.title}' has no albums") - except Exception as albums_error: - logger.warning(f"Error getting albums from artist '{getattr(item, 'title', 'Unknown')}': {albums_error}") - else: - # Unknown type - skip - logger.info(f"❌ Skipping unsupported type: {item_type} (has tracks: {hasattr(item, 'tracks')}, has albums: {hasattr(item, 'albums')}, has artist: {hasattr(item, 'artist')})") - except Exception as e: - logger.warning(f"Error processing recently added item: {e}") - continue - - logger.info(f"Processed recently added content: {artist_count} artists β†’ albums, {album_count} direct albums") - - logger.info(f"Extracted {len(recent_albums)} albums from recently added content") - except Exception as e: - logger.warning(f"Could not get recently added albums: {e}") - # Fallback: get recently added tracks instead - try: - recent_tracks = self.plex_client.music_library.recentlyAdded(libtype='track', maxresults=1000) - logger.info(f"Fallback: Found {len(recent_tracks)} recently added tracks") - # Extract albums from tracks - recent_albums = [] - seen_albums = set() - for track in recent_tracks: - try: - album = track.album() - if album and album.ratingKey not in seen_albums: - recent_albums.append(album) - seen_albums.add(album.ratingKey) - except: - continue - logger.info(f"Extracted {len(recent_albums)} unique albums from tracks") - except Exception as e2: - logger.error(f"Could not get recently added content: {e2}") - return [] + # PERFORMANCE BREAKTHROUGH: For Jellyfin, use track-based incremental (much faster) + if self.server_type == "jellyfin": + return self._get_artists_for_jellyfin_track_incremental_update() + # Plex uses album-based approach (established and working) + recent_albums = self._get_recent_albums_for_server() if not recent_albums: logger.info("No recently added albums found") return [] - # Sort albums by added date (newest first) + # Sort albums by added date (newest first) - handle None dates properly try: - recent_albums.sort(key=lambda x: getattr(x, 'addedAt', 0), reverse=True) + def get_sort_date(album): + date_val = getattr(album, 'addedAt', None) + if date_val is None: + return 0 # Fallback for albums with no date + return date_val + + recent_albums.sort(key=get_sort_date, reverse=True) logger.info("Sorted albums by recently added date (newest first)") except Exception as e: logger.warning(f"Could not sort albums by date: {e}") @@ -315,10 +303,18 @@ class DatabaseUpdateWorker(QThread): for track in tracks: total_tracks_checked += 1 try: - track_id = int(track.ratingKey) + # Handle both Plex (integer) and Jellyfin (string GUID) IDs + track_id = str(track.ratingKey) track_title = getattr(track, 'title', 'Unknown Track') - if not self.database.track_exists(track_id): + # Use server-aware track existence check + if hasattr(self.database, 'track_exists_by_server'): + track_exists = self.database.track_exists_by_server(track_id, self.server_type) + else: + # Fallback to generic check (works for string IDs) + track_exists = self.database.track_exists(track_id) + + if not track_exists: missing_tracks_count += 1 album_has_new_tracks = True logger.debug(f"πŸ“€ Track '{track_title}' is new - album needs processing") @@ -366,7 +362,8 @@ class DatabaseUpdateWorker(QThread): try: album_artist = album.artist() if album_artist: - artist_id = int(album_artist.ratingKey) + # Handle both Plex (integer) and Jellyfin (string GUID) artist IDs + artist_id = str(album_artist.ratingKey) # Skip if we've already queued this artist if artist_id not in processed_artist_ids: @@ -398,16 +395,208 @@ class DatabaseUpdateWorker(QThread): # Fallback to empty list - user can try full refresh return [] - def _check_for_metadata_changes(self, plex_tracks) -> bool: + def _get_artists_for_jellyfin_track_incremental_update(self) -> List: + """FAST Jellyfin incremental update using recent tracks directly (no caching needed)""" + try: + logger.info("πŸš€ FAST Jellyfin incremental: getting recent tracks directly...") + + # Get recent tracks directly from Jellyfin (FAST - 2 API calls) + recent_added_tracks = self.media_client.get_recently_added_tracks(5000) + recent_updated_tracks = self.media_client.get_recently_updated_tracks(5000) + + # Combine and deduplicate + all_recent_tracks = recent_added_tracks[:] + added_ids = {track.ratingKey for track in recent_added_tracks} + unique_updated = [track for track in recent_updated_tracks if track.ratingKey not in added_ids] + all_recent_tracks.extend(unique_updated) + + logger.info(f"Found {len(recent_added_tracks)} recent + {len(unique_updated)} updated = {len(all_recent_tracks)} tracks to check") + + if not all_recent_tracks: + logger.info("No recent tracks found") + return [] + + # Check which tracks are actually new (FAST - database lookups only) + new_tracks = [] + consecutive_existing_tracks = 0 + processed_artists = set() + + for i, track in enumerate(all_recent_tracks): + try: + track_id = str(track.ratingKey) + + # Check if track exists in database + if hasattr(self.database, 'track_exists_by_server'): + track_exists = self.database.track_exists_by_server(track_id, self.server_type) + else: + track_exists = self.database.track_exists(track_id) + + if not track_exists: + new_tracks.append(track) + consecutive_existing_tracks = 0 # Reset counter + logger.debug(f"🎡 New track: {track.title}") + else: + consecutive_existing_tracks += 1 + logger.debug(f"βœ… Track exists: {track.title}") + + # Early stopping: if we find 100 consecutive existing tracks, we're done + if consecutive_existing_tracks >= 100: + logger.info(f"πŸ›‘ Found 100 consecutive existing tracks - stopping after checking {i+1} tracks") + break + + except Exception as e: + logger.debug(f"Error checking track {getattr(track, 'title', 'Unknown')}: {e}") + continue + + logger.info(f"Found {len(new_tracks)} genuinely new tracks (early stopped after {consecutive_existing_tracks} consecutive existing)") + + if not new_tracks: + logger.info("All recent tracks already exist - database is up to date") + return [] + + # Store new tracks for direct processing (avoid slow artist->album->track lookups) + self._jellyfin_new_tracks = new_tracks + + # Extract unique artists from new tracks (FAST - no additional API calls needed) + artists_to_process = [] + for track in new_tracks: + try: + # Track already has artist info from the API call + track_artist = track.artist() # This will make an API call, but only for new tracks + if track_artist: + artist_id = str(track_artist.ratingKey) + if artist_id not in processed_artists: + processed_artists.add(artist_id) + artists_to_process.append(track_artist) + logger.info(f"βœ… Added artist '{track_artist.title}' (from new track '{track.title}')") + except Exception as e: + logger.debug(f"Error getting artist for track {getattr(track, 'title', 'Unknown')}: {e}") + continue + + logger.info(f"πŸš€ FAST incremental complete: {len(artists_to_process)} artists need processing (from {len(new_tracks)} new tracks)") + return artists_to_process + + except Exception as e: + logger.error(f"Error in fast Jellyfin incremental update: {e}") + return [] + + def _process_jellyfin_new_tracks_directly(self, artists_to_process): + """Process new Jellyfin tracks directly without slow artist->album->track lookups""" + try: + new_tracks = getattr(self, '_jellyfin_new_tracks', []) + if not new_tracks: + logger.warning("No new tracks to process directly") + return + + logger.info(f"πŸš€ FAST PROCESSING: Directly processing {len(new_tracks)} new tracks...") + + # Group tracks by album and artist for efficient processing + tracks_by_album = {} + albums_by_artist = {} + + for track in new_tracks: + try: + # Track already has album and artist IDs from API response + album_id = str(track._album_id) if track._album_id else "unknown" + artist_id = str(track._artist_ids[0]) if track._artist_ids else "unknown" + + if album_id not in tracks_by_album: + tracks_by_album[album_id] = [] + tracks_by_album[album_id].append(track) + + if artist_id not in albums_by_artist: + albums_by_artist[artist_id] = set() + albums_by_artist[artist_id].add(album_id) + + except Exception as e: + logger.debug(f"Error grouping track {getattr(track, 'title', 'Unknown')}: {e}") + continue + + total_processed_tracks = 0 + total_processed_albums = 0 + total_processed_artists = 0 + + # Process each artist + for artist in artists_to_process: + if self.should_stop: + break + + try: + artist_id = str(artist.ratingKey) + artist_name = getattr(artist, 'title', 'Unknown Artist') + + # Insert/update the artist + artist_success = self.database.insert_or_update_media_artist(artist, server_source=self.server_type) + if artist_success: + total_processed_artists += 1 + + # Process albums for this artist + artist_album_ids = albums_by_artist.get(artist_id, set()) + for album_id in artist_album_ids: + if self.should_stop: + break + + try: + # Get album from the first track (they all have the same album) + album_tracks = tracks_by_album[album_id] + if album_tracks: + album = album_tracks[0].album() # Get album object + if album: + # Insert/update album + album_success = self.database.insert_or_update_media_album(album, artist_id, server_source=self.server_type) + if album_success: + total_processed_albums += 1 + + # Process all tracks in this album + for track in album_tracks: + if self.should_stop: + break + + try: + track_success = self.database.insert_or_update_media_track(track, album_id, artist_id, server_source=self.server_type) + if track_success: + total_processed_tracks += 1 + logger.debug(f"βœ… Processed new track: {track.title}") + except Exception as e: + logger.warning(f"Failed to process track '{getattr(track, 'title', 'Unknown')}': {e}") + except Exception as e: + logger.warning(f"Failed to process album {album_id}: {e}") + + # Emit progress for this artist + artist_albums = len(artist_album_ids) + artist_tracks = sum(len(tracks_by_album[aid]) for aid in artist_album_ids if aid in tracks_by_album) + self.artist_processed.emit(artist_name, True, f"Processed {artist_albums} albums, {artist_tracks} tracks", artist_albums, artist_tracks) + + except Exception as e: + logger.error(f"Error processing artist '{getattr(artist, 'title', 'Unknown')}': {e}") + self.artist_processed.emit(getattr(artist, 'title', 'Unknown'), False, f"Error: {str(e)}", 0, 0) + + # Update totals + with self.thread_lock: + self.processed_artists += total_processed_artists + self.processed_albums += total_processed_albums + self.processed_tracks += total_processed_tracks + self.successful_operations += total_processed_artists # Count successful artists + + logger.info(f"πŸš€ FAST PROCESSING COMPLETE: {total_processed_artists} artists, {total_processed_albums} albums, {total_processed_tracks} tracks") + + # Clean up + delattr(self, '_jellyfin_new_tracks') + + except Exception as e: + logger.error(f"Error in fast Jellyfin track processing: {e}") + + def _check_for_metadata_changes(self, media_tracks) -> bool: """Check if any tracks in the list have metadata changes compared to database""" try: - if not self.database or not plex_tracks: + if not self.database or not media_tracks: return False changes_detected = 0 - for track in plex_tracks: + for track in media_tracks: try: - track_id = int(track.ratingKey) + # Handle both Plex (integer) and Jellyfin (string GUID) IDs + track_id = str(track.ratingKey) # Get current data from database db_track = self.database.get_track_by_id(track_id) @@ -442,6 +631,102 @@ class DatabaseUpdateWorker(QThread): logger.debug(f"Error checking for metadata changes: {e}") return False # Assume no changes if we can't check + def _get_recent_albums_for_server(self) -> List: + """Get recently added albums using server-specific methods""" + try: + if self.server_type == "plex": + return self._get_recent_albums_plex() + elif self.server_type == "jellyfin": + return self._get_recent_albums_jellyfin() + else: + logger.error(f"Unknown server type: {self.server_type}") + return [] + except Exception as e: + logger.error(f"Error getting recent albums for {self.server_type}: {e}") + return [] + + def _get_recent_albums_plex(self) -> List: + """Get recently added and updated albums from Plex""" + all_recent_content = [] + + try: + # Get recently added albums (up to 400 to catch more recent content) + try: + recently_added = self.media_client.music_library.recentlyAdded(libtype='album', maxresults=400) + all_recent_content.extend(recently_added) + logger.info(f"Found {len(recently_added)} recently added albums") + except: + # Fallback to general recently added + recently_added = self.media_client.music_library.recentlyAdded(maxresults=400) + all_recent_content.extend(recently_added) + logger.info(f"Found {len(recently_added)} recently added items (mixed types)") + + # Get recently updated albums (catches metadata corrections) + try: + recently_updated = self.media_client.music_library.search(sort='updatedAt:desc', libtype='album', limit=400) + # Remove duplicates (items that are both recently added and updated) + added_keys = {getattr(item, 'ratingKey', None) for item in all_recent_content} + unique_updated = [item for item in recently_updated if getattr(item, 'ratingKey', None) not in added_keys] + all_recent_content.extend(unique_updated) + logger.info(f"Found {len(unique_updated)} additional recently updated albums (after deduplication)") + except Exception as e: + logger.warning(f"Could not get recently updated content: {e}") + + # Filter to only get Album objects and convert Artist objects to their albums + recent_albums = [] + artist_count = 0 + album_count = 0 + + for item in all_recent_content: + try: + if hasattr(item, 'tracks') and hasattr(item, 'artist'): + # This is an Album - add directly + recent_albums.append(item) + album_count += 1 + elif hasattr(item, 'albums'): + # This is an Artist - get their albums + try: + artist_albums = list(item.albums()) + if artist_albums: + recent_albums.extend(artist_albums) + artist_count += 1 + except Exception as albums_error: + logger.warning(f"Error getting albums from artist '{getattr(item, 'title', 'Unknown')}': {albums_error}") + except Exception as e: + logger.warning(f"Error processing recently added item: {e}") + continue + + logger.info(f"Processed {artist_count} artists β†’ albums, {album_count} direct albums") + return recent_albums + + except Exception as e: + logger.error(f"Error getting recent Plex albums: {e}") + return [] + + def _get_recent_albums_jellyfin(self) -> List: + """Get recently added and updated albums from Jellyfin""" + try: + all_recent_albums = [] + + # Get recently added albums + recently_added = self.media_client.get_recently_added_albums(400) + all_recent_albums.extend(recently_added) + logger.info(f"Found {len(recently_added)} recently added albums") + + # Get recently updated albums + recently_updated = self.media_client.get_recently_updated_albums(400) + # Remove duplicates + added_ids = {album.ratingKey for album in all_recent_albums} + unique_updated = [album for album in recently_updated if album.ratingKey not in added_ids] + all_recent_albums.extend(unique_updated) + logger.info(f"Found {len(unique_updated)} additional recently updated albums (after deduplication)") + + return all_recent_albums + + except Exception as e: + logger.error(f"Error getting recent Jellyfin albums: {e}") + return [] + def _process_all_artists(self, artists: List): """Process all artists and their albums/tracks using thread pool""" total_artists = len(artists) @@ -505,21 +790,21 @@ class DatabaseUpdateWorker(QThread): # Emit progress signal self.artist_processed.emit(artist_name, success, details, album_count, track_count) - def _process_artist_with_content(self, plex_artist) -> tuple[bool, str, int, int]: - """Process an artist and all their albums and tracks""" + def _process_artist_with_content(self, media_artist) -> tuple[bool, str, int, int]: + """Process an artist and all their albums and tracks with optimized API usage""" try: - artist_name = getattr(plex_artist, 'title', 'Unknown Artist') + artist_name = getattr(media_artist, 'title', 'Unknown Artist') - # 1. Insert/update the artist - artist_success = self.database.insert_or_update_artist(plex_artist) + # 1. Insert/update the artist using server-agnostic method + artist_success = self.database.insert_or_update_media_artist(media_artist, server_source=self.server_type) if not artist_success: return False, "Failed to update artist data", 0, 0 - artist_id = int(plex_artist.ratingKey) + artist_id = str(media_artist.ratingKey) - # 2. Get all albums for this artist + # 2. Get all albums for this artist (cached from aggressive pre-population) try: - albums = list(plex_artist.albums()) + albums = list(media_artist.albums()) except Exception as e: logger.warning(f"Could not get albums for artist '{artist_name}': {e}") return True, "Artist updated (no albums accessible)", 0, 0 @@ -527,44 +812,56 @@ class DatabaseUpdateWorker(QThread): album_count = 0 track_count = 0 - # 3. Process each album - for album in albums: + # 3. Process albums in smaller batches to reduce memory usage + batch_size = 10 # Process 10 albums at a time + for i in range(0, len(albums), batch_size): if self.should_stop: break - - try: - # Insert/update album - album_success = self.database.insert_or_update_album(album, artist_id) - if album_success: - album_count += 1 - album_id = int(album.ratingKey) - - # 4. Process tracks in this album - try: - tracks = list(album.tracks()) - - for track in tracks: - if self.should_stop: - break - - try: - track_success = self.database.insert_or_update_track(track, album_id, artist_id) - if track_success: - track_count += 1 - except Exception as e: - logger.warning(f"Failed to process track '{getattr(track, 'title', 'Unknown')}': {e}") - - except Exception as e: - logger.warning(f"Could not get tracks for album '{getattr(album, 'title', 'Unknown')}': {e}") - except Exception as e: - logger.warning(f"Failed to process album '{getattr(album, 'title', 'Unknown')}': {e}") + album_batch = albums[i:i + batch_size] + + for album in album_batch: + if self.should_stop: + break + + try: + # Insert/update album using server-agnostic method + album_success = self.database.insert_or_update_media_album(album, artist_id, server_source=self.server_type) + if album_success: + album_count += 1 + album_id = str(album.ratingKey) + + # 4. Process tracks in this album (cached from aggressive pre-population) + try: + tracks = list(album.tracks()) + + # Batch insert tracks for better database performance + track_batch = [] + for track in tracks: + if self.should_stop: + break + track_batch.append((track, album_id, artist_id)) + + # Process track batch + for track, alb_id, art_id in track_batch: + try: + track_success = self.database.insert_or_update_media_track(track, alb_id, art_id, server_source=self.server_type) + if track_success: + track_count += 1 + except Exception as e: + logger.warning(f"Failed to process track '{getattr(track, 'title', 'Unknown')}': {e}") + + except Exception as e: + logger.warning(f"Could not get tracks for album '{getattr(album, 'title', 'Unknown')}': {e}") + + except Exception as e: + logger.warning(f"Failed to process album '{getattr(album, 'title', 'Unknown')}': {e}") details = f"Updated with {album_count} albums, {track_count} tracks" return True, details, album_count, track_count except Exception as e: - logger.error(f"Error processing artist '{getattr(plex_artist, 'title', 'Unknown')}': {e}") + logger.error(f"Error processing artist '{getattr(media_artist, 'title', 'Unknown')}': {e}") return False, f"Processing error: {str(e)}", 0, 0 class DatabaseStatsWorker(QThread): @@ -591,18 +888,23 @@ class DatabaseStatsWorker(QThread): if self.should_stop: return - # Get full database info (includes last_full_refresh) - info = database.get_database_info() + # Get database info for active server (server-aware statistics) + info = database.get_database_info_for_server() if not self.should_stop: self.stats_updated.emit(info) except Exception as e: logger.error(f"Error getting database stats: {e}") if not self.should_stop: + # Import here to avoid circular imports + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + self.stats_updated.emit({ 'artists': 0, 'albums': 0, 'tracks': 0, 'database_size_mb': 0.0, 'last_update': None, - 'last_full_refresh': None + 'last_full_refresh': None, + 'server_source': active_server }) \ No newline at end of file diff --git a/core/jellyfin_client.py b/core/jellyfin_client.py new file mode 100644 index 00000000..e6f1a887 --- /dev/null +++ b/core/jellyfin_client.py @@ -0,0 +1,1078 @@ +import requests +from typing import List, Optional, Dict, Any +from dataclasses import dataclass +from datetime import datetime +import json +from utils.logging_config import get_logger +from config.settings import config_manager + +logger = get_logger("jellyfin_client") + +@dataclass +class JellyfinTrackInfo: + id: str + title: str + artist: str + album: str + duration: int + track_number: Optional[int] = None + year: Optional[int] = None + rating: Optional[float] = None + +@dataclass +class JellyfinPlaylistInfo: + id: str + title: str + description: Optional[str] + duration: int + leaf_count: int + tracks: List[JellyfinTrackInfo] + +class JellyfinArtist: + """Wrapper class to mimic Plex artist object interface""" + def __init__(self, jellyfin_data: Dict[str, Any], client: 'JellyfinClient'): + self._data = jellyfin_data + self._client = client + self.ratingKey = jellyfin_data.get('Id', '') + self.title = jellyfin_data.get('Name', 'Unknown Artist') + self.addedAt = self._parse_date(jellyfin_data.get('DateCreated')) + + def _parse_date(self, date_str: Optional[str]) -> Optional[datetime]: + """Parse Jellyfin date string to datetime""" + if not date_str: + return None + try: + # Jellyfin uses ISO format: 2023-12-01T10:30:00.000Z + return datetime.fromisoformat(date_str.replace('Z', '+00:00')) + except: + return None + + def albums(self) -> List['JellyfinAlbum']: + """Get all albums for this artist""" + return self._client.get_albums_for_artist(self.ratingKey) + +class JellyfinAlbum: + """Wrapper class to mimic Plex album object interface""" + def __init__(self, jellyfin_data: Dict[str, Any], client: 'JellyfinClient'): + self._data = jellyfin_data + self._client = client + self.ratingKey = jellyfin_data.get('Id', '') + self.title = jellyfin_data.get('Name', 'Unknown Album') + self.addedAt = self._parse_date(jellyfin_data.get('DateCreated')) + self._artist_id = jellyfin_data.get('AlbumArtists', [{}])[0].get('Id', '') if jellyfin_data.get('AlbumArtists') else '' + + def _parse_date(self, date_str: Optional[str]) -> Optional[datetime]: + if not date_str: + return None + try: + return datetime.fromisoformat(date_str.replace('Z', '+00:00')) + except: + return None + + def artist(self) -> Optional[JellyfinArtist]: + """Get the album artist""" + if self._artist_id: + return self._client.get_artist_by_id(self._artist_id) + return None + + def tracks(self) -> List['JellyfinTrack']: + """Get all tracks for this album""" + return self._client.get_tracks_for_album(self.ratingKey) + +class JellyfinTrack: + """Wrapper class to mimic Plex track object interface""" + def __init__(self, jellyfin_data: Dict[str, Any], client: 'JellyfinClient'): + self._data = jellyfin_data + self._client = client + self.ratingKey = jellyfin_data.get('Id', '') + self.title = jellyfin_data.get('Name', 'Unknown Track') + self.duration = jellyfin_data.get('RunTimeTicks', 0) // 10000 # Convert from ticks to milliseconds + self.trackNumber = jellyfin_data.get('IndexNumber') + self.year = jellyfin_data.get('ProductionYear') + self.userRating = jellyfin_data.get('UserData', {}).get('Rating') + self.addedAt = self._parse_date(jellyfin_data.get('DateCreated')) + + self._album_id = jellyfin_data.get('AlbumId', '') + self._artist_ids = [artist.get('Id', '') for artist in jellyfin_data.get('ArtistItems', [])] + + def _parse_date(self, date_str: Optional[str]) -> Optional[datetime]: + if not date_str: + return None + try: + return datetime.fromisoformat(date_str.replace('Z', '+00:00')) + except: + return None + + def artist(self) -> Optional[JellyfinArtist]: + """Get the primary track artist""" + if self._artist_ids: + return self._client.get_artist_by_id(self._artist_ids[0]) + return None + + def album(self) -> Optional[JellyfinAlbum]: + """Get the track's album""" + if self._album_id: + return self._client.get_album_by_id(self._album_id) + return None + +class JellyfinClient: + def __init__(self): + self.base_url: Optional[str] = None + self.api_key: Optional[str] = None + self.user_id: Optional[str] = None + self.music_library_id: Optional[str] = None + self._connection_attempted = False + self._is_connecting = False + + # Performance optimization: comprehensive caches + self._album_cache = {} + self._track_cache = {} + self._artist_cache = {} + self._all_albums_cache = None + self._all_tracks_cache = None + self._cache_populated = False + + # Progress callback for UI updates during caching + self._progress_callback = None + + def set_progress_callback(self, callback): + """Set callback function for cache progress updates: callback(message)""" + self._progress_callback = callback + + def ensure_connection(self) -> bool: + """Ensure connection to Jellyfin server with lazy initialization.""" + if self._connection_attempted: + return self.base_url is not None and self.api_key is not None + + if self._is_connecting: + return False + + self._is_connecting = True + try: + self._setup_client() + return self.base_url is not None and self.api_key is not None + finally: + self._is_connecting = False + self._connection_attempted = True + + def _setup_client(self): + """Setup Jellyfin client configuration""" + config = config_manager.get_jellyfin_config() + + if not config.get('base_url'): + logger.warning("Jellyfin server URL not configured") + return + + if not config.get('api_key'): + logger.warning("Jellyfin API key not configured") + return + + self.base_url = config['base_url'].rstrip('/') + self.api_key = config['api_key'] + + try: + # Test connection and get system info + response = self._make_request('/System/Info') + if response: + server_name = response.get('ServerName', 'Unknown') + logger.info(f"Successfully connected to Jellyfin server: {server_name}") + + # Get the first user (admin user typically) + users_response = self._make_request('/Users') + if users_response and len(users_response) > 0: + self.user_id = users_response[0]['Id'] + logger.info(f"Using user: {users_response[0].get('Name', 'Unknown')}") + + # Find music library + self._find_music_library() + else: + logger.error("No users found on Jellyfin server") + + except Exception as e: + logger.error(f"Failed to connect to Jellyfin server: {e}") + self.base_url = None + self.api_key = None + + def _find_music_library(self): + """Find the music library in Jellyfin""" + if not self.user_id: + return + + try: + views_response = self._make_request(f'/Users/{self.user_id}/Views') + if not views_response: + return + + for view in views_response.get('Items', []): + if view.get('CollectionType') == 'music': + self.music_library_id = view['Id'] + logger.info(f"Found music library: {view.get('Name', 'Music')}") + break + + if not self.music_library_id: + logger.warning("No music library found on Jellyfin server") + + except Exception as e: + logger.error(f"Error finding music library: {e}") + + def _make_request(self, endpoint: str, params: Optional[Dict[str, Any]] = None) -> Optional[Dict[str, Any]]: + """Make authenticated request to Jellyfin API""" + if not self.base_url or not self.api_key: + return None + + url = f"{self.base_url}{endpoint}" + headers = { + 'X-Emby-Token': self.api_key, + 'Content-Type': 'application/json' + } + + # Use longer timeout for bulk operations (lots of data) + is_bulk_operation = params and params.get('Limit', 0) > 1000 + timeout = 30 if is_bulk_operation else 5 + + try: + response = requests.get(url, headers=headers, params=params, timeout=timeout) + response.raise_for_status() + return response.json() + except requests.exceptions.RequestException as e: + logger.error(f"Jellyfin API request failed: {e}") + return None + except json.JSONDecodeError as e: + logger.error(f"Failed to parse Jellyfin response: {e}") + return None + + def _populate_aggressive_cache(self): + """Aggressively pre-populate ALL caches to eliminate individual API calls""" + if self._cache_populated: + return + + logger.info("πŸš€ Starting aggressive Jellyfin cache population to eliminate slow individual API calls...") + if self._progress_callback: + self._progress_callback("Fetching all tracks in bulk...") + + try: + # SIMPLIFIED APPROACH: Fetch all tracks, then all albums separately (robust and fast) + logger.info("🎡 Fetching all tracks in bulk...") + all_tracks = [] + start_index = 0 + limit = 10000 + consecutive_failures = 0 + + while True: + params = { + 'ParentId': self.music_library_id, + 'IncludeItemTypes': 'Audio', + 'Recursive': True, + 'Fields': 'AlbumId,ArtistItems', + 'SortBy': 'AlbumId,IndexNumber', + 'SortOrder': 'Ascending', + 'StartIndex': start_index, + 'Limit': limit + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + + if not response: + consecutive_failures += 1 + if consecutive_failures >= 3: + logger.warning("🚨 Multiple track fetch failures - stopping") + break + + if limit > 1000: + limit = limit // 2 + logger.warning(f"⚠️ Track fetch timeout - reducing batch size to {limit}") + continue + else: + break + + consecutive_failures = 0 + batch_tracks = response.get('Items', []) + if not batch_tracks: + break + + all_tracks.extend(batch_tracks) + + if len(batch_tracks) < limit: + break + + start_index += limit + progress_msg = f"Fetched {len(all_tracks)} tracks so far..." + logger.info(f" 🎡 {progress_msg} (batch size: {limit})") + if self._progress_callback: + self._progress_callback(progress_msg) + + # Group tracks by album ID for instant lookup + self._track_cache = {} + for track_data in all_tracks: + album_id = track_data.get('AlbumId') + if album_id: + if album_id not in self._track_cache: + self._track_cache[album_id] = [] + self._track_cache[album_id].append(JellyfinTrack(track_data, self)) + + logger.info(f"βœ… Cached {len(all_tracks)} tracks for {len(self._track_cache)} albums") + if self._progress_callback: + self._progress_callback(f"Cached {len(all_tracks)} tracks. Now fetching albums...") + + # STEP 2: Fetch all albums in bulk (same proven pattern) + logger.info("πŸ“€ Fetching all albums in bulk...") + all_albums = [] + start_index = 0 + limit = 10000 + consecutive_failures = 0 + + while True: + params = { + 'ParentId': self.music_library_id, + 'IncludeItemTypes': 'MusicAlbum', + 'Recursive': True, + 'Fields': 'AlbumArtists,Artists', + 'SortBy': 'SortName', + 'SortOrder': 'Ascending', + 'StartIndex': start_index, + 'Limit': limit + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + + if not response: + consecutive_failures += 1 + if consecutive_failures >= 3: + logger.warning("🚨 Multiple album fetch failures - stopping") + break + + if limit > 1000: + limit = limit // 2 + logger.warning(f"⚠️ Album fetch timeout - reducing batch size to {limit}") + continue + else: + break + + consecutive_failures = 0 + batch_albums = response.get('Items', []) + if not batch_albums: + break + + all_albums.extend(batch_albums) + + if len(batch_albums) < limit: + break + + start_index += limit + progress_msg = f"Fetched {len(all_albums)} albums so far..." + logger.info(f" πŸ“€ {progress_msg} (batch size: {limit})") + if self._progress_callback: + self._progress_callback(progress_msg) + + # Group albums by artist ID for instant lookup + self._album_cache = {} + for album_data in all_albums: + album_artists = album_data.get('AlbumArtists', []) + for artist in album_artists: + artist_id = artist.get('Id') + if artist_id: + if artist_id not in self._album_cache: + self._album_cache[artist_id] = [] + self._album_cache[artist_id].append(JellyfinAlbum(album_data, self)) + + logger.info(f"βœ… Cached {len(all_albums)} albums for {len(self._album_cache)} artists") + + self._cache_populated = True + logger.info("🎯 AGGRESSIVE CACHE COMPLETE! All subsequent album/track lookups will be INSTANT!") + if self._progress_callback: + self._progress_callback("Cache complete! Now processing artists...") + + except Exception as e: + logger.error(f"Error in aggressive cache population: {e}") + # Don't set cache_populated to True on error so we can retry + + def _populate_targeted_cache_for_albums(self, albums: List['JellyfinAlbum']): + """Populate cache only for tracks in specific albums - much faster for incremental updates""" + if not albums: + return + + logger.info(f"🎯 Starting targeted Jellyfin cache for {len(albums)} recent albums...") + if self._progress_callback: + self._progress_callback(f"Caching tracks for {len(albums)} recent albums...") + + try: + album_ids = [album.ratingKey for album in albums] + cached_tracks = 0 + + # Process albums individually - Jellyfin API requires ParentId per album + for i, album_id in enumerate(album_ids): + try: + # Fetch tracks for this specific album + params = { + 'ParentId': album_id, + 'IncludeItemTypes': 'Audio', + 'Recursive': True, + 'Fields': 'AlbumId,ArtistItems', + 'SortBy': 'IndexNumber', + 'SortOrder': 'Ascending', + 'Limit': 200 # Most albums won't have more than 200 tracks + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + if response: + album_tracks = response.get('Items', []) + + # Cache tracks for this album + if album_tracks: + self._track_cache[album_id] = [] + for track_data in album_tracks: + self._track_cache[album_id].append(JellyfinTrack(track_data, self)) + cached_tracks += 1 + + except Exception as e: + logger.debug(f"Error caching tracks for album {album_id}: {e}") + continue + + # Progress update every 50 albums + if (i + 1) % 50 == 0 or i == len(album_ids) - 1: + progress_msg = f"Cached {cached_tracks} tracks from {i + 1} albums..." + logger.info(f" 🎯 {progress_msg}") + if self._progress_callback: + self._progress_callback(progress_msg) + + logger.info(f"βœ… Targeted cache complete: {cached_tracks} tracks cached for {len(self._track_cache)} albums") + if self._progress_callback: + self._progress_callback("Targeted cache complete! Now checking for new tracks...") + + except Exception as e: + logger.error(f"Error in targeted cache population: {e}") + + def is_connected(self) -> bool: + """Check if connected to Jellyfin server""" + if not self._connection_attempted: + if not self._is_connecting: + self.ensure_connection() + return (self.base_url is not None and + self.api_key is not None and + self.user_id is not None and + self.music_library_id is not None) + + def get_all_artists(self) -> List[JellyfinArtist]: + """Get all artists from the music library - matches Plex interface""" + if not self.ensure_connection() or not self.music_library_id: + logger.error("Not connected to Jellyfin server or no music library") + return [] + + # PERFORMANCE OPTIMIZATION: Pre-populate ALL caches upfront for massive speedup + self._populate_aggressive_cache() + + try: + params = { + 'ParentId': self.music_library_id, + 'IncludeItemTypes': 'MusicArtist', + 'Recursive': True, + 'SortBy': 'SortName', + 'SortOrder': 'Ascending' + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + if not response: + return [] + + artists = [] + for item in response.get('Items', []): + artist = JellyfinArtist(item, self) + # Cache the artist for quick lookup + self._artist_cache[artist.ratingKey] = artist + artists.append(artist) + + logger.info(f"Retrieved {len(artists)} artists from Jellyfin (with aggressive caching)") + return artists + + except Exception as e: + logger.error(f"Error getting artists from Jellyfin: {e}") + return [] + + def get_albums_for_artist(self, artist_id: str) -> List[JellyfinAlbum]: + """Get all albums for a specific artist""" + # Use cache if available + if artist_id in self._album_cache: + return self._album_cache[artist_id] + + if not self.ensure_connection(): + return [] + + try: + # Use smaller, faster API call + params = { + 'ArtistIds': artist_id, + 'IncludeItemTypes': 'MusicAlbum', + 'Recursive': True, + 'SortBy': 'ProductionYear,SortName', + 'SortOrder': 'Ascending', + 'Limit': 200 # Reasonable limit for most artists + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + if not response: + return [] + + albums = [] + for item in response.get('Items', []): + albums.append(JellyfinAlbum(item, self)) + + # Cache the result + self._album_cache[artist_id] = albums + + return albums + + except Exception as e: + logger.error(f"Error getting albums for artist {artist_id}: {e}") + return [] + + def get_tracks_for_album(self, album_id: str) -> List[JellyfinTrack]: + """Get all tracks for a specific album""" + # Use cache if available + if album_id in self._track_cache: + return self._track_cache[album_id] + + if not self.ensure_connection(): + return [] + + try: + # Most albums have < 30 tracks, so this is reasonable + params = { + 'ParentId': album_id, + 'IncludeItemTypes': 'Audio', + 'SortBy': 'IndexNumber', + 'SortOrder': 'Ascending', + 'Limit': 100 # Most albums won't hit this limit + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + if not response: + return [] + + tracks = [] + for item in response.get('Items', []): + tracks.append(JellyfinTrack(item, self)) + + # Cache the result + self._track_cache[album_id] = tracks + + return tracks + + except Exception as e: + logger.error(f"Error getting tracks for album {album_id}: {e}") + return [] + + def get_artist_by_id(self, artist_id: str) -> Optional[JellyfinArtist]: + """Get a specific artist by ID""" + # Check cache first + if artist_id in self._artist_cache: + return self._artist_cache[artist_id] + + if not self.ensure_connection(): + return None + + try: + response = self._make_request(f'/Users/{self.user_id}/Items/{artist_id}') + if response: + artist = JellyfinArtist(response, self) + # Cache for future use + self._artist_cache[artist_id] = artist + return artist + return None + + except Exception as e: + logger.error(f"Error getting artist {artist_id}: {e}") + return None + + def get_album_by_id(self, album_id: str) -> Optional[JellyfinAlbum]: + """Get a specific album by ID""" + # Check if we can find this album in any artist's cache + for artist_albums in self._album_cache.values(): + for album in artist_albums: + if album.ratingKey == album_id: + return album + + if not self.ensure_connection(): + return None + + try: + response = self._make_request(f'/Users/{self.user_id}/Items/{album_id}') + if response: + return JellyfinAlbum(response, self) + return None + + except Exception as e: + logger.error(f"Error getting album {album_id}: {e}") + return None + + def get_recently_added_albums(self, max_results: int = 400) -> List[JellyfinAlbum]: + """Get recently added albums - used for incremental updates""" + if not self.ensure_connection() or not self.music_library_id: + return [] + + try: + params = { + 'ParentId': self.music_library_id, + 'IncludeItemTypes': 'MusicAlbum', + 'Recursive': True, + 'SortBy': 'DateCreated', + 'SortOrder': 'Descending', + 'Limit': max_results + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + if not response: + return [] + + albums = [] + for item in response.get('Items', []): + albums.append(JellyfinAlbum(item, self)) + + logger.info(f"Retrieved {len(albums)} recently added albums from Jellyfin") + return albums + + except Exception as e: + logger.error(f"Error getting recently added albums: {e}") + return [] + + def get_recently_updated_albums(self, max_results: int = 400) -> List[JellyfinAlbum]: + """Get recently updated albums - used for incremental updates""" + if not self.ensure_connection() or not self.music_library_id: + return [] + + try: + params = { + 'ParentId': self.music_library_id, + 'IncludeItemTypes': 'MusicAlbum', + 'Recursive': True, + 'SortBy': 'DateLastMediaAdded', + 'SortOrder': 'Descending', + 'Limit': max_results + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + if not response: + return [] + + albums = [] + for item in response.get('Items', []): + albums.append(JellyfinAlbum(item, self)) + + logger.info(f"Retrieved {len(albums)} recently updated albums from Jellyfin") + return albums + + except Exception as e: + logger.error(f"Error getting recently updated albums: {e}") + return [] + + def get_recently_added_tracks(self, max_results: int = 5000) -> List[JellyfinTrack]: + """Get recently added tracks directly - much faster for incremental updates""" + if not self.ensure_connection() or not self.music_library_id: + return [] + + try: + params = { + 'ParentId': self.music_library_id, + 'IncludeItemTypes': 'Audio', + 'Recursive': True, + 'SortBy': 'DateCreated', + 'SortOrder': 'Descending', + 'Fields': 'AlbumId,ArtistItems', + 'Limit': max_results + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + if not response: + return [] + + tracks = [] + for item in response.get('Items', []): + tracks.append(JellyfinTrack(item, self)) + + logger.info(f"Retrieved {len(tracks)} recently added tracks from Jellyfin") + return tracks + + except Exception as e: + logger.error(f"Error getting recently added tracks: {e}") + return [] + + def get_recently_updated_tracks(self, max_results: int = 5000) -> List[JellyfinTrack]: + """Get recently updated tracks directly - much faster for incremental updates""" + if not self.ensure_connection() or not self.music_library_id: + return [] + + try: + params = { + 'ParentId': self.music_library_id, + 'IncludeItemTypes': 'Audio', + 'Recursive': True, + 'SortBy': 'DateLastSaved', # When track metadata was last saved + 'SortOrder': 'Descending', + 'Fields': 'AlbumId,ArtistItems', + 'Limit': max_results + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + if not response: + return [] + + tracks = [] + for item in response.get('Items', []): + tracks.append(JellyfinTrack(item, self)) + + logger.info(f"Retrieved {len(tracks)} recently updated tracks from Jellyfin") + return tracks + + except Exception as e: + logger.error(f"Error getting recently updated tracks: {e}") + return [] + + def get_library_stats(self) -> Dict[str, int]: + """Get library statistics - matches Plex interface""" + if not self.ensure_connection() or not self.music_library_id: + return {} + + try: + stats = {} + + # Get artist count + artists_params = { + 'ParentId': self.music_library_id, + 'IncludeItemTypes': 'MusicArtist', + 'Recursive': True + } + artists_response = self._make_request(f'/Users/{self.user_id}/Items', artists_params) + stats['artists'] = artists_response.get('TotalRecordCount', 0) if artists_response else 0 + + # Get album count + albums_params = { + 'ParentId': self.music_library_id, + 'IncludeItemTypes': 'MusicAlbum', + 'Recursive': True + } + albums_response = self._make_request(f'/Users/{self.user_id}/Items', albums_params) + stats['albums'] = albums_response.get('TotalRecordCount', 0) if albums_response else 0 + + # Get track count + tracks_params = { + 'ParentId': self.music_library_id, + 'IncludeItemTypes': 'Audio', + 'Recursive': True + } + tracks_response = self._make_request(f'/Users/{self.user_id}/Items', tracks_params) + stats['tracks'] = tracks_response.get('TotalRecordCount', 0) if tracks_response else 0 + + return stats + + except Exception as e: + logger.error(f"Error getting library stats: {e}") + return {} + + def clear_cache(self): + """Clear all caches to force fresh data on next request""" + self._album_cache.clear() + self._track_cache.clear() + self._artist_cache.clear() + self._all_albums_cache = None + self._all_tracks_cache = None + self._cache_populated = False + logger.info("Jellyfin client cache cleared") + + def get_cache_stats(self) -> Dict[str, int]: + """Get statistics about cached data for performance monitoring""" + stats = { + 'cached_artists': len(self._artist_cache), + 'cached_artist_albums': len(self._album_cache), + 'cached_album_tracks': len(self._track_cache), + 'cache_populated': self._cache_populated + } + + if self._all_albums_cache: + stats['bulk_albums_cached'] = len(self._all_albums_cache) + if self._all_tracks_cache: + stats['bulk_tracks_cached'] = len(self._all_tracks_cache) + + return stats + + def get_all_playlists(self) -> List[JellyfinPlaylistInfo]: + """Get all playlists from Jellyfin server""" + if not self.ensure_connection(): + return [] + + try: + params = { + 'IncludeItemTypes': 'Playlist', + 'Recursive': True + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + if not response: + return [] + + playlists = [] + for item in response.get('Items', []): + playlist_info = JellyfinPlaylistInfo( + id=item.get('Id', ''), + title=item.get('Name', 'Unknown Playlist'), + description=item.get('Overview'), + duration=item.get('RunTimeTicks', 0) // 10000, + leaf_count=item.get('ChildCount', 0), + tracks=[] # Will be populated when needed + ) + playlists.append(playlist_info) + + logger.info(f"Retrieved {len(playlists)} playlists from Jellyfin") + return playlists + + except Exception as e: + logger.error(f"Error getting playlists from Jellyfin: {e}") + return [] + + def get_playlist_by_name(self, name: str) -> Optional[JellyfinPlaylistInfo]: + """Get a specific playlist by name""" + playlists = self.get_all_playlists() + for playlist in playlists: + if playlist.title.lower() == name.lower(): + return playlist + return None + + def create_playlist(self, name: str, tracks) -> bool: + """Create a new playlist with given tracks""" + if not self.ensure_connection(): + return False + + try: + # Convert tracks to Jellyfin track IDs + track_ids = [] + for track in tracks: + if hasattr(track, 'ratingKey'): + track_ids.append(str(track.ratingKey)) + elif hasattr(track, 'id'): + track_ids.append(str(track.id)) + + if not track_ids: + logger.warning(f"No valid tracks provided for playlist '{name}'") + return False + + logger.info(f"Creating Jellyfin playlist '{name}' with {len(track_ids)} tracks") + + # For large playlists, create empty playlist first then add tracks in batches + if len(track_ids) > 500: + return self._create_large_playlist(name, track_ids) + + # Create playlist using POST request for smaller playlists + import requests + url = f"{self.base_url}/Playlists" + headers = { + 'X-Emby-Token': self.api_key, + 'Content-Type': 'application/json' + } + data = { + 'Name': name, + 'UserId': self.user_id, + 'MediaType': 'Audio', + 'Ids': track_ids + } + + response = requests.post(url, json=data, headers=headers, timeout=30) + + # Log response details for debugging + logger.debug(f"Jellyfin playlist creation response: Status {response.status_code}") + if response.status_code >= 400: + logger.error(f"Jellyfin API error: {response.status_code} - {response.text}") + + response.raise_for_status() + + result = response.json() + if result and 'Id' in result: + logger.info(f"βœ… Created Jellyfin playlist '{name}' with {len(track_ids)} tracks") + return True + else: + logger.error(f"Failed to create Jellyfin playlist '{name}': No playlist ID returned") + return False + + except Exception as e: + logger.error(f"Error creating Jellyfin playlist '{name}': {e}") + return False + + def _create_large_playlist(self, name: str, track_ids: List[str]) -> bool: + """Create a large playlist by first creating empty playlist, then adding tracks in batches""" + try: + import requests + + # Step 1: Create empty playlist + url = f"{self.base_url}/Playlists" + headers = { + 'X-Emby-Token': self.api_key, + 'Content-Type': 'application/json' + } + data = { + 'Name': name, + 'UserId': self.user_id, + 'MediaType': 'Audio', + 'Ids': [] # Empty playlist + } + + response = requests.post(url, json=data, headers=headers, timeout=10) + response.raise_for_status() + + result = response.json() + if not result or 'Id' not in result: + logger.error(f"Failed to create empty Jellyfin playlist '{name}'") + return False + + playlist_id = result['Id'] + logger.info(f"Created empty Jellyfin playlist '{name}' (ID: {playlist_id})") + + # Step 2: Add tracks in batches of 100 + batch_size = 100 + total_batches = (len(track_ids) + batch_size - 1) // batch_size + + for i in range(0, len(track_ids), batch_size): + batch = track_ids[i:i + batch_size] + batch_num = (i // batch_size) + 1 + + logger.info(f"Adding batch {batch_num}/{total_batches} ({len(batch)} tracks) to playlist '{name}'") + + # Add tracks to playlist using POST to /Playlists/{id}/Items + add_url = f"{self.base_url}/Playlists/{playlist_id}/Items" + add_params = { + 'Ids': ','.join(batch), + 'UserId': self.user_id + } + + add_response = requests.post(add_url, params=add_params, headers={'X-Emby-Token': self.api_key}, timeout=30) + + if add_response.status_code not in [200, 204]: + logger.warning(f"Failed to add batch {batch_num} to playlist: {add_response.status_code} - {add_response.text}") + # Continue with other batches even if one fails + + logger.info(f"βœ… Created large Jellyfin playlist '{name}' with {len(track_ids)} tracks in {total_batches} batches") + return True + + except Exception as e: + logger.error(f"Error creating large Jellyfin playlist '{name}': {e}") + return False + + def copy_playlist(self, source_name: str, target_name: str) -> bool: + """Copy a playlist to create a backup""" + if not self.ensure_connection(): + return False + + try: + # Get the source playlist + source_playlist = self.get_playlist_by_name(source_name) + if not source_playlist: + logger.error(f"Source playlist '{source_name}' not found") + return False + + # Get tracks from source playlist + source_tracks = self.get_playlist_tracks(source_playlist.id) + logger.debug(f"Retrieved {len(source_tracks) if source_tracks else 0} tracks from source playlist") + + # Validate tracks + if not source_tracks: + logger.warning(f"Source playlist '{source_name}' has no tracks to copy") + return False + + # Delete target playlist if it exists (for overwriting backup) + try: + target_playlist = self.get_playlist_by_name(target_name) + if target_playlist: + import requests + url = f"{self.base_url}/Items/{target_playlist.id}" + headers = {'X-Emby-Token': self.api_key} + + response = requests.delete(url, headers=headers, timeout=10) + if response.status_code in [200, 204]: + logger.info(f"Deleted existing backup playlist '{target_name}'") + except Exception: + pass # Target doesn't exist, which is fine + + # Create new playlist with copied tracks + try: + success = self.create_playlist(target_name, source_tracks) + if success: + logger.info(f"βœ… Created backup playlist '{target_name}' with {len(source_tracks)} tracks") + return True + else: + logger.error(f"Failed to create backup playlist '{target_name}'") + return False + except Exception as create_error: + logger.error(f"Failed to create backup playlist: {create_error}") + return False + + except Exception as e: + logger.error(f"Error copying playlist '{source_name}' to '{target_name}': {e}") + return False + + def get_playlist_tracks(self, playlist_id: str) -> List: + """Get all tracks from a specific playlist""" + if not self.ensure_connection(): + return [] + + try: + params = { + 'ParentId': playlist_id, + 'IncludeItemTypes': 'Audio', + 'Recursive': True, + 'Fields': 'AlbumId,ArtistItems', + 'SortBy': 'SortName', + 'SortOrder': 'Ascending' + } + + response = self._make_request(f'/Users/{self.user_id}/Items', params) + if not response: + return [] + + tracks = [] + for item in response.get('Items', []): + tracks.append(JellyfinTrack(item, self)) + + logger.debug(f"Retrieved {len(tracks)} tracks from playlist {playlist_id}") + return tracks + + except Exception as e: + logger.error(f"Error getting tracks for playlist {playlist_id}: {e}") + return [] + + def update_playlist(self, playlist_name: str, tracks) -> bool: + """Update an existing playlist or create it if it doesn't exist""" + if not self.ensure_connection(): + return False + + try: + existing_playlist = self.get_playlist_by_name(playlist_name) + + # Check if backup is enabled in config + from config.settings import config_manager + create_backup = config_manager.get('playlist_sync.create_backup', True) + + if existing_playlist and create_backup: + backup_name = f"{playlist_name} Backup" + logger.info(f"πŸ›‘οΈ Creating backup playlist '{backup_name}' before sync") + + if self.copy_playlist(playlist_name, backup_name): + logger.info(f"βœ… Backup created successfully") + else: + logger.warning(f"⚠️ Failed to create backup, continuing with sync") + + if existing_playlist: + # Delete existing playlist using DELETE request + import requests + url = f"{self.base_url}/Items/{existing_playlist.id}" + headers = { + 'X-Emby-Token': self.api_key + } + + response = requests.delete(url, headers=headers, timeout=10) + if response.status_code in [200, 204]: + logger.info(f"Deleted existing Jellyfin playlist '{playlist_name}'") + else: + logger.warning(f"Could not delete existing playlist '{playlist_name}' (status: {response.status_code}), creating anyway") + + # Create new playlist with tracks + return self.create_playlist(playlist_name, tracks) + + except Exception as e: + logger.error(f"Error updating Jellyfin playlist '{playlist_name}': {e}") + return False \ No newline at end of file diff --git a/core/watchlist_scanner.py b/core/watchlist_scanner.py index 3a0a5767..6f52da0f 100644 --- a/core/watchlist_scanner.py +++ b/core/watchlist_scanner.py @@ -362,8 +362,10 @@ class WatchlistScanner: for artist_name in artists_to_search: for query_title in unique_title_variations: - # Use same database check as modals - db_track, confidence = self.database.check_track_exists(query_title, artist_name, confidence_threshold=0.7) + # Use same database check as modals with server awareness + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + db_track, confidence = self.database.check_track_exists(query_title, artist_name, confidence_threshold=0.7, server_source=active_server) if db_track and confidence >= 0.7: logger.debug(f"βœ”οΈ Track found in library: '{original_title}' by '{artist_name}' (confidence: {confidence:.2f})") diff --git a/database/music_database.py b/database/music_database.py index 0f80eee7..df37655f 100644 --- a/database/music_database.py +++ b/database/music_database.py @@ -6,6 +6,7 @@ import logging import os import re import threading +import time from datetime import datetime from typing import List, Optional, Dict, Any, Tuple from dataclasses import dataclass @@ -207,6 +208,12 @@ class MusicDatabase: cursor.execute("CREATE INDEX IF NOT EXISTS idx_albums_title ON albums (title)") cursor.execute("CREATE INDEX IF NOT EXISTS idx_tracks_title ON tracks (title)") + # Add server_source columns for multi-server support (migration) + self._add_server_source_columns(cursor) + + # Migrate ID columns to support both integer (Plex) and string (Jellyfin) IDs + self._migrate_id_columns_to_text(cursor) + conn.commit() logger.info("Database initialized successfully") @@ -214,13 +221,168 @@ class MusicDatabase: logger.error(f"Error initializing database: {e}") raise + def _add_server_source_columns(self, cursor): + """Add server_source columns to existing tables for multi-server support""" + try: + # Check if server_source column exists in artists table + cursor.execute("PRAGMA table_info(artists)") + artists_columns = [column[1] for column in cursor.fetchall()] + + if 'server_source' not in artists_columns: + cursor.execute("ALTER TABLE artists ADD COLUMN server_source TEXT DEFAULT 'plex'") + logger.info("Added server_source column to artists table") + + # Check if server_source column exists in albums table + cursor.execute("PRAGMA table_info(albums)") + albums_columns = [column[1] for column in cursor.fetchall()] + + if 'server_source' not in albums_columns: + cursor.execute("ALTER TABLE albums ADD COLUMN server_source TEXT DEFAULT 'plex'") + logger.info("Added server_source column to albums table") + + # Check if server_source column exists in tracks table + cursor.execute("PRAGMA table_info(tracks)") + tracks_columns = [column[1] for column in cursor.fetchall()] + + if 'server_source' not in tracks_columns: + cursor.execute("ALTER TABLE tracks ADD COLUMN server_source TEXT DEFAULT 'plex'") + logger.info("Added server_source column to tracks table") + + # Create indexes for server_source columns for performance + cursor.execute("CREATE INDEX IF NOT EXISTS idx_artists_server_source ON artists (server_source)") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_albums_server_source ON albums (server_source)") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_tracks_server_source ON tracks (server_source)") + + except Exception as e: + logger.error(f"Error adding server_source columns: {e}") + # Don't raise - this is a migration, database can still function without it + + def _migrate_id_columns_to_text(self, cursor): + """Migrate ID columns from INTEGER to TEXT to support both Plex (int) and Jellyfin (GUID) IDs""" + try: + # Check if migration has already been applied by looking for a specific marker + cursor.execute("SELECT value FROM metadata WHERE key = 'id_columns_migrated' LIMIT 1") + migration_done = cursor.fetchone() + + if migration_done: + logger.debug("ID columns migration already applied") + return + + logger.info("Migrating ID columns to support both integer and string IDs...") + + # SQLite doesn't support changing column types directly, so we need to recreate tables + # This is a complex migration - let's do it safely + + # Step 1: Create new tables with TEXT IDs + cursor.execute(""" + CREATE TABLE IF NOT EXISTS artists_new ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + thumb_url TEXT, + genres TEXT, + summary TEXT, + server_source TEXT DEFAULT 'plex', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) + """) + + cursor.execute(""" + CREATE TABLE IF NOT EXISTS albums_new ( + id TEXT PRIMARY KEY, + artist_id TEXT NOT NULL, + title TEXT NOT NULL, + year INTEGER, + thumb_url TEXT, + genres TEXT, + track_count INTEGER, + duration INTEGER, + server_source TEXT DEFAULT 'plex', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (artist_id) REFERENCES artists_new (id) ON DELETE CASCADE + ) + """) + + cursor.execute(""" + CREATE TABLE IF NOT EXISTS tracks_new ( + id TEXT PRIMARY KEY, + album_id TEXT NOT NULL, + artist_id TEXT NOT NULL, + title TEXT NOT NULL, + track_number INTEGER, + duration INTEGER, + file_path TEXT, + bitrate INTEGER, + server_source TEXT DEFAULT 'plex', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (album_id) REFERENCES albums_new (id) ON DELETE CASCADE, + FOREIGN KEY (artist_id) REFERENCES artists_new (id) ON DELETE CASCADE + ) + """) + + # Step 2: Copy existing data (converting INTEGER IDs to TEXT) + cursor.execute(""" + INSERT INTO artists_new (id, name, thumb_url, genres, summary, server_source, created_at, updated_at) + SELECT CAST(id AS TEXT), name, thumb_url, genres, summary, + COALESCE(server_source, 'plex'), created_at, updated_at + FROM artists + """) + + cursor.execute(""" + INSERT INTO albums_new (id, artist_id, title, year, thumb_url, genres, track_count, duration, server_source, created_at, updated_at) + SELECT CAST(id AS TEXT), CAST(artist_id AS TEXT), title, year, thumb_url, genres, track_count, duration, + COALESCE(server_source, 'plex'), created_at, updated_at + FROM albums + """) + + cursor.execute(""" + INSERT INTO tracks_new (id, album_id, artist_id, title, track_number, duration, file_path, bitrate, server_source, created_at, updated_at) + SELECT CAST(id AS TEXT), CAST(album_id AS TEXT), CAST(artist_id AS TEXT), title, track_number, duration, file_path, bitrate, + COALESCE(server_source, 'plex'), created_at, updated_at + FROM tracks + """) + + # Step 3: Drop old tables and rename new ones + cursor.execute("DROP TABLE IF EXISTS tracks") + cursor.execute("DROP TABLE IF EXISTS albums") + cursor.execute("DROP TABLE IF EXISTS artists") + + cursor.execute("ALTER TABLE artists_new RENAME TO artists") + cursor.execute("ALTER TABLE albums_new RENAME TO albums") + cursor.execute("ALTER TABLE tracks_new RENAME TO tracks") + + # Step 4: Recreate indexes + cursor.execute("CREATE INDEX IF NOT EXISTS idx_albums_artist_id ON albums (artist_id)") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_tracks_album_id ON tracks (album_id)") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_tracks_artist_id ON tracks (artist_id)") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_artists_server_source ON artists (server_source)") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_albums_server_source ON albums (server_source)") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_tracks_server_source ON tracks (server_source)") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_artists_name ON artists (name)") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_albums_title ON albums (title)") + cursor.execute("CREATE INDEX IF NOT EXISTS idx_tracks_title ON tracks (title)") + + # Step 5: Mark migration as complete + cursor.execute(""" + INSERT OR REPLACE INTO metadata (key, value, updated_at) + VALUES ('id_columns_migrated', 'true', CURRENT_TIMESTAMP) + """) + + logger.info("ID columns migration completed successfully") + + except Exception as e: + logger.error(f"Error migrating ID columns: {e}") + # Don't raise - this is a migration, database can still function + def close(self): """Close database connection (no-op since we create connections per operation)""" # Each operation creates and closes its own connection, so nothing to do here pass def get_statistics(self) -> Dict[str, int]: - """Get database statistics""" + """Get database statistics for all servers (legacy method)""" try: with self._get_connection() as conn: cursor = conn.cursor() @@ -243,8 +405,44 @@ class MusicDatabase: logger.error(f"Error getting database statistics: {e}") return {'artists': 0, 'albums': 0, 'tracks': 0} + def get_statistics_for_server(self, server_source: str = None) -> Dict[str, int]: + """Get database statistics filtered by server source""" + try: + with self._get_connection() as conn: + cursor = conn.cursor() + + if server_source: + # Get counts for specific server + cursor.execute("SELECT COUNT(*) FROM artists WHERE server_source = ?", (server_source,)) + artist_count = cursor.fetchone()[0] + + cursor.execute("SELECT COUNT(*) FROM albums WHERE server_source = ?", (server_source,)) + album_count = cursor.fetchone()[0] + + cursor.execute("SELECT COUNT(*) FROM tracks WHERE server_source = ?", (server_source,)) + track_count = cursor.fetchone()[0] + else: + # Get total counts (all servers) + cursor.execute("SELECT COUNT(*) FROM artists") + artist_count = cursor.fetchone()[0] + + cursor.execute("SELECT COUNT(*) FROM albums") + album_count = cursor.fetchone()[0] + + cursor.execute("SELECT COUNT(*) FROM tracks") + track_count = cursor.fetchone()[0] + + return { + 'artists': artist_count, + 'albums': album_count, + 'tracks': track_count + } + except Exception as e: + logger.error(f"Error getting database statistics for {server_source}: {e}") + return {'artists': 0, 'albums': 0, 'tracks': 0} + def clear_all_data(self): - """Clear all data from database (for full refresh)""" + """Clear all data from database (for full refresh) - DEPRECATED: Use clear_server_data instead""" try: with self._get_connection() as conn: cursor = conn.cursor() @@ -265,6 +463,38 @@ class MusicDatabase: logger.error(f"Error clearing database: {e}") raise + def clear_server_data(self, server_source: str): + """Clear data for specific server only (server-aware full refresh)""" + try: + with self._get_connection() as conn: + cursor = conn.cursor() + + # Delete only data from the specified server + # Order matters: tracks -> albums -> artists (foreign key constraints) + cursor.execute("DELETE FROM tracks WHERE server_source = ?", (server_source,)) + tracks_deleted = cursor.rowcount + + cursor.execute("DELETE FROM albums WHERE server_source = ?", (server_source,)) + albums_deleted = cursor.rowcount + + cursor.execute("DELETE FROM artists WHERE server_source = ?", (server_source,)) + artists_deleted = cursor.rowcount + + conn.commit() + + # Only VACUUM if we deleted a significant amount of data + if tracks_deleted > 1000 or albums_deleted > 100: + logger.info("Vacuuming database to reclaim disk space...") + cursor.execute("VACUUM") + + logger.info(f"Cleared {server_source} data: {artists_deleted} artists, {albums_deleted} albums, {tracks_deleted} tracks") + + # Note: Watchlist and wishlist are preserved as they are server-agnostic + + except Exception as e: + logger.error(f"Error clearing {server_source} database data: {e}") + raise + def cleanup_orphaned_records(self) -> Dict[str, int]: """Remove artists and albums that have no associated tracks""" try: @@ -314,26 +544,31 @@ class MusicDatabase: # Artist operations def insert_or_update_artist(self, plex_artist) -> bool: - """Insert or update artist from Plex artist object""" + """Insert or update artist from Plex artist object - DEPRECATED: Use insert_or_update_media_artist instead""" + return self.insert_or_update_media_artist(plex_artist, server_source='plex') + + def insert_or_update_media_artist(self, artist_obj, server_source: str = 'plex') -> bool: + """Insert or update artist from media server artist object (Plex or Jellyfin)""" try: with self._get_connection() as conn: cursor = conn.cursor() - artist_id = int(plex_artist.ratingKey) - name = plex_artist.title - thumb_url = getattr(plex_artist, 'thumb', None) - summary = getattr(plex_artist, 'summary', None) + # Convert artist ID to string (handles both Plex integer IDs and Jellyfin GUIDs) + artist_id = str(artist_obj.ratingKey) + name = artist_obj.title + thumb_url = getattr(artist_obj, 'thumb', None) + summary = getattr(artist_obj, 'summary', None) - # Get genres + # Get genres (handle both Plex and Jellyfin formats) genres = [] - if hasattr(plex_artist, 'genres') and plex_artist.genres: + if hasattr(artist_obj, 'genres') and artist_obj.genres: genres = [genre.tag if hasattr(genre, 'tag') else str(genre) - for genre in plex_artist.genres] + for genre in artist_obj.genres] genres_json = json.dumps(genres) if genres else None - # Check if artist exists - cursor.execute("SELECT id FROM artists WHERE id = ?", (artist_id,)) + # Check if artist exists with this ID and server source + cursor.execute("SELECT id FROM artists WHERE id = ? AND server_source = ?", (artist_id, server_source)) exists = cursor.fetchone() if exists: @@ -341,20 +576,20 @@ class MusicDatabase: cursor.execute(""" UPDATE artists SET name = ?, thumb_url = ?, genres = ?, summary = ?, updated_at = CURRENT_TIMESTAMP - WHERE id = ? - """, (name, thumb_url, genres_json, summary, artist_id)) + WHERE id = ? AND server_source = ? + """, (name, thumb_url, genres_json, summary, artist_id, server_source)) else: # Insert new artist cursor.execute(""" - INSERT INTO artists (id, name, thumb_url, genres, summary) - VALUES (?, ?, ?, ?, ?) - """, (artist_id, name, thumb_url, genres_json, summary)) + INSERT INTO artists (id, name, thumb_url, genres, summary, server_source) + VALUES (?, ?, ?, ?, ?, ?) + """, (artist_id, name, thumb_url, genres_json, summary, server_source)) conn.commit() return True except Exception as e: - logger.error(f"Error inserting/updating artist {getattr(plex_artist, 'title', 'Unknown')}: {e}") + logger.error(f"Error inserting/updating {server_source} artist {getattr(artist_obj, 'title', 'Unknown')}: {e}") return False def get_artist(self, artist_id: int) -> Optional[DatabaseArtist]: @@ -385,30 +620,35 @@ class MusicDatabase: # Album operations def insert_or_update_album(self, plex_album, artist_id: int) -> bool: - """Insert or update album from Plex album object""" + """Insert or update album from Plex album object - DEPRECATED: Use insert_or_update_media_album instead""" + return self.insert_or_update_media_album(plex_album, artist_id, server_source='plex') + + def insert_or_update_media_album(self, album_obj, artist_id: str, server_source: str = 'plex') -> bool: + """Insert or update album from media server album object (Plex or Jellyfin)""" try: conn = self._get_connection() cursor = conn.cursor() - album_id = int(plex_album.ratingKey) - title = plex_album.title - year = getattr(plex_album, 'year', None) - thumb_url = getattr(plex_album, 'thumb', None) + # Convert album ID to string (handles both Plex integer IDs and Jellyfin GUIDs) + album_id = str(album_obj.ratingKey) + title = album_obj.title + year = getattr(album_obj, 'year', None) + thumb_url = getattr(album_obj, 'thumb', None) - # Get track count and duration - track_count = getattr(plex_album, 'leafCount', None) - duration = getattr(plex_album, 'duration', None) + # Get track count and duration (handle different server attributes) + track_count = getattr(album_obj, 'leafCount', None) or getattr(album_obj, 'childCount', None) + duration = getattr(album_obj, 'duration', None) - # Get genres + # Get genres (handle both Plex and Jellyfin formats) genres = [] - if hasattr(plex_album, 'genres') and plex_album.genres: + if hasattr(album_obj, 'genres') and album_obj.genres: genres = [genre.tag if hasattr(genre, 'tag') else str(genre) - for genre in plex_album.genres] + for genre in album_obj.genres] genres_json = json.dumps(genres) if genres else None - # Check if album exists - cursor.execute("SELECT id FROM albums WHERE id = ?", (album_id,)) + # Check if album exists with this ID and server source + cursor.execute("SELECT id FROM albums WHERE id = ? AND server_source = ?", (album_id, server_source)) exists = cursor.fetchone() if exists: @@ -417,20 +657,20 @@ class MusicDatabase: UPDATE albums SET artist_id = ?, title = ?, year = ?, thumb_url = ?, genres = ?, track_count = ?, duration = ?, updated_at = CURRENT_TIMESTAMP - WHERE id = ? - """, (artist_id, title, year, thumb_url, genres_json, track_count, duration, album_id)) + WHERE id = ? AND server_source = ? + """, (artist_id, title, year, thumb_url, genres_json, track_count, duration, album_id, server_source)) else: # Insert new album cursor.execute(""" - INSERT INTO albums (id, artist_id, title, year, thumb_url, genres, track_count, duration) - VALUES (?, ?, ?, ?, ?, ?, ?, ?) - """, (album_id, artist_id, title, year, thumb_url, genres_json, track_count, duration)) + INSERT INTO albums (id, artist_id, title, year, thumb_url, genres, track_count, duration, server_source) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + """, (album_id, artist_id, title, year, thumb_url, genres_json, track_count, duration, server_source)) conn.commit() return True except Exception as e: - logger.error(f"Error inserting/updating album {getattr(plex_album, 'title', 'Unknown')}: {e}") + logger.error(f"Error inserting/updating {server_source} album {getattr(album_obj, 'title', 'Unknown')}: {e}") return False def get_albums_by_artist(self, artist_id: int) -> List[DatabaseAlbum]: @@ -466,60 +706,70 @@ class MusicDatabase: # Track operations def insert_or_update_track(self, plex_track, album_id: int, artist_id: int) -> bool: - """Insert or update track from Plex track object""" - try: - conn = self._get_connection() - cursor = conn.cursor() - - track_id = int(plex_track.ratingKey) - title = plex_track.title - track_number = getattr(plex_track, 'trackNumber', None) - duration = getattr(plex_track, 'duration', None) - - # Get file path and media info - file_path = None - bitrate = None - if hasattr(plex_track, 'media') and plex_track.media: - media = plex_track.media[0] if plex_track.media else None - if media: - if hasattr(media, 'parts') and media.parts: - part = media.parts[0] - file_path = getattr(part, 'file', None) - bitrate = getattr(media, 'bitrate', None) - - # Check if track exists - cursor.execute("SELECT id FROM tracks WHERE id = ?", (track_id,)) - exists = cursor.fetchone() - - if exists: - # Update existing track - cursor.execute(""" - UPDATE tracks - SET album_id = ?, artist_id = ?, title = ?, track_number = ?, - duration = ?, file_path = ?, bitrate = ?, updated_at = CURRENT_TIMESTAMP - WHERE id = ? - """, (album_id, artist_id, title, track_number, duration, file_path, bitrate, track_id)) - else: - # Insert new track - cursor.execute(""" - INSERT INTO tracks (id, album_id, artist_id, title, track_number, duration, file_path, bitrate) - VALUES (?, ?, ?, ?, ?, ?, ?, ?) - """, (track_id, album_id, artist_id, title, track_number, duration, file_path, bitrate)) - - conn.commit() - return True - - except Exception as e: - logger.error(f"Error inserting/updating track {getattr(plex_track, 'title', 'Unknown')}: {e}") - return False + """Insert or update track from Plex track object - DEPRECATED: Use insert_or_update_media_track instead""" + return self.insert_or_update_media_track(plex_track, album_id, artist_id, server_source='plex') - def track_exists(self, track_id: int) -> bool: - """Check if a track exists in the database by Plex ID""" + def insert_or_update_media_track(self, track_obj, album_id: str, artist_id: str, server_source: str = 'plex') -> bool: + """Insert or update track from media server track object (Plex or Jellyfin) with retry logic""" + max_retries = 3 + retry_count = 0 + + while retry_count < max_retries: + try: + conn = self._get_connection() + cursor = conn.cursor() + + # Set shorter timeout to prevent long locks + cursor.execute("PRAGMA busy_timeout = 10000") # 10 second timeout + + # Convert track ID to string (handles both Plex integer IDs and Jellyfin GUIDs) + track_id = str(track_obj.ratingKey) + title = track_obj.title + track_number = getattr(track_obj, 'trackNumber', None) + duration = getattr(track_obj, 'duration', None) + + # Get file path and media info (Plex-specific, Jellyfin may not have these) + file_path = None + bitrate = None + if hasattr(track_obj, 'media') and track_obj.media: + media = track_obj.media[0] if track_obj.media else None + if media: + if hasattr(media, 'parts') and media.parts: + part = media.parts[0] + file_path = getattr(part, 'file', None) + bitrate = getattr(media, 'bitrate', None) + + # Use INSERT OR REPLACE to handle duplicate IDs gracefully + cursor.execute(""" + INSERT OR REPLACE INTO tracks + (id, album_id, artist_id, title, track_number, duration, file_path, bitrate, server_source, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP) + """, (track_id, album_id, artist_id, title, track_number, duration, file_path, bitrate, server_source)) + + conn.commit() + return True + + except Exception as e: + retry_count += 1 + if "database is locked" in str(e).lower() and retry_count < max_retries: + logger.warning(f"Database locked on track '{getattr(track_obj, 'title', 'Unknown')}', retrying {retry_count}/{max_retries}...") + time.sleep(0.1 * retry_count) # Exponential backoff + continue + else: + logger.error(f"Error inserting/updating {server_source} track {getattr(track_obj, 'title', 'Unknown')}: {e}") + return False + + return False + + def track_exists(self, track_id) -> bool: + """Check if a track exists in the database by ID (supports both int and string IDs)""" try: conn = self._get_connection() cursor = conn.cursor() - cursor.execute("SELECT 1 FROM tracks WHERE id = ? LIMIT 1", (track_id,)) + # Convert to string to handle both Plex integers and Jellyfin GUIDs + track_id_str = str(track_id) + cursor.execute("SELECT 1 FROM tracks WHERE id = ? LIMIT 1", (track_id_str,)) result = cursor.fetchone() return result is not None @@ -528,12 +778,31 @@ class MusicDatabase: logger.error(f"Error checking if track {track_id} exists: {e}") return False - def get_track_by_id(self, track_id: int) -> Optional[DatabaseTrackWithMetadata]: - """Get a track with artist and album names by Plex ID""" + def track_exists_by_server(self, track_id, server_source: str) -> bool: + """Check if a track exists in the database by ID and server source""" try: conn = self._get_connection() cursor = conn.cursor() + # Convert to string to handle both Plex integers and Jellyfin GUIDs + track_id_str = str(track_id) + cursor.execute("SELECT 1 FROM tracks WHERE id = ? AND server_source = ? LIMIT 1", (track_id_str, server_source)) + result = cursor.fetchone() + + return result is not None + + except Exception as e: + logger.error(f"Error checking if track {track_id} exists for server {server_source}: {e}") + return False + + def get_track_by_id(self, track_id) -> Optional[DatabaseTrackWithMetadata]: + """Get a track with artist and album names by ID (supports both int and string IDs)""" + try: + conn = self._get_connection() + cursor = conn.cursor() + + # Convert to string to handle both Plex integers and Jellyfin GUIDs + track_id_str = str(track_id) cursor.execute(""" SELECT t.id, t.album_id, t.artist_id, t.title, t.track_number, t.duration, t.created_at, t.updated_at, @@ -542,7 +811,7 @@ class MusicDatabase: JOIN artists a ON t.artist_id = a.id JOIN albums al ON t.album_id = al.id WHERE t.id = ? - """, (track_id,)) + """, (track_id_str,)) row = cursor.fetchone() if row: @@ -628,7 +897,7 @@ class MusicDatabase: logger.error(f"Error searching artists with query '{query}': {e}") return [] - def search_tracks(self, title: str = "", artist: str = "", limit: int = 50) -> List[DatabaseTrack]: + def search_tracks(self, title: str = "", artist: str = "", limit: int = 50, server_source: str = None) -> List[DatabaseTrack]: """Search tracks by title and/or artist name with Unicode-aware fuzzy matching""" try: if not title and not artist: @@ -638,7 +907,7 @@ class MusicDatabase: cursor = conn.cursor() # STRATEGY 1: Try basic SQL LIKE search first (fastest) - basic_results = self._search_tracks_basic(cursor, title, artist, limit) + basic_results = self._search_tracks_basic(cursor, title, artist, limit, server_source) if basic_results: logger.debug(f"πŸ” Basic search found {len(basic_results)} results") @@ -652,7 +921,7 @@ class MusicDatabase: unicode_support = False if unicode_support: - normalized_results = self._search_tracks_unicode_fallback(cursor, title, artist, limit) + normalized_results = self._search_tracks_unicode_fallback(cursor, title, artist, limit, server_source) if normalized_results: logger.debug(f"πŸ” Unicode fallback search found {len(normalized_results)} results") return normalized_results @@ -668,7 +937,7 @@ class MusicDatabase: logger.error(f"Error searching tracks with title='{title}', artist='{artist}': {e}") return [] - def _search_tracks_basic(self, cursor, title: str, artist: str, limit: int) -> List[DatabaseTrack]: + def _search_tracks_basic(self, cursor, title: str, artist: str, limit: int, server_source: str = None) -> List[DatabaseTrack]: """Basic SQL LIKE search - fastest method""" where_conditions = [] params = [] @@ -681,6 +950,11 @@ class MusicDatabase: where_conditions.append("artists.name LIKE ?") params.append(f"%{artist}%") + # Add server filter if specified + if server_source: + where_conditions.append("tracks.server_source = ?") + params.append(server_source) + if not where_conditions: return [] @@ -699,7 +973,7 @@ class MusicDatabase: return self._rows_to_tracks(cursor.fetchall()) - def _search_tracks_unicode_fallback(self, cursor, title: str, artist: str, limit: int) -> List[DatabaseTrack]: + def _search_tracks_unicode_fallback(self, cursor, title: str, artist: str, limit: int, server_source: str = None) -> List[DatabaseTrack]: """Unicode-aware fallback search - tries normalized versions""" from unidecode import unidecode @@ -719,6 +993,11 @@ class MusicDatabase: where_conditions.append("LOWER(artists.name) LIKE ?") params.append(f"%{artist_norm}%") + # Add server filter if specified + if server_source: + where_conditions.append("tracks.server_source = ?") + params.append(server_source) + if not where_conditions: return [] @@ -918,7 +1197,7 @@ class MusicDatabase: return list(set(variations)) - def check_track_exists(self, title: str, artist: str, confidence_threshold: float = 0.8) -> Tuple[Optional[DatabaseTrack], float]: + def check_track_exists(self, title: str, artist: str, confidence_threshold: float = 0.8, server_source: str = None) -> Tuple[Optional[DatabaseTrack], float]: """ Check if a track exists in the database with enhanced fuzzy matching and confidence scoring. Now uses the same sophisticated matching approach as album checking for consistency. @@ -941,7 +1220,7 @@ class MusicDatabase: potential_matches = [] artist_variations = self._get_artist_variations(artist) for artist_variation in artist_variations: - potential_matches.extend(self.search_tracks(title=title_variation, artist=artist_variation, limit=20)) + potential_matches.extend(self.search_tracks(title=title_variation, artist=artist_variation, limit=20, server_source=server_source)) if not potential_matches: continue @@ -1809,7 +2088,7 @@ class MusicDatabase: return 0 def get_database_info(self) -> Dict[str, Any]: - """Get comprehensive database information""" + """Get comprehensive database information for all servers (legacy method)""" try: stats = self.get_statistics() @@ -1857,6 +2136,65 @@ class MusicDatabase: 'last_update': None, 'last_full_refresh': None } + + def get_database_info_for_server(self, server_source: str = None) -> Dict[str, Any]: + """Get comprehensive database information filtered by server source""" + try: + # Import here to avoid circular imports + from config.settings import config_manager + + # If no server specified, use active server + if server_source is None: + server_source = config_manager.get_active_media_server() + + stats = self.get_statistics_for_server(server_source) + + # Get database file size (always total, not server-specific) + db_size = self.database_path.stat().st_size if self.database_path.exists() else 0 + db_size_mb = db_size / (1024 * 1024) + + # Get last update time for this server + conn = self._get_connection() + cursor = conn.cursor() + + cursor.execute(""" + SELECT MAX(updated_at) as last_update + FROM ( + SELECT updated_at FROM artists WHERE server_source = ? + UNION ALL + SELECT updated_at FROM albums WHERE server_source = ? + UNION ALL + SELECT updated_at FROM tracks WHERE server_source = ? + ) + """, (server_source, server_source, server_source)) + + result = cursor.fetchone() + last_update = result['last_update'] if result and result['last_update'] else None + + # Get last full refresh (global setting, not server-specific) + last_full_refresh = self.get_last_full_refresh() + + return { + **stats, + 'database_size_mb': round(db_size_mb, 2), + 'database_path': str(self.database_path), + 'last_update': last_update, + 'last_full_refresh': last_full_refresh, + 'server_source': server_source + } + + except Exception as e: + logger.error(f"Error getting database info for {server_source}: {e}") + return { + 'artists': 0, + 'albums': 0, + 'tracks': 0, + 'database_size_mb': 0.0, + 'database_path': str(self.database_path), + 'last_update': None, + 'last_full_refresh': None, + 'server_source': server_source + } # Thread-safe singleton pattern for database access _database_instances: Dict[int, MusicDatabase] = {} # Thread ID -> Database instance diff --git a/main.py b/main.py index 31882030..40b1a8ce 100644 --- a/main.py +++ b/main.py @@ -12,6 +12,7 @@ from config.settings import config_manager from utils.logging_config import setup_logging, get_logger from core.spotify_client import SpotifyClient from core.plex_client import PlexClient +from core.jellyfin_client import JellyfinClient from core.soulseek_client import SoulseekClient from ui.sidebar import ModernSidebar @@ -27,10 +28,11 @@ logger = get_logger("main") class ServiceStatusThread(QThread): status_updated = pyqtSignal(str, bool) - def __init__(self, spotify_client, plex_client, soulseek_client): + def __init__(self, spotify_client, plex_client, jellyfin_client, soulseek_client): super().__init__() self.spotify_client = spotify_client self.plex_client = plex_client + self.jellyfin_client = jellyfin_client self.soulseek_client = soulseek_client self.running = True @@ -51,20 +53,8 @@ class ServiceStatusThread(QThread): server_status = self.plex_client.is_connected() self.status_updated.emit("plex", server_status) elif active_server == "jellyfin": - # For now, do a basic config check for Jellyfin until JellyfinClient is implemented - jellyfin_config = self.config_manager.get_jellyfin_config() - jellyfin_status = bool(jellyfin_config.get('base_url')) and bool(jellyfin_config.get('api_key')) - if jellyfin_status: - # Do a quick HTTP test to verify connection - try: - import requests - base_url = jellyfin_config.get('base_url', '').rstrip('/') - api_key = jellyfin_config.get('api_key', '') - headers = {'X-Emby-Token': api_key} if api_key else {} - response = requests.get(f"{base_url}/System/Info", headers=headers, timeout=3) - jellyfin_status = response.status_code == 200 - except: - jellyfin_status = False + # Use the JellyfinClient for status checking + jellyfin_status = self.jellyfin_client.is_connected() self.status_updated.emit("jellyfin", jellyfin_status) # Check Soulseek connection (simplified check to avoid event loop issues) @@ -91,6 +81,7 @@ class MainWindow(QMainWindow): self.spotify_client = SpotifyClient() self.plex_client = PlexClient() + self.jellyfin_client = JellyfinClient() self.soulseek_client = SoulseekClient() self.status_thread = None @@ -183,7 +174,13 @@ class MainWindow(QMainWindow): # Create and add pages self.dashboard_page = DashboardPage() self.downloads_page = DownloadsPage(self.soulseek_client) - self.sync_page = SyncPage(self.spotify_client, self.plex_client, self.soulseek_client, self.downloads_page) + self.sync_page = SyncPage( + spotify_client=self.spotify_client, + plex_client=self.plex_client, + soulseek_client=self.soulseek_client, + downloads_page=self.downloads_page, + jellyfin_client=self.jellyfin_client + ) self.artists_page = ArtistsPage(downloads_page=self.downloads_page) self.settings_page = SettingsPage() @@ -194,7 +191,7 @@ class MainWindow(QMainWindow): self.settings_page.set_toast_manager(self.toast_manager) # Configure dashboard with service clients and page references - self.dashboard_page.set_service_clients(self.spotify_client, self.plex_client, self.soulseek_client) + self.dashboard_page.set_service_clients(self.spotify_client, self.plex_client, self.jellyfin_client, self.soulseek_client) self.dashboard_page.set_page_references(self.downloads_page, self.sync_page) self.dashboard_page.set_app_start_time(self.app_start_time) self.dashboard_page.set_toast_manager(self.toast_manager) @@ -241,6 +238,7 @@ class MainWindow(QMainWindow): self.status_thread = ServiceStatusThread( self.spotify_client, self.plex_client, + self.jellyfin_client, self.soulseek_client ) self.status_thread.status_updated.connect(self.update_service_status) diff --git a/services/sync_service.py b/services/sync_service.py index 5a33c641..0a66bc7a 100644 --- a/services/sync_service.py +++ b/services/sync_service.py @@ -5,6 +5,7 @@ from datetime import datetime from utils.logging_config import get_logger from core.spotify_client import SpotifyClient, Playlist as SpotifyPlaylist, Track as SpotifyTrack from core.plex_client import PlexClient, PlexTrackInfo +from core.jellyfin_client import JellyfinClient from core.soulseek_client import SoulseekClient from core.matching_engine import MusicMatchingEngine, MatchResult @@ -40,15 +41,33 @@ class SyncProgress: failed_tracks: int = 0 class PlaylistSyncService: - def __init__(self, spotify_client: SpotifyClient, plex_client: PlexClient, soulseek_client: SoulseekClient): + def __init__(self, spotify_client: SpotifyClient, plex_client: PlexClient, soulseek_client: SoulseekClient, jellyfin_client: JellyfinClient = None): self.spotify_client = spotify_client self.plex_client = plex_client + self.jellyfin_client = jellyfin_client self.soulseek_client = soulseek_client self.progress_callbacks = {} # Playlist-specific progress callbacks self.syncing_playlists = set() # Track multiple syncing playlists self._cancelled = False self.matching_engine = MusicMatchingEngine() + def _get_active_media_client(self): + """Get the active media client based on config settings""" + try: + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + + if active_server == "jellyfin": + if not self.jellyfin_client: + logger.error("Jellyfin client not provided to sync service") + return None, "jellyfin" + return self.jellyfin_client, "jellyfin" + else: # Default to Plex + return self.plex_client, "plex" + except Exception as e: + logger.error(f"Error determining active media server: {e}") + return self.plex_client, "plex" # Fallback to Plex + @property def is_syncing(self): """Check if any playlist is currently syncing""" @@ -145,7 +164,7 @@ class PlaylistSyncService: failed_tracks=len([r for r in match_results if not r.is_match])) # Use the robust search approach - plex_match, confidence = await self._find_track_in_plex(track) + plex_match, confidence = await self._find_track_in_media_server(track) match_result = MatchResult( spotify_track=track, @@ -204,7 +223,14 @@ class PlaylistSyncService: logger.info(f"Playlist validation: {len(valid_tracks)}/{len(plex_tracks)} tracks are valid Plex objects with ratingKeys") plex_tracks = valid_tracks - sync_success = self.plex_client.update_playlist(playlist.name, plex_tracks) + # Use active media server for playlist sync + media_client, server_type = self._get_active_media_client() + if not media_client: + logger.error(f"No active media client available for playlist sync") + sync_success = False + else: + logger.info(f"Syncing playlist '{playlist.name}' to {server_type.upper()} server") + sync_success = media_client.update_playlist(playlist.name, plex_tracks) synced_tracks = len(plex_tracks) if sync_success else 0 failed_tracks = len(playlist.tracks) - synced_tracks - downloaded_tracks @@ -239,11 +265,13 @@ class PlaylistSyncService: self.clear_progress_callback(playlist.name) self._cancelled = False - async def _find_track_in_plex(self, spotify_track: SpotifyTrack) -> Tuple[Optional[PlexTrackInfo], float]: + async def _find_track_in_media_server(self, spotify_track: SpotifyTrack) -> Tuple[Optional[PlexTrackInfo], float]: """Find a track using the same improved database matching as Download Missing Tracks modal""" try: - if not self.plex_client or not self.plex_client.is_connected(): - logger.warning("Plex client not connected") + # Check active media server connection + media_client, server_type = self._get_active_media_client() + if not media_client or not media_client.is_connected(): + logger.warning(f"{server_type.upper()} client not connected") return None, 0.0 # Use the SAME improved database matching as PlaylistTrackAnalysisWorker @@ -258,25 +286,40 @@ class PlaylistSyncService: artist_name = artist if isinstance(artist, str) else artist - # Use the improved database check_track_exists method + # Use the improved database check_track_exists method with server awareness try: + from config.settings import config_manager + active_server = config_manager.get_active_media_server() db = MusicDatabase() - db_track, confidence = db.check_track_exists(original_title, artist_name, confidence_threshold=0.7) + db_track, confidence = db.check_track_exists(original_title, artist_name, confidence_threshold=0.7, server_source=active_server) if db_track and confidence >= 0.7: logger.debug(f"βœ”οΈ Database match found for '{original_title}' by '{artist_name}': '{db_track.title}' with confidence {confidence:.2f}") - # Fetch the actual Plex track object using the database track ID + # Fetch the actual track object from active media server using the database track ID try: - actual_plex_track = self.plex_client.server.fetchItem(db_track.id) - if actual_plex_track and hasattr(actual_plex_track, 'ratingKey'): - logger.debug(f"βœ”οΈ Successfully fetched actual Plex track for '{db_track.title}' (ratingKey: {actual_plex_track.ratingKey})") - return actual_plex_track, confidence + if server_type == "jellyfin": + # For Jellyfin, create a track object from database info (Jellyfin doesn't have fetchItem) + class JellyfinTrackFromDB: + def __init__(self, db_track): + self.ratingKey = db_track.id + self.title = db_track.title + self.id = db_track.id + + actual_track = JellyfinTrackFromDB(db_track) + logger.debug(f"βœ”οΈ Created Jellyfin track object for '{db_track.title}' (ID: {actual_track.ratingKey})") + return actual_track, confidence else: - logger.warning(f"❌ Fetched Plex track for '{db_track.title}' lacks ratingKey attribute") + # For Plex, use the original fetchItem approach + actual_plex_track = media_client.server.fetchItem(db_track.id) + if actual_plex_track and hasattr(actual_plex_track, 'ratingKey'): + logger.debug(f"βœ”οΈ Successfully fetched actual Plex track for '{db_track.title}' (ratingKey: {actual_plex_track.ratingKey})") + return actual_plex_track, confidence + else: + logger.warning(f"❌ Fetched Plex track for '{db_track.title}' lacks ratingKey attribute") except Exception as fetch_error: - logger.error(f"❌ Failed to fetch actual Plex track for '{db_track.title}' (ID: {db_track.id}): {fetch_error}") + logger.error(f"❌ Failed to fetch actual {server_type} track for '{db_track.title}' (ID: {db_track.id}): {fetch_error}") # Continue to try other artists rather than fail completely continue diff --git a/ui/pages/artists.py b/ui/pages/artists.py index b22282cb..1a4d3a19 100644 --- a/ui/pages/artists.py +++ b/ui/pages/artists.py @@ -544,8 +544,10 @@ class SinglesEPsLibraryWorker(QThread): print(f" πŸ” Searching for single track: '{track_name}' by '{artist_name}'") - # Search for the track anywhere in the library - db_track, confidence = db.check_track_exists(track_name, artist_name, confidence_threshold=0.7) + # Search for the track anywhere in the library (active server only) + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + db_track, confidence = db.check_track_exists(track_name, artist_name, confidence_threshold=0.7, server_source=active_server) if db_track and confidence >= 0.7: print(f" βœ… Single found: '{track_name}' in album '{db_track.album_title}' (confidence: {confidence:.2f})") @@ -645,8 +647,10 @@ class SinglesEPsLibraryWorker(QThread): track_name = track['name'] artist_name = track['artists'][0]['name'] if track['artists'] else (ep_release.artists[0] if ep_release.artists else "") - # Search for this track - db_track, confidence = db.check_track_exists(track_name, artist_name, confidence_threshold=0.7) + # Search for this track (active server only) + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + db_track, confidence = db.check_track_exists(track_name, artist_name, confidence_threshold=0.7, server_source=active_server) if db_track and confidence >= 0.7: owned_tracks += 1 diff --git a/ui/pages/dashboard.py b/ui/pages/dashboard.py index 7f2af1bd..1fdc9646 100644 --- a/ui/pages/dashboard.py +++ b/ui/pages/dashboard.py @@ -119,7 +119,10 @@ class PlaylistTrackAnalysisWorker(QRunnable): for query_title in unique_title_variations: if self._cancelled: return None, 0.0 - db_track, confidence = db.check_track_exists(query_title, artist_name, confidence_threshold=0.7) + # Use server-aware database query to check only active server + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + db_track, confidence = db.check_track_exists(query_title, artist_name, confidence_threshold=0.7, server_source=active_server) if db_track and confidence >= 0.7: class MockPlexTrack: @@ -1935,10 +1938,11 @@ class DashboardDataProvider(QObject): self.system_stats_timer.timeout.connect(self.update_system_stats) self.system_stats_timer.start(10000) # Update every 10 seconds - def set_service_clients(self, spotify_client, plex_client, soulseek_client): + def set_service_clients(self, spotify_client, plex_client, jellyfin_client, soulseek_client): self.service_clients = { 'spotify_client': spotify_client, - 'plex_client': plex_client, + 'plex_client': plex_client, + 'jellyfin_client': jellyfin_client, 'soulseek_client': soulseek_client } @@ -2344,8 +2348,11 @@ class MetadataUpdaterWidget(QFrame): layout.setContentsMargins(20, 15, 20, 15) layout.setSpacing(12) - # Header - header_label = QLabel("Plex Metadata Updater") + # Header - Make it dynamic based on active server + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + server_display = active_server.title() + header_label = QLabel(f"{server_display} Metadata Updater") header_label.setFont(QFont("Arial", 14, QFont.Weight.Bold)) header_label.setStyleSheet("color: #ffffff;") @@ -2683,14 +2690,15 @@ class DashboardPage(QWidget): self.wishlist_download_modal.process_finished.connect(self.on_wishlist_modal_finished) return True - def set_service_clients(self, spotify_client, plex_client, soulseek_client, downloads_page=None): + def set_service_clients(self, spotify_client, plex_client, jellyfin_client, soulseek_client, downloads_page=None): """Called from main window to provide service client references""" - self.data_provider.set_service_clients(spotify_client, plex_client, soulseek_client) + self.data_provider.set_service_clients(spotify_client, plex_client, jellyfin_client, soulseek_client) # Store service clients for wishlist modal self.service_clients = { 'spotify_client': spotify_client, 'plex_client': plex_client, + 'jellyfin_client': jellyfin_client, 'soulseek_client': soulseek_client, 'downloads_page': downloads_page } @@ -2767,11 +2775,24 @@ class DashboardPage(QWidget): return # Create worker for incremental update only - plex_client = self.service_clients.get('plex_client') + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + + # Get the appropriate client + if active_server == "plex": + media_client = self.service_clients.get('plex_client') + elif active_server == "jellyfin": + from core.jellyfin_client import JellyfinClient + media_client = JellyfinClient() + else: + logger.error(f"Unknown active server for auto-update: {active_server}") + return + self._auto_database_worker = DatabaseUpdateWorker( - plex_client, + media_client, "database/music_library.db", - full_refresh=False # Always incremental for automatic updates + full_refresh=False, # Always incremental for automatic updates + server_type=active_server ) # Connect completion signal to log result @@ -3147,9 +3168,24 @@ class DashboardPage(QWidget): logger.debug(f"Service clients available: {list(self.data_provider.service_clients.keys())}") logger.debug(f"Plex client: {self.data_provider.service_clients.get('plex')}") - if not hasattr(self, 'data_provider') or not self.data_provider.service_clients.get('plex_client'): + # Check that we have a data provider + if not hasattr(self, 'data_provider'): + self.add_activity_item("❌", "Database Update", "Service clients not available", "Now") + return + + # Get the active media server and check if client is available + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + + if active_server == "plex" and not self.data_provider.service_clients.get('plex_client'): self.add_activity_item("❌", "Database Update", "Plex client not available", "Now") return + elif active_server == "jellyfin": + # Jellyfin client will be created on-demand, just verify config exists + jellyfin_config = config_manager.get_jellyfin_config() + if not jellyfin_config.get('base_url') or not jellyfin_config.get('api_key'): + self.add_activity_item("❌", "Database Update", "Jellyfin not configured", "Now") + return try: # Get update type from dropdown @@ -3172,11 +3208,28 @@ class DashboardPage(QWidget): logger.debug("Full refresh cancelled by user") return # Cancel the operation + # Get the active media server + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + + # Get the appropriate client + if active_server == "plex": + media_client = self.data_provider.service_clients['plex_client'] + elif active_server == "jellyfin": + # Import and get Jellyfin client + from core.jellyfin_client import JellyfinClient + media_client = JellyfinClient() + else: + logger.error(f"Unknown active server: {active_server}") + self.add_activity_item("❌", "Database Update", f"Unknown server type: {active_server}", "Now") + return + # Start the database update worker self.database_worker = DatabaseUpdateWorker( - self.data_provider.service_clients['plex_client'], + media_client, "database/music_library.db", - full_refresh + full_refresh, + server_type=active_server ) # Connect signals @@ -3189,7 +3242,8 @@ class DashboardPage(QWidget): # Update UI and start self.database_widget.update_progress(True, "Initializing...", 0, 0, 0.0) update_type = "Full refresh" if full_refresh else "Incremental update" - self.add_activity_item("πŸ—„οΈ", "Database Update", f"Starting {update_type.lower()}...", "Now") + server_display = active_server.title() # "Plex" or "Jellyfin" + self.add_activity_item("πŸ—„οΈ", "Database Update", f"Starting {update_type.lower()} from {server_display}...", "Now") self.database_worker.start() @@ -3349,6 +3403,15 @@ class DashboardPage(QWidget): if hasattr(self, 'data_provider') and hasattr(self.data_provider, 'service_clients'): logger.debug(f"Service clients available: {list(self.data_provider.service_clients.keys())}") + # Check active server and client availability + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + + # Currently metadata updater only supports Plex + if active_server != "plex": + self.add_activity_item("❌", "Metadata Update", f"Metadata updater only supports Plex (active: {active_server.title()})", "Now") + return + if not hasattr(self, 'data_provider') or not self.data_provider.service_clients.get('plex_client'): self.add_activity_item("❌", "Metadata Update", "Plex client not available", "Now") return diff --git a/ui/pages/sync.py b/ui/pages/sync.py index 59f8e6f5..6b1b18f4 100644 --- a/ui/pages/sync.py +++ b/ui/pages/sync.py @@ -624,8 +624,10 @@ class PlaylistTrackAnalysisWorker(QRunnable): for query_title in unique_title_variations: if self._cancelled: return None, 0.0 - # Use database check_track_exists method with consistent thresholds - db_track, confidence = db.check_track_exists(query_title, artist_name, confidence_threshold=0.7) + # Use database check_track_exists method with consistent thresholds and active server filter + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + db_track, confidence = db.check_track_exists(query_title, artist_name, confidence_threshold=0.7, server_source=active_server) if db_track and confidence >= 0.7: print(f"βœ”οΈ Database match found for '{original_title}' by '{artist_name}': '{db_track.title}' with confidence {confidence:.2f}") @@ -1633,7 +1635,8 @@ class PlaylistDetailsModal(QDialog): self.parent_page.sync_service = PlaylistSyncService( self.parent_page.spotify_client, self.parent_page.plex_client, - self.parent_page.soulseek_client + self.parent_page.soulseek_client, + getattr(self.parent_page, 'jellyfin_client', None) ) # Start sync @@ -2673,10 +2676,11 @@ class SyncPage(QWidget): sync_activity = pyqtSignal(str, str, str, str) # icon, title, subtitle, time database_updated_externally = pyqtSignal() - def __init__(self, spotify_client=None, plex_client=None, soulseek_client=None, downloads_page=None, parent=None): + def __init__(self, spotify_client=None, plex_client=None, soulseek_client=None, downloads_page=None, jellyfin_client=None, parent=None): super().__init__(parent) self.spotify_client = spotify_client self.plex_client = plex_client + self.jellyfin_client = jellyfin_client self.soulseek_client = soulseek_client self.downloads_page = downloads_page self.sync_statuses = load_sync_status() @@ -2866,7 +2870,8 @@ class SyncPage(QWidget): self.sync_service = PlaylistSyncService( self.spotify_client, self.plex_client, - self.soulseek_client + self.soulseek_client, + getattr(self, 'jellyfin_client', None) ) # Create sync worker @@ -2919,7 +2924,8 @@ class SyncPage(QWidget): self.sync_service = PlaylistSyncService( self.spotify_client, self.plex_client, - self.soulseek_client + self.soulseek_client, + getattr(self, 'jellyfin_client', None) ) # Create sync worker for sequential sync From 0c90f4f327580cde0d3de3f027b6753bc8212cb3 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Mon, 18 Aug 2025 15:32:58 -0700 Subject: [PATCH 03/12] multi-server source --- core/jellyfin_client.py | 80 ++++++ core/media_scan_manager.py | 346 +++++++++++++++++++++++ database/music_database.py | 21 +- database/music_library.db-shm | Bin 0 -> 32768 bytes database/music_library.db-wal | Bin 0 -> 535632 bytes services/sync_service.py | 18 +- ui/components/database_updater_widget.py | 11 +- ui/pages/artists.py | 37 ++- ui/pages/dashboard.py | 36 ++- ui/pages/sync.py | 34 ++- 10 files changed, 537 insertions(+), 46 deletions(-) create mode 100644 core/media_scan_manager.py create mode 100644 database/music_library.db-shm create mode 100644 database/music_library.db-wal diff --git a/core/jellyfin_client.py b/core/jellyfin_client.py index e6f1a887..b7db09da 100644 --- a/core/jellyfin_client.py +++ b/core/jellyfin_client.py @@ -1075,4 +1075,84 @@ class JellyfinClient: except Exception as e: logger.error(f"Error updating Jellyfin playlist '{playlist_name}': {e}") + return False + + def trigger_library_scan(self, library_name: str = "Music") -> bool: + """Trigger Jellyfin library scan for the specified library""" + if not self.ensure_connection(): + return False + + try: + # Get library info to find the correct library ID + libraries_response = self._make_request(f'/Users/{self.user_id}/Views') + if not libraries_response: + logger.error("Failed to get library list for scan") + return False + + target_library_id = None + for library in libraries_response.get('Items', []): + if (library.get('CollectionType') == 'music' and + library_name.lower() in library.get('Name', '').lower()): + target_library_id = library['Id'] + break + + # Default to music_library_id if no specific library found + if not target_library_id: + target_library_id = self.music_library_id + + if not target_library_id: + logger.error(f"No library found matching '{library_name}'") + return False + + # Trigger the scan using POST request + import requests + url = f"{self.base_url}/Items/{target_library_id}/Refresh" + headers = { + 'X-Emby-Token': self.api_key, + 'Content-Type': 'application/json' + } + params = { + 'Recursive': True, + 'ImageRefreshMode': 'ValidationOnly', # Don't refresh images, just metadata + 'MetadataRefreshMode': 'ValidationOnly' + } + + response = requests.post(url, headers=headers, params=params, timeout=10) + response.raise_for_status() + + logger.info(f"🎡 Triggered Jellyfin library scan for '{library_name}'") + return True + + except Exception as e: + logger.error(f"Failed to trigger Jellyfin library scan for '{library_name}': {e}") + return False + + def is_library_scanning(self, library_name: str = "Music") -> bool: + """Check if Jellyfin library is currently scanning""" + if not self.ensure_connection(): + logger.debug("πŸ” DEBUG: Not connected to Jellyfin, cannot check scan status") + return False + + try: + # Check scheduled tasks for library scan activities + response = self._make_request('/ScheduledTasks') + if not response: + logger.debug("πŸ” DEBUG: Could not get scheduled tasks") + return False + + for task in response: + task_name = task.get('Name', '').lower() + task_state = task.get('State', 'Idle') + + # Look for library scan related tasks that are running + if ('scan' in task_name or 'refresh' in task_name or 'library' in task_name): + if task_state in ['Running', 'Cancelling']: + logger.debug(f"πŸ” DEBUG: Found running scan task: {task.get('Name')} (State: {task_state})") + return True + + logger.debug("πŸ” DEBUG: No active scan tasks detected") + return False + + except Exception as e: + logger.debug(f"Error checking if Jellyfin library is scanning: {e}") return False \ No newline at end of file diff --git a/core/media_scan_manager.py b/core/media_scan_manager.py new file mode 100644 index 00000000..bc8f4eb0 --- /dev/null +++ b/core/media_scan_manager.py @@ -0,0 +1,346 @@ +#!/usr/bin/env python3 + +import threading +import time +from utils.logging_config import get_logger + +logger = get_logger("media_scan_manager") + +class MediaScanManager: + """ + Smart media library scan manager with debouncing and scan-aware follow-up logic. + Supports both Plex and Jellyfin servers based on active configuration. + + Features: + - Debounces multiple scan requests to prevent spam + - Tracks downloads that happen during active scans + - Automatically triggers follow-up scans when needed + - Thread-safe operation + - Works with both Plex and Jellyfin + """ + + def __init__(self, delay_seconds: int = 60): + """ + Initialize the scan manager. + + Args: + delay_seconds: Debounce delay in seconds (default 60s) + """ + self.delay = delay_seconds + self._timer = None + self._scan_in_progress = False + self._downloads_during_scan = False + self._lock = threading.Lock() + self._scan_completion_callbacks = [] # List of callback functions to call when scan completes + self._scan_start_time = None # Track when scan started for timeout + self._max_scan_time = 1800 # Maximum scan time in seconds (30 minutes) + + # New periodic update system + self._periodic_update_timer = None # Timer for 5-minute periodic updates + self._periodic_update_interval = 300 # 5 minutes in seconds + self._is_doing_periodic_updates = False # Track if we're in periodic update mode + + logger.info(f"MediaScanManager initialized with {delay_seconds}s debounce delay") + + def _get_active_media_client(self): + """Get the active media client based on config settings""" + try: + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + + # Try to get client instances from app + try: + from PyQt6.QtWidgets import QApplication + app = QApplication.instance() + + # Try to find the main window from top-level widgets + main_window = None + for widget in app.topLevelWidgets(): + if hasattr(widget, 'plex_client') and hasattr(widget, 'jellyfin_client'): + main_window = widget + break + + if main_window: + if active_server == "jellyfin": + client = getattr(main_window, 'jellyfin_client', None) + if client and client.is_connected(): + return client, "jellyfin" + else: + logger.warning("Jellyfin client not connected, falling back to Plex") + + # Default to Plex or fallback + client = getattr(main_window, 'plex_client', None) + if client and client.is_connected(): + return client, "plex" + else: + logger.debug(f"Plex client not connected or not found") + + except Exception as e: + logger.debug(f"Could not access clients from main window: {e}") + + logger.error("No active media client available") + return None, None + except Exception as e: + logger.error(f"Error determining active media server: {e}") + return None, None + + def request_scan(self, reason: str = "Download completed"): + """ + Request a library scan with smart debouncing logic. + + Args: + reason: Optional reason for the scan request (for logging) + """ + logger.info(f"DEBUG: Media scan requested - reason: {reason}") + with self._lock: + if self._scan_in_progress: + # Server is currently scanning - mark that we need another scan later + self._downloads_during_scan = True + logger.info(f"πŸ“‘ Media scan in progress - queueing follow-up scan ({reason})") + return + + # Cancel any existing timer and start a new one + if self._timer: + self._timer.cancel() + logger.debug(f"⏳ Resetting scan timer ({reason})") + else: + logger.info(f"⏳ Media scan queued - will execute in {self.delay}s ({reason})") + + # Start the debounce timer + self._timer = threading.Timer(self.delay, self._execute_scan) + self._timer.start() + + def add_scan_completion_callback(self, callback): + """ + Add a callback function to be called when scan completes. + + Args: + callback: Function to call when scan completes (no arguments) + """ + with self._lock: + if callback not in self._scan_completion_callbacks: + self._scan_completion_callbacks.append(callback) + logger.info(f"DEBUG: Added scan completion callback: {callback.__name__}") + logger.info(f"DEBUG: Total callbacks registered: {len(self._scan_completion_callbacks)}") + + def remove_scan_completion_callback(self, callback): + """ + Remove a previously registered callback. + + Args: + callback: Function to remove from callbacks + """ + with self._lock: + if callback in self._scan_completion_callbacks: + self._scan_completion_callbacks.remove(callback) + logger.debug(f"Removed scan completion callback: {callback.__name__}") + + def _execute_scan(self): + """Execute the actual media library scan""" + with self._lock: + if self._scan_in_progress: + logger.warning("Scan already in progress - skipping duplicate execution") + return + + self._scan_in_progress = True + self._downloads_during_scan = False + self._timer = None + self._scan_start_time = time.time() + + # Get the active media client + media_client, server_type = self._get_active_media_client() + if not media_client: + logger.error("❌ No active media client available for library scan") + self._reset_scan_state() + return + + logger.info(f"🎡 Starting {server_type.upper()} library scan...") + + try: + success = media_client.trigger_library_scan() + + if success: + logger.info(f"βœ… {server_type.upper()} library scan initiated successfully") + # Start new periodic update system instead of completion detection + self._start_periodic_updates() + else: + logger.error(f"❌ Failed to initiate {server_type.upper()} library scan") + self._reset_scan_state() + + except Exception as e: + logger.error(f"Exception during {server_type.upper()} library scan: {e}") + self._reset_scan_state() + + def _start_periodic_updates(self): + """Start periodic database updates while media server is scanning""" + try: + with self._lock: + if self._is_doing_periodic_updates: + logger.debug("Periodic updates already in progress") + return + + self._is_doing_periodic_updates = True + + logger.info(f"πŸ•’ Starting periodic database updates - will check/update every {self._periodic_update_interval//60} minutes") + + # Schedule first periodic update after 5 minutes + self._periodic_update_timer = threading.Timer(self._periodic_update_interval, self._do_periodic_update) + self._periodic_update_timer.start() + + except Exception as e: + logger.error(f"Error starting periodic updates: {e}") + self._reset_scan_state() + + def _do_periodic_update(self): + """Execute periodic database update and check if scanning continues""" + try: + with self._lock: + if not self._scan_in_progress: + logger.debug("Scan no longer in progress, stopping periodic updates") + return + + # Check for timeout + if self._scan_start_time and (time.time() - self._scan_start_time) > self._max_scan_time: + logger.warning(f"Media scan timeout reached ({self._max_scan_time}s), stopping periodic updates") + self._stop_periodic_updates() + return + + # Get the active media client + media_client, server_type = self._get_active_media_client() + if not media_client: + logger.warning("No active media client available for scan status check") + self._stop_periodic_updates() + return + + # Check if media server is still scanning + is_scanning = media_client.is_library_scanning("Music") + elapsed_time = time.time() - self._scan_start_time if self._scan_start_time else 0 + + logger.info(f"πŸ•’ PERIODIC UPDATE: After {elapsed_time//60:.0f} minutes - {server_type.upper()} scanning: {is_scanning}") + + if is_scanning: + # Still scanning - trigger database update and continue periodic updates + logger.info(f"πŸ”„ {server_type.upper()} still scanning - triggering database update") + self._call_completion_callbacks() + + # Schedule next periodic update + logger.info(f"πŸ•’ Scheduling next periodic update in {self._periodic_update_interval//60} minutes") + self._periodic_update_timer = threading.Timer(self._periodic_update_interval, self._do_periodic_update) + self._periodic_update_timer.start() + else: + # Scanning stopped - final update and cleanup + logger.info(f"βœ… {server_type.upper()} scanning completed - doing final database update") + self._call_completion_callbacks() + self._stop_periodic_updates() + + except Exception as e: + logger.error(f"Error during periodic update: {e}") + self._stop_periodic_updates() + + def _stop_periodic_updates(self): + """Stop periodic updates and clean up""" + try: + with self._lock: + self._is_doing_periodic_updates = False + + if self._periodic_update_timer: + self._periodic_update_timer.cancel() + self._periodic_update_timer = None + + logger.info("πŸ•’ Stopped periodic database updates") + self._scan_completed() + + except Exception as e: + logger.error(f"Error stopping periodic updates: {e}") + + def _scan_completed(self): + """Called when we assume the scan has completed""" + with self._lock: + was_in_progress = self._scan_in_progress + downloads_during_scan = self._downloads_during_scan + + # Reset scan state + self._scan_in_progress = False + + if not was_in_progress: + logger.debug("Scan completion callback called but scan was not in progress") + return + + logger.info("πŸ“‘ Media library scan completed") + + # Call registered completion callbacks + self._call_completion_callbacks() + + # Check if we need a follow-up scan + if downloads_during_scan: + logger.info("πŸ”„ Downloads occurred during scan - triggering follow-up scan") + self.request_scan("Follow-up scan for downloads during previous scan") + else: + logger.info("βœ… No downloads during scan - scan cycle complete") + + def _call_completion_callbacks(self): + """Call all registered scan completion callbacks""" + with self._lock: + callbacks = self._scan_completion_callbacks.copy() # Copy to avoid lock issues + + logger.info(f"DEBUG: Calling {len(callbacks)} scan completion callbacks") + for callback in callbacks: + try: + logger.info(f"DEBUG: Executing callback: {callback.__name__}") + callback() + logger.info(f"DEBUG: Callback {callback.__name__} completed successfully") + except Exception as e: + logger.error(f"Error in scan completion callback {callback.__name__}: {e}") + + def _reset_scan_state(self): + """Reset scan state after an error""" + with self._lock: + self._scan_in_progress = False + self._scan_start_time = None + + # Cancel periodic updates if running + if self._periodic_update_timer: + self._periodic_update_timer.cancel() + self._periodic_update_timer = None + self._is_doing_periodic_updates = False + + def force_scan(self): + """ + Force an immediate scan, bypassing debouncing. + Use sparingly - mainly for manual/administrative triggers. + """ + with self._lock: + if self._timer: + self._timer.cancel() + self._timer = None + + if self._scan_in_progress: + logger.warning("Force scan requested but scan already in progress") + return + + logger.info("πŸš€ Force scan requested - executing immediately") + self._execute_scan() + + def get_status(self) -> dict: + """Get current status of the scan manager""" + with self._lock: + return { + 'scan_in_progress': self._scan_in_progress, + 'downloads_during_scan': self._downloads_during_scan, + 'timer_active': self._timer is not None, + 'delay_seconds': self.delay + } + + def shutdown(self): + """Clean shutdown - cancel any pending timers""" + with self._lock: + if self._timer: + self._timer.cancel() + self._timer = None + + if self._periodic_update_timer: + self._periodic_update_timer.cancel() + self._periodic_update_timer = None + + self._is_doing_periodic_updates = False + logger.info("MediaScanManager shutdown - cancelled all pending timers") \ No newline at end of file diff --git a/database/music_database.py b/database/music_database.py index df37655f..ae41e90e 100644 --- a/database/music_database.py +++ b/database/music_database.py @@ -557,7 +557,26 @@ class MusicDatabase: artist_id = str(artist_obj.ratingKey) name = artist_obj.title thumb_url = getattr(artist_obj, 'thumb', None) - summary = getattr(artist_obj, 'summary', None) + + # Only preserve timestamps and flags from summary, not full biography + full_summary = getattr(artist_obj, 'summary', None) or '' + summary = None + if full_summary: + # Extract only our tracking markers (timestamps and ignore flags) + import re + markers = [] + + # Extract timestamp marker + timestamp_match = re.search(r'-updatedAt\d{4}-\d{2}-\d{2}', full_summary) + if timestamp_match: + markers.append(timestamp_match.group(0)) + + # Extract ignore flag + if '-IgnoreUpdate' in full_summary: + markers.append('-IgnoreUpdate') + + # Only store markers, not full biography + summary = '\n\n'.join(markers) if markers else None # Get genres (handle both Plex and Jellyfin formats) genres = [] diff --git a/database/music_library.db-shm b/database/music_library.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..6512b3bbd1c1275ab0f7b414219a2aed7c31ae0a GIT binary patch literal 32768 zcmeI5NlX+`5Qcw5#SKMpK~WG%)gqBW`ecyk9x zeh<_&03*bI#%aL+HgNAX@TgvTYXUCIQ!h`1>{sstQVW3QLLlr2kW~VNmjTnS13#oD zMru@E<(lpS#iHZPN9JgIz3*#zXMNIB;NfR2e=ECvpT~7t&8794X8Kj&AY7=D+XFgq+I(dB5<#Tm&m+A85Ra(9LPH^D3L#yhF!$)cPiFcelf$M;P zV$DnKseImAN3KGC463&xnWd&ydi=vt)i6ka1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cypMqVecz{IvxU<}SmHGlQ?bHir$Lab7di>KNTJ=3ix^yri@H;D zbZg_53yqVqKxsi2JrcTD_y4kf$ol^#cT6J?YMQbVo?xmv#k)sf7)E0pCLtbkk%~;@ zU@LZ`0LM@QxmJc@djjWdKS9qKARAk-6Z>%##W>${#^NMCO<=oEPw)QliSA3ZDa>nI zap4|;3R&?cf}@>`WlQ&dsxT5+DJ?2~0Lzk%A=PIRbr5wU(>+ zO^j70YE#-tKwc@}Gcg=th(t7|V?GvRHFB{HdvLHv%pYj+6f-RLqn&XC7P%#L%B|DZ z9*%R#uD464%sr&u86$7MG1sKq>hcnsF2xW`!O|{OvdB&Z`rD~l_G%GR6+u_o?30!cg zy_GJVGUm`GV`MPfARWq(011$QrwJ_abOSc_PqwJ{0g%@-Gi*y>qHR0(oyPrbGwN^A Cq}{Oq literal 0 HcmV?d00001 diff --git a/database/music_library.db-wal b/database/music_library.db-wal new file mode 100644 index 0000000000000000000000000000000000000000..84d80a9cbfc94e66a4601113f91d607dc5991ebf GIT binary patch literal 535632 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�?7p_ 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�li!N7=3Lgp= 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 bCni_s&Z{P7cFrwV=aswt{vj=2@8 YouTubePlaylistCard instance self.youtube_cards_container = None # Container for all YouTube cards - # Initialize Plex scan manager + # Initialize unified media scan manager self.scan_manager = None - if self.plex_client: - self.scan_manager = PlexScanManager(self.plex_client, delay_seconds=60) - # Add automatic incremental database update after Plex scan completion - self.scan_manager.add_scan_completion_callback(self._on_plex_scan_completed) + try: + from core.media_scan_manager import MediaScanManager + self.scan_manager = MediaScanManager(delay_seconds=60) + # Add automatic incremental database update after scan completion + self.scan_manager.add_scan_completion_callback(self._on_media_scan_completed) + logger.info("βœ… MediaScanManager initialized for SyncPage") + except Exception as e: + logger.error(f"Failed to initialize MediaScanManager: {e}") self.setup_ui() @@ -2733,16 +2737,24 @@ class SyncPage(QWidget): """Set the toast manager for showing notifications""" self.toast_manager = toast_manager - def _on_plex_scan_completed(self): - """Callback triggered when Plex scan completes - start automatic incremental database update""" + def _on_media_scan_completed(self): + """Callback triggered when media scan completes - start automatic incremental database update""" try: # Import here to avoid circular imports from database import get_database from core.database_update_worker import DatabaseUpdateWorker + from config.settings import config_manager + + # Get the active media client + active_server = config_manager.get_active_media_server() + if active_server == "jellyfin": + media_client = getattr(self, 'jellyfin_client', None) + else: + media_client = getattr(self, 'plex_client', None) # Check if we should run incremental update - if not self.plex_client or not self.plex_client.is_connected(): - logger.debug("Plex not connected - skipping automatic database update") + if not media_client or not media_client.is_connected(): + logger.debug(f"{active_server.upper()} not connected - skipping automatic database update") return # Check if database has a previous full refresh @@ -2765,11 +2777,11 @@ class SyncPage(QWidget): return # All conditions met - start incremental update - logger.info("🎡 Starting automatic incremental database update after Plex scan") + logger.info(f"🎡 Starting automatic incremental database update after {active_server.upper()} scan") self._start_automatic_incremental_update() except Exception as e: - logger.error(f"Error in Plex scan completion callback: {e}") + logger.error(f"Error in media scan completion callback: {e}") def _start_automatic_incremental_update(self): """Start the automatic incremental database update""" From 5b6ea295229b43546c292e0366f42bb4534dba97 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Mon, 18 Aug 2025 15:52:55 -0700 Subject: [PATCH 04/12] updated artist live album check to use server specific data --- database/music_database.py | 14 +++++++----- database/music_library.db-shm | Bin 32768 -> 32768 bytes database/music_library.db-wal | Bin 535632 -> 0 bytes ui/pages/artists.py | 41 +++++++++++++++++++++++++++------- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/database/music_database.py b/database/music_database.py index ae41e90e..18b8d4ce 100644 --- a/database/music_database.py +++ b/database/music_database.py @@ -1137,7 +1137,7 @@ class MusicDatabase: tracks.append(track) return tracks - def search_albums(self, title: str = "", artist: str = "", limit: int = 50) -> List[DatabaseAlbum]: + def search_albums(self, title: str = "", artist: str = "", limit: int = 50, server_source: Optional[str] = None) -> List[DatabaseAlbum]: """Search albums by title and/or artist name with fuzzy matching""" try: conn = self._get_connection() @@ -1155,6 +1155,10 @@ class MusicDatabase: where_conditions.append("artists.name LIKE ?") params.append(f"%{artist}%") + if server_source: + where_conditions.append("albums.server_source = ?") + params.append(server_source) + if not where_conditions: # If no search criteria, return empty list return [] @@ -1389,7 +1393,7 @@ class MusicDatabase: logger.error(f"Error checking album completeness for album_id {album_id}: {e}") return 0, 0, False - def check_album_exists_with_completeness(self, title: str, artist: str, expected_track_count: Optional[int] = None, confidence_threshold: float = 0.8) -> Tuple[Optional[DatabaseAlbum], float, int, int, bool]: + def check_album_exists_with_completeness(self, title: str, artist: str, expected_track_count: Optional[int] = None, confidence_threshold: float = 0.8, server_source: Optional[str] = None) -> Tuple[Optional[DatabaseAlbum], float, int, int, bool]: """ Check if an album exists in the database with completeness information. Enhanced to handle edition matching (standard <-> deluxe variants). @@ -1397,7 +1401,7 @@ class MusicDatabase: """ try: # Try enhanced edition-aware matching first with expected track count for Smart Edition Matching - album, confidence = self.check_album_exists_with_editions(title, artist, confidence_threshold, expected_track_count) + album, confidence = self.check_album_exists_with_editions(title, artist, confidence_threshold, expected_track_count, server_source) if not album: return None, 0.0, 0, 0, False @@ -1411,7 +1415,7 @@ class MusicDatabase: logger.error(f"Error checking album existence with completeness for '{title}' by '{artist}': {e}") return None, 0.0, 0, 0, False - def check_album_exists_with_editions(self, title: str, artist: str, confidence_threshold: float = 0.8, expected_track_count: Optional[int] = None) -> Tuple[Optional[DatabaseAlbum], float]: + def check_album_exists_with_editions(self, title: str, artist: str, confidence_threshold: float = 0.8, expected_track_count: Optional[int] = None, server_source: Optional[str] = None) -> Tuple[Optional[DatabaseAlbum], float]: """ Enhanced album existence check that handles edition variants. Matches standard albums with deluxe/platinum/special editions and vice versa. @@ -1429,7 +1433,7 @@ class MusicDatabase: for variation in title_variations: # Search for this variation - albums = self.search_albums(title=variation, artist=artist, limit=10) + albums = self.search_albums(title=variation, artist=artist, limit=10, server_source=server_source) if albums: logger.debug(f"πŸ“€ Found {len(albums)} albums for variation '{variation}'") diff --git a/database/music_library.db-shm b/database/music_library.db-shm index 6512b3bbd1c1275ab0f7b414219a2aed7c31ae0a..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 100644 GIT binary patch delta 89 zcmZo@U}|V!;+1%$%K!t6lP5Asi(0Ttu$fN2&50o+0+WHM{|^Kcb7VFzVESVVBN~_i DLyi|H literal 32768 zcmeI5NlX+`5Qcw5#SKMpK~WG%)gqBW`ecyk9x zeh<_&03*bI#%aL+HgNAX@TgvTYXUCIQ!h`1>{sstQVW3QLLlr2kW~VNmjTnS13#oD zMru@E<(lpS#iHZPN9JgIz3*#zXMNIB;NfR2e=ECvpT~7t&8794X8Kj&AY7=D+XFgq+I(dB5<#Tm&m+A85Ra(9LPH^D3L#yhF!$)cPiFcelf$M;P zV$DnKseImAN3KGC463&xnWd&ydi=vt)i6ka1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cypMqVecz{IvxU<}SmHGlQ?bHir$Lab7di>KNTJ=3ix^yri@H;D zbZg_53yqVqKxsi2JrcTD_y4kf$ol^#cT6J?YMQbVo?xmv#k)sf7)E0pCLtbkk%~;@ zU@LZ`0LM@QxmJc@djjWdKS9qKARAk-6Z>%##W>${#^NMCO<=oEPw)QliSA3ZDa>nI zap4|;3R&?cf}@>`WlQ&dsxT5+DJ?2~0Lzk%A=PIRbr5wU(>+ zO^j70YE#-tKwc@}Gcg=th(t7|V?GvRHFB{HdvLHv%pYj+6f-RLqn&XC7P%#L%B|DZ z9*%R#uD464%sr&u86$7MG1sKq>hcnsF2xW`!O|{OvdB&Z`rD~l_G%GR6+u_o?30!cg zy_GJVGUm`GV`MPfARWq(011$QrwJ_abOSc_PqwJ{0g%@-Gi*y>qHR0(oyPrbGwN^A Cq}{Oq diff --git a/database/music_library.db-wal b/database/music_library.db-wal index 84d80a9cbfc94e66a4601113f91d607dc5991ebf..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 GIT binary patch literal 0 HcmV?d00001 literal 535632 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�?7p_ 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�li!N7=3Lgp= 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 bCni_s&Z{P7cFrwV=aswt{vj=2@8 best_confidence: @@ -780,7 +789,7 @@ class DatabaseLibraryWorker(QThread): if not db_album and artist and artist != artist_clean: print(f" πŸ”„ Backup search with original artist: album='{album_name}', artist='{artist}'") db_album_backup, confidence_backup, owned_backup, expected_backup, complete_backup = db.check_album_exists_with_completeness( - album_name, artist, expected_track_count, confidence_threshold=0.7 + album_name, artist, expected_track_count, confidence_threshold=0.7, server_source=active_server ) if db_album_backup and confidence_backup > best_confidence: @@ -797,7 +806,7 @@ class DatabaseLibraryWorker(QThread): artist_no_comma = ' '.join(artist_no_comma.split()) print(f" πŸ”„ Comma-removal fallback: album='{album_name}', artist='{artist_no_comma}'") db_album_comma, confidence_comma, owned_comma, expected_comma, complete_comma = db.check_album_exists_with_completeness( - album_name, artist_no_comma, expected_track_count, confidence_threshold=0.7 + album_name, artist_no_comma, expected_track_count, confidence_threshold=0.7, server_source=active_server ) if db_album_comma and confidence_comma > best_confidence: @@ -4099,10 +4108,18 @@ class ArtistsPage(QWidget): self.singles_eps_worker.start() def start_plex_library_check(self, albums): - """Start Plex library check in background""" - # Show toast for Plex check start + """Start database library check in background""" + # Get active server for dynamic toast message + try: + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + server_name = "Jellyfin" if active_server == "jellyfin" else "Plex" + except: + server_name = "Plex" # Fallback + + # Show toast for library check start if hasattr(self, 'toast_manager') and self.toast_manager: - self.toast_manager.info("Checking your Plex library for owned albums...") + self.toast_manager.info(f"Checking your {server_name} library for owned albums...") # Stop any existing Plex worker if self.plex_library_worker: @@ -4203,12 +4220,20 @@ class ArtistsPage(QWidget): """Handle Plex library check failure""" print(f"Plex library check failed: {error}") + # Get active server for dynamic error message + try: + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + server_name = "Jellyfin" if active_server == "jellyfin" else "Plex" + except: + server_name = "Plex" # Fallback + # Show error toast if hasattr(self, 'toast_manager') and self.toast_manager: - self.toast_manager.error("Plex connection failed - cannot check owned albums") + self.toast_manager.error(f"{server_name} connection failed - cannot check owned albums") if self.current_albums: - self.albums_status.setText(f"Found {len(self.current_albums)} albums β€’ Plex check failed") + self.albums_status.setText(f"Found {len(self.current_albums)} albums β€’ {server_name} check failed") # Display albums without ownership info self.display_albums(self.current_albums, set()) From 18cb848d4e01af1ff81f7414359821698bce2b57 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Mon, 18 Aug 2025 15:53:45 -0700 Subject: [PATCH 05/12] Update config.json --- config/config.json | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/config/config.json b/config/config.json index 78cfb827..d809fdde 100644 --- a/config/config.json +++ b/config/config.json @@ -1,17 +1,24 @@ { + "active_media_server": "plex", "spotify": { - "client_id": "YOUR CLIENT ID", - "client_secret": "YOUR CLIENT SECRET" + "client_id": "CLIENT ID", + "client_secret": "CLIENT SECRET" }, "plex": { "base_url": "http://192.168.86.36:32400", - "token": "YOUR PLEX TOKEN" + "token": "PLEX TOKEN", + "auto_detect": true + }, + "jellyfin": { + "base_url": "http://localhost:8096", + "api_key": "JELLYFIN TOKEN", + "auto_detect": true }, "soulseek": { "slskd_url": "http://localhost:5030", - "api_key": "1234567891234567", - "download_path": "./Downloads", - "transfer_path": "./Music" + "api_key": "SOULSEEK TOKEN", + "download_path": "E:/Broque Projects/newMusic/downloads", + "transfer_path": "H:/Music" }, "logging": { "path": "logs/app.log", From fe84f1dbb86a0956248e73ac1c6c8f9bf45e05ba Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Mon, 18 Aug 2025 16:43:35 -0700 Subject: [PATCH 06/12] remove --- database/music_library.db-shm | Bin 32768 -> 0 bytes database/music_library.db-wal | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 database/music_library.db-shm delete mode 100644 database/music_library.db-wal diff --git a/database/music_library.db-shm b/database/music_library.db-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Date: Mon, 18 Aug 2025 18:00:58 -0700 Subject: [PATCH 07/12] remove metadata updater tool for jellyfin since most of the support is lost. --- core/jellyfin_client.py | 195 ++++++++++++++++++++++++++++++++++++++++ ui/pages/dashboard.py | 157 ++++++++++++++++++++------------ 2 files changed, 295 insertions(+), 57 deletions(-) diff --git a/core/jellyfin_client.py b/core/jellyfin_client.py index b7db09da..a7ac70bc 100644 --- a/core/jellyfin_client.py +++ b/core/jellyfin_client.py @@ -37,6 +37,13 @@ class JellyfinArtist: self.title = jellyfin_data.get('Name', 'Unknown Artist') self.addedAt = self._parse_date(jellyfin_data.get('DateCreated')) + # Create genres property from Jellyfin data (empty list for now since data structure needs investigation) + self.genres = [] + # TODO: Map Jellyfin genre data to match Plex format + + # Create summary property from Jellyfin data (used for timestamp storage) + self.summary = jellyfin_data.get('Overview', '') or '' + def _parse_date(self, date_str: Optional[str]) -> Optional[datetime]: """Parse Jellyfin date string to datetime""" if not date_str: @@ -128,6 +135,9 @@ class JellyfinClient: self._album_cache = {} self._track_cache = {} self._artist_cache = {} + + # Metadata-only mode flag for performance optimization + self._metadata_only_mode = False self._all_albums_cache = None self._all_tracks_cache = None self._cache_populated = False @@ -245,6 +255,12 @@ class JellyfinClient: """Aggressively pre-populate ALL caches to eliminate individual API calls""" if self._cache_populated: return + + # Check if we're in metadata-only mode and skip expensive operations + if self._metadata_only_mode: + logger.info("🎯 Skipping cache population for metadata-only operation") + self._cache_populated = True + return logger.info("πŸš€ Starting aggressive Jellyfin cache population to eliminate slow individual API calls...") if self._progress_callback: @@ -1155,4 +1171,183 @@ class JellyfinClient: except Exception as e: logger.debug(f"Error checking if Jellyfin library is scanning: {e}") + return False + + # Metadata update methods for compatibility with metadata updater + def update_artist_genres(self, artist, genres: List[str]): + """Update artist genres - currently not implemented for Jellyfin""" + try: + # TODO: Implement Jellyfin genre update API + # For now, just log and return success to continue processing + logger.debug(f"Genre update not yet implemented for Jellyfin artist: {artist.title}") + return True + except Exception as e: + logger.error(f"Error updating genres for {artist.title}: {e}") + return False + + def update_artist_poster(self, artist, image_data: bytes): + """Update artist poster image using Jellyfin API""" + try: + artist_id = artist.ratingKey + if not artist_id: + return False + + import requests + + url = f"{self.base_url}/Items/{artist_id}/Images/Primary" + headers = { + 'X-Emby-Token': self.api_key + } + + # Try multiple approaches to find what works with Jellyfin + + # Method 1: Try with different field names that Jellyfin might expect + method1_files = {'data': ('poster.jpg', image_data, 'image/jpeg')} + try: + response = requests.post(url, files=method1_files, headers=headers, timeout=30) + response.raise_for_status() + logger.info(f"Updated poster for {artist.title} (method 1)") + return True + except Exception as e1: + logger.debug(f"Method 1 failed for {artist.title}: {e1}") + + # Method 2: Try with raw data and proper content-type + try: + headers_raw = { + 'X-Emby-Token': self.api_key, + 'Content-Type': 'image/jpeg' + } + response = requests.post(url, data=image_data, headers=headers_raw, timeout=30) + response.raise_for_status() + logger.info(f"Updated poster for {artist.title} (method 2)") + return True + except Exception as e2: + logger.debug(f"Method 2 failed for {artist.title}: {e2}") + + # Method 3: Try with different endpoint structure + try: + alt_url = f"{self.base_url}/Items/{artist_id}/Images/Primary/0" + response = requests.post(alt_url, data=image_data, headers=headers_raw, timeout=30) + response.raise_for_status() + logger.info(f"Updated poster for {artist.title} (method 3)") + return True + except Exception as e3: + logger.debug(f"Method 3 failed for {artist.title}: {e3}") + + # All methods failed + logger.error(f"All image upload methods failed for {artist.title}") + return False + + except Exception as e: + logger.error(f"Error updating poster for {artist.title}: {e}") + return False + + def update_album_poster(self, album, image_data: bytes): + """Update album poster image using Jellyfin API""" + try: + album_id = album.ratingKey + if not album_id: + return False + + import requests + + url = f"{self.base_url}/Items/{album_id}/Images/Primary" + headers = { + 'X-Emby-Token': self.api_key + } + + # Try multiple approaches to find what works with Jellyfin + + # Method 1: Try with different field names that Jellyfin might expect + method1_files = {'data': ('poster.jpg', image_data, 'image/jpeg')} + try: + response = requests.post(url, files=method1_files, headers=headers, timeout=30) + response.raise_for_status() + logger.info(f"Updated poster for album '{album.title}' (method 1)") + return True + except Exception as e1: + logger.debug(f"Method 1 failed for album '{album.title}': {e1}") + + # Method 2: Try with raw data and proper content-type + try: + headers_raw = { + 'X-Emby-Token': self.api_key, + 'Content-Type': 'image/jpeg' + } + response = requests.post(url, data=image_data, headers=headers_raw, timeout=30) + response.raise_for_status() + logger.info(f"Updated poster for album '{album.title}' (method 2)") + return True + except Exception as e2: + logger.debug(f"Method 2 failed for album '{album.title}': {e2}") + + # Method 3: Try with different endpoint structure + try: + alt_url = f"{self.base_url}/Items/{album_id}/Images/Primary/0" + response = requests.post(alt_url, data=image_data, headers=headers_raw, timeout=30) + response.raise_for_status() + logger.info(f"Updated poster for album '{album.title}' (method 3)") + return True + except Exception as e3: + logger.debug(f"Method 3 failed for album '{album.title}': {e3}") + + # All methods failed + logger.error(f"All image upload methods failed for album '{album.title}'") + return False + + except Exception as e: + logger.error(f"Error updating poster for album '{album.title}': {e}") + return False + + def update_artist_biography(self, artist) -> bool: + """Update artist overview/biography - currently not implemented for Jellyfin""" + try: + # TODO: Implement Jellyfin biography update API + # For now, just log and return success to continue processing + logger.debug(f"Biography update not yet implemented for Jellyfin artist: {artist.title}") + return True + except Exception as e: + logger.error(f"Error updating biography for {artist.title}: {e}") + return False + + def needs_update_by_age(self, artist, refresh_interval_days: int) -> bool: + """Check if artist needs updating based on age threshold - simplified for Jellyfin""" + try: + # For now, just return True for all artists since we don't have timestamp tracking yet + # TODO: Implement timestamp tracking in Jellyfin artist metadata + return True + except Exception as e: + logger.debug(f"Error checking update age for {artist.title}: {e}") + return True + + def is_artist_ignored(self, artist) -> bool: + """Check if artist is manually marked to be ignored - simplified for Jellyfin""" + try: + # For now, no artists are ignored + # TODO: Implement ignore flag tracking in Jellyfin artist metadata + return False + except Exception as e: + logger.debug(f"Error checking ignore status for {artist.title}: {e}") + return False + + def parse_update_timestamp(self, artist) -> Optional[datetime]: + """Parse the last update timestamp from artist summary - not implemented for Jellyfin""" + try: + # TODO: Implement timestamp parsing from Jellyfin artist overview + return None + except Exception as e: + logger.debug(f"Error parsing timestamp for {artist.title}: {e}") + return None + + def set_metadata_only_mode(self, enabled: bool = True): + """Enable metadata-only mode to skip expensive track caching""" + try: + self._metadata_only_mode = enabled + if enabled: + logger.info("🎯 Metadata-only mode enabled - will skip expensive track caching") + else: + logger.info("🎯 Metadata-only mode disabled") + return True + except Exception as e: + logger.error(f"Error setting metadata-only mode: {e}") return False \ No newline at end of file diff --git a/ui/pages/dashboard.py b/ui/pages/dashboard.py index bd6fa1f1..b94f37e2 100644 --- a/ui/pages/dashboard.py +++ b/ui/pages/dashboard.py @@ -1404,18 +1404,19 @@ class SimpleWishlistDownloadWorker(QRunnable): class MetadataUpdateWorker(QThread): - """Worker thread for updating Plex artist metadata using Spotify data""" + """Worker thread for updating artist metadata using Spotify data (supports both Plex and Jellyfin)""" progress_updated = pyqtSignal(str, int, int, float) # current_artist, processed, total, percentage artist_updated = pyqtSignal(str, bool, str) # artist_name, success, details finished = pyqtSignal(int, int, int) # total_processed, successful, failed error = pyqtSignal(str) # error_message artists_loaded = pyqtSignal(int, int) # total_artists, artists_to_process - def __init__(self, artists, plex_client, spotify_client, refresh_interval_days=30): + def __init__(self, artists, media_client, spotify_client, server_type, refresh_interval_days=30): super().__init__() self.artists = artists - self.plex_client = plex_client + self.media_client = media_client # Can be plex_client or jellyfin_client self.spotify_client = spotify_client + self.server_type = server_type # "plex" or "jellyfin" self.matching_engine = MusicMatchingEngine() self.refresh_interval_days = refresh_interval_days self.should_stop = False @@ -1428,14 +1429,23 @@ class MetadataUpdateWorker(QThread): def stop(self): self.should_stop = True + def get_artist_name(self, artist): + """Get artist name consistently across Plex and Jellyfin""" + # Both Plex and Jellyfin wrapper objects have .title attribute + return getattr(artist, 'title', 'Unknown Artist') + def run(self): """Process all artists one by one""" try: # Load artists in background if not provided if self.artists is None: - all_artists = self.plex_client.get_all_artists() + # Enable lightweight mode for Jellyfin to skip track caching + if self.server_type == "jellyfin": + self.media_client.set_metadata_only_mode(True) + + all_artists = self.media_client.get_all_artists() if not all_artists: - self.error.emit("No artists found in Plex library") + self.error.emit(f"No artists found in {self.server_type.title()} library") return # Filter artists that need processing @@ -1460,7 +1470,7 @@ class MetadataUpdateWorker(QThread): artist_name = getattr(artist, 'title', 'Unknown Artist') # Double-check ignore flag right before processing (in case it was added after loading) - if self.plex_client.is_artist_ignored(artist): + if self.media_client.is_artist_ignored(artist): return (artist_name, True, "Skipped (ignored)") try: @@ -1505,9 +1515,12 @@ class MetadataUpdateWorker(QThread): def artist_needs_processing(self, artist): """Check if an artist needs metadata processing using age-based detection""" try: - # Use PlexClient's age-based checking with configured interval - # This also handles the ignore flag check internally - return self.plex_client.needs_update_by_age(artist, self.refresh_interval_days) + # Check if artist is manually ignored + if self.media_client.is_artist_ignored(artist): + return False + + # Use media client's age-based checking with configured interval + return self.media_client.needs_update_by_age(artist, self.refresh_interval_days) except Exception as e: print(f"Error checking artist {getattr(artist, 'title', 'Unknown')}: {e}") @@ -1557,14 +1570,18 @@ class MetadataUpdateWorker(QThread): if genres_updated: changes_made.append("genres") - # Update album artwork - albums_updated = self.update_album_artwork(artist, spotify_artist) - if albums_updated > 0: - changes_made.append(f"{albums_updated} album art") + # Update album artwork (only for Plex, skip for Jellyfin due to API issues) + if self.server_type == "plex": + albums_updated = self.update_album_artwork(artist, spotify_artist) + if albums_updated > 0: + changes_made.append(f"{albums_updated} album art") + else: + # Skip album artwork for Jellyfin until API issues are resolved + logger.debug(f"Skipping album artwork updates for Jellyfin artist: {artist.title}") if changes_made: # Update artist biography with timestamp to track last update - biography_updated = self.plex_client.update_artist_biography(artist) + biography_updated = self.media_client.update_artist_biography(artist) if biography_updated: changes_made.append("timestamp") @@ -1572,7 +1589,7 @@ class MetadataUpdateWorker(QThread): return True, details else: # Even if no metadata changes, update biography to record we checked this artist - self.plex_client.update_artist_biography(artist) + self.media_client.update_artist_biography(artist) return True, "Already up to date" except Exception as e: @@ -1642,8 +1659,8 @@ class MetadataUpdateWorker(QThread): print(f"[DEBUG] Updating genres for '{artist.title}' to: {genre_list}") - # Use Plex API to update genres - success = self.plex_client.update_artist_genres(artist, genre_list) + # Use media client API to update genres + success = self.media_client.update_artist_genres(artist, genre_list) if success: print(f"[DEBUG] Successfully updated genres for '{artist.title}'") return True @@ -1801,8 +1818,8 @@ class MetadataUpdateWorker(QThread): print(f"Invalid image data for album '{album_title}'") return False - # Upload to Plex using our new method - success = self.plex_client.update_album_poster(album, image_data) + # Upload using media client + success = self.media_client.update_album_poster(album, image_data) if success: print(f"βœ… Updated artwork for album '{album_title}'") else: @@ -1852,26 +1869,31 @@ class MetadataUpdateWorker(QThread): return None def upload_artist_poster(self, artist, image_data): - """Upload poster to Plex""" + """Upload poster using media client""" try: - # Use Plex client's update method if available - if hasattr(self.plex_client, 'update_artist_poster'): - return self.plex_client.update_artist_poster(artist, image_data) + # Use media client's update method if available + if hasattr(self.media_client, 'update_artist_poster'): + return self.media_client.update_artist_poster(artist, image_data) - # Fallback: direct Plex API call - server = self.plex_client.server - upload_url = f"{server._baseurl}/library/metadata/{artist.ratingKey}/posters" - headers = { - 'X-Plex-Token': server._token, - 'Content-Type': 'image/jpeg' - } - - response = requests.post(upload_url, data=image_data, headers=headers) - response.raise_for_status() - - # Refresh artist to see changes - artist.refresh() - return True + # Fallback for Plex: direct API call + if self.server_type == "plex": + import requests + server = self.media_client.server + upload_url = f"{server._baseurl}/library/metadata/{artist.ratingKey}/posters" + headers = { + 'X-Plex-Token': server._token, + 'Content-Type': 'image/jpeg' + } + + response = requests.post(upload_url, data=image_data, headers=headers) + response.raise_for_status() + + # Refresh artist to see changes + artist.refresh() + return True + else: + # For other server types, return False since we only have fallback for Plex + return False except Exception as e: print(f"Error uploading poster: {e}") @@ -3092,13 +3114,20 @@ class DashboardPage(QWidget): self.database_widget = DatabaseUpdaterWidget() self.database_widget.start_button.clicked.connect(self.toggle_database_update) - # Metadata updater widget (SECOND) - self.metadata_widget = MetadataUpdaterWidget() - self.metadata_widget.start_button.clicked.connect(self.toggle_metadata_update) + # Metadata updater widget (SECOND) - only show for Plex + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + + if active_server == "plex": + self.metadata_widget = MetadataUpdaterWidget() + self.metadata_widget.start_button.clicked.connect(self.toggle_metadata_update) + else: + self.metadata_widget = None # Hide for Jellyfin layout.addWidget(header_label) layout.addWidget(self.database_widget) - layout.addWidget(self.metadata_widget) + if self.metadata_widget: # Only add if it exists + layout.addWidget(self.metadata_widget) return section @@ -3399,6 +3428,9 @@ class DashboardPage(QWidget): def toggle_metadata_update(self): """Toggle metadata update process""" + if not self.metadata_widget: + return # Metadata widget not available (Jellyfin server) + current_text = self.metadata_widget.start_button.text() if "Begin" in current_text: # Start metadata update @@ -3418,13 +3450,17 @@ class DashboardPage(QWidget): active_server = config_manager.get_active_media_server() # Currently metadata updater only supports Plex - if active_server != "plex": - self.add_activity_item("❌", "Metadata Update", f"Metadata updater only supports Plex (active: {active_server.title()})", "Now") - return - - if not hasattr(self, 'data_provider') or not self.data_provider.service_clients.get('plex_client'): - self.add_activity_item("❌", "Metadata Update", "Plex client not available", "Now") - return + # Check if we have the active media server client + if active_server == "jellyfin": + media_client = self.data_provider.service_clients.get('jellyfin_client') + if not media_client: + self.add_activity_item("❌", "Metadata Update", "Jellyfin client not available", "Now") + return + else: + media_client = self.data_provider.service_clients.get('plex_client') + if not media_client: + self.add_activity_item("❌", "Metadata Update", "Plex client not available", "Now") + return if not self.data_provider.service_clients.get('spotify_client'): self.add_activity_item("❌", "Metadata Update", "Spotify client not available", "Now") @@ -3432,13 +3468,14 @@ class DashboardPage(QWidget): try: # Get refresh interval from dropdown - refresh_interval_days = self.metadata_widget.get_refresh_interval_days() + refresh_interval_days = self.metadata_widget.get_refresh_interval_days() if self.metadata_widget else 30 # Start the metadata update worker (it will handle artist retrieval in background) self.metadata_worker = MetadataUpdateWorker( None, # Artists will be loaded in the worker thread - self.data_provider.service_clients['plex_client'], + media_client, self.data_provider.service_clients['spotify_client'], + active_server, refresh_interval_days ) @@ -3450,8 +3487,9 @@ class DashboardPage(QWidget): self.metadata_worker.artists_loaded.connect(self.on_artists_loaded) # Update UI and start - self.metadata_widget.update_progress(True, "Loading artists...", 0, 0, 0.0) - self.add_activity_item("🎡", "Metadata Update", "Loading artists from Plex library...", "Now") + if self.metadata_widget: + self.metadata_widget.update_progress(True, "Loading artists...", 0, 0, 0.0) + self.add_activity_item("🎡", "Metadata Update", "Loading artists from library...", "Now") self.metadata_worker.start() @@ -3473,7 +3511,8 @@ class DashboardPage(QWidget): if self.metadata_worker.isRunning(): self.metadata_worker.terminate() - self.metadata_widget.update_progress(False, "", 0, 0, 0.0) + if self.metadata_widget: + self.metadata_widget.update_progress(False, "", 0, 0, 0.0) self.add_activity_item("⏹️", "Metadata Update", "Stopped metadata update process", "Now") def artist_needs_processing(self, artist): @@ -3512,7 +3551,8 @@ class DashboardPage(QWidget): def on_metadata_progress(self, current_artist, processed, total, percentage): """Handle metadata update progress""" - self.metadata_widget.update_progress(True, current_artist, processed, total, percentage) + if self.metadata_widget: + self.metadata_widget.update_progress(True, current_artist, processed, total, percentage) def on_artist_updated(self, artist_name, success, details): """Handle individual artist update completion""" @@ -3523,13 +3563,15 @@ class DashboardPage(QWidget): def on_metadata_finished(self, total_processed, successful, failed): """Handle metadata update completion""" - self.metadata_widget.update_progress(False, "", 0, 0, 0.0) + if self.metadata_widget: + self.metadata_widget.update_progress(False, "", 0, 0, 0.0) summary = f"Processed {total_processed} artists: {successful} updated, {failed} failed" self.add_activity_item("🎡", "Metadata Complete", summary, "Now") def on_metadata_error(self, error_message): """Handle metadata update error""" - self.metadata_widget.update_progress(False, "", 0, 0, 0.0) + if self.metadata_widget: + self.metadata_widget.update_progress(False, "", 0, 0, 0.0) self.add_activity_item("❌", "Metadata Error", error_message, "Now") def on_service_status_updated(self, service: str, connected: bool, response_time: float, error: str): @@ -3569,7 +3611,8 @@ class DashboardPage(QWidget): def on_metadata_progress_updated(self, is_running: bool, current_artist: str, processed: int, total: int, percentage: float): """Handle metadata update progress""" - self.metadata_widget.update_progress(is_running, current_artist, processed, total, percentage) + if self.metadata_widget: + self.metadata_widget.update_progress(is_running, current_artist, processed, total, percentage) def on_sync_progress_updated(self, current_playlist: str, active_syncs: int): """Handle sync progress updates""" From 7c84b687fba2f4d55bc1d086d9a0d0976756c69f Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Mon, 18 Aug 2025 18:32:13 -0700 Subject: [PATCH 08/12] bug fix --- ui/pages/artists.py | 48 ++++++++++++++++++++++++++------ ui/pages/sync.py | 68 ++++++++++++++++++++++++++++----------------- 2 files changed, 83 insertions(+), 33 deletions(-) diff --git a/ui/pages/artists.py b/ui/pages/artists.py index 4a25b4c4..3ab28c26 100644 --- a/ui/pages/artists.py +++ b/ui/pages/artists.py @@ -1816,14 +1816,15 @@ class DownloadMissingAlbumTracksModal(QDialog): """Enhanced modal for downloading missing album tracks with live progress tracking""" process_finished = pyqtSignal() - def __init__(self, album, album_card, parent_page, downloads_page, plex_client): + def __init__(self, album, album_card, parent_page, downloads_page, media_client, server_type): super().__init__(parent_page) self.album = album self.album_card = album_card self.parent_page = parent_page self.parent_artists_page = parent_page # Reference to artists page for scan manager self.downloads_page = downloads_page - self.plex_client = plex_client + self.media_client = media_client + self.server_type = server_type self.matching_engine = MusicMatchingEngine() self.wishlist_service = get_wishlist_service() @@ -2395,9 +2396,9 @@ class DownloadMissingAlbumTracksModal(QDialog): self.start_plex_analysis() def start_plex_analysis(self): - """Start database analysis for album tracks (previously Plex analysis)""" + """Start database analysis for album tracks (server-aware)""" from ui.pages.sync import PlaylistTrackAnalysisWorker - worker = PlaylistTrackAnalysisWorker(self.album.tracks, self.plex_client) + worker = PlaylistTrackAnalysisWorker(self.album.tracks, self.media_client) worker.signals.analysis_started.connect(self.on_analysis_started) worker.signals.track_analyzed.connect(self.on_track_analyzed) worker.signals.analysis_completed.connect(self.on_analysis_completed) @@ -3291,7 +3292,7 @@ class ArtistsPage(QWidget): # Create worker for incremental update only self._auto_database_worker = DatabaseUpdateWorker( - self.plex_client, + self.media_client, "database/music_library.db", full_refresh=False # Always incremental for automatic updates ) @@ -3338,12 +3339,27 @@ class ArtistsPage(QWidget): def setup_clients(self): """Initialize client connections""" try: + from config.settings import config_manager + self.spotify_client = SpotifyClient() self.plex_client = PlexClient() + + # Add Jellyfin client for multi-server support + from core.jellyfin_client import JellyfinClient + self.jellyfin_client = JellyfinClient() + + # Set up unified media client based on active server + active_server = config_manager.get_active_media_server() + if active_server == "plex": + self.media_client = self.plex_client + self.server_type = "plex" + else: # jellyfin + self.media_client = self.jellyfin_client + self.server_type = "jellyfin" + self.soulseek_client = SoulseekClient() # --- FIX: Ensure the soulseek_client uses the download path from config --- - from config.settings import config_manager download_path = config_manager.get('soulseek.download_path') if download_path and hasattr(self.soulseek_client, 'download_path'): self.soulseek_client.download_path = download_path @@ -4332,7 +4348,7 @@ class ArtistsPage(QWidget): QMessageBox.critical(self, "Error", "Downloads page is not connected. Cannot start download.") return - if not self.plex_client: + if not self.media_client: QMessageBox.critical(self, "Error", "Music database is not available. Cannot verify existing tracks.") return @@ -4414,12 +4430,28 @@ class ArtistsPage(QWidget): album_with_tracks.tracks = tracks # Add tracks attribute dynamically # Create and show the new sophisticated modal + # Get active server and media client + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + + if active_server == "jellyfin": + media_client = getattr(self, 'jellyfin_client', None) + if not media_client: + QMessageBox.critical(self, "Error", "Jellyfin client not available") + return + else: + media_client = self.plex_client + if not media_client: + QMessageBox.critical(self, "Error", "Plex client not available") + return + modal = DownloadMissingAlbumTracksModal( album=album_with_tracks, # Use the album with tracks album_card=album_card, parent_page=self, downloads_page=self.downloads_page, - plex_client=self.plex_client + media_client=media_client, + server_type=active_server ) # Store the session for resumption diff --git a/ui/pages/sync.py b/ui/pages/sync.py index a22e0245..9398eba4 100644 --- a/ui/pages/sync.py +++ b/ui/pages/sync.py @@ -521,12 +521,13 @@ class PlaylistTrackAnalysisWorkerSignals(QObject): analysis_failed = pyqtSignal(str) # error_message class PlaylistTrackAnalysisWorker(QRunnable): - """Background worker to analyze playlist tracks against Plex library""" + """Background worker to analyze playlist tracks against media library""" - def __init__(self, playlist_tracks, plex_client): + def __init__(self, playlist_tracks, media_client, server_type="plex"): super().__init__() self.playlist_tracks = playlist_tracks - self.plex_client = plex_client + self.media_client = media_client # Can be plex_client or jellyfin_client + self.server_type = server_type self.signals = PlaylistTrackAnalysisWorkerSignals() self._cancelled = False # Instantiate the matching engine once per worker for efficiency @@ -545,14 +546,14 @@ class PlaylistTrackAnalysisWorker(QRunnable): self.signals.analysis_started.emit(len(self.playlist_tracks)) results = [] - # Check if Plex is connected - plex_connected = False + # Check if media server is connected + server_connected = False try: - if self.plex_client: - plex_connected = self.plex_client.is_connected() + if self.media_client: + server_connected = self.media_client.is_connected() except Exception as e: - print(f"Plex connection check failed: {e}") - plex_connected = False + print(f"{self.server_type.title()} connection check failed: {e}") + server_connected = False for i, track in enumerate(self.playlist_tracks): if self._cancelled: @@ -563,17 +564,17 @@ class PlaylistTrackAnalysisWorker(QRunnable): exists_in_plex=False ) - if plex_connected: - # Check if track exists in Plex + if server_connected: + # Check if track exists in media server try: - plex_match, confidence = self._check_track_in_plex(track) + match, confidence = self._check_track_in_library(track) # Use the 0.8 confidence threshold - if plex_match and confidence >= 0.8: - result.exists_in_plex = True - result.plex_match = plex_match + if match and confidence >= 0.8: + result.exists_in_plex = True # Keep existing field name for compatibility + result.plex_match = match # Keep existing field name for compatibility result.confidence = confidence except Exception as e: - result.error_message = f"Plex check failed: {str(e)}" + result.error_message = f"{self.server_type.title()} check failed: {str(e)}" results.append(result) self.signals.track_analyzed.emit(i + 1, result) @@ -587,11 +588,11 @@ class PlaylistTrackAnalysisWorker(QRunnable): traceback.print_exc() self.signals.analysis_failed.emit(str(e)) - def _check_track_in_plex(self, spotify_track): + def _check_track_in_library(self, spotify_track): """ Check if a Spotify track exists in the database by searching for each artist and stopping as soon as a confident match is found. - Now uses local database instead of Plex API for much faster performance. + Now uses local database instead of media server API for much faster performance. """ try: original_title = spotify_track.name @@ -1715,14 +1716,24 @@ class PlaylistDetailsModal(QDialog): self.start_track_analysis() # Show analysis started message + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + server_name = active_server.title() QMessageBox.information(self, "Analysis Started", - f"Starting analysis of {track_count} tracks.\nChecking Plex library for existing tracks...") + f"Starting analysis of {track_count} tracks.\nChecking {server_name} library for existing tracks...") def start_track_analysis(self): - """Start background track analysis against Plex library""" + """Start background track analysis against media library""" # Create analysis worker - plex_client = getattr(self.parent_page, 'plex_client', None) - worker = PlaylistTrackAnalysisWorker(self.playlist.tracks, plex_client) + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + + if active_server == "plex": + media_client = getattr(self.parent_page, 'plex_client', None) + else: # jellyfin + media_client = getattr(self.parent_page, 'jellyfin_client', None) + + worker = PlaylistTrackAnalysisWorker(self.playlist.tracks, media_client, active_server) # Connect signals worker.signals.analysis_started.connect(self.on_analysis_started) @@ -6699,9 +6710,16 @@ class DownloadMissingTracksModal(QDialog): def start_plex_analysis(self): - """Start Plex analysis using existing worker""" - plex_client = getattr(self.parent_page, 'plex_client', None) - worker = PlaylistTrackAnalysisWorker(self.playlist.tracks, plex_client) + """Start media server analysis using existing worker""" + from config.settings import config_manager + active_server = config_manager.get_active_media_server() + + if active_server == "plex": + media_client = getattr(self.parent_page, 'plex_client', None) + else: # jellyfin + media_client = getattr(self.parent_page, 'jellyfin_client', None) + + worker = PlaylistTrackAnalysisWorker(self.playlist.tracks, media_client, active_server) worker.signals.analysis_started.connect(self.on_analysis_started) worker.signals.track_analyzed.connect(self.on_track_analyzed) worker.signals.analysis_completed.connect(self.on_analysis_completed) From 8ffcdb6b19f67c95c90194139c629f10f369f638 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Mon, 18 Aug 2025 19:07:17 -0700 Subject: [PATCH 09/12] version --- main.py | 2 +- ui/components/version_info_modal.py | 88 +++++++++++++++-------------- ui/sidebar.py | 2 +- 3 files changed, 47 insertions(+), 45 deletions(-) diff --git a/main.py b/main.py index 40b1a8ce..3be762a9 100644 --- a/main.py +++ b/main.py @@ -418,7 +418,7 @@ def main(): app = QApplication(sys.argv) app.setApplicationName("SoulSync") - app.setApplicationVersion(".5") + app.setApplicationVersion("0.6") main_window = MainWindow() main_window.show() diff --git a/ui/components/version_info_modal.py b/ui/components/version_info_modal.py index 281ef6d9..ede18c4e 100644 --- a/ui/components/version_info_modal.py +++ b/ui/components/version_info_modal.py @@ -13,7 +13,7 @@ class VersionInfoModal(QDialog): def __init__(self, parent=None): super().__init__(parent) - self.setWindowTitle("What's New in SoulSync v0.51") + self.setWindowTitle("What's New in SoulSync v0.6") self.setModal(True) self.setFixedSize(600, 500) self.setup_ui() @@ -68,7 +68,7 @@ class VersionInfoModal(QDialog): """) # Version subtitle - version_subtitle = QLabel("Version 0.51 - Latest Features & Improvements") + version_subtitle = QLabel("Version 0.6 - Complete Multi-Server Support") version_subtitle.setFont(QFont("SF Pro Text", 11, QFont.Weight.Medium)) version_subtitle.setStyleSheet(""" color: rgba(255, 255, 255, 0.7); @@ -112,50 +112,52 @@ class VersionInfoModal(QDialog): content_layout.setContentsMargins(30, 25, 30, 25) content_layout.setSpacing(25) - # Settings Page Improvements - settings_section = self.create_feature_section( - "βš™οΈ Settings Page Improvements", - "Enhanced settings interface for better usability and visual consistency", + # Multi-Server Support + multiserver_section = self.create_feature_section( + "πŸ”€ Complete Multi-Server Support", + "Full Plex and Jellyfin compatibility across all features and workflows", [ - "β€’ Added vertical scrolling support for better usability on small screens", - "β€’ Cleaned up text backgrounds throughout settings for better visual consistency", - "β€’ Applied consistent green monospace styling to log file path display", - "β€’ Added rounded corners to API configuration frames (Spotify, Plex, Soulseek)", - "β€’ Enhanced label styling with transparent backgrounds and proper white text" - ] - ) - content_layout.addWidget(settings_section) - - # Watchlist System Enhancements - watchlist_section = self.create_feature_section( - "πŸ‘€ Watchlist System Enhancements", - "Improved reliability and user experience for artist monitoring", - [ - "β€’ Enhanced rate limiting with comprehensive multi-layer protection to prevent API bans", - "β€’ Increased delays between artists (2.0s) and albums (0.5s) for safer scanning", - "β€’ Enhanced Spotify API interval timing and error handling", - "β€’ Unified scan implementation - manual and auto scans now use same worker for consistency", - "β€’ Fixed progress bars resetting when reopening modal during active scans", - "β€’ Professional artist cards with improved visual hierarchy and spacing", - "β€’ Modern hover effects and enhanced delete button styling" - ] - ) - content_layout.addWidget(watchlist_section) - - # Artist Search Enhancements - artist_section = self.create_feature_section( - "🎡 Artist Search Enhancements", - "Better visual feedback and improved navigation for artist discovery", - [ - "β€’ Added watchlist eye indicators (πŸ‘οΈ) to artist search results", - "β€’ Green eye icon appears in top-right corner for artists already in watchlist", - "β€’ Real-time updates when artists are added/removed from watchlist", - "β€’ Enhanced horizontal scrolling with mouse wheel support for artist results", - "β€’ Smooth navigation through search results without manual scrollbar dragging" + "β€’ Added native Jellyfin client with full API integration for artists, albums, and tracks", + "β€’ Automatic server detection and dynamic client switching throughout the application", + "β€’ All sync tools now work seamlessly with both Plex and Jellyfin servers", + "β€’ Database filtering by server source ensures clean separation of library data", + "β€’ Updated all download and analysis workers for multi-server compatibility", + "β€’ Server-specific UI adaptations (e.g., metadata updater hidden for Jellyfin)", + "β€’ Unified media client architecture for consistent cross-server functionality" ], - "Look for the green eye icon (πŸ‘οΈ) in artist search results to instantly see which artists you're already tracking!" + "Switch between Plex and Jellyfin in Settings β†’ Server Configuration - all features automatically adapt!" ) - content_layout.addWidget(artist_section) + content_layout.addWidget(multiserver_section) + + # Enhanced Compatibility + compatibility_section = self.create_feature_section( + "βš™οΈ Enhanced Cross-Server Features", + "All major workflows updated for seamless multi-server operation", + [ + "β€’ Playlist sync (Spotify & YouTube) now supports both Plex and Jellyfin", + "β€’ Download Missing Tracks modals work with active server automatically", + "β€’ Artist browsing and album analysis adapt to your selected media server", + "β€’ Database updates and library scans respect server-specific configurations", + "β€’ Playlist track analysis workers dynamically use the correct server API", + "β€’ All toast notifications and UI feedback are server-aware" + ] + ) + content_layout.addWidget(compatibility_section) + + # Technical Improvements + technical_section = self.create_feature_section( + "πŸ”§ Technical Architecture Updates", + "Robust foundation for reliable multi-server operation", + [ + "β€’ Implemented server-agnostic database schema with source tracking", + "β€’ Added unified configuration management for multiple media servers", + "β€’ Created wrapper classes for consistent API interfaces across servers", + "β€’ Enhanced error handling with server-specific messaging", + "β€’ Optimized performance with intelligent client caching and connection pooling", + "β€’ Future-ready architecture for additional media server integrations" + ] + ) + content_layout.addWidget(technical_section) scroll_area.setWidget(content_widget) return scroll_area diff --git a/ui/sidebar.py b/ui/sidebar.py index b281ca46..675924fd 100644 --- a/ui/sidebar.py +++ b/ui/sidebar.py @@ -1245,7 +1245,7 @@ class ModernSidebar(QWidget): layout.setSpacing(0) # Version button (clickable) - self.version_button = QPushButton("v.0.51") + self.version_button = QPushButton("v.0.6") self.version_button.setFont(QFont("SF Pro Text", 10, QFont.Weight.Medium)) self.version_button.setCursor(Qt.CursorShape.PointingHandCursor) self.version_button.setStyleSheet(""" From 5227eee51854cfca61b583b46ec7505a4996a5c1 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Mon, 18 Aug 2025 19:25:16 -0700 Subject: [PATCH 10/12] Update README.md --- README.md | 74 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 54 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index fd203ccf..92c93e3d 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,9 @@ # 🎡 SoulSync - Automated Music Discovery and Collection Manager -SoulSync is a powerful desktop application designed to bridge the gap between your music streaming habits on Spotify and your personal, high-quality music library in Plex. It automates the process of discovering new music, finding missing tracks from your favorite playlists, and sourcing them from the Soulseek network via slskd. +SoulSync is a powerful desktop application designed to bridge the gap between your music streaming habits on Spotify and your personal, high-quality music library in Plex or Jellyfin. It automates the process of discovering new music, finding missing tracks from your favorite playlists, and sourcing them from the Soulseek network via slskd. -The core philosophy of SoulSync is to let you enjoy music discovery on Spotify while it handles the tedious work of building and maintaining a pristine, locally-hosted music collection for you in Plex. Plex is not required for the app to function but slskd and Spotify API are required. +The core philosophy of SoulSync is to let you enjoy music discovery on Spotify while it handles the tedious work of building and maintaining a pristine, locally-hosted music collection for you in your media server. Both Plex and Jellyfin are supported as media servers (though neither is required for the app to function), while slskd and Spotify API are required. ## β˜• Support Development @@ -25,7 +25,7 @@ Docker is unlikely since this is a fully GUI based app. The unique setup would b ### πŸ€– **Automation Engine** SoulSync handles everything automatically once you set it up. You can sync multiple Spotify and YouTube playlists at the same time, and it'll prioritize FLAC files and reliable sources. When downloads finish, it organizes them into clean folder structures and updates your Plex library automatically. -The app runs a background process every 60 minutes to retry failed downloads - so if a track wasn't available earlier, it'll keep trying until it finds it. It also auto-detects your Plex server and slskd on your network, backs up your playlists before making changes, and reconnects to services if they go down. +The app runs a background process every 60 minutes to retry failed downloads - so if a track wasn't available earlier, it'll keep trying until it finds it. It also auto-detects your Plex or Jellyfin server and slskd on your network, backs up your playlists before making changes, and reconnects to services if they go down. Once it's running, SoulSync basically acts like a personal music librarian that works in the background. @@ -44,7 +44,7 @@ The search page lets you manually hunt for specific albums or singles. Every res The matching engine is pretty sophisticated - it prioritizes original versions over remixes, handles weird characters (like КоЯn β†’ Korn), and removes album names from track titles for cleaner matching. It generates multiple search variations per track to find more results and scores each match so you know how confident it is. ### πŸ—„οΈ **Local Database** -Keeps a complete SQLite database of your Plex library locally, so matching is instant instead of making slow API calls. Updates automatically when files change and handles thousands of songs without slowing down. +Keeps a complete SQLite database of your media server library (Plex or Jellyfin) locally, so matching is instant instead of making slow API calls. Updates automatically when files change and handles thousands of songs without slowing down. ### πŸ“ **File Organization** Downloads get organized automatically based on whether they're album tracks or singles. Creates clean folder structures like `Transfer/Artist/Artist - Album/01 - Track.flac`. Supports all common audio formats and automatically tags everything with proper metadata and album art from Spotify. @@ -59,7 +59,7 @@ Failed downloads automatically get saved to a wishlist with context about where Track your favorite artists automatically by adding them to your watchlist. SoulSync monitors watched artists for new releases and automatically scans their latest albums and singles against your library. When new tracks are found missing, they're added to your wishlist for download. The system runs comprehensive scans with intelligent rate limiting to avoid API bans, and you can view real-time progress with detailed status updates for each artist being scanned. ### πŸ“Š **Dashboard & Monitoring** -Real-time status for all your connections (Spotify, Plex, Soulseek), download statistics, and system performance. Activity feed shows everything that's happening with timestamps. +Real-time status for all your connections (Spotify, Plex/Jellyfin, Soulseek), download statistics, and system performance. Activity feed shows everything that's happening with timestamps. ### 🎯 **Five Main Pages** @@ -80,15 +80,15 @@ Multi-threaded so it stays responsive during heavy operations. Automatically man The application follows a clear, automated workflow to enhance and expand your music library: -1. **Connect Services**: First, you authenticate with your Spotify and Plex accounts and connect to your running slskd instance through the settings panel. This gives SoulSync the access it needs to work its magic. +1. **Connect Services**: First, you authenticate with your Spotify account, connect to your media server (Plex or Jellyfin), and connect to your running slskd instance through the settings panel. This gives SoulSync the access it needs to work its magic. -2. **Analyze**: Navigate to the Sync page and select a Spotify playlist. SoulSync fetches all tracks and compares them against your Plex library. This comparison uses a sophisticated matching engine that looks at track title, artist, album, and duration to make an accurate assessment. +2. **Analyze**: Navigate to the Sync page and select a Spotify playlist. SoulSync fetches all tracks and compares them against your media server library. This comparison uses a sophisticated matching engine that looks at track title, artist, album, and duration to make an accurate assessment. -3. **Identify Missing**: After the analysis, the application generates a clear, actionable list of tracks that are present in the Spotify playlist but are not found in your Plex library. +3. **Identify Missing**: After the analysis, the application generates a clear, actionable list of tracks that are present in the Spotify playlist but are not found in your media server library. 4. **Search & Download**: For each missing track, SoulSync generates multiple optimized search queries to increase the likelihood of finding a high-quality match. It then uses the slskd API to search the Soulseek network, prioritizing FLAC files and reliable users, and automatically queues them for download. -5. **Organize & Enhance**: Once a download is complete, SoulSync automatically organizes the file from the download directory into the transfer directory, creating a clean folder structure based on the artist and album (`/Transfer/Artist Name/Artist Name - Album Name/Track.flac`). Immediately after organization, the metadata enhancement system enriches the file with accurate Spotify data including proper artist/album names, track numbers, release dates, genres, and high-quality embedded album art. This ensures every file emerges perfectly tagged and ready for Plex, requiring no manual metadata editing. +5. **Organize & Enhance**: Once a download is complete, SoulSync automatically organizes the file from the download directory into the transfer directory, creating a clean folder structure based on the artist and album (`/Transfer/Artist Name/Artist Name - Album Name/Track.flac`). Immediately after organization, the metadata enhancement system enriches the file with accurate Spotify data including proper artist/album names, track numbers, release dates, genres, and high-quality embedded album art. This ensures every file emerges perfectly tagged and ready for your media server, requiring no manual metadata editing. ## πŸš€ Getting Started @@ -108,7 +108,7 @@ Follow these steps to get SoulSync up and running on your system. Before you begin, ensure you have the following installed and configured: - **Python 3.8+**: The core runtime for the application. -- **Plex Media Server (OPTIONAL)**: Optional but recommended. If connected, SoulSync will scan your existing music library to identify missing tracks. Without Plex, all tracks will be considered "missing" and automatically downloaded. +- **Media Server (OPTIONAL)**: Either Plex Media Server or Jellyfin is optional but recommended. If connected, SoulSync will scan your existing music library to identify missing tracks. Without a media server, all tracks will be considered "missing" and automatically downloaded. - **slskd**: A headless Soulseek client. This is the engine that powers the downloading feature. See detailed setup instructions below. - **Spotify Account**: A regular or premium Spotify account is required to access your playlists and artist data. @@ -176,7 +176,7 @@ docker run -d \ 1. Launch the application (`python main.py`). 2. The very first thing you should do is navigate to the **Settings** page using the sidebar. -3. Fill in the required fields for Spotify and Soulseek. Plex configuration is optional but recommended. +3. Fill in the required fields for Spotify and Soulseek. Media server configuration (Plex or Jellyfin) is optional but recommended. 4. Click "Save Settings". The app is now ready to use. 5. Restart the app for good luck. @@ -187,11 +187,11 @@ docker run -d \ ### Configuration Details -Open the `config.json` file and fill in the details for Spotify, Plex, and Soulseek. +Open the `config.json` file and fill in the details for Spotify, your media server (Plex or Jellyfin), and Soulseek. #### πŸ”‘ Obtaining Required API Credentials -Before configuring SoulSync, you'll need to obtain API credentials from Spotify and Plex. Here's how: +Before configuring SoulSync, you'll need to obtain API credentials from Spotify and your media server. Here's how: ##### Spotify Client ID and Secret @@ -244,10 +244,33 @@ Before configuring SoulSync, you'll need to obtain API credentials from Spotify - Same machine: `http://localhost:32400` - To find your server IP, check your Plex server settings or use your router's admin panel +##### Jellyfin API Key + +**Method 1: Through Jellyfin Dashboard (Recommended)** +1. Open your Jellyfin web interface and sign in as an administrator +2. Go to **Dashboard** β†’ **API Keys** +3. Click **New API Key** +4. Enter an **App Name** (e.g., "SoulSync") +5. Click **Create** +6. Copy the generated API key immediately (it won't be shown again) + +**Method 2: Through User Settings** +1. Go to **Dashboard** β†’ **Users** +2. Click on your user account +3. Go to the **API Keys** tab +4. Create a new API key as described above + +**Finding Your Jellyfin Server URL:** +- Local network: `http://[YOUR_JELLYFIN_SERVER_IP]:8096` (e.g., `http://192.168.1.100:8096`) +- Same machine: `http://localhost:8096` +- HTTPS: `https://[YOUR_JELLYFIN_SERVER_IP]:8920` (if configured) + +**Note**: SoulSync uses Jellyfin's REST API for library access. Make sure your Jellyfin user has permissions to access the music library. + #### πŸ“ Important: Understanding Download vs Transfer Folders - **download_path**: This should be the exact same folder where slskd saves its downloads (e.g., the downloads folder you configured in slskd). SoulSync monitors this folder for completed downloads. -- **transfer_path**: This is where SoulSync moves and organizes the processed files. Typically, this should be your main Plex music library folder, so the files are immediately available to Plex after processing. +- **transfer_path**: This is where SoulSync moves and organizes the processed files. Typically, this should be your main media server music library folder, so the files are immediately available to your media server after processing. #### ❗ Important: slskd API Key Setup @@ -275,12 +298,20 @@ Alternatively, you can paste this key directly into the API Key field in the Set "base_url": "", "token": "" }, + "jellyfin": { + "base_url": "", + "api_key": "", + "user_id": "" + }, "soulseek": { "slskd_url": "", "api_key": "", "download_path": "./path/to/slskd/download/folder", "transfer_path": "./path/to/music/folder" }, + "server": { + "active_media_server": "plex" + }, "logging": { "path": "logs/app.log", "level": "INFO" @@ -302,6 +333,8 @@ Alternatively, you can paste this key directly into the API Key field in the Set } ``` +**Note**: Set `"active_media_server"` to either `"plex"` or `"jellyfin"` depending on which media server you want to use. You only need to configure the server you plan to use. + ## πŸ–₯️ Usage Run the main application file to launch the GUI: @@ -316,15 +349,15 @@ python3 main.py ### Application Pages -- **Dashboard**: Real-time system overview with service connection matrix (Spotify/Plex/Soulseek status), live download statistics (active transfers, speeds, queue status), database health metrics (size, sync status, last update), chronological activity feed of all application events, and quick action buttons for common operations. +- **Dashboard**: Real-time system overview with service connection matrix (Spotify/Plex/Jellyfin/Soulseek status), live download statistics (active transfers, speeds, queue status), database health metrics (size, sync status, last update), chronological activity feed of all application events, and quick action buttons for common operations. -- **Sync**: Advanced playlist management featuring Spotify playlist loading with snapshot-based change detection, confidence-scored track matching with color-coded indicators, bulk "Download Missing Tracks" with progress tracking, intelligent retry logic for failed downloads, and detailed match analysis showing why tracks were or weren't found in your Plex library. +- **Sync**: Advanced playlist management featuring Spotify playlist loading with snapshot-based change detection, confidence-scored track matching with color-coded indicators, bulk "Download Missing Tracks" with progress tracking, intelligent retry logic for failed downloads, and detailed match analysis showing why tracks were or weren't found in your media server library. - **Downloads**: Comprehensive download management with unified Albums/Singles search interface, stream-before-download capability for every result, matched download system with artist/album selection modals, real-time progress monitoring with queue positions, failed download recovery via integrated wishlist access, and persistent search history across sessions. -- **Artists**: Complete discography explorer with full artist catalog browsing, ownership status indicators for every album, chronological release timeline with Plex library overlay, bulk download operations for entire discographies, album-level missing track downloads, and integration with matched download system for accurate metadata assignment. +- **Artists**: Complete discography explorer with full artist catalog browsing, ownership status indicators for every album, chronological release timeline with media server library overlay, bulk download operations for entire discographies, album-level missing track downloads, and integration with matched download system for accurate metadata assignment. -- **Settings**: Service configuration hub for Spotify/Plex/Soulseek credentials, download/transfer path management, metadata enhancement controls (enable/disable automatic tagging and album art embedding), database operations (update, rebuild, health check), performance tuning options (thread limits, cache settings), notification preferences, and application logging controls. +- **Settings**: Service configuration hub for Spotify/Plex/Jellyfin/Soulseek credentials, media server selection, download/transfer path management, metadata enhancement controls (enable/disable automatic tagging and album art embedding), database operations (update, rebuild, health check), performance tuning options (thread limits, cache settings), notification preferences, and application logging controls. ## 🐍 Key Components @@ -335,14 +368,15 @@ The application is built on a modern, layered architecture with distinct separat - **core/**: Business logic and service integration layer - `spotify_client.py`: Spotify Web API integration with OAuth2 authentication, playlist/artist data retrieval, and metadata normalization. - `plex_client.py`: Plex Media Server API client with library scanning, metadata retrieval, and server status monitoring. + - `jellyfin_client.py`: Jellyfin Media Server API client with library scanning, metadata retrieval, and server status monitoring. - `soulseek_client.py`: slskd API communication handling search operations, download management, and queue monitoring. - `matching_engine.py`: Advanced metadata comparison engine with version-aware scoring, text normalization, and confidence calculation. - `wishlist_service.py`: Failed download management with retry mechanisms and source context preservation. - - `plex_scan_manager.py`: Intelligent Plex library scan coordination with debouncing and periodic updates. + - `media_scan_manager.py`: Intelligent media server library scan coordination with debouncing and periodic updates. - **database/**: Data persistence and management layer - `music_database.py`: SQLite database operations with thread-safe connections, WAL mode, and metadata synchronization. - - `music_library.db`: Local database storing complete Plex library metadata for instant access. + - `music_library.db`: Local database storing complete media server library metadata for instant access. - **ui/**: Modern PyQt6 user interface with responsive design - `sidebar.py`: Navigation sidebar with integrated media player, service status indicators, and scrolling track info. From 87a1427b1e1f69b1439b8d224a3c585df6a72148 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Mon, 18 Aug 2025 21:19:52 -0700 Subject: [PATCH 11/12] bug fix --- core/jellyfin_client.py | 2 +- services/sync_service.py | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/core/jellyfin_client.py b/core/jellyfin_client.py index a7ac70bc..5de73c75 100644 --- a/core/jellyfin_client.py +++ b/core/jellyfin_client.py @@ -872,7 +872,7 @@ class JellyfinClient: logger.info(f"Creating Jellyfin playlist '{name}' with {len(track_ids)} tracks") # For large playlists, create empty playlist first then add tracks in batches - if len(track_ids) > 500: + if True: return self._create_large_playlist(name, track_ids) # Create playlist using POST request for smaller playlists diff --git a/services/sync_service.py b/services/sync_service.py index b5f0c5c6..4899f0a4 100644 --- a/services/sync_service.py +++ b/services/sync_service.py @@ -146,7 +146,8 @@ class PlaylistSyncService: return self._create_error_result(playlist.name, ["Sync cancelled"]) total_tracks = len(playlist.tracks) - + media_client, server_type = self._get_active_media_client() + self._update_progress(playlist.name, "Matching tracks against Plex library", "", 20, 5, 2, total_tracks=total_tracks) # Use the same robust matching approach as "Download Missing Tracks" @@ -207,21 +208,23 @@ class PlaylistSyncService: matched_tracks=len(matched_tracks), failed_tracks=len(unmatched_tracks)) - # Get the actual Plex track objects (not PlexTrackInfo) - plex_tracks = [r.plex_track for r in matched_tracks if r.plex_track] - logger.info(f"Creating playlist with {len(plex_tracks)} matched tracks") - + # Get the actual media server track objects + media_tracks = [r.plex_track for r in matched_tracks if r.plex_track] # plex_track is a generic name here + logger.info(f"Creating playlist with {len(media_tracks)} matched tracks") + # Validate that all tracks have proper ratingKey attributes for playlist creation valid_tracks = [] - for i, track in enumerate(plex_tracks): + for i, track in enumerate(media_tracks): if track and hasattr(track, 'ratingKey'): valid_tracks.append(track) logger.debug(f"βœ”οΈ Track {i+1} valid for playlist: '{track.title}' (ratingKey: {track.ratingKey})") else: logger.warning(f"❌ Track {i+1} invalid for playlist: {track} (type: {type(track)}, has ratingKey: {hasattr(track, 'ratingKey') if track else 'N/A'})") - logger.info(f"Playlist validation: {len(valid_tracks)}/{len(plex_tracks)} tracks are valid Plex objects with ratingKeys") - plex_tracks = valid_tracks + logger.info(f"Playlist validation: {len(valid_tracks)}/{len(media_tracks)} tracks are valid {server_type.title()} objects with ratingKeys") + + # Use the validated tracks for the sync + plex_tracks = valid_tracks # Keep variable name for compatibility with the rest of the function # Use active media server for playlist sync media_client, server_type = self._get_active_media_client() @@ -230,7 +233,8 @@ class PlaylistSyncService: sync_success = False else: logger.info(f"Syncing playlist '{playlist.name}' to {server_type.upper()} server") - sync_success = media_client.update_playlist(playlist.name, plex_tracks) + # THE FIX: Ensure we are passing the correct, native track objects to the client + sync_success = media_client.update_playlist(playlist.name, valid_tracks) synced_tracks = len(plex_tracks) if sync_success else 0 failed_tracks = len(playlist.tracks) - synced_tracks - downloaded_tracks From 666db35b70d65f9fc0a9928137663486a69c5589 Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Tue, 19 Aug 2025 09:46:55 -0700 Subject: [PATCH 12/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 92c93e3d..2f47c335 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ If you find SoulSync useful, consider supporting its development: [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/boulderbadgedad) -![A screenshot of my awesome app in action.](./assets/dashboard.png) +![A screenshot of SoulSync](./assets/dashboard.png) ## ⚠️ Docker Support Docker is unlikely since this is a fully GUI based app. The unique setup would be difficult for most users and my knowledge of docker is sad.