/** * Changelog bundlowany z apką → ZAWSZE zgodny z tym, co przyszło OTA (te same zmiany * lecą w tym samym bundlu). WhatsNewModal pokazuje wpisy nowsze niż ostatnio widziany * (`lastSeenChangelogId` w SecureStore) i oznacza najnowszy jako przeczytany. * * Przy każdym publish OTA: DOPISZ nowy wpis NA GÓRZE (newest-first), z nowym `id`. * Treść user-facing (bez wewnętrznego żargonu), to widzi użytkownik. */ import { NATIVE_RUNTIME, isNewerVersion } from './lib/appVersion'; export type ChangelogEntry = { /** Stabilny, rosnący identyfikator (np. data + seq). Newest-first w CHANGELOG. */ id: string; /** Krótki, ludzki tytuł daty/wersji pokazywany w nagłówku wpisu. */ date: string; /** Punkty zmian, krótkie, user-facing. */ items: string[]; /** * Pokaż ten wpis tylko użytkownikom, których APK ma runtime STARSZY niż podany. * * Po co: przy zmianach natywnych ten sam bundle leci na kanał starej i nowej wersji. * Bez bramki użytkownik, który już zainstalował nowe APK, dostawał komunikat „pobierz * nowe APK". Bramkujemy po runtime, a nie po numerze wersji, bo numer wersji przyjeżdża * razem z paczką OTA i stary APK po aktualizacji podaje już nowy (przez to wpis ukrywał * się przed dokładnie tymi ludźmi, do których był kierowany). Wpisy bez tego pola widzą * wszyscy. */ onlyBelowRuntime?: string; /** * Pokaż ten wpis tylko użytkownikom z runtime CO NAJMNIEJ takim. Lustro * `onlyBelowRuntime`: nowa funkcja z modułem natywnym (Swipe) nie ma sensu na APK, * które jej nie ma; ci dostają zamiast tego wpis „pobierz nowe APK". */ minRuntime?: string; }; export const CHANGELOG: ChangelogEntry[] = [ { id: '2026-10-13a', date: 'October 2026', items: [ 'A one-minute survey will pop up once, after this update. Six questions about how you found Goon, what you use and what you would pay for. Your answers decide what gets built next. You can skip it.', ], }, { id: '2026-10-12b', date: 'October 2026', items: [ 'Tablets: the app fills the whole screen in landscape instead of a narrow strip in the middle, and videos keep playing when you rotate the tablet or switch to fullscreen.', 'porndoe: when a video refuses to load in the player on your network, it now plays on the porndoe page itself, with sound. If that works, the app goes straight to the page for that site for the next week.', ], }, { id: '2026-10-12a', date: 'October 2026', items: [ 'App lock: when you set or changed your PIN, the digits from the previous step stayed in, so a changed PIN could be saved as the old and new digits glued together. Fixed. If you got locked out of changing your PIN, use the new Forgot PIN? link and confirm with your fingerprint or phone screen lock.', 'Edge no longer vibrates on every swipe.', 'Huawei phones with Google services crashed every time a video opened. The Cast button is now off on Huawei, videos play.', 'Searching performers also finds the name in reverse order and their aliases, so "Takase Rina" finds Rina Takase.', 'Missing movie covers are back for most movies.', ], }, { id: '2026-10-06b', date: 'October 2026', items: [ 'You can hide a site: long-press it in the Sites tab and pick Hide this site. Scenes that are only on that site disappear from every list, and on a scene that is also elsewhere its button is gone. Unhide in Settings, Hidden content.', 'Pinned sites now come across with your sync code too.', ], }, { id: '2026-10-06a', date: 'October 2026', items: [ 'The player now respects the phone\'s rotation lock. With auto-rotate turned off in Android, the video stays upright even when you lie on your side. The fullscreen button still switches to landscape.', 'Edge: when a creator deletes their account, all of their clips disappear from the feed and their page within the hour, instead of over a week.', ], }, { id: '2026-10-02e', date: 'October 2026', items: [ 'Edge: the NEW label next to the creator is gone. Around ten thousand clips arrive every day, so almost every clip had it and it told you nothing.', ], }, { id: '2026-10-02d', date: 'October 2026', items: [ 'Latestpornvideo: newer videos sit on a new lulu domain the app did not know, so they opened the host page and failed. They now play in the app player like the older ones.', ], }, { id: '2026-10-02c', date: 'October 2026', items: [ 'Porndoe: many plays ended with "Response code: 403". The video link is tied to the address that asked for it, and the page and the player could reach the site through different addresses. The app now asks for the link itself, the same way the player connects, and skips the web page.', ], }, { id: '2026-10-02b', date: 'October 2026', items: [ 'Galaxyporn: about half of the plays ended with "Playback failed". The app grabbed the address of an ad on the vikingfile page and tried to play it as the video. It now waits for the real file.', ], }, { id: '2026-10-02a', date: 'October 2026', items: [ 'Favorites: performers and studios with something new are listed first, and the badge says how many new scenes and how many new movies there are, instead of one number for both.', 'Edge: a clip its creator deleted no longer leaves you on a black screen. The app skips to the next one and the clip is taken out of the feed for everyone. On a creator page the grid loads smaller previews, so it fills in faster.', 'Movies on myvidplay, playmogo and doply: the app took every one of them for a deleted video, because the host page always carries a hidden "not found" block. It now tries the direct stream first and only falls back to the web page when that fails.', 'A certificate error from a host is no longer reported as a deleted video, and the app no longer gets stuck when the phone fails to save its device key.', ], }, { id: '2026-09-17b', date: 'September 2026', items: [ 'Version 0.4.2 fixes the crash when closing the app while a video was open. The previous attempt only covered part of it: the list of players could also change from another thread while it was being copied.', 'Android TV: the app now shows up on the TV home screen, runs full screen and can be driven with the remote on the existing screens. It is not a purpose-built TV interface yet: there is no focus highlight, and sites that ask you to tap a human check are painful with a remote.', ], }, { id: '2026-09-17a', date: 'September 2026', items: [ 'Random order now shuffles what your filter or search actually found. Searching with random on used to return a handful of results, because the shuffle was picked before the search ran.', 'The update prompt shows that the download is running (it is 87 MB and nothing was visible for a minute), and it offers a plain browser download next to the in-app install.', ], }, { id: '2026-09-16d', date: 'September 2026', items: [ 'Edge on a folding phone or a tablet: clips are no longer cropped down to the middle. When the screen and the clip are shaped too differently, you get the whole clip with black bars instead, and the caption and buttons sit on those bars. Wide clips gain from this on normal phones too.', ], minRuntime: '1.4', }, { id: '2026-09-16c', date: 'September 2026', items: [ 'Edge: tapping the heart no longer restarts the clip or flips the sound on, and the clip no longer jumps back to the start when the next batch loads in the background.', 'Edge: one sound button instead of two, and a new tuning button at the top. Open it any time to add what you want more of, including a search across every tag we have, and the feed uses it from the next deal on.', ], minRuntime: '1.4', }, { id: '2026-09-16b', date: 'September 2026', items: [ 'Edge: tap the creator name to open their page. You get every clip they have, and tapping one plays it full screen with the same swipe up for the next one.', ], minRuntime: '1.4', }, { id: '2026-09-16a', date: 'September 2026', items: [ 'The app now notices when a newer build is out even if it shares the silent-update channel with yours, so fixes that need a real install stop waiting for you to find them. If you are on 0.4.0, expect a prompt for 0.4.1: it fixes a crash when closing the app from recents.', ], }, { id: '2026-09-15d', date: 'September 2026', items: [ 'Edge: the bottom bar slides away when you swipe to the next clip and comes back when you swipe back, so it no longer covers the caption, tags and progress line.', 'Edge: the bug report button is hidden there, it was sitting on top of the not-interested button. Reports still work from every other tab.', ], minRuntime: '1.4', }, { id: '2026-09-15c', date: 'September 2026', items: [ 'Favorites, performer and studio pages, Performers and Tags: tabs, sorting and buttons now share one row under the title instead of stacking three or four lines above the list.', 'Favorites and similar scenes load much faster, and opening a performer or studio no longer waits for the new-scene counters.', ], }, { id: '2026-09-15b', date: 'September 2026', items: [ 'New Edge tab: a vertical feed of short clips from verified creators, one per screen, playing as soon as you land on it. Double-tap to save a clip, tap to turn sound on, hold for double speed, swipe left to say what you want less of. The feed learns from what you watch and never shows the same clip twice; the refresh button deals a new hand.', ], minRuntime: '1.4', }, { id: '2026-09-15a', date: 'September 2026', items: [ 'A new Edge section (a TikTok-style feed of short clips) is ready, but it needs version 0.4.0, which you have to download and install yourself: it uses a part of the app that cannot arrive as a silent update. Get it from goon-foss.org; it installs over the version you have and keeps your settings.', ], onlyBelowRuntime: '1.4', }, { id: '2026-09-14c', date: 'September 2026', items: [ 'Movies on playmogo, myvidplay and doply: taps reach the play button again. The host lays an almost invisible ad layer over the player that swallows every tap; the app now disables it once the page has loaded. The human check, when it appears, is untouched.', ], }, { id: '2026-09-14b', date: 'September 2026', items: [ 'Three new sort orders in the scene filter: random, longest and shortest. Random keeps its order while you scroll and reshuffles when you pull to refresh. Works on performer pages too.', ], }, { id: '2026-09-14a', date: 'September 2026', items: [ 'xhamster and mypornerleak thumbnails show up in lists straight away. Both sites changed their pages; new scenes get thumbnails at import again and the last 30 days are being filled in.', '"Reset all filters" now applies immediately and closes the sheet, and the filter badge no longer shows "1" when nothing is set.', 'Movies: a release year outside 1900 to 2100 is ignored instead of breaking the list.', ], }, { id: '2026-09-08c', date: 'September 2026', items: ['Bottom bar: a little more room under the labels.'], }, { id: '2026-09-08b', date: 'September 2026', items: [ 'Scene, movie, performer, studio and site pages got the same look as the main sections: no lighter bar on top, same title style, and proper icons for favorite and hide instead of text symbols.', 'Bottom bar is a bit taller so the labels no longer sit on the edge, and the ring around the active icon is centred exactly.', 'Movie lists load about four times faster and the Sites tab opens instantly.', ], }, { id: '2026-09-08a', date: 'September 2026', items: [ 'Fixed a crash when opening a studio\'s movie list right after browsing that studio\'s Movies tab. The two screens were sharing a cache entry with different shapes.', ], }, { id: '2026-09-07h', date: 'September 2026', items: [ 'Movies on myvidplay and doply play again. Those hosts redirect to playmogo, and the player was treating that redirect as a pop-up and blocking it, so you got a blank screen. The human check on playmogo still needs your tap.', 'Site and performer pages use the same single row of icons as the main sections: search plus tag filter on a site, "search more" plus filter next to the scene count on a performer. The tag chips row on performer pages is gone, tags live in the filter.', ], }, { id: '2026-09-07g', date: 'September 2026', items: [ 'Sites now show each site\'s logo. Sorting (most scenes, recently updated, best rated, name) moved from the Top/Recent row into a sort icon next to the search box and is remembered between sessions.', ], }, { id: '2026-09-07f', date: 'September 2026', items: [ 'The bottom bar is back on screen whenever you return from a scene, movie or performer, even if it was tucked away before you left.', ], }, { id: '2026-09-07e', date: 'September 2026', items: [ 'The bottom bar slides away while you scroll down and comes back as soon as you scroll up, so the grid gets the whole screen.', 'Sites: the pinning hint disappears once you have pinned something.', ], }, { id: '2026-09-07d', date: 'September 2026', items: [ 'Scenes: Performers, Tags and Favorites are icons in the search row, so the grid starts one row higher. Saved searches show up while you type.', 'Tap the active section again to jump back to the top. The bottom bar gets out of the way while the keyboard is open.', ], }, { id: '2026-09-07c', date: 'September 2026', items: [ 'The top bar is gone: the bottom bar names the section, the gear next to the search box opens Settings, and Donate plus switching backend now live inside Settings.', 'Filter is an icon with a counter of active filters. The bottom bar is lower and grows out of the screen edge.', ], }, { id: '2026-09-07b', date: 'September 2026', items: [ 'Sections (Scenes, Movies, Sites, JAV, Anime) moved to a bar at the bottom of the screen, within thumb reach. The ring of light around the active icon stretches to the next one when you switch.', 'The section name now sits in the header next to the logo.', ], }, { id: '2026-09-07a', date: 'September 2026', items: [ 'Two new sites: tubepornclassic (retro and vintage, about 170,000 scenes with daily uploads) and porndupe (studio scenes from Nubile Films, Family Strokes, Pure Taboo and others). Both play directly, no browser window.', 'Movies: sources hosted on playmogo, myvidplay and doply moved to the end of the list. That family now demands a manual captcha, so mixdrop, voe and luluvid are tried first.', ], }, { id: '2026-09-02b', date: 'September 2026', items: [ 'Pin your favourite sites. Long-press a site in the Sites tab and it stays at the top of the list. Pins live with your other favourites, so they come along when you move to a new phone with your sync code.', 'Filters are remembered. Scenes, JAV, Anime and Movies each keep their own filter and sort between sessions instead of resetting every time you open the app.', 'Movie duplicates cleaned up. About 1,500 movies that existed twice under the same title were merged, and the matching that creates new movie entries is stricter about titles that only look similar.', ], }, { id: '2026-09-02a', date: 'September 2026', items: [ 'The seek bar no longer hides behind the Android navigation buttons. On phones that use the three-button bar, the player controls sat underneath it. They now leave room for it.', 'Movies stop swallowing other movies. Titles that differ only by a series number, like part 60 and part 61, or a bare title against a numbered sequel, were being merged into one entry with a pile of wrong links. New arrivals are kept apart now; already merged ones are being sorted out separately.', ], }, { id: '2026-08-27a', date: 'August 2026', items: [ 'vjav now plays. It never once worked: the site throttles requests coming from servers, and one step of our playback chain was not handling that, so every single attempt ended with an error. Around 58,000 scenes were affected.', 'Scenes from 8kporner and perverzija that failed to start now refresh the link and try again, instead of giving up. Their hosts hand out addresses that stop working after a while, and the saved one was being reused.', 'Cleaned out about 81,000 sources whose page the host had deleted, mostly on sxyprn and hqporner. Those scenes could never play, so they no longer show up as if they could.', ], }, { id: '2026-08-26c', date: 'August 2026', items: [ 'Movie hosts that ask you to confirm you are human (myvidplay, doply and the DoodStream family) should work again. The app was running its own ad-blocking and autoplay tweaks on those pages, and the confirm box lives in exactly the kind of overlay that ad-blocking removes, so it either vanished or was rejected. Those pages are now left untouched.', 'Scenes whose file the host has quietly deleted no longer open to a black screen. The address still looked valid but the file was gone, so the app now checks it actually responds and moves on to another source instead.', ], }, { id: '2026-08-26b', date: 'August 2026', items: [ 'A performer page now has the same Filter as the main feed: quality, minimum length, sort order, source, tags, studios, and scenes that also feature another performer. The quick tag chips are still there for a one-tap filter.', ], }, { id: '2026-08-26a', date: 'August 2026', items: [ '"Search more scenes" on a performer now answers right away and keeps working in the background. It used to look broken on performers with lots of scenes: the search took longer than the phone keeps a connection open, so you saw "Refresh failed" even though the search actually ran. New finds show up within a minute or two.', 'Movie hosts that quietly moved to a new address (myvidplay, doply) play again. The app was being handed the old address and its pop-up blocker stopped the jump to the new one, which looked like a black screen.', ], }, { id: '2026-08-24b', date: 'August 2026', items: [ 'Chromecast is here, but it needs version 0.3.0, which you have to download and install yourself. Casting needs a part of the app that cannot be delivered as a silent update. Get it from goon-foss.org; it installs over the version you already have and keeps your settings.', ], onlyBelowRuntime: '1.3', }, { id: '2026-08-24a', date: 'August 2026', items: [ 'Movie hosts that showed a black screen or a spinner forever are now recognised as gone and drop off the list, so the ones that actually play come first. The host behind them lost its files: its own player answers "Video is not ready yet". Only one movie in the whole catalogue relied on it alone.', 'Cleaned up performers who were credited on scenes they are not in. A scene listing "Julia Ann" was also being credited to "Julia B." because only the first name was being checked. 85,379 wrong credits removed.', ], }, { id: '2026-08-23a', date: 'August 2026', items: [ 'You can now merge more than two copies of the same scene at once. Long-press the copy you want to keep and pick "Merge duplicates into this", then tap every other copy, and merge them all in one go. Previously you had to repeat the whole thing for each pair.', ], }, { id: '2026-08-22f', date: 'August 2026', items: [ 'Another attempt at hosts that ask you to confirm you are human: the app no longer runs its own ad-blocking and autoplay tweaks on those pages, in case the check was rejecting the modified page. If the confirm box still refuses you, long-press the source on the scene and open it in your browser, which does work.', ], }, { id: '2026-08-22e', date: 'August 2026', items: [ 'Hosts that ask you to confirm you are human should now accept it. The app was telling those pages it was a desktop browser while actually running the phone one, and the check kept failing because the two did not match.', ], }, { id: '2026-08-22d', date: 'August 2026', items: [ 'Another go at the black screen on older galaxyporn scenes: the app itself was painting it. It stretched the host page player to fill the screen as soon as the page touched it, which happens before the video has a file to play. That is gone, so you now see the page and its confirm box.', ], }, { id: '2026-08-22c', date: 'August 2026', items: [ 'Fixed the black screen on older galaxyporn scenes. The file host bounces you to a second domain, and the player was blocking that jump as if it were a pop-up, so nothing ever loaded. The app now opens the right address straight away, shows the confirm-you-are-human box as soon as it appears, and where it can grab the video file itself it skips the page and plays it in the normal player.', ], }, { id: '2026-08-22b', date: 'August 2026', items: [ 'Older galaxyporn scenes no longer open a blank page. They moved to a file host, and the app now grabs the video file straight from it and plays it in the normal player, so in most cases you will not see that page at all. If the host does ask you to confirm you are human, the page is stripped down to just that box and the video.', ], }, { id: '2026-08-22', date: 'August 2026', items: [ 'Videos on DoodStream-style hosts no longer stop at a "resolver fail" screen. Those hosts switched to a captcha you have to tap, so the app now takes you straight to the page where you can tap it instead of asking you to press one more button first.', ], }, { id: '2026-08-20c', date: 'August 2026', items: [ 'Fixed a crash that closed the app while scrolling lists. It came from the trick we used to stop the grid jumping when fresh scenes arrive; the crash was worse than the jump, so the trick is gone until we move to a newer React Native.', 'Site pages now put newly added scenes at the top. Most tubes never report a release date, so those scenes were sorted to the very bottom and the site looked frozen even though it was not.', 'Thumbnails that used to stay blank now load, including sites whose image servers refuse our server directly.', ], }, { id: '2026-08-20b', date: 'August 2026', items: [ 'Fixed a crash that replaced the video with an error screen. If you left the app while a scene was still opening, or Android restored the player by itself, the player refused to start. It now waits until the app is back on screen and then plays normally.', ], }, { id: '2026-08-20', date: 'August 2026', items: [ 'Sites, performers, studios and tags were hiding a large part of the catalogue. The "minimum length" rule was also dropping every scene whose length we simply do not know, which is most of them on some sites: hentaimama, supjav, hentaigasm, hentaiplay, javflix and xanimeporn showed nothing at all, and xhamster, porndish and porntrex showed a fraction. Opening one of those now shows everything it has.', ], }, { id: '2026-08-18i', date: 'August 2026', items: [ 'Dragging the progress bar now works on videos whose length the player has not reported yet. The handle and the time moved with your finger, but letting go did nothing; it seeks properly now.', ], }, { id: '2026-08-18h', date: 'August 2026', items: [ 'Cleaner scene page. Quality and length now sit in the corners of the artwork, and the studio, site and length share one line under it instead of taking a whole section each. The studio is still tappable.', 'Dropped the "Sources" box that showed an internal name like TUBE-SCRAPER; the site the scene comes from is now named properly next to the studio.', 'Section headings got a divider line, so the page has a steadier rhythm as you scroll.', ], }, { id: '2026-08-18g', date: 'August 2026', items: [ 'Scene tiles now show the quality (4K, 1080p) in the corner when we actually know it, and the site the scene comes from next to the studio name. No more opening a scene just to find out where it is hosted.', ], }, { id: '2026-08-18f', date: 'August 2026', items: [ 'This list now shows the month once per group instead of repeating it above every single entry.', 'Sites: dropped the redundant title and hint line, so the list starts right where the other tabs do.', ], }, { id: '2026-08-18e', date: 'August 2026', items: [ 'Consistent look across the Scenes, Movies, Sites, JAV and Anime tabs. The search box, filter button and the little pills were each styled slightly differently per tab (different corners, borders, font sizes, spacing); they now all come from one shared set, so the top of every tab lines up and matches.', ], }, { id: '2026-08-18d', date: 'August 2026', items: [ 'Reworked the top tabs. The blob from a few days ago sat too tall and threw the header out of line, and the animation never looked right. It is now a thin underline that slides to the tab you pick, the way most apps do it, and the row lines up again.', ], }, { id: '2026-08-18c', date: 'August 2026', items: [ 'Filter by minimum quality: 720p, 1080p or 4K, next to the length filter. It only shows scenes whose quality we actually know, and most sites never state it, so expect the list to get a lot shorter when you switch it on. The filter says so underneath.', ], }, { id: '2026-08-18b', date: 'August 2026', items: [ 'naughtymachinima: a video that hit a brief server hiccup no longer drops you straight onto the site page (which was often rate-limited and showed an error). The app now grabs a fresh link and keeps playing.', 'perverzija: playback works again. The site switched video hosts, so every link was failing; the app now opens the new host.', ], }, { id: '2026-08-18', date: 'August 2026', items: [ 'The liquid tab bar now actually flows. The melt animation existed but could never run: switching tabs rebuilt the whole header, so the blob just teleported. The bar also drew in the same colour as the header behind it, which reduced the whole effect to a floating dot. Both fixed, the blob now slides and the bar melts around it.', ], }, { id: '2026-08-14e', date: 'August 2026', items: [ 'JAV now has its own performer list. Opening Performers from that tab used to show the western cast; it now shows the 1392 names that actually appear in JAV scenes.', 'The Anime tab no longer offers a Performers button. Animation has no cast to list, so the button only ever led to an empty screen.', ], }, { id: '2026-08-14d', date: 'August 2026', items: [ 'The Anime and JAV sections now have their own tag list. Opening Tags from those tabs used to show the main catalogue vocabulary, where almost every tag led to an empty screen.', 'Tags that have no scenes are no longer listed or offered in filters. Searching the tag list used to turn up thousands of dead entries, mostly character names from animation.', 'Quality tags (HD, 4k, 720p) are gone. They were a claim by the site rather than a fact, and the app already works out real quality from the video sources.', ], }, { id: '2026-08-14c', date: 'August 2026', items: [ 'Anime: tapping a tag or a studio now stays inside the Anime section. Before, a tag opened from an anime scene showed everything except anime, and an anime studio looked like it did nothing because its page came up empty. The JAV section had the same bug and is fixed too.', ], }, { id: '2026-08-14b', date: 'August 2026', items: [ 'galaxyporn: if a video fails to start, the app now asks for a fresh link instead of giving up. Their servers rotate, so a second try usually lands on a working one.', ], }, { id: '2026-08-14', date: 'August 2026', items: [ 'New look for the tabs at the top: the bar now melts around the tab you are on instead of sliding a pill across it.', ], }, { id: '2026-08-13e', date: 'August 2026', items: [ 'Scene titles get two lines instead of one, so you can actually read them. Before, only about one title in seven fitted; now more than half do.', 'When a title just repeats the studio name that is already shown underneath, that part is dropped, so the space goes to the title itself.', ], }, { id: '2026-08-13d', date: 'August 2026', items: [ 'Readability pass: links, active tabs and the favourite star are a shade lighter, so they stand out against cards instead of sinking into them. Search and input fields now have a visible outline.', ], }, { id: '2026-08-13c', date: 'August 2026', items: [ 'Followed studios now show how many movies they have, not just scenes. Studios that only put out movies used to look empty in your favourites.', ], }, { id: '2026-08-13b', date: 'August 2026', items: [ 'Animated and 3D content has moved into its own Anime tab and no longer shows up in the main scene feed. Its tag list is separate too, so you no longer scroll past thousands of tags that only exist for animation.', 'Followed studios now show their movies. Opening a studio you follow gives you a Movies tab next to Scenes, so a "+1" that came from a new movie actually leads somewhere.', ], }, { id: '2026-08-13', date: 'August 2026', items: [ 'New: animated and 3D content. Five sources have been added, four hentai and one 3D animation, each with its own catalogue rather than reposts of the others.', 'Playback for the 3D source is resolved on your phone, so you get the full quality ladder up to 1080p instead of a stripped-down stream.', ], }, { id: '2026-08-11', date: 'August 2026', items: [ 'Version 0.2.2 has to be installed by hand, once: it is signed with a different key, so Android will not install it over the current app. Copy your sync code from the banner on the Scenes tab BEFORE you uninstall, then paste it back after installing. Without it your favourites and watch progress cannot be found again.', 'Thumbnails from fullporner are back. They had been switched off after their image host briefly served blanks.', ], }, { id: '2026-08-02', date: 'August 2026', items: [ 'Tag and performer counts are now shortened (181k instead of 181 764), so the chips stay readable.', 'Merged duplicate tags that differed only by a plural, so "Blowjob" and "Blowjobs" are one tag again.', ], }, { id: '2026-07-28b', date: 'July 2026', items: [ 'Change video quality while watching: tap the gear icon in the player. It keeps your position, so you do not lose your place.', ], }, { id: '2026-07-28', date: 'July 2026', items: [ 'Auto-rotate can now be turned off (Settings -> Auto-rotate), so the video stops flipping when the phone lies flat on a table. The fullscreen button still switches to landscape.', 'The "+N new" badge on a favourite performer or studio now also counts new movies, not just scenes.', ], }, { id: '2026-07-26b', date: 'July 2026', items: [ 'youporn thumbnails that had gone blank now load again.', ], }, { id: '2026-07-26', date: 'July 2026', items: [ 'If your network or DNS blocks a site\'s video servers (some providers do), the app now falls back to streaming through the server instead of dropping you on the site\'s page full of ads.', 'porntrex: new videos show up again. Their site changed, so we were saving new scenes without a length, and the "minimum length" filter was hiding them.', ], }, { id: '2026-07-22b', date: 'July 2026', items: [ 'The brief burst of sound before a video starts is now fully silenced, including sites whose player auto-plays with sound as the app grabs the stream.', ], }, { id: '2026-07-22', date: 'July 2026', items: [ 'Fixed a rare crash that could happen when a pop-up (like the update prompt) tried to appear just as the app was being sent to the background.', ], }, { id: '2026-07-21', date: 'July 2026', items: [ 'Similar scenes: a scene\'s detail page now shows a row of related scenes, matched by shared performers and tags. Tap one to jump straight to it.', ], }, { id: '2026-07-20b', date: 'July 2026', items: [ 'No more burst of sound when opening a video: the page we briefly load to grab the stream now stays fully muted until it hands off to the player (or until you tap, for the few sites that play in the web view).', ], }, { id: '2026-07-20', date: 'July 2026', items: [ 'Fixed site ratings for sources that play through a quick web-view step (like freshporno): their successful plays now count, so they no longer get wrongly marked offline and demoted. Freshporno is back in rotation.', ], }, { id: '2026-07-16', date: 'July 2026', items: [ 'Bug reports now attach a bit of context automatically (your phone model, Android version, and the last source/server you played), so playback issues can be fixed without us having to ask you for details.', ], }, { id: '2026-07-14c', date: 'July 2026', items: [ 'Copy video link: while a video is playing, tap the link icon in the top bar to copy its URL, then paste it into a browser or a player like VLC or MX Player. Works best for direct sources.', ], }, { id: '2026-07-14b', date: 'July 2026', items: [ 'Backup & sync: move your favorites, saved searches, hidden list and watch progress to another phone. Settings -> Backup & sync: copy this phone\'s sync code, then paste it into Restore on the new phone (your old phone keeps everything).', ], }, { id: '2026-07-14', date: 'July 2026', items: [ 'hqfap: videos play reliably again. The site started blocking our server, so the app now resolves hqfap links directly on your device, fixing the cases that only showed ads or failed to start.', ], }, { id: '2026-07-11', date: 'July 2026', items: [ 'JAV and other voe-hosted videos now play directly in the built-in player instead of falling back to the web view, faster start and smoother playback.', ], }, { id: '2026-07-10b', date: 'July 2026', items: [ 'New JAV tab: a separate section for Japanese adult video (English-subtitled). It is kept out of the main Scenes feed, so the main list stays as it was.', ], }, { id: '2026-07-10', date: 'July 2026', items: [ 'Fixed: audio no longer cuts out when you tap or scroll on the video. It now only mutes while you hold to fast-forward, as intended.', ], }, { id: '2026-07-07', date: 'July 2026', items: [ 'The Scenes feed no longer repeats the same videos as you scroll down.', 'Hold to fast-forward (2x) now mutes the sped-up audio until you let go.', 'hqfap is back: the site returned with working video, so its scenes are being re-added.', ], }, { id: '2026-07-05b', date: 'July 2026', items: [ 'Tap a movie\'s studio to see every other film from that studio. You can also filter the Movies list by studio (Movies → Filter → Studios).', ], }, { id: '2026-07-05', date: 'July 2026', items: [ 'watchporn: if a video link has gone stale (its host node rotated or the link expired), the app now automatically grabs a fresh link and keeps playing in the built-in player, no more "resolver broken".', ], }, { id: '2026-07-03', date: 'July 2026', items: [ 'Movie posters show up again (freeomovie), and more of its sources actually play (myvidplay).', ], }, { id: '2026-07-02b', date: 'July 2026', items: [ 'Fixed a case where a removed or briefly-failing video could get stuck on "Reconnecting" instead of playing or showing the error.', 'Quick play no longer occasionally re-opens the player by itself after you mark a source broken.', ], }, { id: '2026-07-02', date: 'July 2026', items: [ 'Favorites "+N new" now counts genuinely new scenes only, bulk back-catalog imports (old content a site re-dated to today) no longer inflate the badge or show a NEW tag.', ], }, { id: '2026-07-01b', date: 'July 2026', items: [ 'Quick play: tap the ▶ on any thumbnail to start the best source right away, with a default quality set (Settings → Playback) it is one tap to video.', ], }, { id: '2026-07-01', date: 'July 2026', items: [ 'Set a default video quality in Settings → Playback (e.g. 720p) to skip the quality chooser when that quality is available.', 'The "+N new" count on a favorite now matches what you actually see when you open it, no more "+6" with nothing new.', 'Smoother scrolling: when fresh scenes land at the top of a list, it no longer jumps under your finger.', 'Fixed: a video that plays fine no longer flashes "Playback failed / Mark broken" while it reconnects.', ], }, { id: '2026-06-29b', date: 'June 2026', items: [ 'Seeking (swipe or drag) no longer pops a big pause button into the middle of the screen.', 'Diagnostics "open in browser" now opens privately inside the app (incognito), no cookies, no trace in your real browser.', ], }, { id: '2026-06-29', date: 'June 2026', items: [ 'No more brief blast of sound when a video page is opening, it stays muted until you tap.', ], }, { id: '2026-06-26', date: 'June 2026', items: [ 'Source code moved to our own server (git.goon-foss.org). Still fully open source (MIT). The Settings link now points there.', ], }, { id: '2026-06-25', date: 'June 2026', items: [ 'sxyprn and a few other sites: if a video fails to start, the app now grabs a fresh link and retries automatically instead of just hanging.', ], }, { id: '2026-06-22b', date: 'June 2026', items: [ 'New: a quick tutorial on first launch: tabs, search, long-press actions and player gestures. Replay it anytime from Settings ⚙.', ], }, { id: '2026-06-22', date: 'June 2026', items: [ 'Sites now show a 0-5★ rating: how fresh, how well-described, and how reliably each source plays. Tap the stars for the breakdown.', 'Dropped two sources whose videos stopped playing (they served a "server down" clip).', 'latestpornvideo now keeps up with its newest videos.', ], }, { id: '2026-06-21b', date: 'June 2026', items: [ 'Filter movies by performer (Movies → Filter → Performers).', 'Movies grid fits more per screen (3 columns).', ], }, { id: '2026-06-21', date: 'June 2026', items: [ 'Double-tap to skip no longer flashes a pause button in the middle of the screen.', 'Movies show fewer, de-duplicated playback links (no more repeats from mirror sites).', ], }, { id: '2026-06-20c', date: 'June 2026', items: [ 'Cleaner site names (dropped the .com/.org clutter).', 'siska scenes work again (and their newer videos play).', ], }, { id: '2026-06-20b', date: 'June 2026', items: [ 'Hide content you never want to see: Settings → Hidden content lets you hide any tag, performer or studio (and undo it).', ], }, { id: '2026-06-20', date: 'June 2026', items: [ 'Going back to the list from a scene no longer reloads everything or slows the phone.', ], }, { id: '2026-06-19', date: 'June 2026', items: [ 'Smoother scrolling on long scene lists, no more lag or phone slowdown.', 'fpo.xxx scenes now play the actual video instead of an ad.', ], }, { id: '2026-06-16', date: 'June 2026', items: [ 'Grid columns: pick 1, 2 or 3 thumbnails per row in Settings (1 = bigger previews).', 'Filter scenes by minimum length, hide short clips (5/10/20/30+ min).', 'Save searches: tap ☆ Save next to the search box, then reuse them as chips.', 'Privacy: the app is hidden in Recents and blocks screenshots again.', 'Smoother startup when an update is downloading (no more double PIN prompt).', ], }, { id: '2026-06-13', date: 'June 2026', items: [ 'Source code link added in Settings. The app is open source (MIT).', 'New: a Refresh thumbnail button on a scene when its preview is broken or stale.', 'Fewer dead links: deleted videos on some sites are now detected automatically.', ], }, { id: '2026-06-12', date: 'June 2026', items: [ 'Favorites now has a Scenes tab, every scene you heart shows up there.', 'Your bug reports can get replies: tap the ? button, then "Your messages".', 'More reliable playback and lower data use on several sites.', 'Clearer message when a source is blocked in your region or by your network.', ], }, ]; export const NEWEST_CHANGELOG_ID = CHANGELOG.length ? CHANGELOG[0].id : null; /** Wpisy nowsze niż `lastSeenId`. lastSeen=null (pierwsze uruchomienie) → tylko najnowszy * (nie zrzucamy całej historii). lastSeen == najnowszy → pusto (nic do pokazania). */ export function unseenEntries(lastSeenId: string | null): ChangelogEntry[] { if (!CHANGELOG.length) return []; const visible = CHANGELOG.filter( (e) => (!e.onlyBelowRuntime || isNewerVersion(e.onlyBelowRuntime, NATIVE_RUNTIME || '0')) && (!e.minRuntime || !isNewerVersion(e.minRuntime, NATIVE_RUNTIME || '0')), ); if (!visible.length) return []; if (!lastSeenId) return [visible[0]]; // Indeks liczymy na PEŁNEJ liście, bo `lastSeenId` mógł wskazywać wpis odfiltrowany // dla tej wersji; inaczej po aktualizacji APK marker byłby nieznany i pokazalibyśmy // najnowszy wpis drugi raz. const idx = CHANGELOG.findIndex((e) => e.id === lastSeenId); if (idx === -1) return [visible[0]]; // nieznany marker → pokaż tylko najnowszy const seenIds = new Set(CHANGELOG.slice(idx).map((e) => e.id)); return visible.filter((e) => !seenIds.has(e.id)); }