Async Zotero.File.copyDirectory()
This commit is contained in:
parent
e1355cef2f
commit
5e1c25f4b5
3 changed files with 53 additions and 14 deletions
|
@ -1128,9 +1128,9 @@ Zotero.Attachments = new function(){
|
|||
|
||||
// Copy over files if they exist
|
||||
if (newAttachment.isImportedAttachment() && attachment.getFile()) {
|
||||
var dir = Zotero.Attachments.getStorageDirectory(attachment);
|
||||
var newDir = yield Zotero.Attachments.createDirectoryForItem(newAttachment);
|
||||
Zotero.File.copyDirectory(dir, newDir);
|
||||
let dir = Zotero.Attachments.getStorageDirectory(attachment);
|
||||
let newDir = yield Zotero.Attachments.createDirectoryForItem(newAttachment);
|
||||
yield Zotero.File.copyDirectory(dir, newDir);
|
||||
}
|
||||
|
||||
yield newAttachment.addLinkedItem(attachment);
|
||||
|
|
|
@ -583,18 +583,26 @@ Zotero.File = new function(){
|
|||
|
||||
/**
|
||||
* Copies all files from dir into newDir
|
||||
*
|
||||
* @param {String|nsIFile} source - Source directory
|
||||
* @param {String|nsIFile} target - Target directory
|
||||
*/
|
||||
this.copyDirectory = function (dir, newDir) {
|
||||
if (!dir.exists()) {
|
||||
throw ("Directory doesn't exist in Zotero.File.copyDirectory()");
|
||||
}
|
||||
var otherFiles = dir.directoryEntries;
|
||||
while (otherFiles.hasMoreElements()) {
|
||||
var file = otherFiles.getNext();
|
||||
file.QueryInterface(Components.interfaces.nsIFile);
|
||||
file.copyTo(newDir, null);
|
||||
}
|
||||
}
|
||||
this.copyDirectory = Zotero.Promise.coroutine(function* (source, target) {
|
||||
if (source instanceof Ci.nsIFile) source = source.path;
|
||||
if (target instanceof Ci.nsIFile) target = target.path;
|
||||
|
||||
yield OS.File.makeDir(target, {
|
||||
ignoreExisting: true,
|
||||
unixMode: 0o755
|
||||
});
|
||||
|
||||
return this.iterateDirectory(source, function* (iterator) {
|
||||
while (true) {
|
||||
let entry = yield iterator.next();
|
||||
yield OS.File.copy(entry.path, OS.Path.join(target, entry.name));
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
this.createDirectoryIfMissing = function (dir) {
|
||||
|
|
31
test/tests/fileTest.js
Normal file
31
test/tests/fileTest.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
describe("Zotero.File", function () {
|
||||
describe("#copyDirectory()", function () {
|
||||
it("should copy all files within a directory", function* () {
|
||||
var tmpDir = Zotero.getTempDirectory().path;
|
||||
var tmpCopyDir = OS.Path.join(tmpDir, "copyDirectory")
|
||||
var source = OS.Path.join(tmpCopyDir, "1");
|
||||
var target = OS.Path.join(tmpCopyDir, "2");
|
||||
yield OS.File.makeDir(source, {
|
||||
from: tmpDir
|
||||
});
|
||||
|
||||
yield Zotero.File.putContentsAsync(OS.Path.join(source, "A"), "Test 1");
|
||||
yield Zotero.File.putContentsAsync(OS.Path.join(source, "B"), "Test 2");
|
||||
|
||||
yield OS.File.removeDir(target, {
|
||||
ignoreAbsent: true
|
||||
});
|
||||
|
||||
yield Zotero.File.copyDirectory(source, target);
|
||||
|
||||
assert.equal(
|
||||
(yield Zotero.File.getContentsAsync(OS.Path.join(target, "A"))),
|
||||
"Test 1"
|
||||
);
|
||||
assert.equal(
|
||||
(yield Zotero.File.getContentsAsync(OS.Path.join(target, "B"))),
|
||||
"Test 2"
|
||||
);
|
||||
})
|
||||
})
|
||||
})
|
Loading…
Reference in a new issue