refactor!!!: migrate from shared pointers

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
This commit is contained in:
Octol1ttle 2026-01-07 19:16:54 +05:00
parent c64d871a28
commit 549405ab2f
No known key found for this signature in database
GPG key ID: B77C34313AEE1FFF
199 changed files with 742 additions and 709 deletions

View file

@ -69,7 +69,7 @@
const static int GROUP_FILE_FORMAT_VERSION = 1;
InstanceList::InstanceList(SettingsObjectPtr settings, const QString& instDir, QObject* parent)
InstanceList::InstanceList(SettingsObject* settings, const QString& instDir, QObject* parent)
: QAbstractListModel(parent), m_globalSettings(settings)
{
resumeWatch();
@ -87,7 +87,10 @@ InstanceList::InstanceList(SettingsObjectPtr settings, const QString& instDir, Q
m_watcher->addPath(m_instDir);
}
InstanceList::~InstanceList() {}
InstanceList::~InstanceList()
{
qDeleteAll(m_instances);
}
Qt::DropActions InstanceList::supportedDragActions() const
{
@ -161,7 +164,7 @@ QModelIndex InstanceList::index(int row, int column, const QModelIndex& parent)
Q_UNUSED(parent);
if (row < 0 || row >= m_instances.size())
return QModelIndex();
return createIndex(row, column, (void*)m_instances.at(row).get());
return createIndex(row, column, (void*)m_instances.at(row));
}
QVariant InstanceList::data(const QModelIndex& index, int role) const
@ -266,7 +269,7 @@ void InstanceList::setInstanceGroup(const InstanceId& id, GroupId name)
if (changed) {
increaseGroupCount(name);
auto idx = getInstIndex(inst.get());
auto idx = getInstIndex(inst);
emit dataChanged(index(idx), index(idx), { GroupRole });
saveGroupList();
}
@ -291,7 +294,7 @@ void InstanceList::deleteGroup(const GroupId& name)
m_instanceGroupIndex.remove(instID);
qDebug() << "Remove" << instID << "from group" << name;
removed = true;
auto idx = getInstIndex(instance.get());
auto idx = getInstIndex(instance);
if (idx >= 0)
emit dataChanged(index(idx), index(idx), { GroupRole });
}
@ -316,7 +319,7 @@ void InstanceList::renameGroup(const QString& src, const QString& dst)
increaseGroupCount(dst);
qDebug() << "Set" << instID << "group to" << dst;
modified = true;
auto idx = getInstIndex(instance.get());
auto idx = getInstIndex(instance);
if (idx >= 0)
emit dataChanged(index(idx), index(idx), { GroupRole });
}
@ -457,11 +460,11 @@ void InstanceList::deleteInstance(const InstanceId& id)
}
}
static QMap<InstanceId, InstanceLocator> getIdMapping(const QList<InstancePtr>& list)
static QMap<InstanceId, InstanceLocator> getIdMapping(const QList<InstanceList::BaseInstanceOwner>& list)
{
QMap<InstanceId, InstanceLocator> out;
int i = 0;
for (auto& item : list) {
for (auto item : list) {
auto id = item->id();
if (out.contains(id)) {
qWarning() << "Duplicate ID" << id << "in instance list";
@ -504,7 +507,7 @@ InstanceList::InstListError InstanceList::loadList()
{
auto existingIds = getIdMapping(m_instances);
QList<InstancePtr> newList;
QList<BaseInstanceOwner> newList;
for (auto& id : discoverInstances()) {
if (existingIds.contains(id)) {
@ -512,7 +515,7 @@ InstanceList::InstListError InstanceList::loadList()
existingIds.remove(id);
qInfo() << "Should keep and soft-reload" << id;
} else {
InstancePtr instPtr = loadInstance(id);
BaseInstanceOwner instPtr = loadInstance(id);
if (instPtr) {
newList.append(instPtr);
}
@ -567,7 +570,7 @@ void InstanceList::updateTotalPlayTime()
{
totalPlayTime = 0;
for (auto const& itr : m_instances) {
totalPlayTime += itr.get()->totalTimePlayed();
totalPlayTime += itr->totalTimePlayed();
}
}
@ -578,12 +581,12 @@ void InstanceList::saveNow()
}
}
void InstanceList::add(const QList<InstancePtr>& t)
void InstanceList::add(const QList<BaseInstanceOwner>& t)
{
beginInsertRows(QModelIndex(), m_instances.count(), m_instances.count() + t.size() - 1);
m_instances.append(t);
for (auto& ptr : t) {
connect(ptr.get(), &BaseInstance::propertiesChanged, this, &InstanceList::propertiesChanged);
for (auto ptr : t) {
connect(ptr, &BaseInstance::propertiesChanged, this, &InstanceList::propertiesChanged);
}
endInsertRows();
}
@ -613,19 +616,19 @@ void InstanceList::providerUpdated()
}
}
InstancePtr InstanceList::getInstanceById(QString instId) const
BaseInstance* InstanceList::getInstanceById(QString instId) const
{
if (instId.isEmpty())
return InstancePtr();
return nullptr;
for (auto& inst : m_instances) {
if (inst->id() == instId) {
return inst;
}
}
return InstancePtr();
return nullptr;
}
InstancePtr InstanceList::getInstanceByManagedName(const QString& managed_name) const
BaseInstance* InstanceList::getInstanceByManagedName(const QString& managed_name) const
{
if (managed_name.isEmpty())
return {};
@ -640,14 +643,14 @@ InstancePtr InstanceList::getInstanceByManagedName(const QString& managed_name)
QModelIndex InstanceList::getInstanceIndexById(const QString& id) const
{
return index(getInstIndex(getInstanceById(id).get()));
return index(getInstIndex(getInstanceById(id)));
}
int InstanceList::getInstIndex(BaseInstance* inst) const
{
int count = m_instances.count();
for (int i = 0; i < count; i++) {
if (inst == m_instances[i].get()) {
if (inst == m_instances[i]) {
return i;
}
}
@ -663,15 +666,15 @@ void InstanceList::propertiesChanged(BaseInstance* inst)
}
}
InstancePtr InstanceList::loadInstance(const InstanceId& id)
InstanceList::BaseInstanceOwner InstanceList::loadInstance(const InstanceId& id)
{
if (!m_groupsLoaded) {
loadGroupList();
}
auto instanceRoot = FS::PathCombine(m_instDir, id);
auto instanceSettings = std::make_shared<INISettingsObject>(FS::PathCombine(instanceRoot, "instance.cfg"));
InstancePtr inst;
auto instanceSettings = std::make_unique<INISettingsObject>(FS::PathCombine(instanceRoot, "instance.cfg"));
BaseInstanceOwner inst;
instanceSettings->registerSetting("InstanceType", "");
@ -680,9 +683,9 @@ InstancePtr InstanceList::loadInstance(const InstanceId& id)
// NOTE: Some launcher versions didn't save the InstanceType properly. We will just bank on the probability that this is probably a
// OneSix instance
if (inst_type == "OneSix" || inst_type.isEmpty()) {
inst.reset(new MinecraftInstance(m_globalSettings, instanceSettings, instanceRoot));
inst = new MinecraftInstance(m_globalSettings, std::move(instanceSettings), instanceRoot);
} else {
inst.reset(new NullInstance(m_globalSettings, instanceSettings, instanceRoot));
inst = new NullInstance(m_globalSettings, std::move(instanceSettings), instanceRoot);
}
qDebug() << "Loaded instance" << inst->name() << "from" << inst->instanceRoot();
@ -911,15 +914,14 @@ class InstanceStaging : public Task {
const unsigned maxBackoff = 16;
public:
InstanceStaging(InstanceList* parent, InstanceTask* child, SettingsObjectPtr settings)
: m_parent(parent), backoff(minBackoff, maxBackoff)
InstanceStaging(InstanceList* parent, InstanceTask* child, SettingsObject* settings) : m_parent(parent), backoff(minBackoff, maxBackoff)
{
m_stagingPath = parent->getStagedInstancePath();
m_child.reset(child);
m_child->setStagingPath(m_stagingPath);
m_child->setParentSettings(std::move(settings));
m_child->setParentSettings(settings);
connect(child, &Task::succeeded, this, &InstanceStaging::childSucceeded);
connect(child, &Task::failed, this, &InstanceStaging::childFailed);
@ -995,7 +997,7 @@ class InstanceStaging : public Task {
*/
ExponentialSeries backoff;
QString m_stagingPath;
unique_qobject_ptr<InstanceTask> m_child;
std::unique_ptr<InstanceTask> m_child;
QTimer m_backoffTimer;
};
@ -1036,7 +1038,7 @@ bool InstanceList::commitStagedInstance(const QString& path,
groupName = QString();
QString instID;
InstancePtr inst;
BaseInstance* inst;
auto should_override = commiting.shouldOverride();