Untitled
unknown
plain_text
a year ago
3.0 kB
8
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