mirror of
https://github.com/venera-app/venera.git
synced 2025-12-16 07:01:16 +00:00
fix downloading issue when chapter name contains special characters. Close #533
This commit is contained in:
@@ -423,6 +423,7 @@ class LocalManager with ChangeNotifier {
|
|||||||
if (comic.hasChapters) {
|
if (comic.hasChapters) {
|
||||||
var cid =
|
var cid =
|
||||||
ep is int ? comic.chapters!.ids.elementAt(ep - 1) : (ep as String);
|
ep is int ? comic.chapters!.ids.elementAt(ep - 1) : (ep as String);
|
||||||
|
cid = getChapterDirectoryName(cid);
|
||||||
directory = Directory(FilePath.join(directory.path, cid));
|
directory = Directory(FilePath.join(directory.path, cid));
|
||||||
}
|
}
|
||||||
var files = <File>[];
|
var files = <File>[];
|
||||||
@@ -600,7 +601,10 @@ class LocalManager with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
var shouldRemovedDirs = <Directory>[];
|
var shouldRemovedDirs = <Directory>[];
|
||||||
for (var chapter in chapters) {
|
for (var chapter in chapters) {
|
||||||
var dir = Directory(FilePath.join(c.baseDir, chapter));
|
var dir = Directory(FilePath.join(
|
||||||
|
c.baseDir,
|
||||||
|
getChapterDirectoryName(chapter),
|
||||||
|
));
|
||||||
if (dir.existsSync()) {
|
if (dir.existsSync()) {
|
||||||
shouldRemovedDirs.add(dir);
|
shouldRemovedDirs.add(dir);
|
||||||
}
|
}
|
||||||
@@ -668,6 +672,21 @@ class LocalManager with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static String getChapterDirectoryName(String name) {
|
||||||
|
var builder = StringBuffer();
|
||||||
|
for (var i = 0; i < name.length; i++) {
|
||||||
|
var char = name[i];
|
||||||
|
if (char == '/' || char == '\\' || char == ':' || char == '*' ||
|
||||||
|
char == '?'
|
||||||
|
|| char == '"' || char == '<' || char == '>' || char == '|') {
|
||||||
|
builder.write('_');
|
||||||
|
} else {
|
||||||
|
builder.write(char);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum LocalSortType {
|
enum LocalSortType {
|
||||||
|
|||||||
@@ -107,7 +107,21 @@ class ImagesDownloadTask extends DownloadTask with _TransferSpeedMixin {
|
|||||||
var local = LocalManager().find(id, comicType);
|
var local = LocalManager().find(id, comicType);
|
||||||
if (path != null) {
|
if (path != null) {
|
||||||
if (local == null) {
|
if (local == null) {
|
||||||
Directory(path!).deleteIgnoreError(recursive: true);
|
Future.sync(() async {
|
||||||
|
var tasks = this.tasks.values.toList();
|
||||||
|
for (var i = 0; i < tasks.length; i++) {
|
||||||
|
if (!tasks[i].isComplete) {
|
||||||
|
tasks[i].cancel();
|
||||||
|
await tasks[i].wait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
await Directory(path!).delete(recursive: true);
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
Log.error("Download", "Failed to delete directory: $e");
|
||||||
|
}
|
||||||
|
});
|
||||||
} else if (chapters != null) {
|
} else if (chapters != null) {
|
||||||
for (var c in chapters!) {
|
for (var c in chapters!) {
|
||||||
var dir = Directory(FilePath.join(path!, c));
|
var dir = Directory(FilePath.join(path!, c));
|
||||||
@@ -197,7 +211,9 @@ class ImagesDownloadTask extends DownloadTask with _TransferSpeedMixin {
|
|||||||
if (comic!.chapters != null) {
|
if (comic!.chapters != null) {
|
||||||
saveTo = Directory(FilePath.join(
|
saveTo = Directory(FilePath.join(
|
||||||
path!,
|
path!,
|
||||||
_images!.keys.elementAt(_chapter),
|
LocalManager.getChapterDirectoryName(
|
||||||
|
_images!.keys.elementAt(_chapter),
|
||||||
|
),
|
||||||
));
|
));
|
||||||
if (!saveTo.existsSync()) {
|
if (!saveTo.existsSync()) {
|
||||||
saveTo.createSync(recursive: true);
|
saveTo.createSync(recursive: true);
|
||||||
|
|||||||
Reference in New Issue
Block a user