diff --git a/android/src/services/updater.ts b/android/src/services/updater.ts index b60c4a9..74d019d 100644 --- a/android/src/services/updater.ts +++ b/android/src/services/updater.ts @@ -29,6 +29,11 @@ class UpdateService { private downloading = false; constructor() { + // Beim Start alte APK-Reste aus dem Cache wegraeumen — wenn diese App + // laeuft, sind frueher heruntergeladene APKs entweder schon installiert + // oder unvollstaendig gewesen. Spart sonst pro Update 20-30MB auf dem Handy. + this.cleanupOldApks().catch(() => {}); + // Auf update_available Nachrichten lauschen rvs.onMessage((msg: RVSMessage) => { if (msg.type === 'update_available' as any) { @@ -45,6 +50,30 @@ class UpdateService { }); } + /** Raeumt alte heruntergeladene APK-Dateien aus dem Cache auf. */ + private async cleanupOldApks(): Promise { + try { + const files = await RNFS.readDir(RNFS.CachesDirectoryPath); + const apks = files.filter(f => /\.apk$/i.test(f.name)); + let freed = 0; + for (const f of apks) { + try { + const size = parseInt(f.size as any, 10) || 0; + await RNFS.unlink(f.path); + freed += size; + console.log(`[Update] Alte APK geloescht: ${f.name} (${(size / 1024 / 1024).toFixed(1)}MB)`); + } catch (err: any) { + console.warn(`[Update] APK-Loeschen fehlgeschlagen: ${f.name} (${err?.message || err})`); + } + } + if (apks.length > 0) { + console.log(`[Update] Cleanup fertig: ${apks.length} APKs entfernt, ${(freed / 1024 / 1024).toFixed(1)}MB freigegeben`); + } + } catch (err: any) { + console.warn(`[Update] Cleanup-Fehler: ${err?.message || err}`); + } + } + /** Bei App-Start Update pruefen */ checkForUpdate(): void { if (this.checking) return; @@ -111,6 +140,10 @@ class UpdateService { }); }); + // Vor dem Schreiben alte APKs im Cache wegraeumen — falls mehrere + // Updates in einer Session gezogen werden + await this.cleanupOldApks(); + // Base64 als APK-Datei speichern const destPath = `${RNFS.CachesDirectoryPath}/${apkData.fileName}`; await RNFS.writeFile(destPath, apkData.base64, 'base64');