NOISSUE fix crash because of early destruction of java list load task
This commit is contained in:
parent
c4c8e99681
commit
5565a2f85e
@ -31,7 +31,27 @@ JavaInstallList::JavaInstallList(QObject *parent) : BaseVersionList(parent)
|
|||||||
|
|
||||||
shared_qobject_ptr<Task> JavaInstallList::getLoadTask()
|
shared_qobject_ptr<Task> JavaInstallList::getLoadTask()
|
||||||
{
|
{
|
||||||
return new JavaListLoadTask(this);
|
load();
|
||||||
|
return getCurrentTask();
|
||||||
|
}
|
||||||
|
|
||||||
|
shared_qobject_ptr<Task> JavaInstallList::getCurrentTask()
|
||||||
|
{
|
||||||
|
if(m_status == Status::InProgress)
|
||||||
|
{
|
||||||
|
return m_loadTask;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JavaInstallList::load()
|
||||||
|
{
|
||||||
|
if(m_status != Status::InProgress)
|
||||||
|
{
|
||||||
|
m_status = Status::InProgress;
|
||||||
|
m_loadTask = new JavaListLoadTask(this);
|
||||||
|
m_loadTask->start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const BaseVersionPtr JavaInstallList::at(int i) const
|
const BaseVersionPtr JavaInstallList::at(int i) const
|
||||||
@ -41,7 +61,7 @@ const BaseVersionPtr JavaInstallList::at(int i) const
|
|||||||
|
|
||||||
bool JavaInstallList::isLoaded()
|
bool JavaInstallList::isLoaded()
|
||||||
{
|
{
|
||||||
return m_loaded;
|
return m_status == JavaInstallList::Status::Done;
|
||||||
}
|
}
|
||||||
|
|
||||||
int JavaInstallList::count() const
|
int JavaInstallList::count() const
|
||||||
@ -87,7 +107,6 @@ void JavaInstallList::updateListData(QList<BaseVersionPtr> versions)
|
|||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
m_vlist = versions;
|
m_vlist = versions;
|
||||||
m_loaded = true;
|
|
||||||
sortVersions();
|
sortVersions();
|
||||||
if(m_vlist.size())
|
if(m_vlist.size())
|
||||||
{
|
{
|
||||||
@ -95,6 +114,8 @@ void JavaInstallList::updateListData(QList<BaseVersionPtr> versions)
|
|||||||
best->recommended = true;
|
best->recommended = true;
|
||||||
}
|
}
|
||||||
endResetModel();
|
endResetModel();
|
||||||
|
m_status = Status::Done;
|
||||||
|
m_loadTask.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sortJavas(BaseVersionPtr left, BaseVersionPtr right)
|
bool sortJavas(BaseVersionPtr left, BaseVersionPtr right)
|
||||||
|
@ -31,6 +31,12 @@ class JavaListLoadTask;
|
|||||||
class MULTIMC_LOGIC_EXPORT JavaInstallList : public BaseVersionList
|
class MULTIMC_LOGIC_EXPORT JavaInstallList : public BaseVersionList
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
enum class Status
|
||||||
|
{
|
||||||
|
NotDone,
|
||||||
|
InProgress,
|
||||||
|
Done
|
||||||
|
};
|
||||||
public:
|
public:
|
||||||
explicit JavaInstallList(QObject *parent = 0);
|
explicit JavaInstallList(QObject *parent = 0);
|
||||||
|
|
||||||
@ -47,9 +53,13 @@ public slots:
|
|||||||
void updateListData(QList<BaseVersionPtr> versions) override;
|
void updateListData(QList<BaseVersionPtr> versions) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QList<BaseVersionPtr> m_vlist;
|
void load();
|
||||||
|
shared_qobject_ptr<Task> getCurrentTask();
|
||||||
|
|
||||||
bool m_loaded = false;
|
protected:
|
||||||
|
Status m_status = Status::NotDone;
|
||||||
|
shared_qobject_ptr<JavaListLoadTask> m_loadTask;
|
||||||
|
QList<BaseVersionPtr> m_vlist;
|
||||||
};
|
};
|
||||||
|
|
||||||
class JavaListLoadTask : public Task
|
class JavaListLoadTask : public Task
|
||||||
|
Loading…
Reference in New Issue
Block a user