From 369a6a628dfeb3522f5a674a6f7258ebb1f56967 Mon Sep 17 00:00:00 2001 From: "mozilla.BenB%bucksch.org" Date: Tue, 17 Jun 2003 01:05:34 +0000 Subject: [PATCH] - major cleanup of progressdialog.js, all those set* functions left over from editor publishing - s/filei/filenr/g git-svn-id: svn://10.0.0.236/branches/BEONEX_0_8_BRANCH@143779 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/extensions/sroaming/plan.txt | 4 +- .../content/transfer/progressDialog.js | 291 ++++++------------ .../resources/content/transfer/transfer.js | 48 ++- .../locale/en-US/transfer.properties | 1 - 4 files changed, 117 insertions(+), 227 deletions(-) diff --git a/mozilla/extensions/sroaming/plan.txt b/mozilla/extensions/sroaming/plan.txt index e9d0d2a52a6..2f6db11cdde 100644 --- a/mozilla/extensions/sroaming/plan.txt +++ b/mozilla/extensions/sroaming/plan.txt @@ -1,3 +1,4 @@ +todo: - nsiprogresseventsink comment - license headers - nsresult for internal functions, clean up interfaces @@ -5,9 +6,7 @@ - alert() -> nsiprompt or dialog - remove printfs - XXXs -- clean up progressdialog - firebird/thunderbird extension -- listing progressmeter doesn't work don't care (for now): - conflict @@ -18,6 +17,7 @@ don't care (for now): workaround: gTimeout - problem: cancel by user in progress dialog: xpconnect errors solution: prevent dialog closure (even if cancel pressed) until we're done. +- listing progressmeter doesn't work Enhance - protocols diff --git a/mozilla/extensions/sroaming/resources/content/transfer/progressDialog.js b/mozilla/extensions/sroaming/resources/content/transfer/progressDialog.js index 66e0d67a924..d2d9bdb8c65 100644 --- a/mozilla/extensions/sroaming/resources/content/transfer/progressDialog.js +++ b/mozilla/extensions/sroaming/resources/content/transfer/progressDialog.js @@ -34,23 +34,15 @@ var gTransfer; // main |Transfer| object, for the main files to be tranferred e.g. listing files. Needed for Cancel. XXX bad solution. too bad. don't care for, let the XPCOM excpetion fly! ;-P */ -var gDialog = {}; -var gInProgress = true; -var gTotalFileCount = 0; -var gSucceededCount = 0; -var gFinished = false; -var gTransferingFailed = false; -var gFileNotFound = false; -var gStatusMessage=""; +var gDialog = new Object(); // references to widgets +var gFinished = false; // all files finished (done or failed) +var gTransferFailed = false; // any file failed var gResults = ""; /* stores the transfer result messages (in human language) to be later displayed to the user on his request. */ -var gRanFinishedAll = false; // gee, what a hack. this is all a big shit here. var gTimerID; var gTimeout = 1000; var gAllowEnterKey = false; -const XUL_NS ="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; - function Startup() { ddump("In sroaming/transfer/progressDialog::Startup()"); @@ -75,7 +67,6 @@ function Startup() return; } - SetWindowLocation(); window.title = GetString("TransferProgressCaption"); var directionString = gTransfer.download @@ -87,12 +78,11 @@ function Startup() // Show transfering destination URL document.getElementById("TransferUrl").value = gTransfer.remoteDir; - // Add the files to the "transfer to" list as quick as possible! + // Add the files to the UI as quickly as possible gDialog.FileList.setAttribute("rows", gTransfer.files.length); for (var i = 0; i < gTransfer.files.length; i++) SetProgressStatus(i); window.sizeToContent(); - ddump("resized"); } /* @@ -208,31 +198,30 @@ function PassBackParams() /* Add filename to list of files to transfer or set status for file already in the list. - @param filei integer index of file in gTransfer + @param filenr integer index of file in gTransfer @return boolean if file was in the list */ -function SetProgressStatus(filei) +function SetProgressStatus(filenr) { - ddumpCont("SetProgressStatus(" + filei + "): "); - var filename = gTransfer.files[filei].filename; - var status = gTransfer.files[filei].status; - var statusCode = gTransfer.files[filei].statusCode; - ddump(filename + ", " + status + ", " + NameForStatusCode(statusCode)); - - if (!filename) + ddumpCont("SetProgressStatus(" + filenr + "): "); + if (!gTransfer || !gTransfer.files[filenr]) + { + dumpError("no such file"); return false; + } + var file = gTransfer.files[filenr]; + var filename = file.filename; + var status = file.status; + ddump(filename + ", " + status + ", " + NameForStatusCode(file.statusCode)); - if (status == "busy" && - gDialog.FinalStatusMessage.value == "") - gDialog.FinalStatusMessage.value = GetString("Transfering"); - else if (status == "failed") - // Output error msg, if apppropriate - SetFileStatusMessage(filei, ErrorMessageForFile(gTransfer.files[filei])); + if (status == "busy") + SetStatusMessage(GetString("Transfering")); - // Just set attribute for status icon - // if we already have this filename + // update file listbox + // if we already have this file's item, just set attribute for status icon + found = false; var listitems = document.getElementsByTagName("listitem"); - for (var i = 0; i < listitems.length; i++) + for (var i = 0, l = listitems.length; i < l; i++) { var li = listitems[i]; if (li.getAttribute("filename") == filename) @@ -242,142 +231,48 @@ function SetProgressStatus(filei) var oldstat = li.getAttribute("progress"); ddump(" Setting "+filename+" from "+oldstat+" to "+status); li.setAttribute("progress", status); - CheckDone(false); } - return true; + found = true; } } - - // If we didn't return yet, we're adding a new file item to list - gTotalFileCount++; - - var listitem = document.createElementNS(XUL_NS, "listitem"); - if (listitem) + // otherwise, add the item + if (!found) { + var listitem = document.createElement("listitem"); listitem.setAttribute("class", "listitem-iconic progressitem"); - // This triggers CSS to show icon for each status state + // The progress attribute triggers CSS to show icon for each status state listitem.setAttribute("progress", status); - listitem.setAttribute("filename", filename); + listitem.setAttribute("filename", filename); // bookkeeping listitem.setAttribute("label", GetFileDescription(filename)); gDialog.FileList.appendChild(listitem); } - return false; -} -function SetProgressFinished(filei) -{ - ddumpCont("SetProgressFinished(" + filei + "): "); - var filename = gTransfer.files[filei].filename; - var networkStatus = gTransfer.files[filei].statusCode; - var status = gTransfer.files[filei].status; - ddump(filename + ", " + status); + CheckDone(false); - SetProgressStatus(filei); - - if (status == "done") - gSucceededCount++; - else // Error condition - { - // Mark all remaining files as "failed" XXX wrong - gTransferingFailed = true; - SetProgressStatusCancel(); - gDialog.FinalStatusMessage.value = GetString("TransferFailed"); - - gStatusMessage = ErrorMessageForFile(gTransfer.files[filei]); - } - - if (gStatusMessage) - SetFileStatusMessage(filei, gStatusMessage); + return found; } function SetProgressFinishedAll() { - if (gRanFinishedAll) - return; - gRanFinishedAll = true; - - gDialog.Close.setAttribute("label", GetString("Close")); - if (!gStatusMessage) - gStatusMessage = GetString(gTransferingFailed - ? "UnknownTransferError" : - "AllFilesTransfered"); - - // Now allow "Enter/Return" key to close the dialog - AllowDefaultButton(); - - if (gTransferingFailed || gFileNotFound) - { - // Show "Troubleshooting" button to help solving problems - // and key for successful / failed files - document.getElementById("failureBox").hidden = false; - window.sizeToContent(); - } + SetStatusMessage(GetString(gTransferFailed + ? "UnknownTransferError" + : "TransferCompleted")); for (var i = 0, l = gTransfer.files.length; i < l; i++) - { addFileStatus(gTransfer.files[i]); - } -} -// set to on, if a listing.xml file is being transferred (and off afterwards) -function SetListingTransfer(on) -{ - gDialog.ListingProgress.setAttribute("hidden", on ? "false" : "true"); - //gDialog.ListingProgress.setAttribute("value", on ? "1" : "0"); - gDialog.FinalStatusMessage.value = on ? GetString("TransferingListing") : ""; -} - -// this function is to be used when we cancel persist's saving, -// because not all messages will be returned to us, if we cancel. -// this function changes status for all non-done/non-failure to failure. -function SetProgressStatusCancel() -{ - var listitems = document.getElementsByTagName("listitem"); if (!listitems) - return; - - for (var i=0; i < listitems.length; i++) + if (gTransferFailed) { - var attr = listitems[i].getAttribute("progress"); - if (attr != "done" && attr != "failed") - listitems[i].setAttribute("progress", "failed"); - } -} - -function SetGlobalStatusMessage(message) -{ - alert(message); // XXX - CloseDialog(); // XXX - //SetFileStatusMessage(-1, message) -} - -function SetFileStatusMessage(filei, message) -{ - if (gTransfer.files[filei].status == "failed") - { - gTransferingFailed = true; - gDialog.FinalStatusMessage.value = GetString("TransferFailed"); + /* Show "Troubleshooting" button to help solving problems + and legend for successful / failed icons */ + document.getElementById("failureBox").hidden = false; window.sizeToContent(); } - return;//XXX - // Status message is a child of element - // so text can wrap to multiple lines if necessary - var textNode = document.createTextNode(message); - if (textNode) - gDialog.StatusMessage.appendChild(textNode); - /* - if (gDialog.StatusMessage.firstChild) - { - gDialog.StatusMessage.firstChild.data = message; - } - else - { - var textNode = document.createTextNode(message); - if (textNode) - gDialog.StatusMessage.appendChild(textNode); - } - */ - window.sizeToContent(); + gDialog.Close.setAttribute("label", GetString("Close")); + // Now allow "Enter/Return" key to close the dialog + gDialog.Close.setAttribute("default","true"); + gAllowEnterKey = true; } /* @@ -393,32 +288,17 @@ function CheckDone(close) ddumpCont(" Checking " + i + ", " + file.filename + ", "); ddump(file.status); if (file.status == "failed") - gTransferingFailed = true; + gTransferFailed = true; else if (file.status != "done") return; } ddump(" Yes, we're done"); + gFinished = true; // Finish progress messages, settings buttons etc. SetProgressFinishedAll(); - // Set "completed" message if we succeeded - if (!gTransferingFailed) - { - gDialog.FinalStatusMessage.value = GetString("TransferCompleted"); - if (gFileNotFound && gTotalFileCount - gSucceededCount) - { - // Show number of files that failed to upload - gStatusMessage = GetString("FailedFileMsg"); - gStatusMessage = gStatusMessage.replace(/%x%/, - gTotalFileCount - gSucceededCount); - gStatusMessage = gStatusMessage.replace(/%total%/, gTotalFileCount); - - SetGlobalStatusMessage(gStatusMessage); - } - } - - if (!close || gTransferingFailed) + if (!close || gTransferFailed) return; ddump(" Closing"); @@ -429,28 +309,8 @@ function CheckDone(close) CloseDialog(); } -function CleanUpDialog() -{ - if (gTimerID) - { - clearTimeout(gTimerID); - gTimerID = null; - } - if (!gFinished) - { - gTransfer.cancel(); - } - SaveWindowLocation(); - PassBackParams(); -} -function CloseDialog() -{ - CleanUpDialog(); - try { - window.close(); - } catch (e) {} -} +// Close stuff function onClose() { @@ -464,20 +324,6 @@ function onCancel() CloseDialog(); } -function SetWindowLocation() -{ -} - -function SaveWindowLocation() -{ -} - -function AllowDefaultButton() -{ - gDialog.Close.setAttribute("default","true"); - gAllowEnterKey = true; -} - function onEnterKey() { if (gAllowEnterKey) @@ -486,6 +332,47 @@ function onEnterKey() return false; } +function CloseDialog() +{ + CleanUpDialog(); + try { + window.close(); + } catch (e) {} +} + +function CleanUpDialog() +{ + if (gTimerID) + { + clearTimeout(gTimerID); + gTimerID = null; + } + if (!gFinished) + { + gTransfer.cancel(); + } + PassBackParams(); +} + + +// UI stuff + +// Sets the text in the prominent center of the dialog +function SetStatusMessage(message) +{ + if (!message) + message = ""; + if (!gTransferFailed) + gDialog.FinalStatusMessage.value = message; +} + +// For fatal errors like unexpected exceptions. Bail and go home. +function GlobalError(message) +{ + alert(message); // XXX + CloseDialog(); // XXX +} + /* Records the transfer result of a file, to be alter displayed to the user on request. @@ -502,3 +389,11 @@ function showErrors() { alert(gResults); } + +// set to on, if a listing.xml file is being transferred (and off afterwards) +function SetListingTransfer(on) +{ + gDialog.ListingProgress.setAttribute("hidden", on ? "false" : "true"); + //gDialog.ListingProgress.setAttribute("value", on ? "1" : "0"); + SetStatusMessage(on ? GetString("TransferingListing") : null); +} diff --git a/mozilla/extensions/sroaming/resources/content/transfer/transfer.js b/mozilla/extensions/sroaming/resources/content/transfer/transfer.js index 091d3275b9b..e3373e25fad 100644 --- a/mozilla/extensions/sroaming/resources/content/transfer/transfer.js +++ b/mozilla/extensions/sroaming/resources/content/transfer/transfer.js @@ -342,11 +342,11 @@ Transfer.prototype = }, // called when an individual file transfer completed or failed - fileFinished : function(filei) + fileFinished : function(filenr) { - ddump("file " + filei + " finished"); + ddump("file " + filenr + " finished"); - var file = this.files[filei]; + var file = this.files[filenr]; // flush if (file.fos) // only for download @@ -412,7 +412,7 @@ Transfer.prototype = /* Hack. We need to change the list of files (add or remove files) after the Transfer object was created. However, in that case, the internal - bookkeeping stuff (filei of TransferFile) won't match anymore, so this + bookkeeping stuff (filenr of TransferFile) won't match anymore, so this function fixes that. Note: If you add files, create them using new TransferFile(). If you remove files, do that best using splice or readd the remaining files to a @@ -422,7 +422,7 @@ Transfer.prototype = { for (var i = 0, l = this.files.length; i < l; i++) { - this.files[i].filei = i; + this.files[i].filenr = i; } }, @@ -442,30 +442,26 @@ Transfer.prototype = SLOW! :-( - @param filei int index of the file whose progress changed + @param filenr int index of the file whose progress changed @param aProgress float 0..1 progress of that file */ - progressChanged : function(filei, aProgress) + progressChanged : function(filenr, aProgress) { if (!this.progressCalculate) return; - ddump("Transfer.progressChanged(" + filei + ", " + aProgress + ")"); + ddump("Transfer.progressChanged(" + filenr + ", " + aProgress + ")"); - var file = this.files[filei]; + var file = this.files[filenr]; file.progress = aProgress; - //this.files[filei].progress = aProgress; if (this.progressSizeAll == 0) // undetermined mode return; - //var file = this.files[filei]; // don't move up - // avoid too many updates if (file.progress - file.progressPrevious < 0.01) return; else - //this.files[filei].progressPrevious = file.progress; file.progressPrevious = file.progress; @@ -500,8 +496,8 @@ Transfer.prototype = ddump(" update serial mode"); ddump(" progressSizeAll: " + this.progressSizeAll); ddump(" progressSizeCompletedFiles: "+this.progressSizeCompletedFiles); - ddump(" files[filei].size: " + file.size); - ddump(" files[filei].progress: " + file.progress); + ddump(" files[filenr].size: " + file.size); + ddump(" files[filenr].progress: " + file.progress); progressSize = this.progressSizeCompletedFiles + file.size * file.progress; @@ -529,7 +525,7 @@ Transfer.prototype = // I protected at the very beginning against this.progressSizeAll == 0 for (var i = 0, l = this.progressCallbacks.length; i < l; i++) - this.progressCallbacks[i](filei); + this.progressCallbacks[i](filenr); }, @@ -634,11 +630,11 @@ Transfer.prototype = /* @param transfer Transfer the owner - @param filei int index of this file in the transfer's files array + @param filenr int index of this file in the transfer's files array @param filename, mimetype, size see Transfer */ -function TransferFile(transfer, filei, // hooks to owner +function TransferFile(transfer, filenr, // hooks to owner filename, mimetype, size) { // sanitize input @@ -662,7 +658,7 @@ function TransferFile(transfer, filei, // hooks to owner this.localFile = null; this.transfer = transfer; - this.filei = filei; + this.filenr = filenr; } TransferFile.prototype = { @@ -728,13 +724,13 @@ TransferFile.prototype = this.statusText = aMessage; for (var i = 0, l = this.transfer.progressCallbacks.length; i < l; i++) - this.transfer.progressCallbacks[i](this.filei); + this.transfer.progressCallbacks[i](this.filenr); } if ( !(was_done || was_failed) && (aStatus == "done" || aStatus == "failed") ) // file just completed or failed - this.transfer.fileFinished(this.filei); + this.transfer.fileFinished(this.filenr); } } @@ -742,14 +738,14 @@ TransferFile.prototype = /* Use one object per file to be downloaded. - @param filei integer index of file in transfer.files + @param filenr integer index of file in transfer.files @param transfer Transfer the context */ -function TransferProgressListener(transfer, filei) +function TransferProgressListener(transfer, filenr) { this.transfer = transfer; // this creates a cyclic reference :-( - this.filei = filei; - this.file = this.transfer.files[this.filei]; + this.filenr = filenr; + this.file = this.transfer.files[this.filenr]; /* @@ -964,7 +960,7 @@ TransferProgressListener.prototype = if (aProgressMax > 0 && aProgress > 0) // WORKAROUND Necko sometimes sends crap like 397/0 or 0/4294967295 { - this.transfer.progressChanged(this.filei, aProgress / aProgressMax); + this.transfer.progressChanged(this.filenr, aProgress / aProgressMax); } }, diff --git a/mozilla/extensions/sroaming/resources/locale/en-US/transfer.properties b/mozilla/extensions/sroaming/resources/locale/en-US/transfer.properties index 9d2685fe996..66aeebfe60b 100644 --- a/mozilla/extensions/sroaming/resources/locale/en-US/transfer.properties +++ b/mozilla/extensions/sroaming/resources/locale/en-US/transfer.properties @@ -32,7 +32,6 @@ NoUsername=No username given. #results TransferFailed=Transfer failed. TransferCompleted=Transfer completed successfully -AllFilesTransfered=All files were transfered. TransferSomeFileFailed=Some files failed to transfer FailedFileMsg=%x% of %total% files failed to transfer. # End-Transfering error strings