From: Václav Slavík Date: Fri, 29 Aug 2003 22:54:45 +0000 (+0000) Subject: removed caching from wxInternetFSHandler X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/3caa34b77139100fb0fa8535f47eb8893cd7ec1c removed caching from wxInternetFSHandler git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23299 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/toback24.txt b/docs/toback24.txt index cda20b982f..8167b5a595 100644 --- a/docs/toback24.txt +++ b/docs/toback24.txt @@ -250,6 +250,20 @@ Checking in docs/changes.txt; new revision: 1.299; previous revision: 1.298 +26. Remove caching from wxInternetFSHandler + +Notes: leave in m_Chache variable (no longer used) and destructor (now empty) + in order to preserve binary compatibility +Checking in fs_inet.h; +/pack/cvsroots/wxwindows/wxWindows/include/wx/fs_inet.h,v <-- fs_inet.h +new revision: 1.15; previous revision: 1.14 +Checking in fs_inet.cpp; +/pack/cvsroots/wxwindows/wxWindows/src/common/fs_inet.cpp,v <-- fs_inet.cpp +new revision: 1.30; previous revision: 1.29 + + + + TODO for 2.4 (items that are not backports) =========================================== diff --git a/include/wx/fs_inet.h b/include/wx/fs_inet.h index 3bafeed289..818dd7eb99 100644 --- a/include/wx/fs_inet.h +++ b/include/wx/fs_inet.h @@ -6,18 +6,6 @@ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// -/* - -REMARKS : - -This FS creates local cache (in /tmp directory). The cache is freed -on program exit. - -Size of cache is limited to cca 1000 items (due to GetTempFileName -limitation) - - -*/ #ifndef _WX_FS_INET_H_ #define _WX_FS_INET_H_ @@ -29,25 +17,17 @@ limitation) #if wxUSE_FILESYSTEM && wxUSE_FS_INET && wxUSE_STREAMS && wxUSE_SOCKETS -#ifndef WXPRECOMP - #include "wx/hash.h" -#endif - #include "wx/filesys.h" -//-------------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // wxInternetFSHandler -//-------------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- class WXDLLIMPEXP_NET wxInternetFSHandler : public wxFileSystemHandler { - private: - wxHashTable m_Cache; - public: virtual bool CanOpen(const wxString& location); virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location); - ~wxInternetFSHandler(); }; #endif diff --git a/src/common/fs_inet.cpp b/src/common/fs_inet.cpp index 4356b665ea..8fe70604f9 100644 --- a/src/common/fs_inet.cpp +++ b/src/common/fs_inet.cpp @@ -6,19 +6,6 @@ // Licence: wxWindows Licence ///////////////////////////////////////////////////////////////////////////// -/* - -REMARKS : - -This FS creates local cache (in /tmp directory). The cache is freed -on program exit. - -Size of cache is limited to cca 1000 items (due to GetTempFileName -limitation) - - -*/ - #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "fs_inet.h" #endif @@ -45,26 +32,37 @@ limitation) #include "wx/fs_inet.h" #include "wx/module.h" -class wxInetCacheNode : public wxObject +// ---------------------------------------------------------------------------- +// Helper classes +// ---------------------------------------------------------------------------- + +// This stream deletes the file when destroyed +class wxTemporaryFileInputStream : public wxFileInputStream { - private: - wxString m_Temp; - wxString m_Mime; +public: + wxTemporaryFileInputStream(const wxString& filename) : + wxFileInputStream(filename), m_filename(filename) {} + + ~wxTemporaryFileInputStream() + { + // NB: copied from wxFileInputStream dtor, we need to do it before + // wxRemoveFile + if (m_file_destroy) + { + delete m_file; + m_file_destroy = false; + } + wxRemoveFile(m_filename); + } - public: - wxInetCacheNode(const wxString& l, const wxString& m) : wxObject() {m_Temp = l; m_Mime = m;} - const wxString& GetTemp() const {return m_Temp;} - const wxString& GetMime() const {return m_Mime;} +protected: + wxString m_filename; }; - - - -//-------------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // wxInternetFSHandler -//-------------------------------------------------------------------------------- - +// ---------------------------------------------------------------------------- static wxString StripProtocolAnchor(const wxString& location) { @@ -84,7 +82,6 @@ static wxString StripProtocolAnchor(const wxString& location) } - bool wxInternetFSHandler::CanOpen(const wxString& location) { wxString p = GetProtocol(location); @@ -98,76 +95,44 @@ bool wxInternetFSHandler::CanOpen(const wxString& location) } -wxFSFile* wxInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& location) +wxFSFile* wxInternetFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), + const wxString& location) { - wxString right = GetProtocol(location) + wxT(":") + StripProtocolAnchor(location); - wxInputStream *s; - wxString content; - wxInetCacheNode *info; + wxString right = + GetProtocol(location) + wxT(":") + StripProtocolAnchor(location); - info = (wxInetCacheNode*) m_Cache.Get(right); - - // Add item into cache: - if (info == NULL) + wxURL url(right); + if (url.GetError() == wxURL_NOERR) { - wxURL url(right); - if (url.GetError() == wxURL_NOERR) + wxInputStream *s = url.GetInputStream(); + wxString content = url.GetProtocol().GetContentType(); + if (content == wxEmptyString) content = GetMimeTypeFromExt(location); + if (s) { - s = url.GetInputStream(); - content = url.GetProtocol().GetContentType(); - if (content == wxEmptyString) content = GetMimeTypeFromExt(location); - if (s) - { - wxChar buf[256]; - - wxGetTempFileName( wxT("wxhtml"), buf); - info = new wxInetCacheNode(buf, content); - m_Cache.Put(right, info); - - { // ok, now copy it: - wxFileOutputStream sout((wxString)buf); - s -> Read(sout); // copy the stream - } - delete s; - } - else - return (wxFSFile*) NULL; // we can't open the URL - } - else - return (wxFSFile*) NULL; // incorrect URL - } + wxString tmpfile = + wxFileName::CreateTempFileName(wxT("wxhtml")); - // Load item from cache: - s = new wxFileInputStream(info->GetTemp()); - if (!s) - return (wxFSFile*) NULL; - - return new wxFSFile(s, - right, - info->GetMime(), - GetAnchor(location) + { // now copy streams content to temporary file: + wxFileOutputStream sout(tmpfile); + s->Read(sout); + } + delete s; + + return new wxFSFile(new wxTemporaryFileInputStream(tmpfile), + right, + content, + GetAnchor(location) #if wxUSE_DATETIME - , wxDateTime::Now() + , wxDateTime::Now() #endif // wxUSE_DATETIME ); -} - - - -wxInternetFSHandler::~wxInternetFSHandler() -{ - wxHashTable::compatibility_iterator n; - wxInetCacheNode *n2; - - m_Cache.BeginFind(); - while ((n = m_Cache.Next()) != 0) - { - n2 = (wxInetCacheNode*) n->GetData(); - wxRemoveFile(n2->GetTemp()); - delete n2; + } } + + return (wxFSFile*) NULL; // incorrect URL } + class wxFileSystemInternetModule : public wxModule { DECLARE_DYNAMIC_CLASS(wxFileSystemInternetModule)