✨ Import another application view logs
This commit is contained in:
parent
f92bedef05
commit
b0faaecbbd
|
@ -981,4 +981,8 @@ class Method {
|
|||
Future<String> androidStorageRoot() async {
|
||||
return await _channel.invokeMethod("androidStorageRoot");
|
||||
}
|
||||
|
||||
Future importComicViewFormOff(String dbPath) {
|
||||
return _flatInvoke("importComicViewFormOff", dbPath);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,11 +3,16 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:filesystem_picker/filesystem_picker.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:pikapika/basic/Common.dart';
|
||||
import 'package:pikapika/basic/Cross.dart';
|
||||
|
||||
import '../../screens/ImportFromOffScreen.dart';
|
||||
import '../Method.dart';
|
||||
import 'ChooserRoot.dart';
|
||||
import 'IconLoading.dart';
|
||||
|
||||
late String _downloadCachePath;
|
||||
|
||||
|
@ -28,14 +33,14 @@ Widget downloadCachePathSetting() {
|
|||
return StatefulBuilder(
|
||||
builder: (BuildContext context, void Function(void Function()) setState) {
|
||||
return ListTile(
|
||||
title: const Text("使用下载缓存"),
|
||||
title: const Text("使用其他程序的缓存下载加速"),
|
||||
subtitle: Text(_downloadCachePath),
|
||||
onTap: () async {
|
||||
if (_downloadCachePath == "") {
|
||||
bool b = await confirmDialog(
|
||||
context,
|
||||
"使用其他软件的下载内容加速",
|
||||
"您即将选择一个目录, 这个目录拷贝自 ${base64Decode("L0FuZHJvaWQvZGF0YS9jb20ucGljYWNvbWljLmZyZWdhdGEvZmlsZXMv")}",
|
||||
"使用其他程序的缓存下载加速",
|
||||
"您即将选择一个目录, 这个目录拷贝自以下目录才能使用。下载时将会作为缓存文件夹优先读取。 \n\n${String.fromCharCodes(base64Decode("L0FuZHJvaWQvZGF0YS9jb20ucGljYWNvbWljLmZyZWdhdGEvZmlsZXMv"))}",
|
||||
);
|
||||
if (b) {
|
||||
late String? folder;
|
||||
|
@ -71,3 +76,68 @@ Widget downloadCachePathSetting() {
|
|||
}
|
||||
return Container();
|
||||
}
|
||||
|
||||
Widget importViewLogFromOff() {
|
||||
if (Platform.isWindows ||
|
||||
Platform.isMacOS ||
|
||||
Platform.isAndroid ||
|
||||
Platform.isLinux) {
|
||||
return StatefulBuilder(
|
||||
builder: (BuildContext context, void Function(void Function()) setState) {
|
||||
return ListTile(
|
||||
title: const Text("导入其他程序的历史记录"),
|
||||
subtitle: Text(_downloadCachePath),
|
||||
onTap: () async {
|
||||
bool b = await confirmDialog(
|
||||
context,
|
||||
"导入其他程序的历史记录",
|
||||
"您即将选择一个文件, 这个文件拷贝自以下路径才能使用。 \n\n${String.fromCharCodes(base64Decode("L2RhdGEvZGF0YS9jb20ucGljYWNvbWljLmdyZWdhdGEvZGF0YWJhc2VzL2NvbV9waWNhY29taWNfZnJlZ2F0YS5kYg=="))}",
|
||||
);
|
||||
if (b) {
|
||||
late String chooseRoot;
|
||||
try {
|
||||
chooseRoot = await currentChooserRoot();
|
||||
} catch (e) {
|
||||
defaultToast(context, "$e");
|
||||
return;
|
||||
}
|
||||
String? path;
|
||||
if (Platform.isAndroid) {
|
||||
path = await FilesystemPicker.open(
|
||||
title: 'Open file',
|
||||
context: context,
|
||||
rootDirectory: Directory(chooseRoot),
|
||||
fsType: FilesystemType.file,
|
||||
folderIconColor: Colors.teal,
|
||||
allowedExtensions: ['.db'],
|
||||
fileTileSelectMode: FileTileSelectMode.wholeTile,
|
||||
);
|
||||
} else {
|
||||
var ls = await FilePicker.platform.pickFiles(
|
||||
dialogTitle: '选择要导入的文件',
|
||||
allowMultiple: false,
|
||||
initialDirectory: chooseRoot,
|
||||
type: FileType.custom,
|
||||
allowedExtensions: ['db'],
|
||||
allowCompression: false,
|
||||
);
|
||||
path = ls != null && ls.count > 0 ? ls.paths[0] : null;
|
||||
}
|
||||
if (path != null) {
|
||||
if (path.endsWith(".db")) {
|
||||
Navigator.of(context).push(
|
||||
mixRoute(
|
||||
builder: (BuildContext context) =>
|
||||
ImportFromOffScreen(dbPath: path!),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
return Container();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:pikapika/basic/Method.dart';
|
||||
|
||||
import '../basic/Channels.dart';
|
||||
import 'components/ContentLoading.dart';
|
||||
import 'components/RightClickPop.dart';
|
||||
|
||||
class ImportFromOffScreen extends StatefulWidget {
|
||||
final String dbPath;
|
||||
|
||||
const ImportFromOffScreen({Key? key, required this.dbPath}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() => _ImportFromOffScreenState();
|
||||
}
|
||||
|
||||
class _ImportFromOffScreenState extends State<ImportFromOffScreen> {
|
||||
bool _importing = false;
|
||||
String _importMessage = "";
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
registerEvent(_onMessageChange, "EXPORT");
|
||||
_process();
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
unregisterEvent(_onMessageChange);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _onMessageChange(event) {
|
||||
if (event is String) {
|
||||
setState(() {
|
||||
_importMessage = event;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return rightClickPop(
|
||||
child: buildScreen(context),
|
||||
context: context,
|
||||
canPop: !_importing,
|
||||
);
|
||||
}
|
||||
|
||||
Widget buildScreen(BuildContext context) {
|
||||
if (_importing) {
|
||||
return Scaffold(
|
||||
body: ContentLoading(label: _importMessage),
|
||||
);
|
||||
}
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('导入'),
|
||||
),
|
||||
body: ListView(
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Text(_importMessage),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
_process() async {
|
||||
try {
|
||||
setState(() {
|
||||
_importing = true;
|
||||
});
|
||||
await method.importComicViewFormOff(widget.dbPath);
|
||||
setState(() {
|
||||
_importMessage = "导入成功";
|
||||
});
|
||||
} catch (e) {
|
||||
setState(() {
|
||||
_importMessage = "导入失败 $e";
|
||||
});
|
||||
} finally {
|
||||
setState(() {
|
||||
_importing = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
|
@ -180,9 +180,11 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||
downloadThreadCountSetting(),
|
||||
downloadAndExportPathSetting(),
|
||||
showCommentAtDownloadSetting(),
|
||||
downloadCachePathSetting(),
|
||||
exportRenameSetting(),
|
||||
const Divider(),
|
||||
downloadCachePathSetting(),
|
||||
importViewLogFromOff(),
|
||||
const Divider(),
|
||||
const Padding(padding: EdgeInsets.only(top: 15)),
|
||||
]),
|
||||
];
|
||||
|
|
Loading…
Reference in New Issue