summaryrefslogtreecommitdiffstats
path: root/logic/lists
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-12-01 02:00:42 +0100
committerPetr Mrázek <peterix@gmail.com>2013-12-01 02:00:42 +0100
commitf27a6c39ea796f946893ced1d9f80441ad9aa18c (patch)
treefed31b28bc7752f4fea85aefddfeff62701e13b7 /logic/lists
parent2eaf33816b0c4f6fd61ea2b086fa1c4f9fcba4c5 (diff)
downloadMultiMC-f27a6c39ea796f946893ced1d9f80441ad9aa18c.tar
MultiMC-f27a6c39ea796f946893ced1d9f80441ad9aa18c.tar.gz
MultiMC-f27a6c39ea796f946893ced1d9f80441ad9aa18c.tar.lz
MultiMC-f27a6c39ea796f946893ced1d9f80441ad9aa18c.tar.xz
MultiMC-f27a6c39ea796f946893ced1d9f80441ad9aa18c.zip
Fix login and startup logging issues
Auth uses the refresh endpoint instead of validate. This means less password entering. Console will now only autoscroll when already scrolled all the way down. Better conformance with the Yggdrasil auth protocol (not complete yet, but Mojang launcher isn't complete either). Fix bug that prevented saving the account data (uninitialized variable). Accounts can now trigger account list saving, this is used for the refresh endpoint.
Diffstat (limited to 'logic/lists')
-rw-r--r--logic/lists/MojangAccountList.cpp33
-rw-r--r--logic/lists/MojangAccountList.h30
2 files changed, 36 insertions, 27 deletions
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);
};
-