Beispiel #1
0
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") );
}
Beispiel #2
0
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") );
}
Beispiel #3
0
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;
}
Beispiel #4
0
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;
}