!import
1 //@line 39 "/home/visbrero/mnt/roisin/rev_control/hg/mozilla/mail/base/content/mail-offline.js"
2
3 var MailOfflineMgr = {
4 offlineManager: null,
5 offlineBundle: null,
6
init
Called: Object:getService (2 calls, 253 v-uS)
Object:addObserver (1 calls, 18 v-uS)
Object:getElementById (1 calls, 28 v-uS)
mail-offline.js:isOnline (1 calls, 138 v-uS)
mail-offline.js:updateOfflineUI (1 calls, 3570 v-uS)
7 init: function()
8 {
9 var os = Components.classes["@mozilla.org/observer-service;1"]
10 .getService(Components.interfaces.nsIObserverService);
11 os.addObserver(this, "network:offline-status-changed", false);
12
13 this.offlineManager = Components.classes["@mozilla.org/messenger/offline-manager;1"]
14 .getService(Components.interfaces.nsIMsgOfflineManager);
15 this.offlineBundle = document.getElementById("bundle_offlinePrompts");
16
17 // initialize our offline state UI
18 this.updateOfflineUI(!this.isOnline());
19 },
20
uninit
Called: Object:getService (1 calls, 17 v-uS)
Object:removeObserver (1 calls, 30 v-uS)
Called By: mailWindow.js:OnMailWindowUnload (1 calls, 100 v-uS)
21 uninit: function()
22 {
23 var os = Components.classes["@mozilla.org/observer-service;1"]
24 .getService(Components.interfaces.nsIObserverService);
25 os.removeObserver(this, "network:offline-status-changed");
26 },
27
28 /**
29 * @return true if we are online
30 */
isOnline
Called: Object:getService (2 calls, 72 v-uS)
Called By: ChromeWindow:getService (1 calls, 111 v-uS)
mail-offline.js:init (1 calls, 138 v-uS)
31 isOnline: function()
32 {
33 var ioService = Components.classes["@mozilla.org/network/io-service;1"]
34 .getService(Components.interfaces.nsIIOService);
35 return (!ioService.offline);
36 },
37
38 /**
39 * Toggles the online / offline state, initiated by the user. Depending on user settings
40 * we may prompt the user to send unsent messages when going online or to download messages for
41 * offline use when going offline.
42 */
toggleOfflineStatus
43 toggleOfflineStatus: function()
44 {
45 var ioService = Components.classes["@mozilla.org/network/io-service;1"]
46 .getService(Components.interfaces.nsIIOService2);
47 // the offline manager(goOnline and synchronizeForOffline) actually does the dirty work of
48 // changing the offline state with the networking service.
49 if (!this.isOnline())
50 {
51 var prefSendUnsentMessages = gPrefBranch.getIntPref("offline.send.unsent_messages");
52 // 0 == Ask, 1 == Always Send, 2 == Never Send
53 var sendUnsentMessages = (prefSendUnsentMessages == 0 && this.haveUnsentMessages()
54 && this.confirmSendUnsentMessages()) || prefSendUnsentMessages == 1;
55 this.offlineManager.goOnline(sendUnsentMessages, true /* playbackOfflineImapOperations */, msgWindow);
56
57 // resume managing offline status now that we are going back online.
58 ioService.manageOfflineStatus = gPrefBranch.getBoolPref("offline.autoDetect");
59 }
60 else // going offline
61 {
62 // Stop automatic management of the offline status since the user as decided to go offline.
63 ioService.manageOfflineStatus = false;
64 var prefDownloadMessages = gPrefBranch.getIntPref("offline.download.download_messages");
65 // 0 == Ask, 1 == Always Download, 2 == Never Download
66 var downloadForOfflineUse = (prefDownloadMessages == 0 && this.confirmDownloadMessagesForOfflineUse())
67 || prefDownloadMessages == 1;
68 this.offlineManager.synchronizeForOffline(downloadForOfflineUse, downloadForOfflineUse, false, true, msgWindow);
69 }
70 },
71
observe
72 observe: function (aSubject, aTopic, aState)
73 {
74 if (aTopic == "network:offline-status-changed")
75 this.mailOfflineStateChanged(aState == "offline");
76 },
77
78 /**
79 * @return true if there are unsent messages
80 */
haveUnsentMessages
Called: Object:Count (1 calls, 25 v-uS)
Object:QueryElementAt (1 calls, 71 v-uS)
Object:getService (1 calls, 422 v-uS)
Object:getTotalMessages (1 calls, 10 v-uS)
Object:getUnsentMessagesFolder (1 calls, 121 v-uS)
Called By: mail-offline.js:shouldSendUnsentMessages (1 calls, 918 v-uS)
81 haveUnsentMessages: function()
82 {
83 try
84 {
85 var am = Components.classes["@mozilla.org/messenger/account-manager;1"]
86 .getService(Components.interfaces.nsIMsgAccountManager);
87 var msgSendlater = Components.classes["@mozilla.org/messengercompose/sendlater;1"]
88 .getService(Components.interfaces.nsIMsgSendLater);
89 var identitiesCount, allIdentities, currentIdentity, numMessages, msgFolder;
90
91 if (am)
92 {
93 allIdentities = am.allIdentities;
94 identitiesCount = allIdentities.Count();
95 for (var i = 0; i < identitiesCount; i++)
96 {
97 currentIdentity = allIdentities.QueryElementAt(i, Components.interfaces.nsIMsgIdentity);
98 msgFolder = msgSendlater.getUnsentMessagesFolder(currentIdentity);
99 if(msgFolder)
100 {
101 // if true, descends into all subfolders
102 numMessages = msgFolder.getTotalMessages(false);
103 if(numMessages > 0)
104 return true;
105 }
106 }
107 }
108 }
109 catch(ex) {
110 }
111
112 return false;
113 },
114
115 /**
116 * open the offline panel in the account manager for the currently loaded
117 * account.
118 */
openOfflineAccountSettings
119 openOfflineAccountSettings: function()
120 {
121 window.parent.MsgAccountManager('am-offline.xul');
122 },
123
124 /**
125 * Prompt the user about going online to send unsent messages, and then send them
126 * if appropriate. Puts the app back into online mode.
127 *
128 * @param aMsgWindow the msg window to be used when going online
129 */
goOnlineToSendMessages
130 goOnlineToSendMessages: function(aMsgWindow)
131 {
132 const nsIPS = Components.interfaces.nsIPromptService;
133 var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(nsIPS);
134 var goOnlineToSendMsgs = promptService.confirm(window,
135 this.offlineBundle.getString('sendMessagesOfflineWindowTitle1'),
136 this.offlineBundle.getString('sendMessagesOfflineLabel1'));
137 if (goOnlineToSendMsgs)
138 this.offlineManager.goOnline(true /* send unsent messages*/, false, aMsgWindow);
139 },
140
141 /**
142 * Prompts the user to confirm sending of unsent messages. This is different from
143 * goOnlineToSendMessages which involves going online to send unsent messages.
144 *
145 * @return true if the user wants to send unsent messages
146 */
confirmSendUnsentMessages
147 confirmSendUnsentMessages: function()
148 {
149 const nsIPS = Components.interfaces.nsIPromptService;
150 var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(nsIPS);
151 var alwaysAsk = {value: true};
152 var sendUnsentMessages = promptService.confirmEx(window,
153 this.offlineBundle.getString('sendMessagesWindowTitle1'),
154 this.offlineBundle.getString('sendMessagesLabel1'),
155 nsIPS.STD_YES_NO_BUTTONS,
156 null, null, null,
157 this.offlineBundle.getString('sendMessagesCheckboxLabel1'),
158 alwaysAsk) == 0 ? true : false;
159
160 // if the user changed the ask me setting then update the global pref based on their yes / no answer
161 if (!alwaysAsk.value)
162 gPrefBranch.setIntPref("offline.send.unsent_messages", sendUnsentMessages ? 1 : 2);
163 return sendUnsentMessages;
164 },
165
166 /**
167 * Should we send unsent messages? Based on the value of
168 * offline.send.unsent_messages, this method may prompt the user.
169 * @return true if we should send unsent messages
170 */
shouldSendUnsentMessages
Called: mail-offline.js:haveUnsentMessages (1 calls, 918 v-uS)
Called By: msgMail3PaneWindow.js:loadStartFolder (1 calls, 957 v-uS)
171 shouldSendUnsentMessages: function()
172 {
173 var sendUnsentWhenGoingOnlinePref = gPrefBranch.getIntPref("offline.send.unsent_messages");
174 if(sendUnsentWhenGoingOnlinePref == 2) // never send
175 return false;
176
177 // if we we have unsent messages, then honor the offline.send.unsent_messages pref.
178 else if (this.haveUnsentMessages())
179 {
180 if ((sendUnsentWhenGoingOnlinePref == 0 && this.confirmSendUnsentMessages())
181 || sendUnsentWhenGoingOnlinePref == 1)
182 return true;
183 }
184 return false;
185 },
186
187 /**
188 * Prompts the user to download messages for offline use before going offline.
189 * May update the value of offline.download.download_messages
190 *
191 * @return true if the user wants to download messages for offline use.
192 */
confirmDownloadMessagesForOfflineUse
193 confirmDownloadMessagesForOfflineUse: function()
194 {
195 const nsIPS = Components.interfaces.nsIPromptService;
196 var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(nsIPS);
197 var alwaysAsk = {value: true};
198 var downloadMessages = promptService.confirmEx(window,
199 this.offlineBundle.getString('downloadMessagesWindowTitle1'),
200 this.offlineBundle.getString('downloadMessagesLabel1'),
201 nsIPS.STD_YES_NO_BUTTONS,
202 null, null, null,
203 this.offlineBundle.getString('downloadMessagesCheckboxLabel1'),
204 alwaysAsk) == 0 ? true : false;
205
206 // if the user changed the ask me setting then update the global pref based on their yes / no answer
207 if (!alwaysAsk.value)
208 gPrefBranch.setIntPref("offline.download.download_messages", downloadMessages ? 1 : 2);
209 return downloadMessages;
210 },
211
212 /**
213 * Get New Mail When Offline
214 * Prompts the user about going online in order to download new messages.
215 * Based on the response, will move us back to online mode.
216 *
217 * @return true if the user confirms going online.
218 */
getNewMail
219 getNewMail: function()
220 {
221 const nsIPS = Components.interfaces.nsIPromptService;
222 var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(nsIPS);
223 var goOnline = promptService.confirm(window,
224 this.offlineBundle.getString('getMessagesOfflineWindowTitle1'),
225 this.offlineBundle.getString('getMessagesOfflineLabel1'));
226 if (goOnline)
227 this.offlineManager.goOnline(this.shouldSendUnsentMessages(),
228 false /* playbackOfflineImapOperations */, msgWindow);
229 return goOnline;
230 },
231
232 /**
233 * Private helper method to update the state of the Offline menu item
234 * and the offline status bar indicator
235 */
updateOfflineUI
Called: Object:getElementById (2 calls, 317 v-uS)
Object:setAttribute (2 calls, 119 v-uS)
Object:removeAttribute (1 calls, 14 v-uS)
stringbundle.xml:getString (1 calls, 3031 v-uS)
Called By: mail-offline.js:init (1 calls, 3570 v-uS)
236 updateOfflineUI: function(aIsOffline)
237 {
238 document.getElementById('goOfflineMenuItem').setAttribute("checked", aIsOffline);
239 var statusBarPanel = document.getElementById('offline-status');
240 if (aIsOffline)
241 {
242 statusBarPanel.setAttribute("offline", "true");
243 statusBarPanel.setAttribute("tooltiptext", this.offlineBundle.getString("offlineTooltip"));
244 }
245 else
246 {
247 statusBarPanel.removeAttribute("offline");
248 statusBarPanel.setAttribute("tooltiptext", this.offlineBundle.getString("onlineTooltip"));
249 }
250 },
251
252 /**
253 * private helper method called whenever we detect a change to the offline state
254 */
mailOfflineStateChanged
255 mailOfflineStateChanged: function (aGoingOffline)
256 {
257 gFolderJustSwitched = true;
258 this.updateOfflineUI(aGoingOffline);
259 }
260 };