Some checks failed
Backend tests / test (push) Has been cancelled
1) Ekran gasl w trakcie ogladania (bug-reports fcbaa933 2026-07-18, c40fb79f 2026-07-23, dwoch userow). Android wygasza po timeoucie, bo dotyk nie pada, a samo granie wideo nie trzyma wake-locka. expo-keep-awake NIE jest w top-level node_modules (siedzi w node_modules/expo/node_modules), wiec metro nie rozwiaze importu, ale natywny modul ExpoKeepAwake JEST w APK (expo go autolinkuje) - siegamy po niego przez requireNativeModule z expo-modules-core (top-level). Dzieki temu leci OTA, bez nowego APK. Wake-lock tylko gdy realnie gra (przy pauzie ekran gasnie normalnie); WebView-player trzyma przez caly czas zycia ekranu, bo tam nie ma sygnalu play/pause. 2) Miniaturki youporn (bug-report bebf8c92): youporn przeszedl dla czesci katalogu na imgproxy z PODPISANYM URL-em (?hash=...&validto=<ts>), ktory WYGASA - zapisany w bazie po czasie zwraca 410 (8666 z 62930 zrodel). Statyczne .../original/N.jpg dzialaja bezterminowo. Nowy endpoint /proxy/youporn-thumb/<video_id> resolwuje swiezy poster przy serwowaniu (jak sxyprn-thumb), z html.unescape bo og:image ma & i psulo to podpis (403). Podmiana TYLKO dla podpisanych - statycznych nie ruszamy, zero dodatkowych fetchy. Zweryfikowane: 8/8 wczesniej-410 teraz 200 (57-142KB), statyczne bez regresji.
314 lines
11 KiB
TypeScript
314 lines
11 KiB
TypeScript
/**
|
|
* 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.
|
|
*/
|
|
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[];
|
|
};
|
|
|
|
export const CHANGELOG: ChangelogEntry[] = [
|
|
{
|
|
id: '2026-07-26b',
|
|
date: 'July 2026',
|
|
items: [
|
|
'The screen no longer turns off while a video is playing. It still dims normally when you pause.',
|
|
'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 [];
|
|
if (!lastSeenId) return [CHANGELOG[0]];
|
|
const idx = CHANGELOG.findIndex((e) => e.id === lastSeenId);
|
|
if (idx === -1) return [CHANGELOG[0]]; // nieznany marker → pokaż tylko najnowszy
|
|
return CHANGELOG.slice(0, idx);
|
|
}
|