Patch Email DeleteAll
Jump to navigation
Jump to search
Introduction
This will add a button at the bottom of the screen with a trashcan icon between the Compose and Refresh buttons. Selecting the button will delete all email items in the list after prompting the user for confirmation.
I am deliberately not using line numbers to minimize the need for updates as new WebOS releases come out.
Editing Process
Open:
/usr/palm/applications/com.palm.app.email/app/controllers/list-assistant.js
Find the setup function and modify the cmdMenuModel items, replace the
{},
with
{label:$L('Delete All'), icon:'delete', command:'deleteall'},
Find the handleCommand function and add the following case statement:
case 'deleteall': this.handleDeleteAll(); break;
Now add the following three functions:
handleDeleteAllResponse: function (event) { //check to see if there are more items to delete. this.deleteAll(); }, deleteAll: function(){ var count = this.emailListElement.mojo.getLength(); var id; if(count > 0) { var i; //Since the list is loaded dynamically we may have the count of all emails but not all of the data //So start with count and work backward with error handling //When reach 0 trigger at least one more pass after data has had a chance to refresh for(i=count-1; i>=0; i--) { var item = this.emailListElement.mojo.getNodeByIndex(i); if(item !== undefined) { id = item.id; if(id) { if(i==0) { this.controller.serviceRequest(Email.identifier, { method: 'setDeleted', parameters: {'message':id, 'value': true }, onSuccess: this.handleDeleteAllResponse.bind(this), onFailure: this.handleDeleteAllResponse.bind(this) }); } else { this.controller.serviceRequest(Email.identifier, { method: 'setDeleted', parameters: {'message':id, 'value': true }, onSuccess: undefined, onFailure: undefined }); } }//if(id) }//if item !== undefined else { if(i==0) { //item was undefined probably because it is currently marked for delete this.deleteAll(); } } }//for }//count > 0 }, handleDeleteAll: function (event) { var totalCount = 0; totalCount = this.emailListElement.mojo.getLength(); this.controller.showAlertDialog({ onChoose: function(value) { if(value == 'yes') { //Delete all items in this folder this.deleteAll(); } }, title: '<b>' + $L('Delete All') + '</b>', message: $L('Are you sure you want to delete all ') + "<b>" + totalCount + "</b>" + $L(' items in this folder?'), choices: [ {label:$L('Yes'), value:'yes', type:'affirmative'}, {label:$L('No'), value:'no', type:'alert'} ] }); },