/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ #ifndef FSFILE_H #define FSFILE_H #ifdef EDITOR #include "xp.h" #include "xp_file.h" #include "streams.h" #include "bits.h" // mac seems to need it for garray.h to work. hardts #include "garray.h" // Same as TXP_GrowableArray_pChar Declare_GrowableArray(char,char*) // TXP_GrowableArray_char Declare_GrowableArray(CStreamOutFile,CStreamOutFile *) // TXP_GrowableArray_CStreamOutFile class CFileBackup; Declare_GrowableArray(CFileBackup,CFileBackup *) // TXP_GrowableArray_CFileBackup //----------------------------------------------------------------------- // File based version of ITapeFileSystem //----------------------------------------------------------------------- class CTapeFSFile: public ITapeFileSystem { public: // Give the directory where everything will be saved. CTapeFSFile(char *pDestPathURL,char *pDestURL); virtual ~CTapeFSFile(); virtual intn GetType(); virtual void SetSourceBaseURL( char* pURL ); // See ITapeFileSystem::AddFile(). virtual intn AddFile( char* pURL, char *pMIMEType, int16 iDocCharSetID ); virtual intn GetNumFiles() {return m_srcURLs.Size();} // Simply returns the URL given in AddFile(). Allocated with XP_STRDUP(). virtual char* GetSourceURL(intn iFileIndex); virtual char* GetDestAbsURL(); // iFileIndex must be in {0...GetNumFiles()-1} // Returns URL relative to document, i.e. just the stripped local file name. virtual char* GetDestURL( intn iFileIndex ); virtual char* GetHumanName( intn iFileIndex ) {return GetDestURL(iFileIndex);} virtual char* GetDestPathURL(); virtual XP_Bool IsLocalPersistentFile(intn iFileIndex); virtual XP_Bool FileExists(intn iFileIndex); // Save old file first. virtual IStreamOut *OpenStream( intn iFileIndex ); virtual void CloseStream( intn iFileIndex ); virtual void Complete( XP_Bool bSuccess, EDT_ITapeFileSystemComplete *complete, void *pArg ); void CopyURLInfo(intn iFileIndex, const URL_Struct *pURL); protected: // Can be NULL. char *m_pSrcBaseURL; // These are absolute URLs. TXP_GrowableArray_char m_srcURLs; // All dest filenames relative to pDestPathURL, which is a directory. char *m_pDestPathURL; // The destination filename for the root HTML document. Should be file:// url. char *m_pDestURL; // relative filenames TXP_GrowableArray_char m_destFilenames; TXP_GrowableArray_CStreamOutFile m_streamOuts; TXP_GrowableArray_CFileBackup m_fileBackups; }; //----------------------------------------------------------------------- // HTTP/FTP publish based version of ITapeFileSystem // Similar to CTapeFSFile because it writes to temporary files, // then publishes. //----------------------------------------------------------------------- class CTapeFSPublish: public ITapeFileSystem { public: // Important: If pRemoteURL is a directory, it must end with a slash. // pUsername and pPassword may be NULL. CTapeFSPublish(MWContext *, char *pRemoteURL, char *pUsername, char *pPassword, char *pTempDir); // where to put temp files, in xpURL format, ends in slash. virtual ~CTapeFSPublish(); virtual intn GetType(); virtual void SetSourceBaseURL( char* pURL ); // See ITapeFileSystem::AddFile(). virtual intn AddFile( char* pURL, char *pMIMEType, int16 iDocCharSetID ); virtual intn GetNumFiles() {return m_srcURLs.Size();} // Simply returns the URL given in AddFile(). Allocated with XP_STRDUP(). virtual char* GetSourceURL(intn iFileIndex); virtual char* GetDestAbsURL(); char *GetUsername(); char *GetPassword(); // iFileIndex must be in {0...GetNumFiles()-1} // Returns URL relative to document, i.e. just the stripped local file name. virtual char* GetDestURL( intn iFileIndex ); virtual char* GetHumanName( intn iFileIndex ) {return GetDestURL(iFileIndex);} // Returns the directory on the remote server (with trailing slash) where the document will // be published. Does not contain username or password info. // E.g. http://the_machine/the_directory/ not http://username:password@the_machine/the_directory/ virtual char* GetDestPathURL(); virtual XP_Bool IsLocalPersistentFile(intn iFileIndex); virtual XP_Bool FileExists(intn /* iFileIndex */ ) {return FALSE;} // Save old file first. virtual IStreamOut *OpenStream( intn iFileIndex ); virtual void CloseStream( intn iFileIndex ); // Calls Net_PublishFiles(). virtual void Complete( XP_Bool bSuccess, EDT_ITapeFileSystemComplete *pfComplete, void *pArg ); XP_Bool Verify() {return m_iVerifier == iVerifierKey;} void CopyURLInfo(intn iFileIndex, const URL_Struct *pURL); public: // These are just here to pass data to edt_CTapeFSExit(). EDT_ITapeFileSystemComplete *m_pfComplete; void *m_pArg; private: int32 m_iVerifier; static int32 iVerifierKey; // Makes a new url pointing to a file in the same directory as baseURL, baseURL may also be a // directory, e.g. http://home.netscape.com/ // Uses srcURL to choose the name and returns an absolute URL. char *makeLocal(char *baseURL, char *srcURL); // For call to NET_PublishFiles. MWContext *m_pMWContext; // Can be NULL. char *m_pSrcBaseURL; // These are absolute URLs. TXP_GrowableArray_char m_srcURLs; // final location of the HTML file char *m_pRemoteURL; // {http,ftp}://location char *m_pUsername; char *m_pPassword; // final locations of all the files. Note that element 0 will be a copy of m_pRemoteURL. // These contain username:password information. TXP_GrowableArray_char m_remoteURLs; char *m_pTempDir; // xpURL format. // Absolute platform specific filenames. The temp files. TXP_GrowableArray_char m_tempFilenames; // Streams to write to temp files. TXP_GrowableArray_CStreamOutFile m_streamOuts; // TRUE if http, FALSE if ftp XP_Bool m_bIsHTTP; }; #endif // EDITOR #endif