Import another application view logs

This commit is contained in:
niuhuan 2023-03-27 15:44:34 +08:00
parent f92bedef05
commit b0faaecbbd
4 changed files with 171 additions and 4 deletions

View File

@ -981,4 +981,8 @@ class Method {
Future<String> androidStorageRoot() async {
return await _channel.invokeMethod("androidStorageRoot");
}
Future importComicViewFormOff(String dbPath) {
return _flatInvoke("importComicViewFormOff", dbPath);
}
}

View File

@ -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();
}

View File

@ -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;
});
}
}
}

View File

@ -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)),
]),
];