| 347 | } |
| 348 | |
| 349 | void ModUpdateDialog::appendMod(CheckUpdateTask::UpdatableMod const& info) |
| 350 | { |
| 351 | auto item_top = new QTreeWidgetItem(ui->modTreeWidget); |
| 352 | item_top->setCheckState(0, Qt::CheckState::Checked); |
| 353 | item_top->setText(0, info.name); |
| 354 | item_top->setExpanded(true); |
| 355 | |
| 356 | auto provider_item = new QTreeWidgetItem(item_top); |
| 357 | provider_item->setText(0, tr("Provider: %1").arg(ProviderCaps.readableName(info.provider))); |
| 358 | |
| 359 | auto old_version_item = new QTreeWidgetItem(item_top); |
| 360 | old_version_item->setText(0, tr("Old version: %1").arg(info.old_version.isEmpty() ? tr("Not installed") : info.old_version)); |
| 361 | |
| 362 | auto new_version_item = new QTreeWidgetItem(item_top); |
| 363 | new_version_item->setText(0, tr("New version: %1").arg(info.new_version)); |
| 364 | |
| 365 | auto changelog_item = new QTreeWidgetItem(item_top); |
| 366 | changelog_item->setText(0, tr("Changelog of the latest version")); |
| 367 | |
| 368 | auto changelog = new QTreeWidgetItem(changelog_item); |
| 369 | auto changelog_area = new QTextBrowser(); |
| 370 | |
| 371 | switch (info.provider) { |
| 372 | case ModPlatform::Provider::MODRINTH: { |
| 373 | HoeDown h; |
| 374 | // HoeDown bug?: \n aren't converted to <br> |
| 375 | auto text = h.process(info.changelog.toUtf8()); |
| 376 | |
| 377 | // Don't convert if there's an HTML tag right after (Qt rendering weirdness) |
| 378 | text.remove(QRegularExpression("(\n+)(?=<)")); |
| 379 | text.replace('\n', "<br>"); |
| 380 | |
| 381 | changelog_area->setHtml(text); |
| 382 | break; |
| 383 | } |
| 384 | case ModPlatform::Provider::FLAME: { |
| 385 | changelog_area->setHtml(info.changelog); |
| 386 | break; |
| 387 | } |
| 388 | } |
| 389 | |
| 390 | changelog_area->setOpenExternalLinks(true); |
| 391 | changelog_area->setLineWrapMode(QTextBrowser::LineWrapMode::NoWrap); |
| 392 | changelog_area->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAsNeeded); |
| 393 | |
| 394 | // HACK: Is there a better way of achieving this? |
| 395 | auto font_height = QFontMetrics(changelog_area->font()).height(); |
| 396 | changelog_area->setMaximumHeight((changelog_area->toPlainText().count(QRegularExpression("\n|<br>")) + 2) * font_height); |
| 397 | |
| 398 | ui->modTreeWidget->setItemWidget(changelog, 0, changelog_area); |
| 399 | |
| 400 | ui->modTreeWidget->addTopLevelItem(item_top); |
| 401 | } |
| 402 | |
| 403 | auto ModUpdateDialog::getTasks() -> const QList<ModDownloadTask*> |
| 404 | { |
no test coverage detected