Lumora v6.3
Catalogue
- A finished import stops saying it is importing. The card comes down when the last byte lands, not when the catalogue render finishes: everything after the transfer - the merge, the m3u_plus episode fold, the database write, the tab rebuild - can run for tens of seconds on a six-figure panel, and the card sat on "Importing · N items" through all of it, so a finished download read as a frozen one. A load that dies before its own reset (out of memory on a huge panel, an unexpected throw) takes the card down with it instead of leaving it up for good, and a late report from a source that outlived the load cannot put it back.
- A playlist reports what it has actually parsed, local or remote. The playlist path hardcoded 0 items, so a 150k-entry download narrated "0 items" from start to finish; the parser now counts the entries it accepts, and a playlist file picked from the device narrates its bytes and rows like a download does instead of sitting on "Connecting to " for the whole file (its size is stated too, so the "very large" warning covers a local panel).
- The playlist import got its main-thread work back. Parsing compiled a fresh
Regexfor the EXTINF attribute list on every single line - 150k compilations for a 150k-entry playlist - and the attribute scan now walks thename="value"pairs directly. The content-type gate and the per-entry copy into provider-tagged channels are whole-catalogue passes and now run with the parse instead of on the frame right after it, and so does the m3u_plus episode fold. Nothing about the result changes; the import simply stops stalling the screen while it finishes. - Live TV lands first; films and series import behind it. A catalogue used to arrive all at once: on an Xtream panel the live list sat finished for the whole of the film and series ingest (minutes on a six-figure panel), and on a playlist nothing appeared until the last line of the file had been parsed. The live half is now handed to the screen as soon as it exists - after the live phase on Xtream, from the parse stream itself on a playlist (re-painted as it grows, at most every few seconds), and as before on Stalker - so Live TV is usable while the bulk of the catalogue is still on its way. The live-first paint is tied to its own load, so a refresh that gets replaced cannot merge a half-finished list over the newer one.
- The ingest card can actually be dismissed on a remote. It floats over the panes, so the D-pad has no geometric route into it: focus search finds the content underneath first, and a pane that rebuilds while the import runs - the live guide, most of all - hands focus to a row that the card is covering. The card took focus once on appearing and never again, so a second later the Hide button was on screen but unreachable, with focus sitting on a channel hidden behind it. Focus now comes back to Hide whenever the content tries to focus something the card covers, which is the one case where the user cannot see what they just selected.
- An interrupted import resumes instead of starting over. Live, films and series are each stamped as they finish, and a load skips a section that completed inside the TTL and still has its rows in the catalogue (a forced load - provider edited, backup restored - still re-reads the panel, and a section whose rows were pruned is fetched again whatever its stamp says). The catalogue's own freshness stamp only lands when a whole load completes, so a restart, a crash, a provider that times out or a newer load superseding this one used to throw away every section that had finished: a load killed during the film list re-downloaded the entire 55k-row live list on the next start. A resumed live section is read back from the database, so the resident channel list is still complete without a single request.
- Opening Films or Series pulls that half of the import forward. Both tabs now say what is happening - the ingest card switches to "Series importing in the background · N items · X MB" instead of narrating whichever phase happens to be streaming, and it comes back on screen even if the card had been hidden, because the tab is thin for exactly that reason. The half being looked at is fetched first: an Xtream panel reorders its remaining bulk lists at the next phase boundary (a four-minute film list no longer has to finish before the series list starts), and the VOD build already builds the tab on screen first. The order is seeded from the tab the app opens on, so a set that starts on Series downloads Series first.
- Toggling or installing a plugin no longer rescans providers. Switching a stream_search plugin on or off called a full catalogue load, so every IPTV panel was re-downloaded for a change that contributes no provider rows. Only the anime catalogue is read again - it is the one plugin that supplies channels - and a provider discovered by a plugin's scan now loads just that provider instead of all of them.
- A cancelled or failed import can no longer leave a second copy of its rows. An ingest writes under a generation token and deletes what it did not see only when it reaches the end of its list, but an import that was cancelled or threw left the batches it had already committed sitting beside the previous catalogue - different token, same provider and type - with nothing that would ever remove them. Repeated interruptions stacked them, which is how a panel that is not that large grows a catalogue database hundreds of megabytes past its own contents. Cancelling or failing an ingest now deletes exactly the rows it wrote (
deleteByTokenBlocking), and the two whole-provider replace paths abort the same way on an exception, so an interrupted import costs the work it had done and nothing more.
Storage
- Downloaded update installers no longer pile up. The in-app updater handed DownloadManager a destination in the app's own external Download directory and nothing ever removed it. DownloadManager resolves a name clash by appending " (1)", " (2)" rather than overwriting, so every update attempt that was retried, declined, interrupted or superseded parked another full installer there - one test Fire TV carried 874 MB in 28 copies, with no download record pointing at any of them. Startup now sweeps installers older than fifteen minutes, off the main thread; the age check is what keeps it away from a download still running or an install prompt still open.
- The storage breakdown now covers what the system actually counts. It named
filesDir,cacheDirand the two databases - the three smallest parts of the package - so an app the system reported as ~900 MB logged ~360 MB, and the ~530 MB difference read as the catalogue growing out of control. The line now reportsdataDir,databases,shared_prefs,app_webview,no_backup, every external volume and the child sizes inside it, plus the catalogue's page and free-page counters and a one-offdbstatcomposition pass per installed build - so "why is Lumora taking a gigabyte" is answered by one logcat line instead of arithmetic.
Streaming sites
- Five more sources: NetPrime, EuroStreaming, Filmo, KellerKino and KinoGer join the scraper list, resolving through the same extractor path as the rest - search, season and episode handling, and the LAN-WebSocket Cloudflare bypass all apply unchanged.
Android 7.1
- PiP controls and the car keep-alive service are API-25 clean.
minSdkis 25, but the PiP callback that carries the new Configuration only exists from API 26 - overriding it alone left Android 7.x with no callback at all, so the controls overlay stayed up over the PiP window. Both callbacks are implemented now and share one body. The car keep-alive service (unreachable today, since the manifest deliberately declares no car service) was a guaranteed crash the day it was re-registered -NotificationChannel, the channel-awareNotification.Builder,Context.startForegroundServiceand the three-argumentstartForegroundwere all unguarded - and now uses the same compat calls the torrent service documents having been fixed for on API 25.lintReleasereports zeroNewApifindings, and the release APK was exercised on an Android TV 7.1.1 emulator: 924 ms cold start, a full 1,028-channel M3U import, the guide, and live playback.
Installation
Download the APK below and install on your Android TV, Fire TV Stick, or phone.