Commit Graph

10 Commits

Author SHA1 Message Date
Ashik K fdd1cdc15b Implement Electronic Program Guide (EPG) for Live TV
Features:
- Full EPG grid with channels and time slots
- 12-hour program window with auto-refresh every 5 minutes
- Duration-based cell widths (3px/min)
- Live program highlighting with progress bars
- Current time indicator (red line)
- Direct channel playback from guide
- Auto-scroll to currently airing programs

Changes:
- Add EPGViewModel for data fetching and state management
- Add EPGProgramCell, EPGChannelRow, EPGTimelineHeader, EPGCurrentTimeIndicator components
- Update ProgramGuideView with complete EPG implementation
- Make Channels default Live TV tab (was Program Guide)
- Fix channel images in EPG to match Channels view display
- Fix Live TV playback crash (audioStreams array bounds check)
- Apply dark pink background throughout app

Slash Commands:
- Add /init-dev - Initialize dev session with project context
- Add /sim - Build and launch in Apple TV simulator

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 19:23:53 +02:00
Ashik K de349e213e Fix Release build - add SwiftGen xcassets generation
- Add SwiftGen configuration for xcassets to swiftgen.yml
- Generate Images+Generated.swift for type-safe image resources
- Fixes 'Type ImageResource has no member' errors in Release builds
- Generated file includes device icons, blob icons, and tomato ratings

This was needed because the asset catalog references were missing
the generated Swift code for type-safe access.
2025-10-17 16:20:04 +02:00
Ashik K f19c10c528 Revert video player to fullScreen - fixes playback controls
Reverted video player back to .fullScreen presentation:
- Changed @Route(.push) back to @Route(.fullScreen)
- Added NavigationViewCoordinator wrapper back
- Changed router.popLast() back to router.dismissCoordinator()

Video player MUST use fullScreen to:
 Properly stop playback on dismiss
 Show overlay controls on first ESC
 Exit and stop video on second ESC
 Prevent video playing in background after navigation

Files reverted:
- ItemCoordinator.swift: Video player route and factory
- Overlay.swift: dismissCoordinator on confirm close
- VideoPlayer.swift: dismissCoordinator on video end
- LoadingView.swift: dismissCoordinator on cancel

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 13:00:40 +02:00
Ashik K a6a03ea988 URGENT FIX: Video player back button now works
Changed all router.dismissCoordinator() calls to router.popLast() in video player:
- Overlay.swift: Back button when confirming close
- VideoPlayer.swift: Auto-exit when video ends
- LoadingView.swift: Cancel button during loading

dismissCoordinator() only works with .fullScreen/.modal presentations.
Since we changed video player to .push navigation, we need popLast() instead.

This fixes ESC/menu button not working during video playback.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 12:53:35 +02:00
Ashik K e3bcd8638a Implement channel navigation for Jellyfin plugin channels
- Modified ItemLibraryViewModel to detect channel/channelFolderItem types
- Added getChannelItems() method to use Paths.getChannelItems API for channels
- Channel folders now use channelID and folderID parameters correctly
- Modified PagingLibraryView to route .channelFolderItem to library grid view

This enables proper navigation for Jellyfin.Xtream plugin channels:
Channel → Grid of Categories → Grid of Content → Item Detail

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 09:53:23 +02:00
Ashik K f1615f9078 Change Jellyfin blob logo from blue to pink
Changed the jellyfin-blob.svg gradient from blue (#1F4EA7 to #00DDFF)
to bright pink (#C8197C to #FF1493) to match the jellypig branding.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 09:43:59 +02:00
Ashik K 9fbb2c6731 Add device icon assets and install SwiftGen
- Added DeviceIcons from upstream to tvOS assets catalog
- Built and installed SwiftGen 6.6.3 from source to /opt/homebrew/bin
- Build now succeeds with all ImageResource references resolved

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 09:42:13 +02:00
Ashik K c30a4e9c23 Rename all Swiftfin files to lowercase jellypig
- Renamed SwiftfinApp.swift to jellypigapp.swift
- Renamed SwiftfinStore/ to jellypigstore/
- Renamed all SwiftfinStore files to jellypigstore
- Renamed SwiftfinDefaults.swift to jellypigdefaults.swift
- Renamed VideoPlayerType+Swiftfin.swift to VideoPlayerType+jellypig.swift
- Updated all project.pbxproj file references to match new names

All file names now use lowercase jellypig for consistency.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 09:28:57 +02:00
Ashik K 10895d1b8c Change app icons from blue to bright pink
- Converted all 14 tvOS icon PNG files from blue to hot pink
- Applied to app icons, top shelf images, and App Store icons
- Distinguishes jellypig from upstream Swiftfin visually
- Used Python script with Pillow for color transformation
2025-10-17 09:05:13 +02:00
Ashik K 65d5a4b176 Rename Swiftfin to jellypig - personal fork for custom use cases
- Renamed Swiftfin.xcodeproj → jellypig.xcodeproj
- Renamed directories: Swiftfin tvOS → jellypig tvOS, Swiftfin → jellypig iOS
- Renamed schemes: Swiftfin tvOS → jellypig tvOS, Swiftfin → jellypig iOS
- Updated all references in project.pbxproj and scheme files
- tvOS-focused personal fork for Jellyfin.Xtream plugin usage

License: MPL-2.0 (allows forking and modifications)
2025-10-17 08:50:39 +02:00