import 'dart:convert'; import 'dart:io'; import 'dart:isolate'; import 'package:flutter/services.dart'; import 'package:http_interceptor/http_interceptor.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/models/video.dart'; import 'package:mangayomi/providers/storage_provider.dart'; import 'package:mangayomi/services/http/m_client.dart'; import 'package:mangayomi/utils/extensions/string_extensions.dart'; import 'package:mangayomi/ffi/torrent_server_ffi.dart' as libmtorrentserver_ffi; class MTorrentServer { final http = MClient.init(); Future removeTorrent(String? inforHash) async { if (inforHash == null || inforHash.isEmpty) return false; try { final res = await http.delete(Uri.parse("$_baseUrl/torrent/remove?infohash=$inforHash")); if (res.statusCode == 200) { return true; } return false; } catch (_) { return false; } } Future check() async { if (_baseUrl == "http://127.0.0.1:0") return false; try { final res = await http.get(Uri.parse("$_baseUrl/")); if (res.statusCode == 200) { return true; } return false; } catch (_) { return false; } } Future getInfohash(String url, bool isFilePath) async { try { final torrentByte = isFilePath ? File(url).readAsBytesSync() : (await http.get(Uri.parse(url))).bodyBytes; var request = MultipartRequest('POST', Uri.parse('$_baseUrl/torrent/add')); request.files.add(MultipartFile.fromBytes('file', torrentByte, filename: 'file.torrent')); final response = await http.send(request); return await response.stream.bytesToString(); } catch (e) { rethrow; } } Future<(List