1998-09-09 00:52:38 +00:00
|
|
|
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
1999-11-02 01:51:54 +00:00
|
|
|
* The contents of this file are subject to the Mozilla Public
|
|
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.mozilla.org/MPL/
|
1998-09-09 00:52:38 +00:00
|
|
|
*
|
1999-11-02 01:51:54 +00:00
|
|
|
* Software distributed under the License is distributed on an "AS
|
|
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
|
|
* implied. See the License for the specific language governing
|
|
|
|
* rights and limitations under the License.
|
1998-09-09 00:52:38 +00:00
|
|
|
*
|
|
|
|
* The Original Code is the Grendel mail/news client.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
1999-11-02 01:51:54 +00:00
|
|
|
* Corporation. Portions created by Netscape are
|
|
|
|
* Copyright (C) 1997 Netscape Communications Corporation. All
|
|
|
|
* Rights Reserved.
|
|
|
|
*
|
|
|
|
* Contributor(s):
|
1998-09-09 00:52:38 +00:00
|
|
|
*
|
|
|
|
* Created: Terry Weissman <terry@netscape.com>, 22 Aug 1997.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package grendel.storage;
|
|
|
|
|
|
|
|
import calypso.util.Assert;
|
|
|
|
import calypso.util.NullJavaEnumeration;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.Enumeration;
|
|
|
|
import java.util.Vector; // Yes, I want the fully synchronized version.
|
|
|
|
|
|
|
|
import javax.mail.Flags;
|
|
|
|
import javax.mail.Folder;
|
|
|
|
import javax.mail.Message;
|
|
|
|
import javax.mail.Store;
|
|
|
|
|
|
|
|
abstract class FolderBase extends Folder implements FolderExtra {
|
|
|
|
Vector fMessages;
|
|
|
|
ByteStringTable fTable;
|
|
|
|
MessageIDTable id_table;
|
|
|
|
Vector observers = new Vector();
|
|
|
|
|
|
|
|
FolderBase(Store s) {
|
|
|
|
super(s);
|
|
|
|
fMessages = new Vector();
|
|
|
|
}
|
|
|
|
|
|
|
|
public synchronized Message getMessage(int msgnum) {
|
|
|
|
ensureLoaded();
|
|
|
|
return (Message) fMessages.elementAt(msgnum - 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public synchronized Message[] getMessages() {
|
|
|
|
ensureLoaded();
|
|
|
|
Message[] result = new Message[fMessages.size()];
|
|
|
|
fMessages.copyInto(result);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
public synchronized Message[] getMessages(int start,
|
|
|
|
int end) {
|
|
|
|
ensureLoaded();
|
|
|
|
Message[] result = new Message[end - start + 1];
|
|
|
|
for (int i=start ; i<=end ; i++) {
|
|
|
|
result[i - start] = (Message) fMessages.elementAt(i - 1);
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
public synchronized Message[] getMessages(int msgnums[]) {
|
|
|
|
ensureLoaded();
|
|
|
|
Message[] result = new Message[msgnums.length];
|
|
|
|
for (int i=msgnums.length - 1 ; i>=0 ; i--) {
|
|
|
|
result[i] = (Message) fMessages.elementAt(msgnums[i] - 1);
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ensureLoaded() {
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Returns the total number of messages in the folder, or -1 if unknown.
|
|
|
|
This includes deleted and unread messages.
|
|
|
|
*/
|
|
|
|
public int getMessageCount() {
|
|
|
|
if (fMessages == null)
|
|
|
|
return -1;
|
|
|
|
else
|
|
|
|
return fMessages.size();
|
|
|
|
}
|
|
|
|
|
|
|
|
void noticeInitialMessage(Message m) {
|
|
|
|
fMessages.addElement(m);
|
|
|
|
// #### How the hell are we supposed to do this?
|
|
|
|
// m.setMessageNumber(fMessages.size() - 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
ByteStringTable getStringTable() {
|
|
|
|
if (fTable == null) {
|
|
|
|
synchronized(this) {
|
|
|
|
// Check again, making sure a different thread didn't just do this.
|
|
|
|
if (fTable == null) {
|
|
|
|
fTable = new ByteStringTable();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return fTable;
|
|
|
|
}
|
|
|
|
|
|
|
|
MessageIDTable getMessageIDTable() {
|
|
|
|
if (id_table == null) {
|
|
|
|
synchronized(this) {
|
|
|
|
// Check again, making sure a different thread didn't just do this.
|
|
|
|
if (id_table == null) {
|
|
|
|
id_table = new MessageIDTable();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return id_table;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// This is just silly. javamail won't let me call this directly, because
|
|
|
|
// they protected the method; I have to put this stupid intermediate call in.
|
|
|
|
void doNotifyMessageChangedListeners(int i, Message message) {
|
|
|
|
notifyMessageChangedListeners(i, message);
|
|
|
|
}
|
|
|
|
|
|
|
|
static Flags permflags = null;
|
|
|
|
public Flags getPermanentFlags() {
|
|
|
|
if (permflags == null) {
|
|
|
|
Flags result = new Flags();
|
|
|
|
for (int i=0 ; i < MessageBase.FLAGDEFS.length ; i++) {
|
|
|
|
if (MessageBase.FLAGDEFS[i].builtin != null)
|
|
|
|
result.add(MessageBase.FLAGDEFS[i].builtin);
|
|
|
|
else
|
|
|
|
result.add(MessageBase.FLAGDEFS[i].non_builtin);
|
|
|
|
}
|
|
|
|
permflags = result;
|
|
|
|
}
|
|
|
|
return permflags;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|