https://bugs.kde.org/show_bug.cgi?id=473613

David Redondo <k...@david-redondo.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |k...@david-redondo.de

--- Comment #8 from David Redondo <k...@david-redondo.de> ---
So we assert on checking the checked item

checkResources(apps, newValue);
Q_ASSERT(idx.data(Qt::CheckStateRole) == value);

checking an Item in packagekitbackend and see the check status are implemented
in the PackageKitBackend as

void PackageKitUpdater::addResources(const QList<AbstractResource *> &apps)
{
    const QSet<QString> pkgs = involvedPackages(kToSet(apps));
    m_toUpgrade.unite(packagesForPackageId(pkgs));
}

bool PackageKitUpdater::isMarked(AbstractResource *res) const
{
    return m_toUpgrade.contains(res);
}


the problem is that packagesForPackageId returns empty because it looks through
m_allUpgradeable whichis assigned in PackageKitUpdater::prepare()    

 const auto candidates = m_backend->upgradeablePackages();

the problem is 

QSet<AbstractResource *> PackageKitBackend::upgradeablePackages() const
{
    if (isFetching() || !m_packagesToAdd.isEmpty()) {
        return {};
    }

    QSet<AbstractResource *> ret;
    ret.reserve(m_updatesPackageId.size());
    for (const QString &pkgid : std::as_const(m_updatesPackageId)) {
        const QString pkgname = PackageKit::Daemon::packageName(pkgid);
        const auto pkgs = resourcesByPackageName(pkgname);
        if (pkgs.isEmpty()) {
            qWarning() << "PackageKitBackend: Couldn't find resource for" <<
pkgid;
        }
        ret.unite(pkgs);
    }
    return kFilter<QSet<AbstractResource *>>(ret, [](AbstractResource *res) {
        return !static_cast<PackageKitResource *>(res)->extendsItself();
    });
}


resourcesByPackageName can modify m_packagesToAdd so a second call to it
returns an empty set.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to