goon/mobile/src/migrationNotice.ts
goon-foss a4486980a4 style: myslniki em/en z komentarzy i docstringow (calosc repo)
1745 wystapien w 291 plikach (backend, scripts, mobile). Dominowal jeden ksztalt,
' — ' laczace zdania, wiec poszedl przecinek; myslnik otwierajacy mysl zdjety;
zakresy 0–5 i A–Z na dywiz.

Podzial komentarz/kod robil skaner stanow, nie regex, zeby nie ruszyc myslnika
stojacego w stringu albo w wyrazeniu regularnym. Potwierdzone maszynowo: po wycieciu
komentarzy z wersji HEAD i z dysku obie sa identyczne we wszystkich 291 plikach,
czyli poza komentarzami nie zmienilo sie nic. 233 pliki .py parsuja sie bez bledu,
tsc ma te same 11 bledow w tych samych 3 plikach co przed zmiana.

Dwie rzeczy wymagaly poprawki po automacie: wyrownane listy definicji, gdzie myslnik
byl separatorem kolumny (37 miejsc, kolumna przywrocona), i trzy przeniesienia mysli
do nowej linii, gdzie zostawal wiszacy przecinek na poczatku (poprawione recznie).

Bundla nie republikuje: Hermes i tak nie niesie komentarzy, wiec dla uzytkownika
to zero zmiany.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 11:51:57 +02:00

41 lines
1.9 KiB
TypeScript

/**
* Konfiguracja banera migracyjnego (MigrationBanner).
*
* Kontekst: klucz podpisujący release APK (v0.2.1 i wcześniejsze) został utracony.
* Androidowy update in-place wymaga TEGO SAMEGO podpisu, więc kolejnej wersji nie da
* się już zainstalować na wierzchu, trzeba odinstalować starą i zainstalować nową.
* Odinstalowanie kasuje SecureStore, a w nim `goon.device_id`, czyli kod synchronizacji.
* Bez skopiowanego kodu ulubione, historia i postęp oglądania stają się nieosiągalne
* (dane leżą na serwerze pod tym id, ale nie ma jak ich wskazać).
*
* Stąd baner: pokazuje kod PRZED odinstalowaniem i prowadzi przez kolejne kroki.
*
* Baner ma trafiać WYŁĄCZNIE do instalacji sprzed 0.2.2, czyli tych na runtime 1.1.
* Sam podział na kanały OTA to za mało: chronił tylko dopóki kanał 1.2 był pusty, a przy
* pierwszej publikacji na 1.2 ten sam bundle trafiłby do nowej wersji i kazałby jej
* użytkownikom instalować ręcznie coś, co już mają. Stąd twardy warunek na runtime niżej.
*/
import * as Updates from 'expo-updates';
/** Kanał OTA instalacji sprzed 0.2.2. Tylko tam baner ma sens. */
const LEGACY_RUNTIME = '1.1';
export const MIGRATION_NOTICE = {
/** Master switch. Ustaw false, gdy migracja się dopali i baner ma zniknąć. */
enabled: true,
/** Wersja do zainstalowania. Pokazywana w banerze. */
version: '0.2.2',
/** Strona pobierania. Celowo strona, nie plik: link przeżyje zmianę nazwy APK. */
downloadUrl: 'https://goon-foss.org/',
} as const;
/** Czy ta instalacja w ogóle wymaga ręcznej migracji. Fail-closed: gdy nie da się
* odczytać runtime'u (dev client, brak expo-updates), NIE straszymy banerem. */
export function needsManualMigration(): boolean {
if (!MIGRATION_NOTICE.enabled) return false;
try {
return Updates.runtimeVersion === LEGACY_RUNTIME;
} catch {
return false;
}
}