home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / software / netscape62win / mail.xpi / bin / chrome / messenger.jar / content / messenger / mailCommands.js < prev    next >
Text File  |  2001-07-06  |  13KB  |  446 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.     var commandResource = RDF.GetResource(command);
  48.     if(commandResource) {
  49.       try {
  50.         dataSource.DoCommand(srcArray, commandResource, argumentArray);
  51.       }
  52.       catch(e) { 
  53.         if (command == "http://home.netscape.com/NC-rdf#NewFolder") {
  54.           throw(e); // so that the dialog does not automatically close.
  55.         }
  56.         dump("Exception : In mail commands\n");
  57.       }
  58.     }
  59. }
  60.  
  61. function ConvertMessagesToResourceArray(messages,  resourceArray)
  62. {
  63.     dump("fix or remove this\n");
  64.     // going away...
  65. }
  66.  
  67. function GetNewMessages(selectedFolders, compositeDataSource)
  68. {
  69.     var numFolders = selectedFolders.length;
  70.     if(numFolders > 0)
  71.     {
  72.         var msgFolder = selectedFolders[0];
  73.  
  74.         //Whenever we do get new messages, clear the old new messages.
  75.         if(msgFolder) 
  76.         {
  77.             var nsIMsgFolder = Components.interfaces.nsIMsgFolder;
  78.             msgFolder.biffState = nsIMsgFolder.nsMsgBiffState_NoMail;
  79.  
  80.             if (msgFolder.hasNewMessages)
  81.                 msgFolder.clearNewMessages();
  82.         }
  83.         
  84.         if(compositeDataSource)
  85.         {
  86.             var folderResource = msgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
  87.             var folderArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  88.             folderArray.AppendElement(folderResource);
  89.  
  90.             DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#GetNewMessages", folderArray, null);
  91.         }
  92.     }
  93.     else {
  94.         dump("Nothing was selected\n");
  95.     }
  96. }
  97.  
  98. function DeleteMessages(compositeDataSource, srcFolder, messages, reallyDelete)
  99. {
  100.     dump("fix or remove this\n");
  101.     // going away...
  102. }
  103.  
  104. function CopyMessages(compositeDataSource, srcFolder, destFolder, messages, isMove)
  105. {
  106.     dump("fix or remove this\n");
  107.     // going away...
  108. }
  109.  
  110. function getIdentityForServer(server)
  111. {
  112.     var identity = null;
  113.     if(server) {
  114.         // get the identity associated with this server
  115.         var identities = accountManager.GetIdentitiesForServer(server);
  116.         // dump("identities = " + identities + "\n");
  117.         // just get the first one
  118.         if (identities.Count() > 0 ) {
  119.             identity = identities.GetElementAt(0).QueryInterface(Components.interfaces.nsIMsgIdentity);  
  120.         }
  121.     }
  122.  
  123.     return identity;
  124. }
  125.  
  126. function GetNextNMessages(folder)
  127. {
  128.     if (folder) {
  129.         var newsFolder = folder.QueryInterface(Components.interfaces.nsIMsgNewsFolder);
  130.         if (newsFolder) {
  131.             newsFolder.getNextNMessages(msgWindow);
  132.         }
  133.     }
  134. }
  135.  
  136. // type is a nsIMsgCompType and format is a nsIMsgCompFormat
  137. function ComposeMessage(type, format, folder, messageArray) 
  138. {
  139.     var msgComposeType = Components.interfaces.nsIMsgCompType;
  140.     var identity = null;
  141.     var newsgroup = null;
  142.     var server;
  143.  
  144.     //dump("ComposeMessage folder="+folder+"\n");
  145.     try 
  146.     {
  147.         if(folder)
  148.         {
  149.             // get the incoming server associated with this uri
  150.             server = folder.server;
  151.  
  152.             // if they hit new or reply and they are reading a newsgroup
  153.             // turn this into a new post or a reply to group.
  154.             if (server.type == "nntp")
  155.             {
  156.                 if (type == msgComposeType.New)
  157.                 {
  158.                     type = msgComposeType.NewsPost;
  159.                        if (folder.isServer) 
  160.                            newsgroup = "";
  161.                        else 
  162.                            newsgroup = server.hostName + "/" + folder.name; 
  163.                 }
  164.             }
  165.             identity = getIdentityForServer(server);
  166.             // dump("identity = " + identity + "\n");
  167.         }
  168.     }
  169.     catch (ex) 
  170.     {
  171.             dump("failed to get an identity to pre-select: " + ex + "\n");
  172.     }
  173.  
  174.     //dump("\nComposeMessage from XUL: " + identity + "\n");
  175.     var uri = null;
  176.  
  177.     if (! msgComposeService)
  178.     {
  179.         dump("### msgComposeService is invalid\n");
  180.         return;
  181.     }
  182.     
  183.     if (type == msgComposeType.New) //new message
  184.     {
  185.         //dump("OpenComposeWindow with " + identity + "\n");
  186.         msgComposeService.OpenComposeWindow(null, null, type, format, identity);
  187.         return;
  188.     }
  189.     else if (type == msgComposeType.NewsPost) 
  190.     {
  191.         //dump("OpenComposeWindow with " + identity + " and " + newsgroup + "\n");
  192.         msgComposeService.OpenComposeWindow(null, newsgroup, type, format, identity);
  193.         return;
  194.     }
  195.         
  196.     messenger.SetWindow(window, msgWindow);
  197.             
  198.     var object = null;
  199.     
  200.     if (messageArray && messageArray.length > 0)
  201.     {
  202.         uri = "";
  203.         for (var i = 0; i < messageArray.length && i < 8; i ++)
  204.         {    
  205.             var messageUri = messageArray[i];
  206.       //dump("XXX messageUri in ComposeMessage = " + messageUri + "\n");
  207.             //dump('i = '+ i);
  208.             //dump('\n');                
  209.             if (type == msgComposeType.Reply || type == msgComposeType.ReplyAll || type == msgComposeType.ForwardInline ||
  210.                 type == msgComposeType.ReplyToGroup || type == msgComposeType.ReplyToSender || 
  211.                 type == msgComposeType.ReplyToSenderAndGroup ||
  212.                 type == msgComposeType.Template || type == msgComposeType.Draft)
  213.             {
  214.                 msgComposeService.OpenComposeWindow(null, messageUri, type, format, identity);
  215.             }
  216.             else
  217.             {
  218.                 if (i) 
  219.                     uri += ","
  220.                 uri += messageUri;
  221.             }
  222.         }
  223.         if (type == msgComposeType.ForwardAsAttachment)
  224.         {
  225.             msgComposeService.OpenComposeWindow(null, uri, type, format, identity);
  226.         }
  227.     }
  228.     else
  229.         dump("### nodeList is invalid\n");
  230. }
  231.  
  232. function CreateNewSubfolder(chromeWindowURL, preselectedMsgFolder,
  233.                             dualUseFolders, callBackFunctionName)
  234. {
  235.     var preselectedURI;
  236.  
  237.     if(preselectedMsgFolder)
  238.     {
  239.         var preselectedFolderResource = preselectedMsgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
  240.         if(preselectedFolderResource)
  241.             preselectedURI = preselectedFolderResource.Value;
  242.         dump("preselectedURI = " + preselectedURI + "\n");
  243.     }
  244.  
  245.     var dialog = window.openDialog(
  246.                 chromeWindowURL,
  247.                 "",
  248.                 "chrome,titlebar,modal",
  249.                 {preselectedURI:preselectedURI,
  250.                              dualUseFolders:dualUseFolders,
  251.                              okCallback:callBackFunctionName});
  252. }
  253.  
  254. function NewFolder(name,uri)
  255. {
  256.     //dump("uri,name = " + uri + "," + name + "\n");
  257.     if (uri && (uri != "") && name && (name != "")) {
  258.         var selectedFolderResource = RDF.GetResource(uri);
  259.         //dump("selectedFolder = " + uri + "\n");
  260.         var compositeDataSource = GetCompositeDataSource("NewFolder");
  261.  
  262.         var folderArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  263.         var nameArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  264.  
  265.         folderArray.AppendElement(selectedFolderResource);
  266.  
  267.         var nameLiteral = RDF.GetLiteral(name);
  268.         nameArray.AppendElement(nameLiteral);
  269.         DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#NewFolder", folderArray, nameArray);
  270.  
  271.     }
  272.     else {
  273.         dump("no name or nothing selected\n");
  274.     }
  275. }
  276.  
  277. function UnSubscribe(folder)
  278. {
  279.     // Unsubscribe the current folder from the newsserver, this assumes any confirmation has already
  280.     // been made by the user  SPL
  281.     
  282.     var server = folder.server;
  283.     var subscribableServer =  server.QueryInterface(Components.interfaces.nsISubscribableServer);       
  284.     subscribableServer.unsubscribe(folder.name);
  285.     subscribableServer.commitSubscribeChanges();
  286. }   
  287.  
  288. function Subscribe(preselectedMsgFolder)
  289. {
  290.     var preselectedURI;
  291.  
  292.     if(preselectedMsgFolder)
  293.     {
  294.         var preselectedFolderResource = preselectedMsgFolder.QueryInterface(Components.interfaces.nsIRDFResource);
  295.         if(preselectedFolderResource)
  296.             preselectedURI = preselectedFolderResource.Value;
  297.         dump("preselectedURI = " + preselectedURI + "\n");
  298.     }
  299.  
  300.     window.openDialog("chrome://messenger/content/subscribe.xul",
  301.                       "subscribe", "chrome,modal,titlebar,resizable=yes",
  302.                 {preselectedURI:preselectedURI,
  303.                  okCallback:SubscribeOKCallback});
  304. }
  305.  
  306. function SubscribeOKCallback(changeTable)
  307. {
  308.     for (var serverURI in changeTable) {
  309.         var folder = GetMsgFolderFromUri(serverURI);
  310.         var server = folder.server;
  311.         var subscribableServer =
  312.             server.QueryInterface(Components.interfaces.nsISubscribableServer);
  313.  
  314.         for (var name in changeTable[serverURI]) {
  315.             if (changeTable[serverURI][name] == true) {
  316.                 try {
  317.                     subscribableServer.subscribe(name);
  318.                 }
  319.                 catch (ex) {
  320.                     dump("failed to subscribe to " + name + ": " + ex + "\n");
  321.                 }
  322.             }
  323.             else if (changeTable[serverURI][name] == false) {
  324.                 try {
  325.                     subscribableServer.unsubscribe(name);
  326.                 }
  327.                 catch (ex) {
  328.                     dump("failed to unsubscribe to " + name + ": " + ex + "\n");
  329.                 }
  330.             }
  331.             else {
  332.                 // no change
  333.             }
  334.         }
  335.  
  336.         try {
  337.             subscribableServer.commitSubscribeChanges();
  338.         }
  339.         catch (ex) {
  340.             dump("failed to commit the changes: " + ex + "\n");
  341.         }
  342.     }
  343. }
  344.  
  345. function SaveAsFile(uri)
  346. {
  347.     if (uri) messenger.saveAs(uri, true, null, msgWindow);
  348. }
  349.  
  350. function SaveAsTemplate(uri, folder)
  351. {
  352.     if (uri) {
  353.         var identity = getIdentityForServer(folder.server);
  354.         messenger.saveAs(uri, false, identity, msgWindow);
  355.     }
  356. }
  357.  
  358. function MarkSelectedMessagesRead(markRead)
  359. {
  360.     if (markRead) {
  361.         gDBView.doCommand(nsMsgViewCommandType.markMessagesRead);
  362.     }
  363.     else {
  364.         gDBView.doCommand(nsMsgViewCommandType.markMessagesUnread);
  365.     }
  366. }
  367.  
  368. function MarkSelectedMessagesFlagged(markFlagged)
  369. {
  370.     if (markFlagged) {
  371.         gDBView.doCommand(nsMsgViewCommandType.flagMessages);
  372.     }
  373.     else {
  374.         gDBView.doCommand(nsMsgViewCommandType.unflagMessages);
  375.     }
  376. }
  377.  
  378. function MarkAllMessagesRead(compositeDataSource, folder)
  379. {
  380.   var folderResource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
  381.   var folderArray = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
  382.   folderArray.AppendElement(folderResource);
  383.  
  384.   DoRDFCommand(compositeDataSource, "http://home.netscape.com/NC-rdf#MarkAllMessagesRead", folderArray, null);
  385. }
  386.  
  387. function DownloadFlaggedMessages(compositeDataSource, folder)
  388. {
  389.     dump("fix DownloadFlaggedMessages()\n");
  390. }
  391.  
  392. function DownloadSelectedMessages(compositeDataSource, messages, markFlagged)
  393. {
  394.     dump("fix DownloadSelectedMessages()\n");
  395. }
  396.  
  397. function MarkThreadAsRead(message)
  398. {
  399.   gDBView.doCommand(nsMsgViewCommandType.markThreadRead);
  400. }
  401.  
  402. function ViewPageSource(messages)
  403. {
  404.     var url;
  405.     var uri;
  406.     var mailSessionContractID      = "@mozilla.org/messenger/services/session;1";
  407.  
  408.     var numMessages = messages.length;
  409.  
  410.     if (numMessages == 0)
  411.     {
  412.         dump("MsgViewPageSource(): No messages selected.\n");
  413.         return false;
  414.     }
  415.  
  416.     // First, get the mail session
  417.     var mailSession = Components.classes[mailSessionContractID].getService();
  418.     if (!mailSession)
  419.         return false;
  420.  
  421.     mailSession = mailSession.QueryInterface(Components.interfaces.nsIMsgMailSession);
  422.     if (!mailSession)
  423.         return false;
  424.  
  425.     for(var i = 0; i < numMessages; i++)
  426.     {
  427.         uri = messages[i];
  428.   
  429.         // Now, we need to get a URL from a URI
  430.         url = mailSession.ConvertMsgURIToMsgURL(uri, msgWindow);
  431.         if (url) {
  432.             // XXX what if there already is a "?", like "?part=0"
  433.             // XXX shouldn't this be "&header=src" in that case?
  434.             url += "?header=src";
  435.         }
  436.     
  437.         // Use a browser window to view source
  438.         window.openDialog( getBrowserURL(),
  439.                            "_blank",
  440.                            "scrollbars,resizable,chrome,dialog=no",
  441.                             url,
  442.                             "view-source" );
  443.     }
  444.         return true;
  445. }
  446.