From d6f856b55badadce61734223122c0482939bc8a5 Mon Sep 17 00:00:00 2001 From: "sspitzer%netscape.com" Date: Tue, 28 Mar 2000 07:44:24 +0000 Subject: [PATCH] HandleLine() should be defined as virtual, as we are overriding it. some more stuff for real subscribe, only for windows right now. general clean up. --- mailnews/local/src/nsParseMailbox.h | 2 + mailnews/local/src/nsPop3Protocol.h | 4 +- mailnews/news/src/nsNewsFolder.cpp | 68 +++++++++++++++------- mailnews/news/src/nsNewsFolder.h | 7 ++- mailnews/news/src/nsNntpIncomingServer.cpp | 36 ++++++++++++ mailnews/news/src/nsNntpIncomingServer.h | 5 +- 6 files changed, 97 insertions(+), 25 deletions(-) diff --git a/mailnews/local/src/nsParseMailbox.h b/mailnews/local/src/nsParseMailbox.h index 735058bde46d..60b2b54f66c2 100644 --- a/mailnews/local/src/nsParseMailbox.h +++ b/mailnews/local/src/nsParseMailbox.h @@ -168,6 +168,8 @@ public: virtual void DoneParsingFolder(nsresult status); virtual void AbortNewHeader(); + + // for nsMsgLineBuffer virtual PRInt32 HandleLine(char *line, PRUint32 line_length); void UpdateDBFolderInfo(); diff --git a/mailnews/local/src/nsPop3Protocol.h b/mailnews/local/src/nsPop3Protocol.h index 90b33b2b947f..d42afde4f8b4 100644 --- a/mailnews/local/src/nsPop3Protocol.h +++ b/mailnews/local/src/nsPop3Protocol.h @@ -260,6 +260,9 @@ public: NS_IMETHOD OnStopRequest(nsIChannel * aChannel, nsISupports * aContext, nsresult aStatus, const PRUnichar* aMsg); NS_IMETHOD Cancel(); // handle stop button + // for nsMsgLineBuffer + virtual PRInt32 HandleLine(char *line, PRUint32 line_length); + private: nsCOMPtr mStringService; @@ -328,7 +331,6 @@ private: PRInt32 SendXsender(); PRInt32 XsenderResponse(); PRInt32 SendRetr(); - PRInt32 HandleLine(char *line, PRUint32 line_length); PRInt32 RetrResponse(nsIInputStream* inputStream, PRUint32 length); PRInt32 TopResponse(nsIInputStream* inputStream, PRUint32 length); diff --git a/mailnews/news/src/nsNewsFolder.cpp b/mailnews/news/src/nsNewsFolder.cpp index 51ca116f0654..995d34910ed9 100644 --- a/mailnews/news/src/nsNewsFolder.cpp +++ b/mailnews/news/src/nsNewsFolder.cpp @@ -65,6 +65,7 @@ #include "nsIWalletService.h" #include "nsIURL.h" #include "nsINntpUrl.h" +#include "nsNewsSummarySpec.h" // we need this because of an egcs 1.0 (and possibly gcc) compiler bug // that doesn't allow you to call ::nsISupports::GetIID() inside of a class @@ -78,8 +79,11 @@ static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID); static NS_DEFINE_CID(kWalletServiceCID, NS_WALLETSERVICE_CID); static NS_DEFINE_CID(kStandardUrlCID, NS_STANDARDURL_CID); -#define PREF_NEWS_MAX_HEADERS_TO_SHOW "news.max_headers_to_show" #define PREF_NEWS_ABBREVIATE_PRETTY_NAMES "news.abbreviate_pretty_name" + +// ###tw This really ought to be the most +// efficient file reading size for the current +// operating system. #define NEWSRC_FILE_BUFFER_SIZE 1024 #define NEWS_SCHEME "news:" @@ -161,6 +165,7 @@ nsMsgNewsFolder::CreateSubFolders(nsFileSpec &path) if (NS_FAILED(rv)) return rv; rv = LoadNewsrcFileAndCreateNewsgroups(); + if (NS_FAILED(rv)) return rv; } else { #ifdef DEBUG_NEWS @@ -550,8 +555,26 @@ NS_IMETHODIMP nsMsgNewsFolder::CreateSubfolder(const PRUnichar *uninewsgroupname NS_IMETHODIMP nsMsgNewsFolder::Delete() { - NS_ASSERTION(0,"Delete not implemented"); - return NS_ERROR_NOT_IMPLEMENTED; + nsresult rv = GetDatabase(nsnull); + + if(NS_SUCCEEDED(rv)) { + mDatabase->ForceClosed(); + mDatabase = null_nsCOMPtr(); + } + + nsCOMPtr pathSpec; + rv = GetPath(getter_AddRefs(pathSpec)); + if (NS_FAILED(rv)) return rv; + + nsFileSpec path; + rv = pathSpec->GetFileSpec(&path); + if (NS_FAILED(rv)) return rv; + + // Remove summary file. + nsNewsSummarySpec summarySpec(path); + summarySpec.Delete(PR_FALSE); + + return NS_OK; } NS_IMETHODIMP nsMsgNewsFolder::Rename(const PRUnichar *newName) @@ -910,34 +933,29 @@ nsMsgNewsFolder::LoadNewsrcFileAndCreateNewsgroups() rv = mNewsrcFilePath->Exists(&exists); if (NS_FAILED(rv)) return rv; - // it is ok for the newsrc file to not exist yet - if (!exists) return NS_OK; + if (!exists) { +#ifdef DEBUG_NEWS + printf("it is ok for the newsrc file to not exist yet\n"); +#endif + return NS_OK; + } nsInputFileStream newsrcStream(mNewsrcFilePath); PRInt32 numread = 0; - if (NS_FAILED(m_inputStream.GrowBuffer(NEWSRC_FILE_BUFFER_SIZE))) { -#ifdef DEBUG_NEWS - printf("GrowBuffer failed\n"); -#endif + if (NS_FAILED(m_newsrcInputStream.GrowBuffer(NEWSRC_FILE_BUFFER_SIZE))) { return NS_ERROR_FAILURE; } while (1) { - numread = newsrcStream.read(m_inputStream.GetBuffer(), NEWSRC_FILE_BUFFER_SIZE); -#ifdef DEBUG_NEWS - printf("numread == %d\n", numread); -#endif + numread = newsrcStream.read(m_newsrcInputStream.GetBuffer(), NEWSRC_FILE_BUFFER_SIZE); if (numread == 0) { break; } else { - rv = BufferInput(m_inputStream.GetBuffer(), numread); + rv = BufferInput(m_newsrcInputStream.GetBuffer(), numread); if (NS_FAILED(rv)) { -#ifdef DEBUG_NEWS - printf("bufferInput did not return NS_OK\n"); -#endif break; } } @@ -951,16 +969,24 @@ nsMsgNewsFolder::LoadNewsrcFileAndCreateNewsgroups() PRInt32 nsMsgNewsFolder::HandleLine(char* line, PRUint32 line_size) +{ + return HandleNewsrcLine(line, line_size); +} + +PRInt32 +nsMsgNewsFolder::HandleNewsrcLine(char* line, PRUint32 line_size) { nsresult rv; -#ifdef DEBUG_NEWS - printf("nsMsgNewsFolder::HandleLine(%s,%d)\n",line,line_size); -#endif + /* guard against blank line lossage */ if (line[0] == '#' || line[0] == CR || line[0] == LF) return 0; line[line_size] = 0; +#ifdef DEBUG_NEWS_ + printf("nsMsgNewsFolder::HandleNewsrcLine(%s,%d)\n",line,line_size); +#endif + if ((line[0] == 'o' || line[0] == 'O') && !PL_strncasecmp (line, "options", 7)) { return RememberLine(line); @@ -1057,7 +1083,7 @@ nsMsgNewsFolder::HandleLine(char* line, PRUint32 line_size) if (!info) { // autosubscribe, if we haven't seen this one. char* groupLine = PR_smprintf("%s:", fullname); if (groupLine) { - HandleLine(groupLine, PL_strlen(groupLine)); + HandleNewsrcLine(groupLine, PL_strlen(groupLine)); PR_FREEIF(groupLine); groupLine = nsnull; } diff --git a/mailnews/news/src/nsNewsFolder.h b/mailnews/news/src/nsNewsFolder.h index 10c143fddc9c..eb7c8efb6798 100644 --- a/mailnews/news/src/nsNewsFolder.h +++ b/mailnews/news/src/nsNewsFolder.h @@ -94,6 +94,9 @@ public: NS_IMETHOD GetCanRename(PRBool *aResult); NS_IMETHOD OnReadChanged(nsIDBChangeListener * aInstigator); + // for nsMsgLineBuffer + virtual PRInt32 HandleLine(char *line, PRUint32 line_size); + protected: nsresult AbbreviatePrettyName(PRUnichar ** prettyName, PRInt32 fullwords); nsresult ParseFolder(nsFileSpec& path); @@ -106,11 +109,11 @@ protected: nsresult RememberUnsubscribedGroup(const char *newsgroup, const char *setStr); nsresult ForgetLine(void); - PRInt32 HandleLine(char *line, PRUint32 line_size); + PRInt32 HandleNewsrcLine(char *line, PRUint32 line_size); virtual const char *GetIncomingServerType() {return "nntp";} virtual nsresult CreateBaseMessageURI(const char *aURI); - nsByteArray m_inputStream; + nsByteArray m_newsrcInputStream; protected: PRUint32 mExpungedBytes; diff --git a/mailnews/news/src/nsNntpIncomingServer.cpp b/mailnews/news/src/nsNntpIncomingServer.cpp index cf0d51ff3af7..f55ec10971c7 100644 --- a/mailnews/news/src/nsNntpIncomingServer.cpp +++ b/mailnews/news/src/nsNntpIncomingServer.cpp @@ -31,6 +31,14 @@ #include "nsIFileSpec.h" #include "nsFileStream.h" +// sorry, unix & mac will have to wait for tomorrow. camelot is down. +#if defined(XP_WIN) +#define HAVE_REAL_SUBSCRIBE 1 +#endif + +#ifdef HAVE_REAL_SUBSCRIBE +#include "nsISubscribeDialogListener.h" +#endif #ifdef DEBUG_seth #define DO_HASHING_OF_HOSTNAME 1 #endif /* DEBUG_seth */ @@ -52,9 +60,16 @@ static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID); static NS_DEFINE_IID(kIFileLocatorIID, NS_IFILELOCATOR_IID); static NS_DEFINE_CID(kFileLocatorCID, NS_FILELOCATOR_CID); +#ifdef HAVE_REAL_SUBSCRIBE +NS_IMPL_ISUPPORTS_INHERITED2(nsNntpIncomingServer, + nsMsgIncomingServer, + nsINntpIncomingServer, + nsISubscribeDialogMaster); +#else NS_IMPL_ISUPPORTS_INHERITED(nsNntpIncomingServer, nsMsgIncomingServer, nsINntpIncomingServer); +#endif nsNntpIncomingServer::nsNntpIncomingServer() @@ -295,3 +310,24 @@ nsNntpIncomingServer::CloseCachedConnections() { return WriteNewsrcFile(); } + +#ifdef HAVE_REAL_SUBSCRIBE +NS_IMETHODIMP +nsNntpIncomingServer::PopulateSubscribeDialog(nsISubscribeDialogListener *listener) +{ + nsresult rv; + PRInt32 i; + if (!listener) return NS_ERROR_FAILURE; + + nsAutoString name; + + // simple test code for now. + for (i=0;i<1000;i++) { + name = ""; + name.Append(i); + rv = listener->AddItem(name.GetUnicode(),PR_FALSE,i+2); + if (NS_FAILED(rv)) return rv; + } + return NS_OK; +} +#endif diff --git a/mailnews/news/src/nsNntpIncomingServer.h b/mailnews/news/src/nsNntpIncomingServer.h index fd1a3c220c26..1fa9d395edae 100644 --- a/mailnews/news/src/nsNntpIncomingServer.h +++ b/mailnews/news/src/nsNntpIncomingServer.h @@ -27,6 +27,7 @@ #include "nscore.h" #include "nsMsgIncomingServer.h" +#include "nsISubscribeDialogMaster.h" #include "nsIPref.h" @@ -36,12 +37,14 @@ /* get some implementation from nsMsgIncomingServer */ class nsNntpIncomingServer : public nsMsgIncomingServer, - public nsINntpIncomingServer + public nsINntpIncomingServer, + public nsISubscribeDialogMaster { public: NS_DECL_ISUPPORTS_INHERITED NS_DECL_NSINNTPINCOMINGSERVER + NS_DECL_NSISUBSCRIBEDIALOGMASTER nsNntpIncomingServer(); virtual ~nsNntpIncomingServer();