Changeset 5b8d00


Ignore:
Timestamp:
Sep 16, 2010, 4:39:36 PM (11 years ago)
Author:
rene <just@…>
Branches:
ng_0.6, ng_0.8, ng_0.9
Children:
2e8903
Parents:
4bb767
Message:

rdf-Version 0.0.5: include Identity and SMTP Information

Location:
chrome/content/v_identity
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • chrome/content/v_identity/vI_rdfDatasource.js

    r4bb767 r5b8d00  
    3636    rdfNSNewsgroup : "vIStorage/newsgroup",
    3737    rdfNSFilter : "vIStorage/filter",
     38    rdfNSAccounts : "vIAccounts",
     39    rdfNSIdentities : "vIAccounts/id",
     40    rdfNSSMTPservers : "vIAccounts/smtp",
     41
    3842   
    3943    // seamonkey doesn't have a extensionmanager, so read version of extension from hidden version-label
     
    4145    //      .getService(Components.interfaces.nsIExtensionManager),
    4246   
    43     rdfVersion : "0.0.4",   // version of current implemented RDF-schema, internal only to trigger updates
     47    rdfVersion : "0.0.5",   // version of current implemented RDF-schema, internal only to trigger updates
    4448   
    4549    virtualIdentityID : "{dddd428e-5ac8-4a81-9f78-276c734f75b8}",
     
    6064            .createInstance(Components.interfaces.nsIRDFContainer),
    6165
    62     getContainer : function (type) {
     66    identityContainer : Components.classes["@mozilla.org/rdf/container;1"]
     67            .createInstance(Components.interfaces.nsIRDFContainer),
     68
     69    smtpContainer : Components.classes["@mozilla.org/rdf/container;1"]
     70            .createInstance(Components.interfaces.nsIRDFContainer),
     71   
     72    getContainer : function (type) {
    6373        switch (type) {
    6474            case "email": return vI_rdfDatasource.emailContainer;
     
    6676            case "newsgroup": return vI_rdfDatasource.newsgroupContainer;
    6777            case "filter": return vI_rdfDatasource.filterContainer;
     78            case "identity": return vI_rdfDatasource.identityContainer;
     79            case "smtp": return vI_rdfDatasource.smtpContainer;
    6880        }
    6981        return null;
     
    90102            vI_rdfDatasource.rdfService.GetDataSourceBlocking(fileURI.spec);
    91103        vI_rdfDatasource.__initContainers();
    92     },
     104        vI_rdfDatasource.refreshAccountInfo();
     105       
     106        vI_rdfDatasource.AccountManagerObserver.register();
     107    },
    93108   
    94109    __initContainers: function() {
     
    106121                .GetResource(vI_rdfDatasource.rdfNS + vI_rdfDatasource.rdfNSFilter);
    107122            vI_rdfDatasource.filterContainer.Init(vI_rdfDatasource.rdfDataSource, storageRes);
     123            storageRes = vI_rdfDatasource.rdfService
     124                .GetResource(vI_rdfDatasource.rdfNS + vI_rdfDatasource.rdfNSIdentities);
     125            vI_rdfDatasource.identityContainer.Init(vI_rdfDatasource.rdfDataSource, storageRes);
     126            storageRes = vI_rdfDatasource.rdfService
     127                .GetResource(vI_rdfDatasource.rdfNS + vI_rdfDatasource.rdfNSSMTPservers);
     128            vI_rdfDatasource.smtpContainer.Init(vI_rdfDatasource.rdfDataSource, storageRes);
    108129        } catch (e) { };
    109130    },
     
    152173    },
    153174
     175    clean : function() {
     176        vI_rdfDatasource.AccountManagerObserver.unregister();
     177        vI_rdfDatasource.flush();
     178    },
     179
    154180    flush : function() {
    155181        vI_rdfDatasource.rdfDataSource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
     
    157183    },
    158184   
     185    refreshAccountInfo : function() {
     186        try {   // will possibly fail before upgrade
     187            vI_rdfDatasource.cleanAccountInfo();
     188            vI_rdfDatasource.storeAccountInfo();
     189        } catch (e) {};
     190    },
     191   
     192    cleanAccountInfo : function() {
     193        vI_notificationBar.dump("## vI_rdfDatasource: cleanAccountInfo\n");
     194       
     195        var enumerator = vI_rdfDatasource.identityContainer.GetElements();
     196        while (enumerator && enumerator.hasMoreElements()) {
     197            var resource = enumerator.getNext();
     198            resource.QueryInterface(Components.interfaces.nsIRDFResource);
     199            vI_rdfDatasource.__unsetRDFValue(resource, "identityName", vI_rdfDatasource.__getRDFValue(resource, "identityName"))
     200            vI_rdfDatasource.__unsetRDFValue(resource, "fullName", vI_rdfDatasource.__getRDFValue(resource, "fullName"))
     201            vI_rdfDatasource.__unsetRDFValue(resource, "email", vI_rdfDatasource.__getRDFValue(resource, "email"))
     202            vI_rdfDatasource.identityContainer.RemoveElement(resource, true);
     203        }
     204
     205        enumerator = vI_rdfDatasource.smtpContainer.GetElements();
     206        while (enumerator && enumerator.hasMoreElements()) {
     207            var resource = enumerator.getNext();
     208            resource.QueryInterface(Components.interfaces.nsIRDFResource);
     209            vI_rdfDatasource.__unsetRDFValue(resource, "label", vI_rdfDatasource.__getRDFValue(resource, "label"))
     210            vI_rdfDatasource.__unsetRDFValue(resource, "hostname", vI_rdfDatasource.__getRDFValue(resource, "hostname"))
     211            vI_rdfDatasource.__unsetRDFValue(resource, "username", vI_rdfDatasource.__getRDFValue(resource, "username"))
     212            vI_rdfDatasource.smtpContainer.RemoveElement(resource, true);
     213        }   
     214    },
     215   
     216    storeAccountInfo : function() {
     217        vI_notificationBar.dump("## vI_rdfDatasource: storeAccounts\n");
     218
     219        var AccountManager = Components.classes["@mozilla.org/messenger/account-manager;1"]
     220            .getService(Components.interfaces.nsIMsgAccountManager);
     221        for (let i = 0; i < AccountManager.accounts.Count(); i++) {
     222            var account = AccountManager.accounts.QueryElementAt(i, Components.interfaces.nsIMsgAccount);
     223            for (let j = 0; j < account.identities.Count(); j++) {
     224                var identity = account.identities.QueryElementAt(j, Components.interfaces.nsIMsgIdentity);
     225//                 vI_notificationBar.dump("## vI_rdfDatasource: storeAccounts identity store id " + identity.key + "\n");
     226
     227                var resource = vI_rdfDatasource.rdfService.GetResource(vI_rdfDatasource.rdfNS + vI_rdfDatasource.rdfNSIdentities + "/" + identity.key);
     228                vI_rdfDatasource.__setRDFValue(resource, "identityName", identity.identityName);
     229                vI_rdfDatasource.__setRDFValue(resource, "fullName", identity.fullName);
     230                vI_rdfDatasource.__setRDFValue(resource, "email", identity.email);
     231               
     232                var position = vI_rdfDatasource.identityContainer.IndexOf(resource); // check for index in new recType
     233                if (position != -1) vI_rdfDatasource.identityContainer.InsertElementAt(resource, position, false);
     234                else vI_rdfDatasource.identityContainer.AppendElement(resource);
     235            }
     236        }
     237       
     238        function storeSmtp(server) {
     239//             vI_notificationBar.dump("## vI_rdfDatasource: storeAccounts smtp store id " + server.key + "\n");
     240            var resource = vI_rdfDatasource.rdfService.GetResource(vI_rdfDatasource.rdfNS + vI_rdfDatasource.rdfNSSMTPservers + "/" + server.key);
     241            vI_rdfDatasource.__setRDFValue(resource, "label", (server.description?server.description:server.hostname));
     242            vI_rdfDatasource.__setRDFValue(resource, "hostname", server.hostname);
     243            vI_rdfDatasource.__setRDFValue(resource, "username", server.username);
     244            var position = vI_rdfDatasource.smtpContainer.IndexOf(resource); // check for index in new recType
     245            if (position != -1) vI_rdfDatasource.smtpContainer.InsertElementAt(resource, position, false);
     246            else vI_rdfDatasource.smtpContainer.AppendElement(resource);
     247        }
     248       
     249        var servers = Components.classes["@mozilla.org/messengercompose/smtp;1"]
     250            .getService(Components.interfaces.nsISmtpService).smtpServers;
     251        if (typeof(servers.Count) == "undefined")       // TB 3.x
     252            while (servers && servers.hasMoreElements()) {
     253                var server = servers.getNext();
     254                if (server instanceof Components.interfaces.nsISmtpServer && !server.redirectorType) storeSmtp(server);
     255            }
     256        else                            // TB 2.x
     257            for (var i=0 ; i<servers.Count(); i++) storeSmtp(servers.QueryElementAt(i, Components.interfaces.nsISmtpServer));
     258
     259//         vI_notificationBar.dump("## vI_rdfDatasource: storeAccounts done\n");
     260    },
     261
    159262    __getRDFResourceForVIdentity : function (recDescription, recType) {
    160263        if (!vI_rdfDatasource.rdfDataSource) return null;
     
    338441       
    339442        vI_notificationBar.dump("## vI_rdfDatasource: updateRDF " + resource.ValueUTF8  + " added.\n");
    340         if (position != -1) vI_rdfDatasource.getContainer(recType).InsertElementAt(resource, position, true);
     443        if (position != -1) vI_rdfDatasource.getContainer(recType).InsertElementAt(resource, position, false);
    341444        else vI_rdfDatasource.getContainer(recType).AppendElement(resource);
    342445    },
     
    352455            vI_rdfDatasource.rdfDataSource.Change(resource, predicate, target, name);
    353456        else    vI_rdfDatasource.rdfDataSource.Assert(resource, predicate, name, true);
    354     }
     457    },
     458   
     459    //  code adapted from http://xulsolutions.blogspot.com/2006/07/creating-uninstall-script-for.html
     460    AccountManagerObserver : {
     461        _uninstall : false,
     462        observe : function(subject, topic, data) {
     463            if (topic == "am-smtpChanges" || topic == "am-acceptChanges") {
     464                vI_notificationBar.dump("## vI_rdfDatasource: account/smtp changes observed\n");
     465                vI_rdfDatasource.refreshAccountInfo();
     466            }
     467        },
     468        register : function() {
     469            var obsService = Components.classes["@mozilla.org/observer-service;1"].
     470                getService(Components.interfaces.nsIObserverService)
     471            obsService.addObserver(this, "am-smtpChanges", false);
     472            obsService.addObserver(this, "am-acceptChanges", false);
     473        },
     474        unregister : function() {
     475            var obsService = Components.classes["@mozilla.org/observer-service;1"].
     476                getService(Components.interfaces.nsIObserverService)
     477            obsService.removeObserver(this, "am-smtpChanges");
     478            obsService.removeObserver(this, "am-acceptChanges");
     479        }
     480    }
    355481}
    356482window.addEventListener("load", vI_rdfDatasource.init, false);
    357 window.addEventListener("unload", vI_rdfDatasource.flush, false);
     483window.addEventListener("unload", vI_rdfDatasource.clean, false);
  • chrome/content/v_identity/vI_upgrade.js

    r4bb767 r5b8d00  
    104104            case "0.0.2":
    105105                vI_upgrade.__createRDFContainers(); // no break
     106            case "0.0.3":
     107                vI_upgrade.__tagDefaultSMTP();
     108            case "0.0.4":
    106109            default:
    107                 vI_upgrade.__tagDefaultSMTP();
     110                vI_upgrade.__createAccountInfoContainers();
    108111        }
    109112        vI_rdfDatasource.storeRDFVersion();
     
    152155        vI_notificationBar.dump("\n");
    153156    },
     157
     158    __createAccountInfoContainers: function() {
     159        vI_notificationBar.dump("upgrade: createAccountInfoContainers \n");
     160        var rdfContainerUtils = Components.classes["@mozilla.org/rdf/container-utils;1"].
     161            getService(Components.interfaces.nsIRDFContainerUtils);
     162       
     163        var accountRes = vI_rdfDatasource.rdfService
     164            .GetResource(vI_rdfDatasource.rdfNS + vI_rdfDatasource.rdfNSAccounts);
     165        var identityRes = vI_rdfDatasource.rdfService
     166            .GetResource(vI_rdfDatasource.rdfNS + vI_rdfDatasource.rdfNSIdentities);
     167        var smtpRes = vI_rdfDatasource.rdfService
     168            .GetResource(vI_rdfDatasource.rdfNS + vI_rdfDatasource.rdfNSSMTPservers);
     169        vI_rdfDatasource.__setRDFValue(accountRes, "name", "Accounts");
     170        vI_rdfDatasource.__setRDFValue(identityRes, "name", "Identities");
     171        vI_rdfDatasource.__setRDFValue(smtpRes, "name", "SMTP-Server");
     172       
     173        rdfContainerUtils.MakeBag(vI_rdfDatasource.rdfDataSource, accountRes);
     174        rdfContainerUtils.MakeBag(vI_rdfDatasource.rdfDataSource, identityRes);
     175        rdfContainerUtils.MakeBag(vI_rdfDatasource.rdfDataSource, smtpRes);
     176
     177        var accountContainer = Components.classes["@mozilla.org/rdf/container;1"].
     178            createInstance(Components.interfaces.nsIRDFContainer);
     179       
     180        // initialize container with accountRes
     181        accountContainer.Init(vI_rdfDatasource.rdfDataSource, accountRes);
     182        // append all new containers to accountRes
     183        if (accountContainer.IndexOf(identityRes) == -1) accountContainer.AppendElement(identityRes);
     184        if (accountContainer.IndexOf(smtpRes) == -1) accountContainer.AppendElement(smtpRes);
     185       
     186        vI_rdfDatasource.__initContainers();
     187        vI_rdfDatasource.refreshAccountInfo();
     188    },
    154189
    155190    __createRDFContainers: function() {
Note: See TracChangeset for help on using the changeset viewer.