Fix crashes

Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
This commit is contained in:
TheKodeToad 2023-09-01 12:50:20 +01:00
parent ee48766996
commit 6aecbfc38f
No known key found for this signature in database
GPG Key ID: 5E39D70B4C93C38E
3 changed files with 18 additions and 7 deletions

View File

@ -33,7 +33,11 @@ class shared_qobject_ptr : public QSharedPointer<T> {
{} {}
void reset() { QSharedPointer<T>::reset(); } void reset() { QSharedPointer<T>::reset(); }
void reset(T* other) { QSharedPointer<T>::reset(other); } void reset(T* other)
{
shared_qobject_ptr<T> t(other);
this->swap(t);
}
void reset(const shared_qobject_ptr<T>& other) void reset(const shared_qobject_ptr<T>& other)
{ {
shared_qobject_ptr<T> t(other); shared_qobject_ptr<T> t(other);

View File

@ -45,6 +45,14 @@ ResourceFolderLoadTask::ResourceFolderLoadTask(const QDir& resource_dir,
bool is_indexed, bool is_indexed,
bool clean_orphan, bool clean_orphan,
std::function<Resource*(const QFileInfo&)> create_function) std::function<Resource*(const QFileInfo&)> create_function)
: Task(nullptr, false)
, m_resource_dir(resource_dir)
, m_index_dir(index_dir)
, m_is_indexed(is_indexed)
, m_clean_orphan(clean_orphan)
, m_create_func(create_function)
, m_result(new Result())
, m_thread_to_spawn_into(thread())
{} {}
void ResourceFolderLoadTask::executeTask() void ResourceFolderLoadTask::executeTask()
@ -58,8 +66,8 @@ void ResourceFolderLoadTask::executeTask()
} }
// Read JAR files that don't have metadata // Read JAR files that don't have metadata
m_mods_dir.refresh(); m_resource_dir.refresh();
for (auto entry : m_mods_dir.entryInfoList()) { for (auto entry : m_resource_dir.entryInfoList()) {
Resource* resource = m_create_func(entry); Resource* resource = m_create_func(entry);
if (resource->enabled()) { if (resource->enabled()) {
@ -121,7 +129,7 @@ void ResourceFolderLoadTask::getFromMetadata()
if (!metadata.isValid()) if (!metadata.isValid())
return; return;
auto* resource = m_create_func(QFileInfo(m_mods_dir.filePath(metadata.filename))); auto* resource = m_create_func(QFileInfo(m_resource_dir.filePath(metadata.filename)));
resource->setMetadata(metadata); resource->setMetadata(metadata);
resource->setStatus(ResourceStatus::NOT_INSTALLED); resource->setStatus(ResourceStatus::NOT_INSTALLED);
m_result->resources[resource->internal_id()].reset(resource); m_result->resources[resource->internal_id()].reset(resource);

View File

@ -73,15 +73,14 @@ class ResourceFolderLoadTask : public Task {
void getFromMetadata(); void getFromMetadata();
private: private:
QDir m_mods_dir, m_index_dir; QDir m_resource_dir, m_index_dir;
bool m_is_indexed; bool m_is_indexed;
bool m_clean_orphan; bool m_clean_orphan;
std::function<Resource*(QFileInfo const&)> m_create_func;
ResultPtr m_result; ResultPtr m_result;
std::atomic<bool> m_aborted = false; std::atomic<bool> m_aborted = false;
std::function<Resource*(QFileInfo const&)> m_create_func;
/** This is the thread in which we should put new mod objects */ /** This is the thread in which we should put new mod objects */
QThread* m_thread_to_spawn_into; QThread* m_thread_to_spawn_into;
}; };