summaryrefslogtreecommitdiffstats
path: root/logic/lists
diff options
context:
space:
mode:
Diffstat (limited to 'logic/lists')
-rw-r--r--logic/lists/InstanceList.cpp22
-rw-r--r--logic/lists/InstanceList.h6
-rw-r--r--logic/lists/MojangAccountList.cpp33
-rw-r--r--logic/lists/MojangAccountList.h30
4 files changed, 52 insertions, 39 deletions
diff --git a/logic/lists/InstanceList.cpp b/logic/lists/InstanceList.cpp
index 7081dc6f..b9595578 100644
--- a/logic/lists/InstanceList.cpp
+++ b/logic/lists/InstanceList.cpp
@@ -281,14 +281,6 @@ InstanceList::InstListError InstanceList::loadList()
auto &loader = InstanceFactory::get();
auto error = loader.loadInstance(instPtr, subDir);
- switch (error)
- {
- case InstanceFactory::NoLoadError:
- break;
- case InstanceFactory::NotAnInstance:
- break;
- }
-
if (error != InstanceFactory::NoLoadError && error != InstanceFactory::NotAnInstance)
{
QString errorMsg = QString("Failed to load instance %1: ")
@@ -362,8 +354,13 @@ int InstanceList::add(InstancePtr t)
return count() - 1;
}
-InstancePtr InstanceList::getInstanceById(QString instId)
+InstancePtr InstanceList::getInstanceById(QString instId) const
{
+ if (m_instances.isEmpty())
+ {
+ return InstancePtr();
+ }
+
QListIterator<InstancePtr> iter(m_instances);
InstancePtr inst;
while (iter.hasNext())
@@ -378,7 +375,12 @@ InstancePtr InstanceList::getInstanceById(QString instId)
return iter.peekPrevious();
}
-int InstanceList::getInstIndex(BaseInstance *inst)
+QModelIndex InstanceList::getInstanceIndexById(const QString &id) const
+{
+ return index(getInstIndex(getInstanceById(id).get()));
+}
+
+int InstanceList::getInstIndex(BaseInstance *inst) const
{
for (int i = 0; i < m_instances.count(); i++)
{
diff --git a/logic/lists/InstanceList.h b/logic/lists/InstanceList.h
index d08501eb..8cd39746 100644
--- a/logic/lists/InstanceList.h
+++ b/logic/lists/InstanceList.h
@@ -91,7 +91,9 @@ public:
int add(InstancePtr t);
/// Get an instance by ID
- InstancePtr getInstanceById(QString id);
+ InstancePtr getInstanceById(QString id) const;
+
+ QModelIndex getInstanceIndexById(const QString &id) const;
signals:
void dataIsInvalid();
@@ -106,7 +108,7 @@ slots:
void groupChanged();
private:
- int getInstIndex(BaseInstance *inst);
+ int getInstIndex(BaseInstance *inst) const;
protected:
QString m_instDir;
diff --git a/logic/lists/MojangAccountList.cpp b/logic/lists/MojangAccountList.cpp
index ec1937ad..466cc934 100644
--- a/logic/lists/MojangAccountList.cpp
+++ b/logic/lists/MojangAccountList.cpp
@@ -44,7 +44,6 @@ MojangAccountPtr MojangAccountList::findAccount(const QString &username) const
return nullptr;
}
-
const MojangAccountPtr MojangAccountList::at(int i) const
{
return MojangAccountPtr(m_accounts.at(i));
@@ -53,12 +52,13 @@ const MojangAccountPtr MojangAccountList::at(int i) const
void MojangAccountList::addAccount(const MojangAccountPtr account)
{
beginResetModel();
+ connect(account.get(), SIGNAL(changed()), SLOT(accountChanged()));
m_accounts.append(account);
endResetModel();
onListChanged();
}
-void MojangAccountList::removeAccount(const QString& username)
+void MojangAccountList::removeAccount(const QString &username)
{
beginResetModel();
for (auto account : m_accounts)
@@ -81,7 +81,6 @@ void MojangAccountList::removeAccount(QModelIndex index)
onListChanged();
}
-
MojangAccountPtr MojangAccountList::activeAccount() const
{
if (m_activeAccount.isEmpty())
@@ -90,7 +89,7 @@ MojangAccountPtr MojangAccountList::activeAccount() const
return findAccount(m_activeAccount);
}
-void MojangAccountList::setActiveAccount(const QString& username)
+void MojangAccountList::setActiveAccount(const QString &username)
{
beginResetModel();
if (username.isEmpty())
@@ -109,6 +108,11 @@ void MojangAccountList::setActiveAccount(const QString& username)
onActiveChanged();
}
+void MojangAccountList::accountChanged()
+{
+ // the list changed. there is no doubt.
+ onListChanged();
+}
void MojangAccountList::onListChanged()
{
@@ -127,13 +131,11 @@ void MojangAccountList::onActiveChanged()
emit activeAccountChanged();
}
-
int MojangAccountList::count() const
{
return m_accounts.count();
}
-
QVariant MojangAccountList::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
@@ -220,10 +222,11 @@ void MojangAccountList::updateListData(QList<MojangAccountPtr> versions)
endResetModel();
}
-bool MojangAccountList::loadList(const QString& filePath)
+bool MojangAccountList::loadList(const QString &filePath)
{
QString path = filePath;
- if (path.isEmpty()) path = m_listFilePath;
+ if (path.isEmpty())
+ path = m_listFilePath;
if (path.isEmpty())
{
QLOG_ERROR() << "Can't load Mojang account list. No file path given and no default set.";
@@ -231,7 +234,7 @@ bool MojangAccountList::loadList(const QString& filePath)
}
QFile file(path);
-
+
// Try to open the file and fail if we can't.
// TODO: We should probably report this error to the user.
if (!file.open(QIODevice::ReadOnly))
@@ -286,6 +289,7 @@ bool MojangAccountList::loadList(const QString& filePath)
MojangAccountPtr account = MojangAccount::loadFromJson(accountObj);
if (account.get() != nullptr)
{
+ connect(account.get(), SIGNAL(changed()), SLOT(accountChanged()));
m_accounts.append(account);
}
else
@@ -297,14 +301,15 @@ bool MojangAccountList::loadList(const QString& filePath)
// Load the active account.
m_activeAccount = root.value("activeAccount").toString("");
-
+
return true;
}
-bool MojangAccountList::saveList(const QString& filePath)
+bool MojangAccountList::saveList(const QString &filePath)
{
QString path(filePath);
- if (path.isEmpty()) path = m_listFilePath;
+ if (path.isEmpty())
+ path = m_listFilePath;
if (path.isEmpty())
{
QLOG_ERROR() << "Can't save Mojang account list. No file path given and no default set.";
@@ -337,7 +342,6 @@ bool MojangAccountList::saveList(const QString& filePath)
// Create a JSON document object to convert our JSON to bytes.
QJsonDocument doc(root);
-
// Now that we're done building the JSON object, we can write it to the file.
QLOG_DEBUG() << "Writing account list to file.";
QFile file(path);
@@ -362,6 +366,5 @@ bool MojangAccountList::saveList(const QString& filePath)
void MojangAccountList::setListFilePath(QString path, bool autosave)
{
m_listFilePath = path;
- autosave = autosave;
+ m_autosave = autosave;
}
-
diff --git a/logic/lists/MojangAccountList.h b/logic/lists/MojangAccountList.h
index 908f5a7a..744f3c51 100644
--- a/logic/lists/MojangAccountList.h
+++ b/logic/lists/MojangAccountList.h
@@ -22,7 +22,6 @@
#include "logic/auth/MojangAccount.h"
-
/*!
* \brief List of available Mojang accounts.
* This should be loaded in the background by MultiMC on startup.
@@ -44,10 +43,10 @@ public:
enum VListColumns
{
// TODO: Add icon column.
-
+
// First column - Active?
ActiveColumn = 0,
-
+
// Second column - Name
NameColumn,
};
@@ -74,7 +73,7 @@ public:
/*!
* Removes the mojang account with the given username from the account list.
*/
- virtual void removeAccount(const QString& username);
+ virtual void removeAccount(const QString &username);
/*!
* Removes the account at the given QModelIndex.
@@ -88,7 +87,7 @@ public:
* one doesn't exist.
*/
virtual MojangAccountPtr findAccount(const QString &username) const;
-
+
/*!
* Sets the default path to save the list file to.
* If autosave is true, this list will automatically save to the given path whenever it changes.
@@ -96,21 +95,21 @@ public:
* after calling this function to ensure an autosaved change doesn't overwrite the list you intended
* to load.
*/
- virtual void setListFilePath(QString path, bool autosave=false);
+ virtual void setListFilePath(QString path, bool autosave = false);
/*!
* \brief Loads the account list from the given file path.
* If the given file is an empty string (default), will load from the default account list file.
* \return True if successful, otherwise false.
*/
- virtual bool loadList(const QString& file="");
+ virtual bool loadList(const QString &file = "");
/*!
* \brief Saves the account list to the given file.
* If the given file is an empty string (default), will save from the default account list file.
* \return True if successful, otherwise false.
*/
- virtual bool saveList(const QString& file="");
+ virtual bool saveList(const QString &file = "");
/*!
* \brief Gets a pointer to the account that the user has selected as their "active" account.
@@ -124,12 +123,13 @@ public:
* Sets the given account as the current active account.
* If the username given is an empty string, sets the active account to nothing.
*/
- virtual void setActiveAccount(const QString& username);
+ virtual void setActiveAccount(const QString &username);
signals:
/*!
* Signal emitted to indicate that the account list has changed.
- * This will also fire if the value of an element in the list changes (will be implemented later).
+ * This will also fire if the value of an element in the list changes (will be implemented
+ * later).
*/
void listChanged();
@@ -138,6 +138,13 @@ signals:
*/
void activeAccountChanged();
+public
+slots:
+ /**
+ * This is called when one of the accounts changes and the list needs to be updated
+ */
+ void accountChanged();
+
protected:
/*!
* Called whenever the list changes.
@@ -166,7 +173,7 @@ protected:
* If true, the account list will automatically save to the account list path when it changes.
* Ignored if m_listFilePath is blank.
*/
- bool m_autosave;
+ bool m_autosave = false;
protected
slots:
@@ -184,4 +191,3 @@ slots:
*/
virtual void updateListData(QList<MojangAccountPtr> versions);
};
-