void RheiaHtmlLogger::Log( const wxString& msg, RheiaLogging::RheiaLogLevel level ) { wxString message; if( level == RheiaLogging::message ) message += wxT("\n\t<span class=\"message\">") + msg + wxT("</span>"); else if( level == RheiaLogging::warning ) message += wxT("\n\t<span class=\"warning\">") + msg + wxT("</span>"); else if( level == RheiaLogging::success ) message += wxT("\n\t<span class=\"success\">") + msg + wxT("</span>"); else if( level == RheiaLogging::error ) message += wxT("\n\t<span class=\"error\">") + msg + wxT("</span>"); else if( level == RheiaLogging::fatalerror ) message += wxT("\n\t<span class=\"fatalerror\">") + msg + wxT("</span>"); else if( level == RheiaLogging::info ) message += wxT("\n\t<span class=\"info\">") + msg + wxT("</span>"); else if( level == RheiaLogging::status ) message += wxT("\n\t<span class=\"status\">") + msg + wxT("</span>"); else if( level == RheiaLogging::syserror ) message += wxT("\n\t<span class=\"syserror\">") + msg + wxT("</span>"); else if( level == RheiaLogging::debug ) message += wxT("\n\t<span class=\"debug\">") + msg + wxT("</span>"); else if( level == RheiaLogging::trace ) message += wxT("\n\t<span class=\"trace\">") + msg + wxT("</span>"); message += wxT("\n\t<br/>"); fputs(rcU2C(message), m_file.fp()); m_page += message; if( m_window != NULL ) m_window->SetPage( m_page + wxT("\n</body>\n</html>\n") ); }
void RheiaTimeStampableHtmlLogger::Log( const wxString& msg, RheiaLogging::RheiaLogLevel level ) { wxString message; if( level == RheiaLogging::message ) message += wxT("\n\t<span class=\"message\">") + msg + wxT("</span>"); else if( level == RheiaLogging::warning ) message += wxT("\n\t<span class=\"warning\">") + msg + wxT("</span>"); else if( level == RheiaLogging::success ) message += wxT("\n\t<span class=\"success\">") + msg + wxT("</span>"); else if( level == RheiaLogging::error ) message += wxT("\n\t<span class=\"error\">") + msg + wxT("</span>"); else if( level == RheiaLogging::fatalerror ) message += wxT("\n\t<span class=\"fatalerror\">") + msg + wxT("</span>"); else if( level == RheiaLogging::info ) message += wxT("\n\t<span class=\"info\">") + msg + wxT("</span>"); else if( level == RheiaLogging::status ) message += wxT("\n\t<span class=\"status\">") + msg + wxT("</span>"); else if( level == RheiaLogging::syserror ) message += wxT("\n\t<span class=\"syserror\">") + msg + wxT("</span>"); else if( level == RheiaLogging::debug ) message += wxT("\n\t<span class=\"debug\">") + msg + wxT("</span>"); else if( level == RheiaLogging::trace ) message += wxT("\n\t<span class=\"trace\">") + msg + wxT("</span>"); message += wxT("\n\t<br/>"); wxString premsg; wxDateTime timestamp(wxDateTime::UNow()); premsg += wxString::Format( wxT("[%2.2d:%2.2d:%2.2d.%3.3d] :"), timestamp.GetHour(), timestamp.GetMinute(), timestamp.GetSecond(), timestamp.GetMillisecond() ); wxString fullmsg = wxT("\n\t<span class=\"timestamp\">") + premsg + wxT("</span>"); fullmsg += message; fputs(rcU2C(fullmsg), m_file.fp()); m_page += fullmsg; if( m_window != NULL ) m_window->SetPage( m_page + wxT("\n</body>\n</html>\n") ); }
bool RheiaHtmlLogger::SetFile(const wxString& filename) { m_page.Clear(); RheiaFileLogger::Open(filename); m_page = wxT("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-US\" lang=\"en-US\">\n<head>\n<title>Html log</title>\n<style>\n"); if( !m_header.message.IsEmpty() ) m_page += wxT(".message { ") + m_header.message + wxT(" }\n"); if( !m_header.warning.IsEmpty() ) m_page += wxT(".warning { ") + m_header.warning + wxT(" }\n"); if( !m_header.success.IsEmpty() ) m_page += wxT(".success { ") + m_header.success + wxT(" }\n"); if( !m_header.error.IsEmpty() ) m_page += wxT(".error { ") + m_header.error + wxT(" }\n"); if( !m_header.fatalerror.IsEmpty() ) m_page += wxT(".fatalerror { ") + m_header.fatalerror + wxT(" }\n"); if( !m_header.info.IsEmpty() ) m_page += wxT(".info { ") + m_header.info + wxT(" }\n"); if( !m_header.status.IsEmpty() ) m_page += wxT(".status { ") + m_header.status + wxT(" }\n"); if( !m_header.syserror.IsEmpty() ) m_page += wxT(".syserror { ") + m_header.syserror + wxT(" }\n"); if( !m_header.debug.IsEmpty() ) m_page += wxT(".debug { ") + m_header.debug + wxT(" }\n"); if( !m_header.trace.IsEmpty() ) m_page += wxT(".trace { ") + m_header.trace + wxT(" }\n"); if( !m_header.h1.IsEmpty() ) m_page += wxT("h1 { ") + m_header.h1 + wxT(" }\n"); if( !m_header.h2.IsEmpty() ) m_page += wxT("h2 { ") + m_header.h2 + wxT(" }\n"); if( !m_header.timestamp.IsEmpty() ) m_page += wxT(".timestamp { ") + m_header.timestamp + wxT(" }\n"); m_page += wxT("</style>\n</head>\n\n<body>"); fprintf(m_file.fp(), "%s", rcU2C(m_page)); return true; }
RheiaPluginManifest* RheiaPluginManager::ReadManifestFile( const wxString& pluginFilename ) { RheiaLoggerManager::sdLog( wxT("RheiaPluginManager::Reading plugin manifest file : ") + pluginFilename + wxT(" ...") , RheiaLogging::info ); wxString pluginFname = pluginFilename; // first check if the plugin can be found if (pluginFname.IsEmpty()) { RheiaLoggerManager::sdLog( wxT("RheiaPluginManager::Plugin manifest file : ") + pluginFilename + wxT(" is empty...") , RheiaLogging::error ); return NULL; } wxFileName fname(pluginFilename); fname.SetExt(wxT("zip")); wxString actual = fname.GetFullName(); // remove dynamic library prefix from plugin name (if any) if ( !FileExt::DYNAMIC_LIBRARY_PREFIX.IsEmpty() && !platform::windows && actual.StartsWith(FileExt::DYNAMIC_LIBRARY_PREFIX)) actual.Remove(0, FileExt::DYNAMIC_LIBRARY_PREFIX.Length()); actual = RheiaFileFinder::FindFile( actual, rspfPluginsUser | rspfDataUser | rspfPluginsGlobal | rspfDataGlobal ); // check if the plugin resource exists if (actual.IsEmpty()) { RheiaLoggerManager::sdLog( wxT("RheiaPluginManager::Plugin manifest file : ") + pluginFilename + wxT(" not found...") , RheiaLogging::error ); return false; } // load XML from ZIP wxString contents; wxFileSystem* fs = new wxFileSystem; wxFSFile* f = fs->OpenFile(actual + _T("#zip:manifest.xml") ); if (f) { wxInputStream* is = f->GetStream(); char tmp[1024] = {}; while (!is->Eof() && is->CanRead()) { memset(tmp, 0, sizeof(tmp)); is->Read(tmp, sizeof(tmp) - 1); contents << RheiaC2U(tmp); } delete f; } else { RheiaLoggerManager::sdLog( wxT("RheiaPluginManager::Cannot extract plugin manifest file : ") + actual + wxT("#zip:manifest.xml...") , RheiaLogging::error ); delete fs; return false; } delete fs; xmlDoc* doc = xmlParseMemory( rcU2C(contents) , contents.size() ); if (!doc) { RheiaLoggerManager::sdLog( wxT("RheiaPluginManager::Cannot load xml document from memory : ") + actual + wxT("#zip:manifest.xml...") , RheiaLogging::error ); return NULL; } xmlNode* root = xmlDocGetRootElement( doc ); wxString rname = RheiaC2U( (const char*) root->name ); if( !rname.IsSameAs( wxT("RheiaPluginManifest") ) ) { RheiaLoggerManager::sdLog( wxT("RheiaPluginManager::Root node for xml document : ") + actual + wxT("#zip:manifest.xml is not RheiaPluginManifest...") + rname , RheiaLogging::error ); xmlFreeDoc( doc ); return NULL; } RheiaPluginManifest* manifest = new RheiaPluginManifest; xmlNode* child = root->children; while( child != NULL ) { wxString cname = RheiaC2U( (const char*) child->name ); if( cname.IsSameAs(wxT("Plugin")) ) { if( !manifest->DoReadFromNode(child) ) { RheiaLoggerManager::sdLog( wxT("RheiaPluginManager::Problem reading the xml document content from memory (manifest->DoReadFromNode(root) returns false) : ") + actual + wxT("#zip:manifest.xml is not RheiaPluginManifest...") , RheiaLogging::error ); delete manifest; xmlFreeDoc( doc ); return NULL; } break; } child = child->next; } xmlFreeDoc( doc ); return manifest; }