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>
41 lines
1.9 KiB
TypeScript
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;
|
|
}
|
|
}
|