Skip to main content

Thunderbird or Firefox extension - nsISimpleEnumerator

Issue
Some of the Firefox or Mozilla application extension API s return  an enumerator object
of type interface nsISimpleEnumerator
that result objects can not be used in a global scope and can not do iteration through the 
list more than one time.
 
Cause:
nsISimpleEnumerator  interface has only two methods
hasMoreElements()
getNext()
 
- There is no way to reset this enumerator to the first position once it is iterated through once. 
Like in this example given in Mozilla developer example page,
 (https://developer.mozilla.org/en-US/docs/Using_nsISimpleEnumerator)
 
var enumerator = document.getElementById('aStringBundleID').strings;
var s = "";
while (enumerator.hasMoreElements()) {
  var property = enumerator.getNext().QueryInterface(Components.interfaces.nsIProperty);
  s += property.name + ' = ' + property.value + ';\n';
}

If you want to reuse the 'enumerator' object again, in another place another loop, this will through error that
enumerator.hasMoreElements() become false after the first loop is ended.
 
The API missing a 'RESET()' method which will save a lots of reuse issues of this feature. 

Fix:
 The quick fix would be , move the objects into a global array the first time you traverse through the enumerator list.

var Global {}; 
var Global.enumArray=new Array();


var enumerator = document.getElementById('aStringBundleID').strings;
var s = "";
var y=0; 
 while (enumerator.hasMoreElements()) {
  var property = enumerator.getNext().QueryInterface(Components.interfaces.nsIProperty);
  s += property.name + ' = ' + property.value + ';\n';
Global.enumArray[i]= property;
y++;
 }

Then you can use this array with for loop as many times as you needed.  
It saves your memory store as you can use these array all through the plugin.
You can even try using Jquery or other javascript frameworks that provide deep clone copy.  Or you can write your own, which is almost similar like above.

Comments

Popular posts from this blog

LLM on Mobile Phone : Mini Universal data and assistant running on an android smart phone Galaxy S23

  Imagine a world where everyone has access to a mini #OpenAI's #ChatGPT on their mobile phone, answering any question on any topic, right from their local phone memory. No need for internet. This is the future of #LLMs on mobile devices, and it's happening now. #MLC-AI has created a way to install a 3 billion parameter #RedPajam #LLMModel on a #Galaxy #S23 smartphone. This is a powerful #LLM that can generate text, translate languages, write different kinds of creative content, and answer your questions in an informative way. And it's all available on your phone, without the need for an internet connection. This could have a profound impact on people all over the world. Millions of suburban students who don't have access to the internet could now have access to a universal data source that can answer most of their questions. Refugee camps around the world could also benefit from this technology, giving refugees access to information and resources that they might not ot...

Will Software engineer salary hit $1 million by year 2030

Are today’s Developers over loaded with too many tasks?! In 90s and till late 2000s there were many different job positions in an IT team that only do certain task. There was no Frontend engineers and backend engineers as most of the applications were thin clients in the browser side as the internet band width was very slow. There were jobs like Database Admins, Server Admins, Site Admins and so on to deal with one specific task.   Ever since the Startup culture took off again after the dotcom boom in the mid 2000s , in many cases the founder(s) had to do all tasks. Every single thing involved in the complete SDLC are done by one or two founders and hence there is more in their plate to get funding , business development etc.   And as the World internet infrastructure moved from dialup to DSL to Broadband, the browser apps became THICK CLIENTS. The corporate companies now started adopting Startup cultures into their companies IT strategy and thus Agile SDLC beca...

Ohmni robot disassembly - Parts and structure inside Ohmni Telepresence Robot - Tear down

    The tablet, speakers were disconnected and removed in different video.    Ohmni robot disassembly - Parts and structure inside Ohmni Telepresence - Design - Mechonical and Electrical components .