mirror of
https://github.com/wanghongenpin/proxypin.git
synced 2026-03-29 06:59:46 +08:00
198 lines
6.9 KiB
Dart
198 lines
6.9 KiB
Dart
/*
|
|
* Copyright 2024 Hongen Wang All rights reserved.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import 'dart:io';
|
|
|
|
import 'package:flutter_js/flutter_js.dart';
|
|
import 'package:path_provider/path_provider.dart';
|
|
import 'package:proxypin/network/util/logger.dart';
|
|
|
|
/// FileBridge for file operation
|
|
/// @Author: Hongen Wang
|
|
class FileBridge {
|
|
static const String code = '''
|
|
function getApplicationSupportDirectory() {
|
|
return sendMessage('getApplicationSupportDirectory', JSON.stringify(''));
|
|
}
|
|
|
|
function File(path) {
|
|
return {
|
|
path: path,
|
|
readAsString: function() {
|
|
return sendMessage('file.readAsString', JSON.stringify(this.path));
|
|
},
|
|
readAsStringSync: function() {
|
|
return sendMessage('file.readAsStringSync', JSON.stringify(this.path));
|
|
},
|
|
readAsBytes: function() {
|
|
return sendMessage('file.readAsBytes', JSON.stringify(this.path));
|
|
},
|
|
readAsBytesSync: function() {
|
|
return sendMessage('file.readAsBytesSync', JSON.stringify(this.path));
|
|
},
|
|
writeAsString: function(content, append) {
|
|
return sendMessage('file.writeAsString', JSON.stringify({path: this.path, content:content, append: append}));
|
|
},
|
|
writeAsStringSync: function(content, append) {
|
|
return sendMessage('file.writeAsStringSync', JSON.stringify({path: this.path, content: content, append: append}));
|
|
},
|
|
writeAsBytes: function(bytes, append) {
|
|
return sendMessage('file.writeAsBytes', JSON.stringify({path: this.path, bytes: bytes, append: append}));
|
|
},
|
|
writeAsBytesSync: function(bytes, append) {
|
|
return sendMessage('file.writeAsBytesSync', JSON.stringify({path: this.path, bytes: bytes, append: append}));
|
|
},
|
|
length: function() {
|
|
return sendMessage('file.length', JSON.stringify(this.path));
|
|
},
|
|
lengthSync: function() {
|
|
return sendMessage('file.lengthSync', JSON.stringify(this.path));
|
|
},
|
|
delete: function() {
|
|
return sendMessage('file.delete', JSON.stringify(this.path));
|
|
},
|
|
deleteSync: function() {
|
|
return sendMessage('file.deleteSync', JSON.stringify(this.path));
|
|
},
|
|
exists: function() {
|
|
return sendMessage('file.exists', JSON.stringify(this.path));
|
|
},
|
|
existsSync: function() {
|
|
return sendMessage('file.existsSync', JSON.stringify(this.path));
|
|
},
|
|
create: function(recursive, exclusive) {
|
|
return sendMessage('file.create', JSON.stringify({path: this.path, recursive: recursive, exclusive: exclusive}));
|
|
},
|
|
createSync: function(recursive, exclusive) {
|
|
return sendMessage('file.createSync', JSON.stringify({path: this.path, recursive: recursive, exclusive: exclusive}));
|
|
},
|
|
rename: function(newPath) {
|
|
return sendMessage('file.rename', JSON.stringify(this.path, newPath));
|
|
}
|
|
};
|
|
}
|
|
''';
|
|
|
|
///register file operation
|
|
static void registerFile(JavascriptRuntime flutterJs) {
|
|
var channels = JavascriptRuntime.channelFunctionsRegistered[flutterJs.getEngineInstanceId()];
|
|
if (channels != null && channels.containsKey('file.readAsString')) {
|
|
return;
|
|
}
|
|
var result = flutterJs.evaluate(code);
|
|
if (result.isError) {
|
|
logger.e('registerFile error: ${result.stringResult}');
|
|
}
|
|
|
|
flutterJs.onMessage('getApplicationSupportDirectory', (args) {
|
|
return getApplicationSupportDirectory().then((dir) => dir.path);
|
|
});
|
|
|
|
flutterJs.onMessage('file.readAsString', (path) {
|
|
return File(path).readAsString();
|
|
});
|
|
|
|
flutterJs.onMessage('file.readAsStringSync', (path) {
|
|
var readAsStringSync = File(path).readAsStringSync();
|
|
return readAsStringSync;
|
|
});
|
|
|
|
flutterJs.onMessage('file.readAsBytes', (path) {
|
|
return File(path).readAsBytes();
|
|
});
|
|
|
|
flutterJs.onMessage('file.readAsBytesSync', (path) {
|
|
return File(path).readAsBytesSync();
|
|
});
|
|
|
|
flutterJs.onMessage('file.writeAsString', (args) async {
|
|
var path = args['path'];
|
|
var content = args['content'];
|
|
var append = args['append'] ?? false;
|
|
await File(path).writeAsString(content, mode: append ? FileMode.append : FileMode.write);
|
|
});
|
|
|
|
flutterJs.onMessage('file.writeAsStringSync', (args) {
|
|
var path = args['path'];
|
|
var content = args['content'];
|
|
var append = args['append'] ?? false;
|
|
|
|
File(path).writeAsStringSync(content, mode: append ? FileMode.append : FileMode.write);
|
|
});
|
|
|
|
flutterJs.onMessage('file.writeAsBytes', (args) async {
|
|
var path = args['path'];
|
|
var bytes = List<int>.from(args['bytes']);
|
|
var append = args['append'] ?? false;
|
|
|
|
await File(path).writeAsBytes(bytes, mode: append ? FileMode.append : FileMode.write);
|
|
});
|
|
|
|
flutterJs.onMessage('file.writeAsBytesSync', (args) {
|
|
var path = args['path'];
|
|
var bytes = List<int>.from(args['bytes']);
|
|
var append = args['append'] ?? false;
|
|
|
|
File(path).writeAsBytesSync(bytes, mode: append ? FileMode.append : FileMode.write);
|
|
});
|
|
|
|
flutterJs.onMessage('file.length', (path) {
|
|
return File(path).length();
|
|
});
|
|
|
|
flutterJs.onMessage('file.lengthSync', (path) {
|
|
return File(path).lengthSync();
|
|
});
|
|
|
|
// flutterJs.onMessage('file.delete', (path) {
|
|
// return File(path).delete();
|
|
// });
|
|
//
|
|
// flutterJs.onMessage('file.deleteSync', (path) {
|
|
// return File(path).deleteSync();
|
|
// });
|
|
|
|
flutterJs.onMessage('file.exists', (path) {
|
|
return File(path).exists();
|
|
});
|
|
|
|
flutterJs.onMessage('file.existsSync', (path) {
|
|
return File(path).existsSync();
|
|
});
|
|
|
|
flutterJs.onMessage('file.create', (args) {
|
|
//bool recursive = false, bool exclusive = false
|
|
var path = args['path'];
|
|
var recursive = args['recursive'] ?? false;
|
|
var exclusive = args['exclusive'] ?? false;
|
|
File(path).create(recursive: recursive, exclusive: exclusive);
|
|
});
|
|
|
|
flutterJs.onMessage('file.createSync', (args) {
|
|
var path = args['path'];
|
|
var recursive = args['recursive'] ?? false;
|
|
var exclusive = args['exclusive'] ?? false;
|
|
File(path).createSync(recursive: recursive, exclusive: exclusive);
|
|
});
|
|
|
|
flutterJs.onMessage('file.rename', (args) async {
|
|
var path = args['path'];
|
|
var newPath = args['newPath'];
|
|
await File(path).rename(newPath);
|
|
});
|
|
}
|
|
}
|