execute method
Implementation
Future<int> execute(CopyNodeOperation operation) async {
if (operation.isDirectory!) {
final dstDirectory = operation.dst!.asDirectory();
if (!await dstDirectory.exists()) {
await dstDirectory.create(recursive: true);
return 1;
}
return 0;
} else {
final srcFile = src!.asFile();
final dstFile = dst!.asFile();
// Try to link first
// allow link if asked and on the same file system
if (options!.tryToLinkFile &&
(src!.fs == dst!.fs) &&
src!.fs.supportsFileLink) {
final srcTarget = srcFile.absolute.path;
// Check if dst is link
final type = await dst!.type(followLinks: false);
var deleteDst = false;
if (type != FileSystemEntityType.notFound) {
if (type == FileSystemEntityType.link) {
// check target
if (await dst!.asLink().target() != srcTarget) {
deleteDst = true;
} else {
// nothing to do
return 0;
}
} else {
deleteDst = true;
}
}
if (deleteDst) {
//devPrint('Deleting $dstFile');
await dstFile.delete(recursive: true);
//devPrint('Deleted $dstFile');
}
await dst!.asLink().create(srcTarget, recursive: true);
return 1;
}
// Handle modified date
if (options!.checkSizeAndModifiedDate) {
final srcStat = await srcFile.stat();
final dstStat = await dstFile.stat();
if ((dstStat.type != FileSystemEntityType.notFound) &&
(srcStat.size == dstStat.size) &&
(srcStat.modified.compareTo(dstStat.modified) <= 0)) {
// should be same...
return 0;
}
}
var count = await copyFileContent(srcFile, dstFile);
await copyFileMeta(srcFile, dstFile);
return count;
}
}