mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-01-11 22:40:36 +00:00
Merge pull request #632 from NBA2K1/path-optimizations
Path optimizations
This commit is contained in:
commit
e342fe16fb
10 changed files with 49 additions and 71 deletions
|
|
@ -75,14 +75,12 @@ class MBridge {
|
|||
var query = htmlXPath.query(xpath);
|
||||
if (query.nodes.length > 1) {
|
||||
for (var element in query.attrs) {
|
||||
attrs.add(element!.trim().trimLeft().trimRight());
|
||||
attrs.add(element!.trim());
|
||||
}
|
||||
}
|
||||
//Return one attr
|
||||
else if (query.nodes.length == 1) {
|
||||
String attr = query.attr != null
|
||||
? query.attr!.trim().trimLeft().trimRight()
|
||||
: "";
|
||||
String attr = query.attr != null ? query.attr!.trim() : "";
|
||||
if (attr.isNotEmpty) {
|
||||
attrs = [attr];
|
||||
}
|
||||
|
|
@ -102,7 +100,7 @@ class MBridge {
|
|||
statusMap = element;
|
||||
for (var element in statusMap.entries) {
|
||||
if (element.key.toString().toLowerCase().contains(
|
||||
status.toLowerCase().trim().trimLeft().trimRight(),
|
||||
status.toLowerCase().trim(),
|
||||
)) {
|
||||
return switch (element.value as int) {
|
||||
0 => Status.ongoing,
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@ import 'package:media_kit/generated/libmpv/bindings.dart' as generated;
|
|||
import 'package:media_kit_video/media_kit_video.dart';
|
||||
import 'package:media_kit_video/media_kit_video_controls/src/controls/extensions/duration.dart';
|
||||
import 'package:numberpicker/numberpicker.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
|
|
@ -930,7 +929,7 @@ mp.register_script_message('call_button_${button.id}_long', button${button.id}lo
|
|||
if (Platform.isAndroid && useLibass) {
|
||||
try {
|
||||
final subDir = await getApplicationDocumentsDirectory();
|
||||
final fontPath = p.join(subDir.path, 'subfont.ttf');
|
||||
final fontPath = path.join(subDir.path, 'subfont.ttf');
|
||||
final data = await rootBundle.load('assets/fonts/subfont.ttf');
|
||||
final bytes = data.buffer.asInt8List(
|
||||
data.offsetInBytes,
|
||||
|
|
@ -2310,7 +2309,9 @@ mp.register_script_message('call_button_${button.id}_long', button${button.id}lo
|
|||
);
|
||||
final dir = await StorageProvider()
|
||||
.getGalleryDirectory();
|
||||
final file = File(p.join(dir!.path, "$name.png"));
|
||||
final file = File(
|
||||
path.join(dir!.path, "$name.png"),
|
||||
);
|
||||
file.writeAsBytesSync(imageBytes!);
|
||||
if (context.mounted) {
|
||||
botToast(context.l10n.picture_saved, second: 3);
|
||||
|
|
|
|||
|
|
@ -309,7 +309,7 @@ Future<void> downloadChapter(
|
|||
if (!file.existsSync()) {
|
||||
pages.add(
|
||||
PageUrl(
|
||||
page.url.trim().trimLeft().trimRight(),
|
||||
page.url.trim(),
|
||||
headers: pageHeaders,
|
||||
fileName: p.join(
|
||||
chapterDirectory.path,
|
||||
|
|
@ -325,7 +325,7 @@ Future<void> downloadChapter(
|
|||
if (!file.existsSync()) {
|
||||
pages.add(
|
||||
PageUrl(
|
||||
page.url.trim().trimLeft().trimRight(),
|
||||
page.url.trim(),
|
||||
headers: pageHeaders,
|
||||
fileName: p.join(mangaMainDirectory.path, "$chapterName.mp4"),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -5,8 +5,7 @@ import 'package:mangayomi/models/settings.dart';
|
|||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
import 'package:mangayomi/providers/storage_provider.dart';
|
||||
import 'package:mangayomi/router/router.dart';
|
||||
import 'package:path/path.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:mangayomi/utils/extensions/others.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'storage_usage.g.dart';
|
||||
|
||||
|
|
@ -16,33 +15,24 @@ class TotalChapterCacheSizeState extends _$TotalChapterCacheSizeState {
|
|||
String build() {
|
||||
_getTotalDiskSpace().then((value) {
|
||||
if (!ref.mounted) return;
|
||||
state = _formatBytes(value);
|
||||
state = value.formattedFileSize();
|
||||
});
|
||||
return "0.00 B";
|
||||
}
|
||||
|
||||
final String _cacheImageMangaPath = join('Mangayomi', 'cacheimagemanga');
|
||||
final String _cacheDownloadPath = join('Mangayomi', 'downloads');
|
||||
final _storage = StorageProvider();
|
||||
|
||||
Future<void> clearCache({bool showToast = true}) async {
|
||||
final tempPath = (await getTemporaryDirectory()).path;
|
||||
String? msg;
|
||||
try {
|
||||
final dir = Directory(join(tempPath, _cacheImageMangaPath));
|
||||
final dir = await _storage.getCacheDirectory('cacheimagemanga');
|
||||
if (dir.existsSync()) {
|
||||
await dir.delete(recursive: true);
|
||||
}
|
||||
msg = "0.00 B";
|
||||
} catch (_) {}
|
||||
try {
|
||||
final dir = Directory(join(tempPath, _cacheDownloadPath));
|
||||
if (dir.existsSync()) {
|
||||
await dir.delete(recursive: true);
|
||||
}
|
||||
msg = "0.00 B";
|
||||
} catch (_) {}
|
||||
try {
|
||||
await StorageProvider().deleteTmpDirectory();
|
||||
await _storage.deleteTmpDirectory();
|
||||
} catch (_) {}
|
||||
if (msg != null && showToast) {
|
||||
state = msg;
|
||||
|
|
@ -53,14 +43,10 @@ class TotalChapterCacheSizeState extends _$TotalChapterCacheSizeState {
|
|||
}
|
||||
|
||||
Future<int> _getTotalDiskSpace() async {
|
||||
final tempPath = (await getTemporaryDirectory()).path;
|
||||
try {
|
||||
return await _getdirectorySize(
|
||||
Directory(join(tempPath, _cacheImageMangaPath)),
|
||||
) +
|
||||
await _getdirectorySize(
|
||||
Directory(join(tempPath, _cacheDownloadPath)),
|
||||
);
|
||||
await _storage.getCacheDirectory('cacheimagemanga'),
|
||||
);
|
||||
} catch (_) {}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -79,19 +65,6 @@ class TotalChapterCacheSizeState extends _$TotalChapterCacheSizeState {
|
|||
} catch (_) {}
|
||||
return 0;
|
||||
}
|
||||
|
||||
String _formatBytes(int bytes) {
|
||||
const units = ['B', 'KB', 'MB', 'GB'];
|
||||
int unitIndex = 0;
|
||||
double size = bytes.toDouble();
|
||||
|
||||
while (size >= 1024 && unitIndex < units.length - 1) {
|
||||
size /= 1024;
|
||||
unitIndex++;
|
||||
}
|
||||
|
||||
return '${size.toStringAsFixed(2)} ${units[unitIndex]}';
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import 'package:http_client_helper/http_client_helper.dart';
|
|||
import 'package:mangayomi/providers/storage_provider.dart';
|
||||
import 'package:mangayomi/services/http/m_client.dart';
|
||||
import 'package:path/path.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:extended_image_library/src/network/extended_network_image_provider.dart'
|
||||
as image_provider;
|
||||
|
||||
|
|
@ -214,7 +213,7 @@ class CustomExtendedNetworkImageProvider
|
|||
@override
|
||||
final bool printError;
|
||||
|
||||
/// The max duration to cahce image.
|
||||
/// The max duration to cache image.
|
||||
/// After this time the cache is expired and the image is reloaded.
|
||||
@override
|
||||
final Duration? cacheMaxAge;
|
||||
|
|
@ -317,15 +316,9 @@ class CustomExtendedNetworkImageProvider
|
|||
return cachedData;
|
||||
}
|
||||
|
||||
final Directory cacheImagesDirectory = Directory(
|
||||
join(
|
||||
(await getTemporaryDirectory()).path,
|
||||
'Mangayomi',
|
||||
imageCacheFolderName ?? 'cacheimagecover',
|
||||
),
|
||||
);
|
||||
final Directory cacheImagesDirectory = await StorageProvider()
|
||||
.createCacheDirectory(imageCacheFolderName);
|
||||
Uint8List? data;
|
||||
await StorageProvider().createDirectorySafely(cacheImagesDirectory.path);
|
||||
final File cacheFile = File(join(cacheImagesDirectory.path, md5Key));
|
||||
|
||||
// exist, try to find cache image file
|
||||
|
|
|
|||
|
|
@ -342,7 +342,7 @@ Future<void> pushToMangaReaderDetail({
|
|||
mangaM ??
|
||||
Manga(
|
||||
imageUrl: getManga!.imageUrl,
|
||||
name: getManga.name!.trim().trimLeft().trimRight(),
|
||||
name: getManga.name!.trim(),
|
||||
genre: getManga.genre?.map((e) => e.toString()).toList() ?? [],
|
||||
author: getManga.author ?? "",
|
||||
status: getManga.status ?? Status.unknown,
|
||||
|
|
|
|||
|
|
@ -86,6 +86,20 @@ class StorageProvider {
|
|||
return Directory(tmpPath);
|
||||
}
|
||||
|
||||
Future<Directory> getCacheDirectory(String? imageCacheFolderName) async {
|
||||
final cacheImagesDirectory = path.join(
|
||||
(await getApplicationCacheDirectory()).path,
|
||||
imageCacheFolderName ?? 'cacheimagecover',
|
||||
);
|
||||
return Directory(cacheImagesDirectory);
|
||||
}
|
||||
|
||||
Future<Directory> createCacheDirectory(String? imageCacheFolderName) async {
|
||||
final cachePath = await getCacheDirectory(imageCacheFolderName);
|
||||
await createDirectorySafely(cachePath.path);
|
||||
return cachePath;
|
||||
}
|
||||
|
||||
Future<String> _tempDirectoryPath() async {
|
||||
final defaultDirectory = await getDirectory();
|
||||
return path.join(defaultDirectory!.path, 'tmp');
|
||||
|
|
|
|||
|
|
@ -326,7 +326,7 @@ extension DocumentExtension on Document? {
|
|||
var htmlXPath = HtmlXPath.node(dom);
|
||||
var query = htmlXPath.query(xpath);
|
||||
if (query.nodes.length > 1) {
|
||||
return query.attrs.map((e) => e!.trim().trimLeft().trimRight()).toList();
|
||||
return query.attrs.map((e) => e!.trim()).toList();
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
|
@ -365,7 +365,7 @@ extension ElementtExtension on Element {
|
|||
var htmlXPath = HtmlXPath.node(this);
|
||||
var query = htmlXPath.query(xpath);
|
||||
if (query.nodes.length > 1) {
|
||||
return query.attrs.map((e) => e!.trim().trimLeft().trimRight()).toList();
|
||||
return query.attrs.map((e) => e!.trim()).toList();
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,18 +10,22 @@ import 'package:intl/intl.dart';
|
|||
import 'package:mangayomi/modules/manga/reader/u_chap_data_preload.dart';
|
||||
import 'package:mangayomi/modules/more/settings/reader/providers/reader_state_provider.dart';
|
||||
import 'package:mangayomi/modules/widgets/custom_extended_image_provider.dart';
|
||||
import 'package:mangayomi/providers/storage_provider.dart';
|
||||
import 'package:mangayomi/utils/headers.dart';
|
||||
import 'package:mangayomi/utils/reg_exp_matcher.dart';
|
||||
import 'package:path/path.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
|
||||
extension FileFormatter on num {
|
||||
String formattedFileSize({bool base1024 = true}) {
|
||||
if (this <= 0) return "0.00 B";
|
||||
final base = base1024 ? 1024 : 1000;
|
||||
if (this <= 0) return "0";
|
||||
final units = ["B", "kB", "MB", "GB", "TB"];
|
||||
int digitGroups = (log(this) / log(base)).round();
|
||||
final units = base1024
|
||||
? ["B", "KiB", "MiB", "GiB", "TiB"]
|
||||
: ["B", "kB", "MB", "GB", "TB"];
|
||||
int digitGroups = (log(this) / log(base)).floor().clamp(
|
||||
0,
|
||||
units.length - 1,
|
||||
);
|
||||
return "${NumberFormat("#,##0.#").format(this / pow(base, digitGroups))} ${units[digitGroups]}";
|
||||
}
|
||||
}
|
||||
|
|
@ -121,7 +125,7 @@ extension UChapDataPreloadExtensions on UChapDataPreload {
|
|||
),
|
||||
)
|
||||
: CustomExtendedNetworkImageProvider(
|
||||
data.pageUrl!.url.trim().trimLeft().trimRight(),
|
||||
data.pageUrl!.url.trim(),
|
||||
cache: true,
|
||||
cacheMaxAge: const Duration(days: 7),
|
||||
showCloudFlareError: showCloudFlareError,
|
||||
|
|
@ -144,13 +148,8 @@ extension UChapDataPreloadExtensions on UChapDataPreload {
|
|||
Future<File?> _getCachedImageFile(String url, {String? cacheKey}) async {
|
||||
try {
|
||||
final String key = cacheKey ?? keyToMd5(url);
|
||||
final Directory cacheImagesDirectory = Directory(
|
||||
join(
|
||||
(await getTemporaryDirectory()).path,
|
||||
'Mangayomi',
|
||||
'cacheimagemanga',
|
||||
),
|
||||
);
|
||||
final Directory cacheImagesDirectory = await StorageProvider()
|
||||
.getCacheDirectory('cacheimagemanga');
|
||||
if (cacheImagesDirectory.existsSync()) {
|
||||
await for (final FileSystemEntity file in cacheImagesDirectory.list()) {
|
||||
if (file.path.endsWith(key)) {
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@
|
|||
// var query = xpath(expression);
|
||||
// if (query.isNotEmpty) {
|
||||
// return query
|
||||
// .map((e) => (e.value ?? "").trim().trimLeft().trimRight())
|
||||
// .map((e) => (e.value ?? "").trim())
|
||||
// .toList();
|
||||
// }
|
||||
// } catch (_) {}
|
||||
|
|
|
|||
Loading…
Reference in a new issue