diff --git a/mozilla/configure.in b/mozilla/configure.in index 99b9e4765dc..1f604ed5d1a 100644 --- a/mozilla/configure.in +++ b/mozilla/configure.in @@ -3974,6 +3974,8 @@ fi AC_DEFINE(JS_THREADSAFE) AC_DEFINE(LAYERS) +AC_DEFINE(HAVE_MOVEMAIL) + # Used for LD_LIBRARY_PATH of run_viewer target LIBS_PATH= diff --git a/mozilla/mailnews/base/src/nsMessengerMigrator.cpp b/mozilla/mailnews/base/src/nsMessengerMigrator.cpp index 7e6628dc444..b7b4cc98fb4 100644 --- a/mozilla/mailnews/base/src/nsMessengerMigrator.cpp +++ b/mozilla/mailnews/base/src/nsMessengerMigrator.cpp @@ -1186,9 +1186,11 @@ nsMessengerMigrator::MigrateMovemailAccount(nsIMsgIdentity *identity) rv = m_prefs->CopyCharPref(PREF_4X_MAIL_POP_NAME, getter_Copies(username)); if (NS_FAILED(rv)) return rv; - // for right now, use "none". eventually, we'll have "movemail" + // + // create the server + // rv = accountManager->CreateIncomingServer(username, MOVEMAIL_FAKE_HOST_NAME, - "none", getter_AddRefs(server)); + "movemail", getter_AddRefs(server)); if (NS_FAILED(rv)) return rv; // create the identity diff --git a/mozilla/mailnews/base/src/nsMessengerMigrator.h b/mozilla/mailnews/base/src/nsMessengerMigrator.h index 4a90da2be94..bdb9cf7294b 100644 --- a/mozilla/mailnews/base/src/nsMessengerMigrator.h +++ b/mozilla/mailnews/base/src/nsMessengerMigrator.h @@ -65,10 +65,6 @@ #endif /* XP_UNIX || XP_BEOS */ -#ifdef XP_UNIX -#define HAVE_MOVEMAIL 1 -#endif /* HAVE_MOVEMAIL */ - class nsMessengerMigrator : public nsIMessengerMigrator, public nsIObserver { diff --git a/mozilla/mailnews/local/build/nsMsgLocalCID.h b/mozilla/mailnews/local/build/nsMsgLocalCID.h index 1c009f0c6cb..2a5b6a47314 100644 --- a/mozilla/mailnews/local/build/nsMsgLocalCID.h +++ b/mozilla/mailnews/local/build/nsMsgLocalCID.h @@ -18,6 +18,7 @@ * Rights Reserved. * * Contributor(s): + * Adam D. Moss */ #ifndef nsMsgLocalCID_h__ @@ -54,6 +55,20 @@ 0xd2876e51, 0xe62c, 0x11d2, \ {0xb7, 0xfc, 0x0, 0x80, 0x5f, 0x5, 0xff, 0xa5 }} +#ifdef HAVE_MOVEMAIL +// +// nsMovemailIncomingServer +// +#define NS_MOVEMAILINCOMINGSERVER_CONTRACTID \ + NS_MSGINCOMINGSERVER_CONTRACTID_PREFIX "movemail" + +#define NS_MOVEMAILINCOMINGSERVER_CID \ +{ /* efbb77e4-1dd2-11b2-bbcf-961563396fec */ \ + 0xefbb77e4, 0x1dd2, 0x11b2, \ + {0xbb, 0xcf, 0x96, 0x15, 0x63, 0x39, 0x6f, 0xec }} + +#endif /* HAVE_MOVEMAIL */ + // // nsNoIncomingServer // @@ -143,6 +158,23 @@ 0x75b63b46, 0x1dd2, 0x11b2, \ { 0x98, 0x73, 0xbb, 0x37, 0x5e, 0x15, 0x50, 0xfa }} +#ifdef HAVE_MOVEMAIL +// +// nsMovemailService +// + +#define NS_MOVEMAILSERVICE_CONTRACTID \ + "component://netscape/messenger/movemailservice" + +#define NS_MOVEMAILPROTOCOLINFO_CONTRACTID \ + NS_MSGPROTOCOLINFO_CONTRACTID_PREFIX "movemail" + +#define NS_MOVEMAILSERVICE_CID \ +{ /* 0e4db62e-1dd2-11b2-a5e4-f128fe4f1b69 */ \ + 0x0e4db62e, 0x1dd2, 0x11b2, \ + { 0xa5, 0xe4, 0xf1, 0x28, 0xfe, 0x4f, 0x1b, 0x69 }} +#endif /* HAVE_MOVEMAIL */ + // // nsParseMailMsgState // diff --git a/mozilla/mailnews/local/build/nsMsgLocalFactory.cpp b/mozilla/mailnews/local/build/nsMsgLocalFactory.cpp index bfd5eb8d9d1..a89515b9b39 100644 --- a/mozilla/mailnews/local/build/nsMsgLocalFactory.cpp +++ b/mozilla/mailnews/local/build/nsMsgLocalFactory.cpp @@ -19,6 +19,7 @@ * * Contributor(s): * Pierre Phaneuf + * Adam D. Moss */ #include "msgCore.h" // for pre-compiled headers... @@ -33,6 +34,10 @@ #include "nsLocalMailFolder.h" #include "nsParseMailbox.h" #include "nsPop3Service.h" +#ifdef HAVE_MOVEMAIL +#include "nsMovemailService.h" +#include "nsMovemailIncomingServer.h" +#endif /* HAVE_MOVEMAIL */ #include "nsNoneService.h" #include "nsPop3IncomingServer.h" #include "nsNoIncomingServer.h" @@ -44,6 +49,10 @@ static NS_DEFINE_CID(kMailboxParserCID, NS_MAILBOXPARSER_CID); static NS_DEFINE_CID(kMailboxServiceCID, NS_MAILBOXSERVICE_CID); static NS_DEFINE_CID(kLocalMailFolderResourceCID, NS_LOCALMAILFOLDERRESOURCE_CID); static NS_DEFINE_CID(kPop3ServiceCID, NS_POP3SERVICE_CID); +#ifdef HAVE_MOVEMAIL +static NS_DEFINE_CID(kMovemailServiceCID, NS_MOVEMAILSERVICE_CID); +static NS_DEFINE_CID(kMovemailIncomingServerCID, NS_MOVEMAILINCOMINGSERVER_CID); +#endif /* HAVE_MOVEMAIL */ static NS_DEFINE_CID(kNoneServiceCID, NS_NONESERVICE_CID); static NS_DEFINE_CID(kPop3UrlCID, NS_POP3URL_CID); static NS_DEFINE_CID(kPop3IncomingServerCID, NS_POP3INCOMINGSERVER_CID); @@ -59,10 +68,16 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsPop3URL) NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgMailboxParser) NS_GENERIC_FACTORY_CONSTRUCTOR(nsMailboxService) NS_GENERIC_FACTORY_CONSTRUCTOR(nsPop3Service) +#ifdef HAVE_MOVEMAIL +NS_GENERIC_FACTORY_CONSTRUCTOR(nsMovemailService) +#endif /* HAVE_MOVEMAIL */ NS_GENERIC_FACTORY_CONSTRUCTOR(nsNoneService) NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgLocalMailFolder) NS_GENERIC_FACTORY_CONSTRUCTOR(nsParseMailMessageState) NS_GENERIC_FACTORY_CONSTRUCTOR(nsPop3IncomingServer) +#ifdef HAVE_MOVEMAIL +NS_GENERIC_FACTORY_CONSTRUCTOR(nsMovemailIncomingServer) +#endif /* HAVE_MOVEMAIL */ NS_GENERIC_FACTORY_CONSTRUCTOR(nsNoIncomingServer) NS_GENERIC_FACTORY_CONSTRUCTOR(nsLocalStringService) @@ -88,10 +103,16 @@ protected: nsCOMPtr mMailboxParserFactory; nsCOMPtr mMailboxServiceFactory; nsCOMPtr mPop3ServiceFactory; +#ifdef HAVE_MOVEMAIL + nsCOMPtr mMovemailServiceFactory; +#endif /* HAVE_MOVEMAIL */ nsCOMPtr mNoneServiceFactory; nsCOMPtr mLocalMailFolderFactory; nsCOMPtr mParseMailMsgStateFactory; nsCOMPtr mPop3IncomingServerFactory; +#ifdef HAVE_MOVEMAIL + nsCOMPtr mMovemailIncomingServerFactory; +#endif /* HAVE_MOVEMAIL */ nsCOMPtr mNoIncomingServerFactory; nsCOMPtr mLocalStringBundleFactory; }; @@ -129,10 +150,16 @@ void nsMsgLocalModule::Shutdown() mMailboxParserFactory = null_nsCOMPtr(); mMailboxServiceFactory = null_nsCOMPtr(); mPop3ServiceFactory = null_nsCOMPtr(); +#ifdef HAVE_MOVEMAIL + mMovemailServiceFactory = null_nsCOMPtr(); +#endif /* HAVE_MOVEMAIL */ mNoneServiceFactory = null_nsCOMPtr(); mLocalMailFolderFactory = null_nsCOMPtr(); mParseMailMsgStateFactory = null_nsCOMPtr(); mPop3IncomingServerFactory = null_nsCOMPtr(); +#ifdef HAVE_MOVEMAIL + mMovemailIncomingServerFactory = null_nsCOMPtr(); +#endif /* HAVE_MOVEMAIL */ mNoIncomingServerFactory = null_nsCOMPtr(); mLocalStringBundleFactory = null_nsCOMPtr(); } @@ -193,6 +220,14 @@ NS_IMETHODIMP nsMsgLocalModule::GetClassObject(nsIComponentManager *aCompMgr, rv = NS_NewGenericFactory(getter_AddRefs(mPop3ServiceFactory), &nsPop3ServiceConstructor); fact = mPop3ServiceFactory; } +#ifdef HAVE_MOVEMAIL + else if (aClass.Equals(kMovemailServiceCID)) + { + if (!mMovemailServiceFactory) + rv = NS_NewGenericFactory(getter_AddRefs(mMovemailServiceFactory), &nsMovemailServiceConstructor); + fact = mMovemailServiceFactory; + } +#endif /* HAVE_MOVEMAIL */ else if (aClass.Equals(kNoneServiceCID)) { if (!mNoneServiceFactory) @@ -217,6 +252,14 @@ NS_IMETHODIMP nsMsgLocalModule::GetClassObject(nsIComponentManager *aCompMgr, rv = NS_NewGenericFactory(getter_AddRefs(mPop3IncomingServerFactory), &nsPop3IncomingServerConstructor); fact = mPop3IncomingServerFactory; } +#ifdef HAVE_MOVEMAIL + else if (aClass.Equals(kMovemailIncomingServerCID)) + { + if (!mMovemailIncomingServerFactory) + rv = NS_NewGenericFactory(getter_AddRefs(mMovemailIncomingServerFactory), &nsMovemailIncomingServerConstructor); + fact = mMovemailIncomingServerFactory; + } +#endif /* HAVE_MOVEMAIL */ else if (aClass.Equals(kNoIncomingServerCID)) { if (!mNoIncomingServerFactory) @@ -264,14 +307,26 @@ static Components gComponents[] = { NS_POP3SERVICE_CONTRACTID2 }, { "None Service", &kNoneServiceCID, NS_NONESERVICE_CONTRACTID }, +#ifdef HAVE_MOVEMAIL + { "Movemail Service", &kMovemailServiceCID, + NS_MOVEMAILSERVICE_CONTRACTID }, +#endif /* HAVE_MOVEMAIL */ { "pop3 Protocol Information", &kPop3ServiceCID, NS_POP3PROTOCOLINFO_CONTRACTID }, { "none Protocol Information", &kNoneServiceCID, NS_NONEPROTOCOLINFO_CONTRACTID }, +#ifdef HAVE_MOVEMAIL + { "movemail Protocol Information", &kMovemailServiceCID, + NS_MOVEMAILPROTOCOLINFO_CONTRACTID }, +#endif /* HAVE_MOVEMAIL */ { "Local Mail Folder Resource Factory", &kLocalMailFolderResourceCID, NS_LOCALMAILFOLDERRESOURCE_CONTRACTID }, { "Pop3 Incoming Server", &kPop3IncomingServerCID, NS_POP3INCOMINGSERVER_CONTRACTID }, +#ifdef HAVE_MOVEMAIL + { "Movemail Incoming Server", &kMovemailIncomingServerCID, + NS_MOVEMAILINCOMINGSERVER_CONTRACTID }, +#endif /* HAVE_MOVEMAIL */ { "No Incoming Server", &kNoIncomingServerCID, NS_NOINCOMINGSERVER_CONTRACTID }, { "Parse MailMessage State", &kParseMailMsgStateCID, diff --git a/mozilla/mailnews/local/public/Makefile.in b/mozilla/mailnews/local/public/Makefile.in index 2624636539c..5362b25a2e3 100644 --- a/mozilla/mailnews/local/public/Makefile.in +++ b/mozilla/mailnews/local/public/Makefile.in @@ -38,7 +38,9 @@ XPIDLSRCS = \ nsIMsgParseMailMsgState.idl \ nsINoIncomingServer.idl \ nsINoneService.idl \ - nsIMsgLocalMailFolder.idl \ + nsIMovemailService.idl \ + nsIMovemailIncomingServer.idl \ + nsIMsgLocalMailFolder.idl \ nsILocalMailIncomingServer.idl \ $(NULL) diff --git a/mozilla/mailnews/local/public/nsIMovemailIncomingServer.idl b/mozilla/mailnews/local/public/nsIMovemailIncomingServer.idl new file mode 100644 index 00000000000..e69f5423121 --- /dev/null +++ b/mozilla/mailnews/local/public/nsIMovemailIncomingServer.idl @@ -0,0 +1,30 @@ +/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape 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/NPL/ + * + * 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. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Adam D. Moss + */ + +#include "nsISupports.idl" +#include "nsIFileSpec.idl" + +[scriptable, uuid(0dbfa510-1dd2-11b2-9f0e-849c5a241ab6)] +interface nsIMovemailIncomingServer : nsISupports { +}; + diff --git a/mozilla/mailnews/local/public/nsIMovemailService.idl b/mozilla/mailnews/local/public/nsIMovemailService.idl new file mode 100644 index 00000000000..b2e418e7a02 --- /dev/null +++ b/mozilla/mailnews/local/public/nsIMovemailService.idl @@ -0,0 +1,41 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape 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/NPL/ + * + * 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. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Seth Spitzer + * Adam D. Moss + */ + +#include "nsISupports.idl" +#include "nsIUrlListener.idl" +#include "nsIMovemailIncomingServer.idl" +#include "nsIMsgFolder.idl" + +[scriptable, uuid(4c7786a4-1dd2-11b2-9fbe-c59d742de59b)] +interface nsIMovemailService : nsISupports { + + nsIURI GetNewMail(in nsIMsgWindow aMsgWindow, + in nsIUrlListener aUrlListener, + in nsIMsgFolder aMsgFolder, + in nsIMovemailIncomingServer movemailServer); + + nsIURI CheckForNewMail(in nsIUrlListener aUrlListener, + in nsIMsgFolder inbox, + in nsIMovemailIncomingServer movemailServer); +}; diff --git a/mozilla/mailnews/local/src/Makefile.in b/mozilla/mailnews/local/src/Makefile.in index 479aad1cbb6..e3f638a5ff3 100644 --- a/mozilla/mailnews/local/src/Makefile.in +++ b/mozilla/mailnews/local/src/Makefile.in @@ -45,7 +45,9 @@ CPPSRCS = \ nsLocalUndoTxn.cpp \ nsLocalStringBundle.cpp \ nsNoIncomingServer.cpp \ - nsNoneService.cpp \ + nsMovemailIncomingServer.cpp \ + nsNoneService.cpp \ + nsMovemailService.cpp \ $(NULL) EXPORTS = \ diff --git a/mozilla/mailnews/local/src/nsLocalMailFolder.cpp b/mozilla/mailnews/local/src/nsLocalMailFolder.cpp index a60eff689db..af85845d8f2 100644 --- a/mozilla/mailnews/local/src/nsLocalMailFolder.cpp +++ b/mozilla/mailnews/local/src/nsLocalMailFolder.cpp @@ -55,8 +55,14 @@ #include "nsMsgUtils.h" #include "nsLocalUtils.h" #include "nsIPop3IncomingServer.h" +#ifdef HAVE_MOVEMAIL +#include "nsMovemailIncomingServer.h" +#endif /* HAVE_MOVEMAIL */ #include "nsILocalMailIncomingServer.h" #include "nsIPop3Service.h" +#ifdef HAVE_MOVEMAIL +#include "nsIMovemailService.h" +#endif /* HAVE_MOVEMAIL */ #include "nsIMsgIncomingServer.h" #include "nsMsgBaseCID.h" #include "nsMsgLocalCID.h" @@ -82,6 +88,9 @@ static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID); static NS_DEFINE_CID(kMailboxServiceCID, NS_MAILBOXSERVICE_CID); static NS_DEFINE_CID(kCMailDB, NS_MAILDB_CID); static NS_DEFINE_CID(kCPop3ServiceCID, NS_POP3SERVICE_CID); +#ifdef HAVE_MOVEMAIL +static NS_DEFINE_CID(kCMovemailServiceCID, NS_MOVEMAILSERVICE_CID); +#endif /* HAVE_MOVEMAIL */ static NS_DEFINE_CID(kCopyMessageStreamListenerCID, NS_COPYMESSAGESTREAMLISTENER_CID); static NS_DEFINE_CID(kMsgCopyServiceCID, NS_MSGCOPYSERVICE_CID); static NS_DEFINE_CID(kStandardUrlCID, NS_STANDARDURL_CID); @@ -2863,6 +2872,18 @@ nsMsgLocalMailFolder::GetIncomingServerType() return mType; } +#ifdef HAVE_MOVEMAIL + // next try "movemail" + rv = accountManager->FindServer(userName, + hostName, + "movemail", + getter_AddRefs(server)); + if (NS_SUCCEEDED(rv) && server) { + mType = "movemail"; + return mType; + } +#endif /* HAVE_MOVEMAIL */ + return ""; } diff --git a/mozilla/mailnews/local/src/nsLocalUtils.cpp b/mozilla/mailnews/local/src/nsLocalUtils.cpp index a7d35c7ad69..2b448a5e482 100644 --- a/mozilla/mailnews/local/src/nsLocalUtils.cpp +++ b/mozilla/mailnews/local/src/nsLocalUtils.cpp @@ -64,6 +64,20 @@ nsGetMailboxServer(const char *username, const char *hostname, nsIMsgIncomingSer return rv; } +#ifdef HAVE_MOVEMAIL + // find all movemail "servers" matching the given hostname + nsCOMPtr movemail_server; + rv = accountManager->FindServer(username, + hostname, + "movemail", + getter_AddRefs(movemail_server)); + if (NS_SUCCEEDED(rv)) { + *aResult = movemail_server; + NS_ADDREF(*aResult); + return rv; + } +#endif /* HAVE_MOVEMAIL */ + // if that fails, look for the pop hosts matching the given hostname nsCOMPtr pop3_server; if (NS_FAILED(rv)) { @@ -78,7 +92,7 @@ nsGetMailboxServer(const char *username, const char *hostname, nsIMsgIncomingSer } } - // if you fail after looking at all "pop3" and all "none" servers, you fail. + // if you fail after looking at all "pop3", "movemail" and "none" servers, you fail. return rv; } @@ -86,7 +100,6 @@ static nsresult nsLocalURI2Server(const char* uriStr, nsIMsgIncomingServer ** aResult) { - nsresult rv; // start parsing the uriStr @@ -169,7 +182,7 @@ nsLocalURI2Path(const char* rootURI, const char* uriStr, nsCOMPtr server; rv = nsLocalURI2Server(uriStr, getter_AddRefs(server)); - + if (NS_FAILED(rv)) return rv; @@ -191,7 +204,7 @@ nsLocalURI2Path(const char* rootURI, const char* uriStr, nsAutoString sbdSep; rv = nsGetMailFolderSeparator(sbdSep); - + nsCAutoString newPath(""); char *unescaped = nsCRT::strdup(curPos); // Unescape folder name @@ -205,6 +218,7 @@ nsLocalURI2Path(const char* rootURI, const char* uriStr, pathResult+=newPath.GetBuffer(); } + return NS_OK; } diff --git a/mozilla/mailnews/local/src/nsMovemailIncomingServer.cpp b/mozilla/mailnews/local/src/nsMovemailIncomingServer.cpp new file mode 100644 index 00000000000..152506f0188 --- /dev/null +++ b/mozilla/mailnews/local/src/nsMovemailIncomingServer.cpp @@ -0,0 +1,182 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape 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/NPL/ + * + * 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. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Adam D. Moss + */ + +#include "prmem.h" +#include "plstr.h" +#include "prprf.h" + +//#include "nsCOMPtr.h" +//#include "nsIPref.h" + +#include "nsXPIDLString.h" + +#include "nsMsgLocalCID.h" +#include "nsMsgFolderFlags.h" +#include "nsIFileSpec.h" +#include "nsIPref.h" + +#include "nsIMsgLocalMailFolder.h" + +#include "nsIMovemailService.h" + +#include "msgCore.h" // pre-compiled headers +#include "nsMovemailIncomingServer.h" + + +static NS_DEFINE_CID(kCMovemailServiceCID, NS_MOVEMAILSERVICE_CID); + + +NS_IMPL_ISUPPORTS_INHERITED2(nsMovemailIncomingServer, + nsMsgIncomingServer, + nsIMovemailIncomingServer, + nsILocalMailIncomingServer) + + + +nsMovemailIncomingServer::nsMovemailIncomingServer() +{ + NS_INIT_REFCNT(); +} + +nsMovemailIncomingServer::~nsMovemailIncomingServer() +{ +} + +/*NS_IMPL_SERVERPREF_BOOL(nsMovemailIncomingServer, + AdamIsASillyhead, + "adam_is_a_sillyhead")*/ + +nsresult +nsMovemailIncomingServer::GetLocalStoreType(char **type) +{ + NS_ENSURE_ARG_POINTER(type); + *type = nsCRT::strdup("mailbox"); + return NS_OK; +} + +NS_IMETHODIMP +nsMovemailIncomingServer::SetFlagsOnDefaultMailboxes() +{ + nsresult rv; + + nsCOMPtr rootFolder; + rv = GetRootFolder(getter_AddRefs(rootFolder)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr localFolder = + do_QueryInterface(rootFolder, &rv); + NS_ENSURE_SUCCESS(rv, rv); + + localFolder->SetFlagsOnDefaultMailboxes(MSG_FOLDER_FLAG_INBOX | + MSG_FOLDER_FLAG_SENTMAIL | + MSG_FOLDER_FLAG_DRAFTS | + MSG_FOLDER_FLAG_TEMPLATES | + MSG_FOLDER_FLAG_TRASH | + // hmm? + MSG_FOLDER_FLAG_QUEUE); + return NS_OK; +} + +NS_IMETHODIMP nsMovemailIncomingServer::CreateDefaultMailboxes(nsIFileSpec *path) +{ + nsresult rv; + PRBool exists; + if (!path) return NS_ERROR_NULL_POINTER; + + // todo, use a string bundle for this + + rv =path->AppendRelativeUnixPath("Inbox"); + if (NS_FAILED(rv)) return rv; + rv = path->Exists(&exists); + if (!exists) { + rv = path->Touch(); + if (NS_FAILED(rv)) return rv; + } + + rv =path->SetLeafName("Trash"); + if (NS_FAILED(rv)) return rv; + rv = path->Exists(&exists); + if (!exists) { + rv = path->Touch(); + if (NS_FAILED(rv)) return rv; + } + + rv = path->SetLeafName("Sent"); + if (NS_FAILED(rv)) return rv; + rv = path->Exists(&exists); + if (NS_FAILED(rv)) return rv; + if (!exists) { + rv = path->Touch(); + if (NS_FAILED(rv)) return rv; + } + + rv = path->SetLeafName("Drafts"); + if (NS_FAILED(rv)) return rv; + rv = path->Exists(&exists); + if (NS_FAILED(rv)) return rv; + if (!exists) { + rv = path->Touch(); + if (NS_FAILED(rv)) return rv; + } + + rv = path->SetLeafName("Templates"); + if (NS_FAILED(rv)) return rv; + rv = path->Exists(&exists); + if (NS_FAILED(rv)) return rv; + if (!exists) { + rv = path->Touch(); + if (NS_FAILED(rv)) return rv; + } + + rv = path->SetLeafName("Unsent Messages"); + if (NS_FAILED(rv)) return rv; + rv = path->Exists(&exists); + if (NS_FAILED(rv)) return rv; + if (!exists) { + rv = path->Touch(); + if (NS_FAILED(rv)) return rv; + } + return rv; +} + + +NS_IMETHODIMP +nsMovemailIncomingServer::GetNewMail(nsIMsgWindow *aMsgWindow, + nsIUrlListener *aUrlListener, + nsIMsgFolder *aMsgFolder, + nsIURI **aResult) +{ + nsresult rv; + + NS_WITH_SERVICE(nsIMovemailService, movemailService, + kCMovemailServiceCID, &rv); + + if (NS_FAILED(rv)) return rv; + + rv = movemailService->GetNewMail(aMsgWindow, aUrlListener, + aMsgFolder, this, aResult); + + return rv; +} + + diff --git a/mozilla/mailnews/local/src/nsMovemailIncomingServer.h b/mozilla/mailnews/local/src/nsMovemailIncomingServer.h new file mode 100644 index 00000000000..7ea23c0c0d3 --- /dev/null +++ b/mozilla/mailnews/local/src/nsMovemailIncomingServer.h @@ -0,0 +1,50 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape 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/NPL/ + * + * 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. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Adam D. Moss + */ + +#ifndef __nsMovemailIncomingServer_h +#define __nsMovemailIncomingServer_h + +#include "msgCore.h" +#include "nsIMovemailIncomingServer.h" +#include "nsILocalMailIncomingServer.h" +#include "nsMsgIncomingServer.h" + +/* get some implementation from nsMsgIncomingServer */ +class nsMovemailIncomingServer : public nsMsgIncomingServer, + public nsIMovemailIncomingServer, + public nsILocalMailIncomingServer + +{ +public: + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIMOVEMAILINCOMINGSERVER + NS_DECL_NSILOCALMAILINCOMINGSERVER + + nsMovemailIncomingServer(); + virtual ~nsMovemailIncomingServer(); + + NS_IMETHOD GetLocalStoreType(char * *type); +}; + + +#endif diff --git a/mozilla/mailnews/local/src/nsMovemailService.cpp b/mozilla/mailnews/local/src/nsMovemailService.cpp new file mode 100644 index 00000000000..1e0c416e53b --- /dev/null +++ b/mozilla/mailnews/local/src/nsMovemailService.cpp @@ -0,0 +1,396 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape 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/NPL/ + * + * 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. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Seth Spitzer + * Adam D. Moss + */ + +#include "prenv.h" + +#include "msgCore.h" // precompiled header... + +#include "nsMovemailService.h" +#include "nsIMovemailService.h" +#include "nsIMsgIncomingServer.h" +#include "nsIMovemailIncomingServer.h" +#include "nsIMsgProtocolInfo.h" +#include "nsIMsgMailSession.h" +#include "nsParseMailbox.h" +#include "nsIFolder.h" + +#include "nsFileSpec.h" +#include "nsFileStream.h" + +#include "nsIPref.h" + +#include "nsMsgLocalCID.h" +#include "nsMsgBaseCID.h" +#include "nsXPIDLString.h" +#include "nsCOMPtr.h" + +#include "nsIFileLocator.h" +#include "nsFileLocations.h" + +#define PREF_MAIL_ROOT_MOVEMAIL "mail.root.movemail" + +static NS_DEFINE_CID(kPrefCID, NS_PREF_CID); +static NS_DEFINE_CID(kMsgMailSessionCID, NS_MSGMAILSESSION_CID); +static NS_DEFINE_IID(kIFileLocatorIID, NS_IFILELOCATOR_IID); +static NS_DEFINE_CID(kFileLocatorCID, NS_FILELOCATOR_CID); + +nsMovemailService::nsMovemailService() +{ + NS_INIT_REFCNT(); + //fprintf(stderr, "*** MURRR, new nsMovemailService\n"); +} + +nsMovemailService::~nsMovemailService() +{} + + +NS_IMPL_ISUPPORTS2(nsMovemailService, + nsIMovemailService, + nsIMsgProtocolInfo) + + +NS_IMETHODIMP +nsMovemailService::CheckForNewMail(nsIUrlListener * aUrlListener, + nsIMsgFolder *inbox, + nsIMovemailIncomingServer *movemailServer, + nsIURI ** aURL) +{ + nsresult rv = NS_OK; + + //fprintf(stderr, "*** WOOWOOWOO check\n"); + + return rv; +} + + +// one day we will do mail file locking right here. +nsInputFileStream * Probe_SpoolFilePath(const char *pathStr) +{ + if (!pathStr) return nsnull; + nsInputFileStream * rtnStream = nsnull; + nsFileSpec * filespec = new nsFileSpec(pathStr); + + if (!filespec) + return nsnull; + + if (!filespec->Failed() && + filespec->IsFile()) + { + // fprintf(stderr, "##%s##", filespec->GetLeafName()); + + rtnStream = new nsInputFileStream (*filespec); + + if (rtnStream) { + if (rtnStream->failed() || + !rtnStream->is_open()) { + delete rtnStream; + rtnStream = nsnull; + } + } + } + + delete filespec; + return rtnStream; +} + + +nsresult +nsMovemailService::GetNewMail(nsIMsgWindow *aMsgWindow, + nsIUrlListener *aUrlListener, + nsIMsgFolder *aMsgFolder, + nsIMovemailIncomingServer *movemailServer, + nsIURI ** aURL) +{ + nsresult rv = NS_OK; + + nsCOMPtr in_server = do_QueryInterface(movemailServer); + nsCAutoString wholeboxname; + + if (in_server) { + nsCOMPtr mailDirectory; + + in_server->SetServerBusy(PR_TRUE); + rv = in_server->GetLocalPath(getter_AddRefs(mailDirectory)); + + // FUN STUFF starts here + { + // we now quest for the mail spool file... + nsInputFileStream * spoolfile = nsnull; + + // If $(MAIL) is set then we have things easy. + char * wholeboxname_from_env = PR_GetEnv("MAIL"); + if (wholeboxname_from_env) { + wholeboxname.Assign(wholeboxname_from_env); + spoolfile = Probe_SpoolFilePath(wholeboxname_from_env); + } else { + // Otherwise try to build the mailbox path from the + // username and a number of guessed spool directory + // paths. + char * boxfilename; + boxfilename = PR_GetEnv("USER"); // UNIXy + if (!boxfilename) { + boxfilename = PR_GetEnv("USERNAME"); // WIN32 (!) + } + + if (boxfilename) { + // We have the username which is probably also the + // mailbox file name, so now try to find the mailbox + // in a number of likely places. + + wholeboxname = "/var/spool/mail/"; + wholeboxname += boxfilename; + spoolfile = Probe_SpoolFilePath((const char *)wholeboxname); + + if (!spoolfile) { + wholeboxname = "/usr/spool/mail/"; + wholeboxname += boxfilename; + spoolfile = Probe_SpoolFilePath((const char *)wholeboxname); + } + + if (!spoolfile) { + wholeboxname = "/var/mail/"; + wholeboxname += boxfilename; + spoolfile = Probe_SpoolFilePath((const char *)wholeboxname); + } + + if (!spoolfile) { + wholeboxname = "/usr/mail/"; + wholeboxname += boxfilename; + spoolfile = Probe_SpoolFilePath((const char *)wholeboxname); + } + } + } + + if (!spoolfile) { + //fprintf(stderr, "Nope, no luck getting spool file name at all.\n"); + return NS_ERROR_FAILURE; + } + +#define READBUFSIZE 4096 + char * buffer = (char*)PR_CALLOC(READBUFSIZE); + if (buffer) { + if (!spoolfile->failed()) { + nsresult rv; + nsIOFileStream* m_outFileStream; + nsParseNewMailState *m_newMailParser; + + nsCOMPtr mailDirectory; + rv = in_server->GetLocalPath(getter_AddRefs(mailDirectory)); + if (NS_FAILED(rv)) return rv; + + nsFileSpec fileSpec; + mailDirectory->GetFileSpec(&fileSpec); + fileSpec += "Inbox"; + m_outFileStream = new nsIOFileStream(fileSpec /*, PR_CREATE_FILE */); + if (m_outFileStream) + m_outFileStream->seek(fileSpec.GetFileSize()); + else + return NS_ERROR_UNEXPECTED; + + // create a new mail parser + m_newMailParser = new nsParseNewMailState; + if (m_newMailParser == nsnull) + return NS_ERROR_OUT_OF_MEMORY; + + nsCOMPtr serverFolder; + rv = in_server->GetRootFolder(getter_AddRefs(serverFolder)); + + if (NS_FAILED(rv)) + return rv; + + rv = m_newMailParser->Init(serverFolder, fileSpec, m_outFileStream); + if (NS_FAILED(rv)) + return rv; + + + // MIDDLE of the FUN : consume the mailbox data. + { + int numlines = 0; + + while (!spoolfile->eof() && + !spoolfile->failed() && + spoolfile->is_open()) + { + spoolfile->readline(buffer, + READBUFSIZE-(1+PL_strlen(MSG_LINEBREAK))); + + + PL_strcpy(&buffer[PL_strlen(buffer)], MSG_LINEBREAK); + + // fprintf(stderr, "%d: %s", numlines, buffer); + + if ((numlines>0) && + nsCRT::strncmp(buffer, "From ", 5) == 0) { + numlines = 0; + } + + m_newMailParser->HandleLine(buffer, PL_strlen(buffer)); + *m_outFileStream << buffer; + + numlines++; + + if (numlines == 1) { + PL_strcpy(buffer, "X-Mozilla-Status: 8000" + MSG_LINEBREAK); + m_newMailParser->HandleLine(buffer, + PL_strlen(buffer)); + *m_outFileStream << buffer; + PL_strcpy(buffer, "X-Mozilla-Status2: 00000000" + MSG_LINEBREAK); + m_newMailParser->HandleLine(buffer, + PL_strlen(buffer)); + *m_outFileStream << buffer; + + } + } + } + + + // END + m_outFileStream->flush(); // try this. + m_newMailParser->OnStopRequest(nsnull, nsnull, NS_OK, nsnull); + delete m_outFileStream; + m_outFileStream = 0; + delete m_newMailParser; + + // truncate the spool file here. + nsFileSpec * filespecForTrunc = new nsFileSpec((const char *)wholeboxname); + if (filespecForTrunc) { + filespecForTrunc->Truncate(0); + delete filespecForTrunc; + filespecForTrunc = nsnull; + } + delete spoolfile; + } + + PR_Free(buffer); + } + } + + + in_server->SetServerBusy(PR_FALSE); + } else { + //fprintf(stderr, "*** NONONO get:noserv\n"); + } + + //fprintf(stderr, "*** YEAHYEAHYEAH get\n"); + + return rv; +} + + +NS_IMETHODIMP +nsMovemailService::SetDefaultLocalPath(nsIFileSpec *aPath) +{ + nsresult rv; + NS_WITH_SERVICE(nsIPref, prefs, kPrefCID, &rv); + if (NS_FAILED(rv)) return rv; + + rv = prefs->SetFilePref(PREF_MAIL_ROOT_MOVEMAIL, aPath, PR_FALSE /* set default */); + return rv; +} + +NS_IMETHODIMP +nsMovemailService::GetDefaultLocalPath(nsIFileSpec ** aResult) +{ + nsresult rv; + NS_WITH_SERVICE(nsIPref, prefs, kPrefCID, &rv); + if (NS_FAILED(rv)) return rv; + + rv = prefs->GetFilePref(PREF_MAIL_ROOT_MOVEMAIL, aResult); + if (NS_SUCCEEDED(rv)) return rv; + + NS_WITH_SERVICE(nsIFileLocator, locator, kFileLocatorCID, &rv); + if (NS_FAILED(rv)) return rv; + + rv = locator->GetFileLocation(nsSpecialFileSpec::App_MailDirectory50, aResult); + if (NS_FAILED(rv)) return rv; + + rv = SetDefaultLocalPath(*aResult); + return rv; +} + + +NS_IMETHODIMP +nsMovemailService::GetServerIID(nsIID* *aServerIID) +{ + *aServerIID = new nsIID(NS_GET_IID(nsIMovemailIncomingServer)); + return NS_OK; +} + +NS_IMETHODIMP +nsMovemailService::GetRequiresUsername(PRBool *aRequiresUsername) +{ + NS_ENSURE_ARG_POINTER(aRequiresUsername); + + //fprintf(stderr, ">>> Yah, got asked for info\n"); + + *aRequiresUsername = PR_FALSE; + return NS_OK; +} + +NS_IMETHODIMP +nsMovemailService::GetPreflightPrettyNameWithEmailAddress(PRBool *aPreflightPrettyNameWithEmailAddress) +{ + NS_ENSURE_ARG_POINTER(aPreflightPrettyNameWithEmailAddress); + *aPreflightPrettyNameWithEmailAddress = PR_TRUE; + return NS_OK; +} + +NS_IMETHODIMP +nsMovemailService::GetCanDelete(PRBool *aCanDelete) +{ + NS_ENSURE_ARG_POINTER(aCanDelete); + *aCanDelete = PR_FALSE; + return NS_OK; +} + +NS_IMETHODIMP +nsMovemailService::GetCanDuplicate(PRBool *aCanDuplicate) +{ + NS_ENSURE_ARG_POINTER(aCanDuplicate); + *aCanDuplicate = PR_FALSE; + return NS_OK; +} + +NS_IMETHODIMP +nsMovemailService::GetDefaultCopiesAndFoldersPrefsToServer(PRBool *aDefaultCopiesAndFoldersPrefsToServer) +{ + NS_ENSURE_ARG_POINTER(aDefaultCopiesAndFoldersPrefsToServer); + // when a "movemail" server is created (like "Local Folders") + // the copies and folder prefs for the associated identity + // point to folders on this server. + *aDefaultCopiesAndFoldersPrefsToServer = PR_TRUE; + return NS_OK; +} + +NS_IMETHODIMP +nsMovemailService::GetDefaultServerPort(PRInt32 *aDefaultPort) +{ + NS_ASSERTION(0, "This should probably never be called!"); + NS_ENSURE_ARG_POINTER(aDefaultPort); + *aDefaultPort = -1; + return NS_OK; +} + diff --git a/mozilla/mailnews/local/src/nsMovemailService.h b/mozilla/mailnews/local/src/nsMovemailService.h new file mode 100644 index 00000000000..83c4c499763 --- /dev/null +++ b/mozilla/mailnews/local/src/nsMovemailService.h @@ -0,0 +1,51 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape 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/NPL/ + * + * 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. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): + * Seth Spitzer + * Adam D. Moss + */ + +#ifndef nsMovemailService_h___ +#define nsMovemailService_h___ + +#include "nscore.h" + +#include "nsIMovemailService.h" +#include "nsFileSpec.h" +#include "nsIMsgProtocolInfo.h" + +class nsParseNewMailState; +class nsIFolder; + +class nsMovemailService : public nsIMsgProtocolInfo, public nsIMovemailService +{ +public: + + nsMovemailService(); + virtual ~nsMovemailService(); + + NS_DECL_ISUPPORTS + // NS_DECL_ISUbleh + NS_DECL_NSIMOVEMAILSERVICE + NS_DECL_NSIMSGPROTOCOLINFO + +}; + +#endif /* nsMovemailService_h___ */ diff --git a/mozilla/mailnews/local/src/nsPop3IncomingServer.cpp b/mozilla/mailnews/local/src/nsPop3IncomingServer.cpp index 4dd66194f36..00f290e886f 100644 --- a/mozilla/mailnews/local/src/nsPop3IncomingServer.cpp +++ b/mozilla/mailnews/local/src/nsPop3IncomingServer.cpp @@ -57,9 +57,9 @@ PRUnichar *nsPop3IncomingServer::kTemplatesName = 0; PRUnichar *nsPop3IncomingServer::kUnsentName = 0; NS_IMPL_ISUPPORTS_INHERITED2(nsPop3IncomingServer, - nsMsgIncomingServer, - nsIPop3IncomingServer, - nsILocalMailIncomingServer) + nsMsgIncomingServer, + nsIPop3IncomingServer, + nsILocalMailIncomingServer) nsPop3IncomingServer::nsPop3IncomingServer() { diff --git a/mozilla/mailnews/local/src/nsPop3Protocol.cpp b/mozilla/mailnews/local/src/nsPop3Protocol.cpp index 320b51004c8..092cfd21a21 100644 --- a/mozilla/mailnews/local/src/nsPop3Protocol.cpp +++ b/mozilla/mailnews/local/src/nsPop3Protocol.cpp @@ -2938,7 +2938,7 @@ nsresult nsPop3Protocol::ProcessProtocolState(nsIURI * url, nsIInputStream * aIn { nsCOMPtr server = do_QueryInterface(m_pop3Server); if (server) - server->SetServerBusy(PR_FALSE); // the server is now busy + server->SetServerBusy(PR_FALSE); // the server is now not busy } CloseSocket(); diff --git a/mozilla/profile/pref-migrator/src/nsPrefMigration.cpp b/mozilla/profile/pref-migrator/src/nsPrefMigration.cpp index 9d2a786c3d0..11d04b9b6f6 100644 --- a/mozilla/profile/pref-migrator/src/nsPrefMigration.cpp +++ b/mozilla/profile/pref-migrator/src/nsPrefMigration.cpp @@ -787,8 +787,6 @@ nsPrefMigration::ProcessPrefsCallback(const char* oldProfilePathStr, const char #ifdef HAVE_MOVEMAIL else if (serverType == MOVEMAIL_4X_MAIL_TYPE) { - printf("sorry, movemail not supported yet.\n"); - summaryMailDriveDefault = PR_TRUE; summaryMailDrive = profileDrive; @@ -1021,8 +1019,6 @@ nsPrefMigration::ProcessPrefsCallback(const char* oldProfilePathStr, const char #ifdef HAVE_MOVEMAIL else if (serverType == MOVEMAIL_4X_MAIL_TYPE) { - printf("sorry, movemail not supported yet.\n"); - rv = newMOVEMAILMailPath->Exists(&exists); if (NS_FAILED(rv)) return rv; if (!exists) {