- Use a single, better error for all file access errors during syncing
- Recommend checking WebDAV settings on WebDAV error
This commit is contained in:
parent
4506d59299
commit
2edaea4829
5 changed files with 108 additions and 137 deletions
|
@ -323,4 +323,92 @@ Zotero.File = new function(){
|
|||
|
||||
browser.addEventListener("pageshow", onpageshow, false);
|
||||
}
|
||||
|
||||
|
||||
// TODO: localize
|
||||
this.checkFileAccessError = function (e, file, operation) {
|
||||
if (file) {
|
||||
var str = "The file '" + file.path + "' ";
|
||||
}
|
||||
else {
|
||||
var str = "A file ";
|
||||
}
|
||||
|
||||
switch (operation) {
|
||||
case 'create':
|
||||
var opWord = "created";
|
||||
break;
|
||||
|
||||
case 'update':
|
||||
var opWord = "updated";
|
||||
break;
|
||||
|
||||
case 'delete':
|
||||
var opWord = "deleted";
|
||||
break;
|
||||
|
||||
default:
|
||||
var opWord = "updated";
|
||||
}
|
||||
|
||||
if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED'
|
||||
// Shows up on some Windows systems
|
||||
|| e.name == 'NS_ERROR_FAILURE') {
|
||||
Zotero.debug(e);
|
||||
// TODO: localize
|
||||
str = str + "cannot be " + opWord + ".";
|
||||
var checkFileWindows = "Check that the file is not currently "
|
||||
+ "in use and that it is not marked as read-only. To check "
|
||||
+ "all files in your Zotero data directory, right-click on "
|
||||
+ "the 'zotero' directory, click Properties, and ensure that "
|
||||
+ "the Read-Only checkbox is empty.";
|
||||
var checkFileOther = "Check that the file is not currently "
|
||||
+ "in use and that its permissions allow write access.";
|
||||
var msg = str + " "
|
||||
+ (!Zotero.isWin ? checkFileWindows : checkFileOther)
|
||||
+ "\n\n"
|
||||
+ "Restarting your computer or disabling security "
|
||||
+ "software may also help.";
|
||||
|
||||
if (operation == 'create') {
|
||||
var e = new Zotero.Error(
|
||||
msg,
|
||||
0,
|
||||
{
|
||||
dialogButtonText: "Show Parent Directory",
|
||||
dialogButtonCallback: function () {
|
||||
try {
|
||||
file.parent.QueryInterface(Components.interfaces.nsILocalFile).reveal();
|
||||
}
|
||||
// Unsupported on some platforms
|
||||
catch (e2) {
|
||||
Zotero.debug(e2);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
else {
|
||||
var e = new Zotero.Error(
|
||||
msg,
|
||||
0,
|
||||
{
|
||||
dialogButtonText: "Show File",
|
||||
dialogButtonCallback: function () {
|
||||
try {
|
||||
file.QueryInterface(Components.interfaces.nsILocalFile);
|
||||
file.reveal();
|
||||
}
|
||||
// Unsupported on some platforms
|
||||
catch (e2) {
|
||||
Zotero.debug(e2);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
throw (e);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -954,11 +954,15 @@ Zotero.Fulltext = new function(){
|
|||
case 'application/pdf':
|
||||
var cacheFile = this.getItemCacheFile(itemID);
|
||||
if (cacheFile.exists()) {
|
||||
cacheFile.remove(false);
|
||||
try {
|
||||
cacheFile.remove(false);
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.File.checkFileAccessError(e, cacheFile, 'delete');
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -542,38 +542,7 @@ Zotero.Sync.Storage = new function () {
|
|||
file.lastModifiedTime = attachmentData[item.id].mtime;
|
||||
}
|
||||
catch (e) {
|
||||
if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED'
|
||||
// Shows up on some Windows systems
|
||||
|| e.name == 'NS_ERROR_FAILURE') {
|
||||
Zotero.debug(e);
|
||||
// TODO: localize
|
||||
var fileCannotBeUpdated = "The file '" + file.path
|
||||
+ "' cannot be updated.";
|
||||
var checkFileWindows = "Check that the file is not currently "
|
||||
+ "in use and that it is not marked read-only.";
|
||||
var checkFileOther = "Check that the file is not currently "
|
||||
+ "in use and that its permissions allow write access.";
|
||||
var msg = fileCannotBeUpdated + " "
|
||||
+ (Zotero.isWin ? checkFileWindows : checkFileOther) + "\n\n"
|
||||
+ "Restarting your computer or disabling security "
|
||||
+ "software may also help.";
|
||||
var e = new Zotero.Error(
|
||||
msg,
|
||||
0,
|
||||
{
|
||||
dialogButtonText: "Show File",
|
||||
dialogButtonCallback: function () {
|
||||
try {
|
||||
file.reveal();
|
||||
}
|
||||
// Unsupported on some platforms
|
||||
catch (e) {}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
throw (e);
|
||||
Zotero.File.checkFileAccessError(e, file, 'update');
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
@ -743,38 +712,7 @@ Zotero.Sync.Storage = new function () {
|
|||
}
|
||||
}
|
||||
catch (e) {
|
||||
if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED'
|
||||
// Shows up on some Windows systems
|
||||
|| e.name == 'NS_ERROR_FAILURE') {
|
||||
Zotero.debug(e);
|
||||
// TODO: localize
|
||||
var fileCannotBeUpdated = "The file '" + file.path
|
||||
+ "' cannot be updated.";
|
||||
var checkFileWindows = "Check that the file is not currently "
|
||||
+ "in use and that it is not marked read-only.";
|
||||
var checkFileOther = "Check that the file is not currently "
|
||||
+ "in use and that its permissions allow write access.";
|
||||
var msg = fileCannotBeUpdated + " "
|
||||
+ (Zotero.isWin ? checkFileWindows : checkFileOther) + "\n\n"
|
||||
+ "Restarting your computer or disabling security "
|
||||
+ "software may also help.";
|
||||
var e = new Zotero.Error(
|
||||
msg,
|
||||
0,
|
||||
{
|
||||
dialogButtonText: "Show File",
|
||||
dialogButtonCallback: function () {
|
||||
try {
|
||||
file.reveal();
|
||||
}
|
||||
// Unsupported on some platforms
|
||||
catch (e) {}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
throw (e);
|
||||
Zotero.File.checkFileAccessError(e, file, 'update');
|
||||
}
|
||||
|
||||
Zotero.Sync.Storage.setSyncedModificationTime(item.id, syncModTime, updateItem);
|
||||
|
@ -1061,33 +999,7 @@ Zotero.Sync.Storage = new function () {
|
|||
zipFile.remove(false);
|
||||
}
|
||||
catch (e) {
|
||||
if (e.name == 'NS_ERROR_FAILURE') {
|
||||
Zotero.debug(e);
|
||||
// TODO: localize
|
||||
var msg = "Zotero could not delete the temporary sync file '"
|
||||
+ zipFile.path + "'. Delete the file manually and try syncing again."
|
||||
+ "\n\n"
|
||||
+ "If you receive this message repeatedly, restarting your "
|
||||
+ "computer or disabling security software may help.";
|
||||
var e = new Zotero.Error(
|
||||
msg,
|
||||
0,
|
||||
{
|
||||
dialogButtonText: "Show File",
|
||||
dialogButtonCallback: function () {
|
||||
try {
|
||||
zipFile.reveal();
|
||||
}
|
||||
// Unsupported on some platforms
|
||||
catch (e3) {}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
throw (e);
|
||||
}
|
||||
|
||||
throw (e);
|
||||
Zotero.File.checkFileAccessError(e, zipFile, 'delete');
|
||||
}
|
||||
|
||||
// TODO: Remove prop file to trigger reuploading, in case it was an upload error?
|
||||
|
@ -1275,17 +1187,7 @@ Zotero.Sync.Storage = new function () {
|
|||
zipReader.extract(entryName, destFile);
|
||||
}
|
||||
catch (e) {
|
||||
if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED') {
|
||||
Zotero.debug(e);
|
||||
// TODO: localize
|
||||
var msg = "Zotero was unable to create a file during syncing."
|
||||
+ "\n\n"
|
||||
+ "Restarting your computer or disabling anti-virus/security "
|
||||
+ "software may fix the problem.";
|
||||
throw (msg);
|
||||
}
|
||||
|
||||
throw (e);
|
||||
Zotero.File.checkFileAccessError(e, destFile, 'create');
|
||||
}
|
||||
|
||||
var origPath = destFile.path;
|
||||
|
@ -1358,27 +1260,7 @@ Zotero.Sync.Storage = new function () {
|
|||
file.remove(false);
|
||||
}
|
||||
catch (e) {
|
||||
if (e.name == 'NS_ERROR_FILE_ACCESS_DENIED'
|
||||
// Shows up on some Windows systems
|
||||
|| e.name == 'NS_ERROR_FAILURE') {
|
||||
Zotero.debug(e);
|
||||
// TODO: localize
|
||||
var fileCannotBeUpdated = "The file '" + file.leafName
|
||||
+ "' cannot be updated.";
|
||||
var checkFileWindows = "Check that the file is not currently "
|
||||
+ "in use and that it is not marked read-only.";
|
||||
var checkFileOther = "Check that the file is not currently "
|
||||
+ "in use and that its permissions allow write access.";
|
||||
var msg = Zotero.localeJoin([
|
||||
fileCannotBeUpdated,
|
||||
Zotero.isWin ? checkFileWindows : checkFileOther
|
||||
]) + "\n\n"
|
||||
+ "Restarting your computer or disabling security "
|
||||
+ "software may also help.";
|
||||
throw (msg);
|
||||
}
|
||||
|
||||
throw (e);
|
||||
Zotero.File.checkFileAccessError(e, file, 'delete');
|
||||
}
|
||||
}
|
||||
else if (file.isDirectory()) {
|
||||
|
|
|
@ -48,8 +48,8 @@ Zotero.Sync.Storage.Session.WebDAV.prototype.includeGroupItems = false;
|
|||
|
||||
// TEMP
|
||||
// TODO: localize
|
||||
Zotero.Sync.Storage.Session.WebDAV.prototype.defaultError = "A WebDAV file sync error occurred. Please try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums.";
|
||||
Zotero.Sync.Storage.Session.WebDAV.prototype.defaultErrorRestart = "A WebDAV file sync error occurred. Please restart Firefox and try syncing again.\n\nIf you receive this message repeatedly, submit an error report and post the Report ID to a new thread in the Zotero Forums.";
|
||||
Zotero.Sync.Storage.Session.WebDAV.prototype.defaultError = "A WebDAV file sync error occurred. Please try syncing again.\n\nIf you receive this message repeatedly, check your WebDAV server settings in the Sync pane of the Zotero preferences.";
|
||||
Zotero.Sync.Storage.Session.WebDAV.prototype.defaultErrorRestart = "A WebDAV file sync error occurred. Please restart Firefox and try syncing again.\n\nIf you receive this message repeatedly, check your WebDAV server settings in the Sync pane of the Zotero preferences.";
|
||||
|
||||
|
||||
Zotero.Sync.Storage.Session.WebDAV.prototype.__defineGetter__('enabled', function () {
|
||||
|
|
|
@ -241,21 +241,18 @@ Zotero.Sync.Storage.Session.ZFS.prototype.downloadFile = function (request) {
|
|||
destFile.remove(false);
|
||||
}
|
||||
catch (e) {
|
||||
// TODO: localize
|
||||
var msg = "Zotero was unable to delete a temporary file in "
|
||||
+ destFile.parent.path + " during syncing."
|
||||
+ "\n\n"
|
||||
+ "Restarting your computer or disabling anti-virus/security "
|
||||
+ "software may fix the problem.";
|
||||
Zotero.debug(e, 1);
|
||||
Components.utils.reportError(e);
|
||||
self.onError(msg);
|
||||
Zotero.File.checkFileAccessError(e, destFile, 'delete');
|
||||
}
|
||||
}
|
||||
|
||||
// saveURI() below appears not to create empty files for Content-Length: 0,
|
||||
// so we create one here just in case
|
||||
destFile.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
|
||||
try {
|
||||
destFile.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0644);
|
||||
}
|
||||
catch (e) {
|
||||
Zotero.File.checkFileAccessError(e, destFile, 'create');
|
||||
}
|
||||
|
||||
var listener = new Zotero.Sync.Storage.StreamListener(
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue