Fix crash caused by invalid resource pointer
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
parent
509f8c7307
commit
76602391f4
@ -261,7 +261,7 @@ bool ResourceFolderModel::update()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResourceFolderModel::resolveResource(Resource* res)
|
void ResourceFolderModel::resolveResource(Resource::Ptr res)
|
||||||
{
|
{
|
||||||
if (!res->shouldResolve()) {
|
if (!res->shouldResolve()) {
|
||||||
return;
|
return;
|
||||||
@ -277,11 +277,14 @@ void ResourceFolderModel::resolveResource(Resource* res)
|
|||||||
m_active_parse_tasks.insert(ticket, task);
|
m_active_parse_tasks.insert(ticket, task);
|
||||||
|
|
||||||
connect(
|
connect(
|
||||||
task.get(), &Task::succeeded, this, [=] { onParseSucceeded(ticket, res->internal_id()); }, Qt::ConnectionType::QueuedConnection);
|
task.get(), &Task::succeeded, this, [this, ticket, res] { onParseSucceeded(ticket, res->internal_id()); },
|
||||||
connect(task.get(), &Task::failed, this, [=] { onParseFailed(ticket, res->internal_id()); }, Qt::ConnectionType::QueuedConnection);
|
Qt::ConnectionType::QueuedConnection);
|
||||||
|
connect(
|
||||||
|
task.get(), &Task::failed, this, [this, ticket, res] { onParseFailed(ticket, res->internal_id()); },
|
||||||
|
Qt::ConnectionType::QueuedConnection);
|
||||||
connect(
|
connect(
|
||||||
task.get(), &Task::finished, this,
|
task.get(), &Task::finished, this,
|
||||||
[=] {
|
[this, ticket] {
|
||||||
m_active_parse_tasks.remove(ticket);
|
m_active_parse_tasks.remove(ticket);
|
||||||
emit parseFinished();
|
emit parseFinished();
|
||||||
},
|
},
|
||||||
@ -317,7 +320,7 @@ void ResourceFolderModel::onUpdateSucceeded()
|
|||||||
void ResourceFolderModel::onParseSucceeded(int ticket, QString resource_id)
|
void ResourceFolderModel::onParseSucceeded(int ticket, QString resource_id)
|
||||||
{
|
{
|
||||||
auto iter = m_active_parse_tasks.constFind(ticket);
|
auto iter = m_active_parse_tasks.constFind(ticket);
|
||||||
if (iter == m_active_parse_tasks.constEnd())
|
if (iter == m_active_parse_tasks.constEnd() || !m_resources_index.contains(resource_id))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int row = m_resources_index[resource_id];
|
int row = m_resources_index[resource_id];
|
||||||
@ -629,7 +632,7 @@ QString ResourceFolderModel::instDirPath() const
|
|||||||
void ResourceFolderModel::onParseFailed(int ticket, QString resource_id)
|
void ResourceFolderModel::onParseFailed(int ticket, QString resource_id)
|
||||||
{
|
{
|
||||||
auto iter = m_active_parse_tasks.constFind(ticket);
|
auto iter = m_active_parse_tasks.constFind(ticket);
|
||||||
if (iter == m_active_parse_tasks.constEnd())
|
if (iter == m_active_parse_tasks.constEnd() || !m_resources_index.contains(resource_id))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto removed_index = m_resources_index[resource_id];
|
auto removed_index = m_resources_index[resource_id];
|
||||||
|
@ -76,7 +76,7 @@ class ResourceFolderModel : public QAbstractListModel {
|
|||||||
virtual bool update();
|
virtual bool update();
|
||||||
|
|
||||||
/** Creates a new parse task, if needed, for 'res' and start it.*/
|
/** Creates a new parse task, if needed, for 'res' and start it.*/
|
||||||
virtual void resolveResource(Resource* res);
|
virtual void resolveResource(Resource::Ptr res);
|
||||||
|
|
||||||
[[nodiscard]] qsizetype size() const { return m_resources.size(); }
|
[[nodiscard]] qsizetype size() const { return m_resources.size(); }
|
||||||
[[nodiscard]] bool empty() const { return size() == 0; }
|
[[nodiscard]] bool empty() const { return size() == 0; }
|
||||||
@ -285,7 +285,7 @@ void ResourceFolderModel::applyUpdates(QSet<QString>& current_set, QSet<QString>
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_resources[row].reset(new_resource);
|
m_resources[row].reset(new_resource);
|
||||||
resolveResource(m_resources.at(row).get());
|
resolveResource(m_resources.at(row));
|
||||||
emit dataChanged(index(row, 0), index(row, columnCount(QModelIndex()) - 1));
|
emit dataChanged(index(row, 0), index(row, columnCount(QModelIndex()) - 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -333,7 +333,7 @@ void ResourceFolderModel::applyUpdates(QSet<QString>& current_set, QSet<QString>
|
|||||||
for (auto& added : added_set) {
|
for (auto& added : added_set) {
|
||||||
auto res = new_resources[added];
|
auto res = new_resources[added];
|
||||||
m_resources.append(res);
|
m_resources.append(res);
|
||||||
resolveResource(m_resources.last().get());
|
resolveResource(m_resources.last());
|
||||||
}
|
}
|
||||||
|
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
|
Loading…
Reference in New Issue
Block a user