Commit Graph

185 Commits

Author SHA1 Message Date
9eccf859bc Added logic for Searching through available medias and basic ui 2026-03-26 22:22:56 +01:00
f91c2f88a1 Remove unused component 2026-03-26 22:22:17 +01:00
3aa8b2cce4 Refactor navigation logic into separate container AppScreen 2026-03-26 20:12:19 +01:00
6c07878d02 Update .gitignore to exclude .kotlin 2026-03-26 20:10:25 +01:00
ea50a0c30e Fix library items black mark bug 2026-03-26 19:52:09 +01:00
473e780417 Remove add button from Episode and Movie Screen 2026-03-26 19:46:56 +01:00
e335cde887 Fix PlayerAdjustmentIndicator changing size when percentage gets one number 2026-03-26 19:44:07 +01:00
8afae8a71c Fix: Enhance NavDisplay transitions with fade animations and background color 2026-03-26 18:00:42 +01:00
dd3d8c044e Fix: Player seekbar ui blocking by only seeking when the seek bar is released 2026-03-26 17:19:27 +01:00
995913fef3 Fix TrackButtons to hide PersistentOverlay on outside touch 2026-03-25 21:03:11 +01:00
303c0e7c7f Fix buttons for navigation on SeriesScreen 2026-03-25 20:55:17 +01:00
2665b34b63 Fix MediaActionButton size on SeriesScreen 2026-03-25 20:23:09 +01:00
6e49b1f9b7 Fix TV episode playback navigation 2026-03-25 20:19:04 +01:00
262d2624ea Add screen previews 2026-03-24 21:34:49 +01:00
f85624b159 Fix interactive episode navigation buttons 2026-03-24 21:34:38 +01:00
5137fd9893 code cleanup 2026-03-24 21:05:12 +01:00
Balogh Barnabás
291738d178 Return to episode screen after playback 2026-03-24 21:03:49 +01:00
Balogh Barnabás
2e8c864522 Fix playback progress updates on exit 2026-03-24 20:54:07 +01:00
Balogh Barnabás
ada0e9600a Refactor player track selection overlay 2026-03-24 20:32:36 +01:00
e37006486e Add series link to episode top bar 2026-03-20 16:55:37 +01:00
92342f1f35 Add offline playback and network fallbacks 2026-03-20 16:55:37 +01:00
08cc4589c2 Refine series download actions 2026-03-20 16:55:37 +01:00
43a15c4662 fix: Cannot play the same content. The previous session got stuck 2026-03-20 16:55:37 +01:00
3941c67d8b feat: add smart download feature for series
Automatically manages downloaded episodes per series — keeps 5 unwatched
episodes downloaded, removing watched ones and fetching new ones on
HomeScreen open or pull-to-refresh. A single download button on the
Series screen opens a dialog to choose between downloading all episodes
or enabling smart download.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 16:55:37 +01:00
2d278bd348 feat: add batch download for seasons and entire series
Wire up the existing download button on the Series screen to download
all episodes, and add a per-season download button next to the season
tabs. Episode metadata is fetched in parallel for faster queuing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 16:55:37 +01:00
cf078c760e fix: always navigate to Series screen when exiting playback from Episode
Instead of just popping the EpisodeRoute (which could land on Home if
opened from ContinueWatching), pop and push a SeriesRoute so playback
exit consistently returns to the SeriesScreen.
2026-03-20 16:55:37 +01:00
12fdf977a4 feat: navigate back to Series screen when exiting playback
Pop the EpisodeRoute from the navigation stack when playback starts,
so finishing PlayerActivity returns to the SeriesScreen instead of
the EpisodeScreen.
2026-03-20 16:55:37 +01:00
5ca127434d feat: add pull-to-refresh gesture to HomeScreen
Wrap HomeContent with PullToRefreshBox to allow refreshing library,
continue watching, and next up sections by pulling down. Also fix
refreshHomeData to suspend until loading completes so the refresh
indicator dismisses properly.
2026-03-20 16:55:37 +01:00
cc972e0e89 feat: add play next up button to Series screen
Adds a MediaResumeButton to the Series screen action bar that directly
launches playback for the next unwatched episode. Shows "Resume" with
progress fill if partially watched, or "Play" for unwatched episodes.
2026-03-20 16:55:37 +01:00
28c2c0b25d feat: show content title in download notification
Store the movie/episode title as UTF-8 bytes in DownloadRequest.data
when building each download request. PurefinDownloadService reads it
back in getForegroundNotification() so the notification shows the
actual title (e.g. "Inception") instead of the generic "Downloading".

For multiple simultaneous downloads the existing "Downloading N files"
text is kept. The title is persisted by Media3 alongside the request,
so it survives app restarts.
2026-03-20 16:55:37 +01:00
b4b500d5dd fix: request POST_NOTIFICATIONS permission before episode downloads
EpisodeScreen called viewModel.onDownloadClick() directly without first
requesting the POST_NOTIFICATIONS runtime permission. On Android 13+
(API 33+), foreground service notifications are suppressed without this
permission, so downloads ran silently with no notification shown.

Mirrors the existing permission pattern from MovieScreen: on Android 13+
the system dialog is shown before the first download; on denial the
download still proceeds (notification is nice-to-have).
2026-03-20 16:55:37 +01:00
2a7874806d feat: show in-progress downloads with progress bar and cancel in DownloadsContent
- Add ActiveDownloadItem data class to represent a download in progress
- Add observeActiveDownloads() to MediaDownloadManager, polling the Media3
  download index every 500ms on Dispatchers.IO for reliable real-time progress
  (listener callbacks alone do not fire on every progress update)
- DownloadsViewModel exposes activeDownloads (StateFlow) and cancelDownload();
  the completed downloads flow filters out items currently in progress
- DownloadsContent shows a "Downloading" section with thumbnail, title,
  progress bar + percentage, and a cancel button above the completed grid
2026-03-20 16:55:37 +01:00
fce5a981a2 fix: use absolute seek position for gesture seeking to prevent snap-back
Capture the player position when the horizontal drag starts and compute
an absolute seek target instead of using relative seekBy, which could
drift or snap back due to playback advancing during the gesture.
2026-03-20 16:55:37 +01:00
Barnabás Balogh
3772f57e81 Update README header to use proper markdown syntax 2026-03-10 21:23:11 +01:00
0f82ed4603 feat: add focus management for play button in Movie and Episode screens 2026-02-27 21:07:55 +01:00
36002e513e feat: implement focus management for Continue Watching section in TV player 2026-02-27 21:03:45 +01:00
96a9419746 feat: enable code optimization and resource shrinking in release build 2026-02-27 19:34:08 +01:00
d02e39b674 feat: add release directory to .gitignore 2026-02-27 19:01:20 +01:00
78f03096dd feat: make prerequisits for app publication 2026-02-27 18:52:14 +01:00
06272eb08a feat: Add D-pad seeking and auto-focus seek bar in TV player
D-pad left/right now seeks -10s/+10s both when controls are hidden
and when the seek bar is focused. Controls auto-focus the seek bar
when shown, removing the need to press OK first to interact.
2026-02-27 18:52:14 +01:00
71d2ef9534 feat: Show TV player controls on D-pad or OK button press 2026-02-27 18:12:28 +01:00
e4b99354f6 feat: Back gesture should hide controls in tv module 2026-02-27 17:42:05 +01:00
2b27ce946d feat: Add TV focus states and refactor content screens to LazyColumn
- Add animated focus feedback (scale, border, background) to all interactive
  TV UI components: PosterCard, GhostIconButton, MediaActionButton,
  MediaResumeButton, PurefinIconButton, TvHomeDrawer nav items,
  TvHomeSections cards, TvPlayerScreen track/queue panels
- Refactor EpisodeScreen, MovieScreen, and SeriesScreen from Scaffold +
  verticalScroll to LazyColumn layout with Box-overlaid top bar
- Switch MovieComponents and MovieScreen from MovieUiModel to core Movie model
- Conditionally render cast sections only when cast is non-empty
2026-02-27 17:24:05 +01:00
cccb20312b fix: Prevent tap gesture handler from interfering with seek drag
The detectTapGestures and drag awaitEachGesture handlers competed for
pointer events, causing drag() to sometimes end prematurely and the
seek to not fire. A shared dragActive flag now gates tap/double-tap
callbacks so they are suppressed during active drags.
2026-02-27 16:22:54 +01:00
318b190061 Code cleanup 2026-02-22 19:08:28 +01:00
fe699d7f99 refactor: Fix repository switch between offline and online. Now it switches seamlessly 2026-02-22 18:41:46 +01:00
d90612a056 feat: Remove quick play content on the Nextup section 2026-02-22 15:48:16 +01:00
8c7ddab9c2 feat: Implement Episode download functionality 2026-02-22 15:41:42 +01:00
9ec09a0e94 feat: Allow offline mode in Purefin 2026-02-22 15:41:08 +01:00
4ecb402e69 refactor: extract InMemoryMediaRepository from InMemoryAppContentRepository
- Create InMemoryMediaRepository to hold in-memory media state (movies,
  series, episodes), lazy series content loading, and watch progress updates
- InMemoryAppContentRepository delegates MediaRepository via Kotlin's by
  delegation, injecting InMemoryMediaRepository as a composite component
- CompositeMediaRepository now uses InMemoryMediaRepository directly as the
  online repository instead of AppContentRepository
2026-02-22 14:38:22 +01:00