Untitled
unknown
plain_text
10 months ago
3.0 kB
6
Indexable
// working import 'dart:io'; import 'dart:isolate'; import 'package:archive/archive.dart'; import 'package:flutter/services.dart'; import 'package:flutter_isolate/flutter_isolate.dart'; import 'package:http/http.dart' as http; import 'package:path_provider/path_provider.dart'; import 'package:path/path.dart' as p; class ZipFileService { static final ZipFileService _zipService = ZipFileService._internal(); static ZipFileService get instance => _zipService; ZipFileService._internal(); Future<void> initZIP() async { Directory documentsDirectory = await getApplicationSupportDirectory(); String dbpath = p.join( documentsDirectory.path, 'gurbani_database.sqlite/database.sqlite'); bool exists = await File(dbpath).exists(); if (!exists) { print('kuch nahi hai bhag yaha se firse kar'); List<int> zipData = await downloadZipFile(); await decompressAndLoadDatabaseNew(zipData); await deleteZipFile(); } } Future<List<int>> downloadZipFile() async { String zipUrl = ''; http.Response response = await http.get(Uri.parse(zipUrl)); if (response.statusCode == 200) { print('ZIP file downloaded successfully'); // print('Temporary directory: ${response.request?.url?.path}'); return response.bodyBytes; } else { throw Exception('Failed to download ZIP file'); } } Future<void> deleteZipFile() async { Directory documentsDirectory = await getApplicationSupportDirectory(); String zipFilePath = p.join(documentsDirectory.path, 'database.zip'); File zipFile = File(zipFilePath); if (await zipFile.exists()) { await zipFile.delete(); print('ZIP file deleted successfully'); } } @pragma('vm:entry-point') static Future<void> decompressAndLoadDatabaseNew(List<int> zipData) async { ReceivePort receivePort = ReceivePort(); FlutterIsolate isolate = await FlutterIsolate.spawn( _decompressDatabaseNew, {"sendPort": receivePort.sendPort, "zipData": zipData}, ); await for (var msg in receivePort) { if (msg == 1) { isolate.kill(); receivePort.close(); break; } } } @pragma('vm:entry-point') static Future<void> _decompressDatabaseNew(Map<String, dynamic> args) async { final SendPort sendPort = args['sendPort']; final List<int> zipData = args['zipData']; Archive archive = ZipDecoder().decodeBytes(zipData); Directory documentsDirectory = await getApplicationSupportDirectory(); String path = "${documentsDirectory.path}/gurbani_database.sqlite"; for (ArchiveFile archiveFile in archive) { String fileName = archiveFile.name; List<int> data = archiveFile.content; File outFile = File("$path/$fileName"); outFile = await outFile.create(recursive: true); await outFile.writeAsBytes(data, flush: true); } sendPort.send(1); // Finished decompression } }
Editor is loading...
Leave a Comment