verison deletion feature
This commit is contained in:
@@ -609,6 +609,63 @@ bool LauncherBackend::isVersionInstalled(const QString &versionId) const
|
||||
return VersionLoader::installedVersions(gameDir()).contains(versionId);
|
||||
}
|
||||
|
||||
QVariantMap LauncherBackend::versionRemovalInfo(const QString &versionId) const
|
||||
{
|
||||
const QString id = versionId.trimmed();
|
||||
if (id.isEmpty())
|
||||
return {};
|
||||
|
||||
const qint64 bytes = VersionLoader::installedSize(gameDir(), id);
|
||||
// Сборки не правим при удалении — ссылка на неустановленную версию это
|
||||
// рабочее состояние. Но перечислить, кого заденет, надо.
|
||||
QStringList builds;
|
||||
for (const CustomBuild &build : m_builds) {
|
||||
if (build.minecraftVersion == id || build.resolvedVersionId == id
|
||||
|| launchVersionIdOf(build) == id) {
|
||||
builds << build.name;
|
||||
}
|
||||
}
|
||||
|
||||
return {{QStringLiteral("id"), id},
|
||||
{QStringLiteral("installed"), isVersionInstalled(id)},
|
||||
{QStringLiteral("sizeMb"), static_cast<int>((bytes + 1024 * 1024 - 1) / (1024 * 1024))},
|
||||
{QStringLiteral("dependents"), VersionLoader::dependentsOf(gameDir(), id)},
|
||||
{QStringLiteral("builds"), builds}};
|
||||
}
|
||||
|
||||
void LauncherBackend::removeVersion(const QString &versionId)
|
||||
{
|
||||
const QString id = versionId.trimmed();
|
||||
if (id.isEmpty())
|
||||
return;
|
||||
|
||||
if (m_installer->versionId() == id || m_installer->isQueued(id)) {
|
||||
emit launchError(tr("Эта версия сейчас скачивается"));
|
||||
return;
|
||||
}
|
||||
if (m_switcher->isRunning() || m_busy || m_installer->isRunning()
|
||||
|| m_loaderInstaller->isRunning()) {
|
||||
emit launchError(tr("Дождитесь окончания текущей операции"));
|
||||
return;
|
||||
}
|
||||
// Какой версией сейчас играют, GameLauncher наружу не отдаёт, поэтому на
|
||||
// время игры удаление запрещено целиком.
|
||||
if (m_launcher->isRunning()) {
|
||||
emit launchError(tr("Сначала закройте игру"));
|
||||
return;
|
||||
}
|
||||
|
||||
QString error;
|
||||
if (!VersionLoader::remove(gameDir(), id, &error)) {
|
||||
emit launchError(tr("Не удалось удалить версию: %1").arg(error));
|
||||
return;
|
||||
}
|
||||
|
||||
invalidateCatalog();
|
||||
emit installedVersionsChanged();
|
||||
emit launchProgress(tr("Версия «%1» удалена").arg(id));
|
||||
}
|
||||
|
||||
QVariantList LauncherBackend::versionCatalog() const
|
||||
{
|
||||
if (m_catalogDirty) {
|
||||
|
||||
Reference in New Issue
Block a user