Exemple #1
0
    void GenerateReportData(const Game& game,
        std::list<Message>& messages,
        const std::list<Plugin>& plugins,
        const std::string& masterlistVersion,
        const std::string& masterlistDate,
        const bool masterlistUpdateEnabled) {

        YAML::Node oldDetails;
        GetOldReportDetails(game.ReportDataPath(), oldDetails);
        
        //Need to output YAML as a JSON Javascript variable.
        YAML::Emitter yout;
        yout.SetOutputCharset(YAML::EscapeNonAscii);
        yout.SetStringFormat(YAML::DoubleQuoted);
        yout.SetBoolFormat(YAML::TrueFalseBool);
        yout.SetSeqFormat(YAML::Flow);
        yout.SetMapFormat(YAML::Flow);

        BOOST_LOG_TRIVIAL(debug) << "Generating JSON report data.";

        yout << YAML::BeginMap;

        yout << YAML::Key << "lootVersion"
            << YAML::Value << IntToString(g_version_major) + "." + IntToString(g_version_minor) + "." + IntToString(g_version_patch);

        yout << YAML::Key << "masterlist"
            << YAML::BeginMap
            << YAML::Key << "updaterEnabled"
            << YAML::Value;

        if (masterlistUpdateEnabled)
            yout << boost::locale::translate("Enabled").str();
        else
            yout << boost::locale::translate("Disabled").str();

        yout << YAML::Key << "revision"
            << YAML::Value << masterlistVersion
            << YAML::Key << "date"
            << YAML::Value << masterlistDate
            << YAML::EndMap;

        if (!plugins.empty()) {
            BOOST_LOG_TRIVIAL(debug) << "Generating JSON plugin data.";
            YAML::Emitter tempout;
            tempout.SetOutputCharset(YAML::EscapeNonAscii);
            tempout.SetStringFormat(YAML::DoubleQuoted);
            tempout.SetBoolFormat(YAML::TrueFalseBool);
            tempout.SetSeqFormat(YAML::Flow);
            tempout.SetMapFormat(YAML::Flow);

            tempout << YAML::BeginSeq;
            for (std::list<Plugin>::const_iterator it = plugins.begin(), endit = plugins.end(); it != endit; ++it) {
                WritePlugin(tempout, *it, game);
            }
            tempout << YAML::EndSeq;

            YAML::Node node = YAML::Load(tempout.c_str());

            if (AreDetailsEqual(node, oldDetails))
                messages.push_front(loot::Message(loot::Message::say, boost::locale::translate("There have been no changes in the Details tab since LOOT was last run for this game.").str()));
                
            //Need to generate output twice because passing the node causes !<!> to be written before every key and value for some reason.
            yout << YAML::Key << "plugins"
                << YAML::Value << YAML::BeginSeq;
            for (std::list<Plugin>::const_iterator it = plugins.begin(), endit = plugins.end(); it != endit; ++it) {
                WritePlugin(yout, *it, game);
            }
            yout << YAML::EndSeq;
        }
        else if (oldDetails.size() == 0)
            messages.push_front(loot::Message(loot::Message::say, boost::locale::translate("There have been no changes in the Details tab since LOOT was last run for this game.").str()));

        if (!messages.empty()) {
            BOOST_LOG_TRIVIAL(debug) << "Generating JSON general message data.";
            yout << YAML::Key << "globalMessages"
                << YAML::Value << YAML::BeginSeq;
            for (std::list<Message>::const_iterator it = messages.begin(), endit = messages.end(); it != endit; ++it) {
                WriteMessage(yout, *it);
            }
            yout << YAML::EndSeq;
        }

        BOOST_LOG_TRIVIAL(debug) << "Generating text translations.";
        yout << YAML::Key << "l10n"
            << YAML::BeginMap

            << YAML::Key << "txtSummarySec"
            << YAML::Value << boost::locale::translate("Summary").str()

            << YAML::Key << "txtSummary"
            << YAML::Value << boost::locale::translate("Summary").str()

            << YAML::Key << "txtLootVersion"
            << YAML::Value << boost::locale::translate("LOOT Version").str()

            << YAML::Key << "txtMasterlistRevision"
            << YAML::Value << boost::locale::translate("Masterlist Revision").str()

            << YAML::Key << "txtMasterlistDate"
            << YAML::Value << boost::locale::translate("Masterlist Date").str()

            << YAML::Key << "txtMasterlistUpdating"
            << YAML::Value << boost::locale::translate("Masterlist Updating").str()

            << YAML::Key << "txtTotalMessageNo"
            << YAML::Value << boost::locale::translate("Total Number of Messages").str()

            << YAML::Key << "txtTotalWarningNo"
            << YAML::Value << boost::locale::translate("Number of Warnings").str()

            << YAML::Key << "txtTotalErrorNo"
            << YAML::Value << boost::locale::translate("Number of Errors").str()

            << YAML::Key << "txtGeneralMessages"
            << YAML::Value << boost::locale::translate("General Messages").str()

            << YAML::Key << "txtDetailsSec"
            << YAML::Value << boost::locale::translate("Details").str()

            << YAML::Key << "filtersToggle"
            << YAML::Value << boost::locale::translate("Filters").str()

            << YAML::Key << "txtHideVersionNumbers"
            << YAML::Value << boost::locale::translate("Hide Version Numbers").str()

            << YAML::Key << "txtHideCRCs"
            << YAML::Value << boost::locale::translate("Hide CRCs").str()

            << YAML::Key << "txtHideBashTags"
            << YAML::Value << boost::locale::translate("Hide Bash Tag Suggestions").str()

            << YAML::Key << "txtHideNotes"
            << YAML::Value << boost::locale::translate("Hide Notes").str()

            << YAML::Key << "txtHideDoNotCleanMessages"
            << YAML::Value << boost::locale::translate("Hide 'Do Not Clean' Messages").str()

            << YAML::Key << "txtHideInactivePluginMessages"
            << YAML::Value << boost::locale::translate("Hide Inactive Plugin Messages").str()

            << YAML::Key << "txtHideAllPluginMessages"
            << YAML::Value << boost::locale::translate("Hide All Plugin Messages").str()

            << YAML::Key << "txtHideMessagelessPlugins"
            << YAML::Value << boost::locale::translate("Hide Messageless Plugins").str()

            << YAML::Key << "txtPluginsHidden"
            << YAML::Value << boost::locale::translate("Plugins hidden").str()

            << YAML::Key << "txtMessagesHidden"
            << YAML::Value << boost::locale::translate("Messages hidden").str()

            << YAML::EndMap;

        yout << YAML::EndMap;

        loot::ofstream out(game.ReportDataPath());
        out << "var data = " << yout.c_str();
        out.close();
    }