home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / mozil06.zip / bin / chrome / messenger.jar / content / messenger / mailCommands.js < prev    next >
Text File  |  2001-02-14  |  16KB  |  526 lines

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  * The contents of this file are subject to the Netscape Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/NPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is Mozilla Communicator client code, released
  13.  * March 31, 1998.
  14.  * 
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation. Portions created by Netscape are
  17.  * Copyright (C) 1998-1999 Netscape Communications Corporation. All
  18.  * Rights Reserved.
  19.  */
  20.  
  21.  
  22. function GetMsgFolderFromUri(uri)
  23. {
  24.     //dump("GetMsgFolderFromUri of " + uri + "\n");
  25.     try {
  26.         var resource = GetResourceFromUri(uri);
  27.         var msgfolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder);
  28.         return msgfolder;
  29.     }
  30.     catch (ex) {
  31.         //dump("failed to get the folder resource\n");
  32.     }
  33.     return null;
  34. }
  35.  
  36. function GetResourceFromUri(uri)
  37. {
  38.     var RDF = Components.classes['@mozilla.org/rdf/rdf-service;1'].getService();
  39.     RDF = RDF.QueryInterface(Components.interfaces.nsIRDFService);
  40.         var resource = RDF.GetResource(uri);
  41.  
  42.     return resource;
  43. }  
  44.  
  45. function DoRDFCommand(dataSource, command, srcArray, argumentArray)
  46. {
  47.  
  48.     var commandResource = RDF.GetResource(command);
  49.     if(commandResource)
  50.                 try {
  51.         dataSource.DoCommand(srcArray, commandResource, argumentArray);
  52.                 }
  53.                 catch(e)
  54.                 { 
  55.                    if ( command == "http://home.netscape.com/NC-rdf#ReallyDelete" || command == "http://home.netscape.com/NC-rdf#Delete" || command == "http://home.netscape.com/NC-rdf#Move" ) {
  56.                       gNextMessageAfterDelete =null;
  57.                       }
  58.                       dump (" Exception : In mail commands\n");
  59.                 }
  60. }
  61.  
  62. //Converts an array of messages into an nsISupportsArray of resources. 
  63. //messages:  array of messages that needs to be converted
  64. //resourceArray: nsISupportsArray in which the resources should be put.  If it's null a new one will be created.
  65. //returns the resource array
  66. function ConvertMessagesToResourceArray(messages,  resourceArray)
  67. {
  68.     if(!resourceArray)
  69.         resourceArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  70.  
  71.     for (var i=0; i<messages.length; i++) {
  72.         var messageResource = messages[i].QueryInterface(Components.interfaces.nsIRDFResource);
  73.         resourceArray.AppendElement(messageResource);
  74.     }
  75.  
  76.     return resourceArray;
  77. }
  78.  
  79. function GetNewMessages(selectedFolders, compositeDataSource)
  80. {
  81.     var numFolders = selectedFolders.length;
  82.     if(numFolders > 0)
  83.     {
  84.         var msgFolder = selectedFolders[0];
  85.  
  86.         //Whenever we do get new messages, clear the old new messages.
  87.         if(msgFolder) 
  88.         {
  89.             var nsIMsgFolder = Components.interfaces.nsIMsgFolder;
  90.             msgFolder.biffState = nsIMsgFolder.nsMsgBiffState_NoMail;
  91.  
  92.             if (msgFolder.hasNewMessages)
  93.                 msgFolder.clearNewMessages();
  94.         }
  95.         
  96.         if(compositeDataSource)
  97.         {
  98.             var folderResource = msgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
  99.             var folderArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  100.             folderArray.AppendElement(folderResource);
  101.  
  102.             DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#GetNewMessages", folderArray, null);
  103.         }
  104.     }
  105.     else {
  106.         dump("Nothing was selected\n");
  107.     }
  108. }
  109.  
  110. function DeleteMessages(compositeDataSource, srcFolder, messages, reallyDelete)
  111. {
  112.  
  113.     var srcFolderResource = srcFolder.QueryInterface(Components.interfaces.nsIRDFResource);
  114.     var folderArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  115.     folderArray.AppendElement(srcFolderResource);
  116.  
  117.     var argumentArray = ConvertMessagesToResourceArray(messages, null);
  118.  
  119.     var command;
  120.  
  121.     if(reallyDelete)
  122.         command = "http://home.netscape.com/NC-rdf#ReallyDelete"
  123.     else
  124.         command = "http://home.netscape.com/NC-rdf#Delete"
  125.  
  126.     DoRDFCommand(compositeDataSource, command, folderArray, argumentArray);
  127.  
  128. }
  129.  
  130. function CopyMessages(compositeDataSource, srcFolder, destFolder, messages, isMove)
  131. {
  132.  
  133.     if(compositeDataSource)
  134.     {
  135.         var destFolderResource = destFolder.QueryInterface(Components.interfaces.nsIRDFResource);
  136.         var folderArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  137.         folderArray.AppendElement(destFolderResource);
  138.  
  139.         var argumentArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  140.         var srcFolderResource = srcFolder.QueryInterface(Components.interfaces.nsIRDFResource);
  141.         argumentArray.AppendElement(srcFolderResource);
  142.         ConvertMessagesToResourceArray(messages, argumentArray);
  143.         
  144.         var command;
  145.         if(isMove)
  146.             command = "http://home.netscape.com/NC-rdf#Move"
  147.         else
  148.             command = "http://home.netscape.com/NC-rdf#Copy";
  149.  
  150.         DoRDFCommand(compositeDataSource, command, folderArray, argumentArray);
  151.  
  152.     }
  153. }
  154.  
  155. function getIdentityForServer(server)
  156. {
  157.     var identity = null;
  158.     if(server) {
  159.         // get the identity associated with this server
  160.         var identities = accountManager.GetIdentitiesForServer(server);
  161.         // dump("identities = " + identities + "\n");
  162.         // just get the first one
  163.         if (identities.Count() > 0 ) {
  164.             identity = identities.GetElementAt(0).QueryInterface(Components.interfaces.nsIMsgIdentity);  
  165.         }
  166.     }
  167.  
  168.     return identity;
  169. }
  170.  
  171. function SendUnsentMessages(folder)
  172. {
  173.     if(folder)
  174.     {    
  175.         var identity = getIdentityForServer(folder.server);
  176.         messenger.SendUnsentMessages(identity);
  177.     }
  178.  
  179. }
  180.  
  181. function GetNextNMessages(folder)
  182. {
  183.     if (folder) {
  184.         var newsFolder = folder.QueryInterface(Components.interfaces.nsIMsgNewsFolder);
  185.         if (newsFolder) {
  186.             newsFolder.getNextNMessages(msgWindow);
  187.         }
  188.     }
  189. }
  190.  
  191.  function ComposeMessage(type, format, folder, messageArray) //type is a nsIMsgCompType and format is a nsIMsgCompFormat
  192. {
  193.     var msgComposeType = Components.interfaces.nsIMsgCompType;
  194.     var identity = null;
  195.     var newsgroup = null;
  196.     var server;
  197.  
  198.     dump("ComposeMessage folder="+folder+"\n");
  199.     try 
  200.     {
  201.         if(folder)
  202.         {
  203.             // get the incoming server associated with this uri
  204.             server = folder.server;
  205.  
  206.             // if they hit new or reply and they are reading a newsgroup
  207.             // turn this into a new post or a reply to group.
  208.             if (server.type == "nntp")
  209.             {
  210.                 if (type == msgComposeType.New)
  211.                 {
  212.                     type = msgComposeType.NewsPost;
  213.                        if (folder.isServer) 
  214.                            newsgroup = "";
  215.                        else 
  216.                            newsgroup = server.hostName + "/" + folder.name; 
  217.                 }
  218.             }
  219.             identity = getIdentityForServer(server);
  220.             // dump("identity = " + identity + "\n");
  221.  
  222.         }
  223.         
  224.  
  225.     }
  226.     catch (ex) 
  227.     {
  228.             dump("failed to get an identity to pre-select: " + ex + "\n");
  229.     }
  230.  
  231.     dump("\nComposeMessage from XUL: " + identity + "\n");
  232.     var uri = null;
  233.  
  234.     if (! msgComposeService)
  235.     {
  236.         dump("### msgComposeService is invalid\n");
  237.         return;
  238.     }
  239.     
  240.     if (type == msgComposeType.New) //new message
  241.     {
  242.         //dump("OpenComposeWindow with " + identity + "\n");
  243.         msgComposeService.OpenComposeWindow(null, null, type, format, identity);
  244.         return;
  245.     }
  246.         else if (type == msgComposeType.NewsPost) 
  247.     {
  248.         dump("OpenComposeWindow with " + identity + " and " + newsgroup + "\n");
  249.         msgComposeService.OpenComposeWindow(null, newsgroup, type, format, identity);
  250.         return;
  251.     }
  252.         
  253.     messenger.SetWindow(window, msgWindow);
  254.             
  255.     var object = null;
  256.     
  257.     if (messageArray && messageArray.length > 0)
  258.     {
  259.         uri = "";
  260.         for (var i = 0; i < messageArray.length && i < 8; i ++)
  261.         {    
  262.             var messageResource = messageArray[i].QueryInterface(Components.interfaces.nsIRDFResource);
  263.             var messageUri = messageResource.Value;
  264.  
  265.             dump('i = '+ i);
  266.             dump('\n');                
  267.             if (type == msgComposeType.Reply || type == msgComposeType.ReplyAll || type == msgComposeType.ForwardInline ||
  268.                 type == msgComposeType.ReplyToGroup || type == msgComposeType.ReplyToSenderAndGroup ||
  269.                 type == msgComposeType.Template || type == msgComposeType.Draft)
  270.             {
  271.                 msgComposeService.OpenComposeWindow(null, messageUri, type, format, identity);
  272.             }
  273.             else
  274.             {
  275.                 if (i) 
  276.                     uri += ","
  277.                 uri += messageUri;
  278.             }
  279.         }
  280.         if (type == msgComposeType.ForwardAsAttachment)
  281.         {
  282.             msgComposeService.OpenComposeWindow(null, uri, type, format, identity);
  283.         }
  284.     }
  285.     else
  286.         dump("### nodeList is invalid\n");
  287. }
  288.  
  289. function CreateNewSubfolder(chromeWindowURL,windowTitle, preselectedMsgFolder,
  290.                             dualUseFolders)
  291. {
  292.     var preselectedURI;
  293.  
  294.     if(preselectedMsgFolder)
  295.     {
  296.         var preselectedFolderResource = preselectedMsgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
  297.         if(preselectedFolderResource)
  298.             preselectedURI = preselectedFolderResource.Value;
  299.         dump("preselectedURI = " + preselectedURI + "\n");
  300.     }
  301.  
  302.     var dialog = window.openDialog(
  303.                 chromeWindowURL,
  304.                 "",
  305.                 "chrome,titlebar,modal",
  306.                 {preselectedURI:preselectedURI, title:windowTitle,
  307.                                    dualUseFolders:dualUseFolders,
  308.                 okCallback:NewFolder});
  309. }
  310.  
  311. function NewFolder(name,uri)
  312. {
  313.     //dump("uri,name = " + uri + "," + name + "\n");
  314.     if (uri && (uri != "") && name && (name != "")) {
  315.         var selectedFolderResource = RDF.GetResource(uri);
  316.         //dump("selectedFolder = " + uri + "\n");
  317.         var compositeDataSource = GetCompositeDataSource("NewFolder");
  318.  
  319.         var folderArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  320.         var nameArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  321.  
  322.         folderArray.AppendElement(selectedFolderResource);
  323.  
  324.         var nameLiteral = RDF.GetLiteral(name);
  325.         nameArray.AppendElement(nameLiteral);
  326.         DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#NewFolder", folderArray, nameArray);
  327.  
  328.     }
  329.     else {
  330.         dump("no name or nothing selected\n");
  331.     }
  332. }
  333.  
  334. function Subscribe(windowTitle, preselectedMsgFolder)
  335. {
  336.     var preselectedURI;
  337.  
  338.     if(preselectedMsgFolder)
  339.     {
  340.         var preselectedFolderResource = preselectedMsgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
  341.         if(preselectedFolderResource)
  342.             preselectedURI = preselectedFolderResource.Value;
  343.         dump("preselectedURI = " + preselectedURI + "\n");
  344.     }
  345.  
  346.     window.openDialog("chrome://messenger/content/subscribe.xul",
  347.                       "subscribe", "chrome,modal,titlebar,resizable=yes",
  348.                 {preselectedURI:preselectedURI, title:windowTitle,
  349.                 okCallback:SubscribeOKCallback});
  350. }
  351.  
  352. function SubscribeOKCallback(serverURI, changeTable)
  353. {
  354.     //dump("in SubscribeOKCallback(" + serverURI +")\n");
  355.     //dump("change table = " + changeTable + "\n");
  356.     
  357.     var folder = GetMsgFolderFromUri(serverURI);
  358.     var server = folder.server;
  359.     var subscribableServer =
  360.         server.QueryInterface(Components.interfaces.nsISubscribableServer);
  361.  
  362.  
  363.     for (var name in changeTable) {
  364.         //dump(name + " = " + changeTable[name] + "\n");
  365.         if (changeTable[name] == true) {
  366.             //dump("from js, subscribe to " + name +"\n");
  367.             subscribableServer.subscribe(name);
  368.         }
  369.         else if (changeTable[name] == false) {
  370.             //dump("from js, unsubscribe to " + name +"\n");
  371.             subscribableServer.unsubscribe(name);
  372.         }
  373.         else {
  374.             //dump("no change to " + name + "\n");
  375.         }
  376.     }
  377.     try {
  378.         var imapServer =
  379.             server.QueryInterface(Components.interfaces.nsIImapIncomingServer);
  380.         if (imapServer)
  381.             imapServer.reDiscoverAllFolders();
  382.     }
  383.     catch (ex) {
  384.         //dump("*** not an imap server\n");
  385.     }
  386.     var nntpServer;
  387.     try {
  388.         nntpServer =
  389.             server.QueryInterface(Components.interfaces.nsINntpIncomingServer);
  390.         // write out the subscribe changes
  391.         if (nntpServer)
  392.             nntpServer.writeNewsrcFile();
  393.     }
  394.     catch (ex) {
  395.         //dump("*** not a news server\n");
  396.     }
  397. }
  398.  
  399. function SaveAsFile(message)
  400. {
  401.     var messageResource = message.QueryInterface(Components.interfaces.nsIRDFResource);
  402.     var uri = messageResource.Value;
  403.     //dump (uri);
  404.     if (uri)
  405.         messenger.saveAs(uri, true, null, msgWindow);
  406. }
  407.  
  408. function SaveAsTemplate(message, folder)
  409. {
  410.     var messageResource = message.QueryInterface(Components.interfaces.nsIRDFResource);
  411.     var uri = messageResource.Value;
  412.     // dump (uri);
  413.     if (uri)
  414.     {
  415.         var identity = getIdentityForServer(folder.server);
  416.         messenger.saveAs(uri, false, identity, msgWindow);
  417.     }
  418. }
  419.  
  420. function MarkMessagesRead(compositeDataSource, messages, markRead)
  421. {
  422.  
  423.     var messageResourceArray = ConvertMessagesToResourceArray(messages, null);
  424.     var command;
  425.  
  426.     if(markRead)
  427.         command = "http://home.netscape.com/NC-rdf#MarkRead";
  428.     else
  429.         command = "http://home.netscape.com/NC-rdf#MarkUnread";
  430.  
  431.     DoRDFCommand(compositeDataSource, command, messageResourceArray, null);
  432.  
  433. }
  434.  
  435. function MarkMessagesFlagged(compositeDataSource, messages, markFlagged)
  436. {
  437.  
  438.     var messageResourceArray = ConvertMessagesToResourceArray(messages, null);
  439.     var command;
  440.  
  441.     if(markFlagged)
  442.         command = "http://home.netscape.com/NC-rdf#MarkFlagged";
  443.     else
  444.         command = "http://home.netscape.com/NC-rdf#MarkUnflagged";
  445.  
  446.     DoRDFCommand(compositeDataSource, command, messageResourceArray, null);
  447.  
  448. }
  449.  
  450. function MarkAllMessagesRead(compositeDataSource, folder)
  451. {
  452.  
  453.     var folderResource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
  454.     var folderResourceArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  455.     folderResourceArray.AppendElement(folderResource);
  456.  
  457.     DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#MarkAllMessagesRead", folderResourceArray, null);
  458. }
  459.  
  460. function MarkThreadAsRead(compositeDataSource, message)
  461. {
  462.  
  463.     if(message)
  464.     {
  465.         var folder = message.msgFolder
  466.         if(folder)
  467.         {
  468.             var thread = folder.getThreadForMessage(message);
  469.             if(thread)
  470.             {
  471.                 var folderResource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
  472.                 var folderResourceArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  473.                 folderResourceArray.AppendElement(folderResource);
  474.  
  475.                 var argumentArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  476.                 argumentArray.AppendElement(thread);
  477.  
  478.                 DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#MarkThreadRead", folderResourceArray, argumentArray);
  479.             }
  480.         }
  481.     }
  482. }
  483.  
  484.  
  485. function ViewPageSource(messages)
  486. {
  487.     var url;
  488.     var uri;
  489.     var mailSessionContractID      = "@mozilla.org/messenger/services/session;1";
  490.  
  491.     var numMessages = messages.length;
  492.  
  493.     if (numMessages == 0)
  494.     {
  495.         dump("MsgViewPageSource(): No messages selected.\n");
  496.         return false;
  497.     }
  498.  
  499.     // First, get the mail session
  500.     var mailSession = Components.classes[mailSessionContractID].getService();
  501.     if (!mailSession)
  502.         return false;
  503.  
  504.     mailSession = mailSession.QueryInterface(Components.interfaces.nsIMsgMailSession);
  505.     if (!mailSession)
  506.         return false;
  507.  
  508.     for(var i = 0; i < numMessages; i++)
  509.     {
  510.         var messageResource = messages[i].QueryInterface(Components.interfaces.nsIRDFResource);
  511.         uri = messageResource.Value;
  512.   
  513.         // Now, we need to get a URL from a URI
  514.         url = mailSession.ConvertMsgURIToMsgURL(uri, msgWindow);
  515.         if (url)
  516.             url += "?header=src";
  517.  
  518.         // Use a browser window to view source
  519.         window.openDialog( getBrowserURL(),
  520.                            "_blank",
  521.                            "scrollbars,resizable,chrome,dialog=no",
  522.                             url,
  523.                             "view-source" );
  524.     }
  525. }
  526.