Merge pull request #3307 from PrismLauncher/backport-2737-to-release-9.x
[Backport release-9.x] Truncate logs for mclo.gs to fit 25k line limit
This commit is contained in:
commit
9d8c3f251f
@ -51,11 +51,35 @@
|
|||||||
#include <settings/SettingsObject.h>
|
#include <settings/SettingsObject.h>
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
|
||||||
|
constexpr int MaxMclogsLines = 25000;
|
||||||
|
constexpr int InitialMclogsLines = 10000;
|
||||||
|
constexpr int FinalMclogsLines = 14900;
|
||||||
|
|
||||||
|
QString truncateLogForMclogs(const QString& logContent)
|
||||||
|
{
|
||||||
|
QStringList lines = logContent.split("\n");
|
||||||
|
if (lines.size() > MaxMclogsLines) {
|
||||||
|
QString truncatedLog = lines.mid(0, InitialMclogsLines).join("\n");
|
||||||
|
truncatedLog +=
|
||||||
|
"\n\n\n\n\n\n\n\n\n\n"
|
||||||
|
"------------------------------------------------------------\n"
|
||||||
|
"----------------------- Log truncated ----------------------\n"
|
||||||
|
"------------------------------------------------------------\n"
|
||||||
|
"----- Middle portion omitted to fit mclo.gs size limits ----\n"
|
||||||
|
"------------------------------------------------------------\n"
|
||||||
|
"\n\n\n\n\n\n\n\n\n\n";
|
||||||
|
truncatedLog += lines.mid(lines.size() - FinalMclogsLines - 1).join("\n");
|
||||||
|
return truncatedLog;
|
||||||
|
}
|
||||||
|
return logContent;
|
||||||
|
}
|
||||||
|
|
||||||
std::optional<QString> GuiUtil::uploadPaste(const QString& name, const QString& text, QWidget* parentWidget)
|
std::optional<QString> GuiUtil::uploadPaste(const QString& name, const QString& text, QWidget* parentWidget)
|
||||||
{
|
{
|
||||||
ProgressDialog dialog(parentWidget);
|
ProgressDialog dialog(parentWidget);
|
||||||
auto pasteTypeSetting = static_cast<PasteUpload::PasteType>(APPLICATION->settings()->get("PastebinType").toInt());
|
auto pasteTypeSetting = static_cast<PasteUpload::PasteType>(APPLICATION->settings()->get("PastebinType").toInt());
|
||||||
auto pasteCustomAPIBaseSetting = APPLICATION->settings()->get("PastebinCustomAPIBase").toString();
|
auto pasteCustomAPIBaseSetting = APPLICATION->settings()->get("PastebinCustomAPIBase").toString();
|
||||||
|
bool shouldTruncate = false;
|
||||||
|
|
||||||
{
|
{
|
||||||
QUrl baseUrl;
|
QUrl baseUrl;
|
||||||
@ -75,10 +99,36 @@ std::optional<QString> GuiUtil::uploadPaste(const QString& name, const QString&
|
|||||||
|
|
||||||
if (response != QMessageBox::Yes)
|
if (response != QMessageBox::Yes)
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
|
if (baseUrl.toString() == "https://api.mclo.gs" && text.count("\n") > MaxMclogsLines) {
|
||||||
|
auto truncateResponse = CustomMessageBox::selectable(
|
||||||
|
parentWidget, QObject::tr("Confirm Truncation"),
|
||||||
|
QObject::tr("The log has %1 lines, exceeding mclo.gs' limit of %2.\n"
|
||||||
|
"The launcher can keep the first %3 and last %4 lines, trimming the middle.\n\n"
|
||||||
|
"If you choose 'No', mclo.gs will only keep the first %2 lines, cutting off "
|
||||||
|
"potentially useful info like crashes at the end.\n\n"
|
||||||
|
"Proceed with truncation?")
|
||||||
|
.arg(text.count("\n"))
|
||||||
|
.arg(MaxMclogsLines)
|
||||||
|
.arg(InitialMclogsLines)
|
||||||
|
.arg(FinalMclogsLines),
|
||||||
|
QMessageBox::Warning, QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel, QMessageBox::No)
|
||||||
|
->exec();
|
||||||
|
|
||||||
|
if (truncateResponse == QMessageBox::Cancel) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
shouldTruncate = truncateResponse == QMessageBox::Yes;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<PasteUpload> paste(new PasteUpload(parentWidget, text, pasteCustomAPIBaseSetting, pasteTypeSetting));
|
QString textToUpload = text;
|
||||||
|
if (shouldTruncate) {
|
||||||
|
textToUpload = truncateLogForMclogs(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<PasteUpload> paste(new PasteUpload(parentWidget, textToUpload, pasteCustomAPIBaseSetting, pasteTypeSetting));
|
||||||
|
|
||||||
dialog.execWithTask(paste.get());
|
dialog.execWithTask(paste.get());
|
||||||
if (!paste->wasSuccessful()) {
|
if (!paste->wasSuccessful()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user