aboutsummaryrefslogtreecommitdiff
path: root/launcher/minecraft
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2021-12-04 02:10:14 +0100
committerPetr Mrázek <peterix@gmail.com>2021-12-04 02:10:14 +0100
commitd37003b1de68a74fc1dbe83128faae76f15e03d2 (patch)
tree889f726329af52279354152e58c007bc7172e7b5 /launcher/minecraft
parentdb6431d9e064e929ba9dafcf69422270a5ab369d (diff)
downloadPrismLauncher-d37003b1de68a74fc1dbe83128faae76f15e03d2.tar.gz
PrismLauncher-d37003b1de68a74fc1dbe83128faae76f15e03d2.tar.bz2
PrismLauncher-d37003b1de68a74fc1dbe83128faae76f15e03d2.zip
NOISSUE fix builds, make account refresh queue user friendly
Diffstat (limited to 'launcher/minecraft')
-rw-r--r--launcher/minecraft/auth/AccountList.cpp26
-rw-r--r--launcher/minecraft/auth/AccountList.h3
-rw-r--r--launcher/minecraft/auth/MinecraftAccount.cpp2
3 files changed, 23 insertions, 8 deletions
diff --git a/launcher/minecraft/auth/AccountList.cpp b/launcher/minecraft/auth/AccountList.cpp
index f7866f37..c96e8766 100644
--- a/launcher/minecraft/auth/AccountList.cpp
+++ b/launcher/minecraft/auth/AccountList.cpp
@@ -635,21 +635,33 @@ void AccountList::fillQueue() {
if(account->shouldRefresh()) {
auto idToRefresh = account->internalId();
- m_refreshQueue.push_back(idToRefresh);
- qDebug() << "AccountList: Queued account with internal ID " << idToRefresh << " to refresh";
+ queueRefresh(idToRefresh);
}
}
- m_refreshQueue.removeDuplicates();
tryNext();
}
void AccountList::requestRefresh(QString accountId) {
- m_refreshQueue.push_back(accountId);
+ auto index = m_refreshQueue.indexOf(accountId);
+ if(index != -1) {
+ m_refreshQueue.removeAt(index);
+ }
+ m_refreshQueue.push_front(accountId);
+ qDebug() << "AccountList: Pushed account with internal ID " << accountId << " to the front of the queue";
if(!isActive()) {
tryNext();
}
}
+void AccountList::queueRefresh(QString accountId) {
+ if(m_refreshQueue.indexOf(accountId) != -1) {
+ return;
+ }
+ m_refreshQueue.push_back(accountId);
+ qDebug() << "AccountList: Queued account with internal ID " << accountId << " to refresh";
+}
+
+
void AccountList::tryNext() {
beginActivity();
while (m_refreshQueue.length()) {
@@ -672,21 +684,21 @@ void AccountList::tryNext() {
}
endActivity();
// if we get here, no account needed refreshing. Schedule refresh in an hour.
- m_refreshTimer->start(std::chrono::hours(1));
+ m_refreshTimer->start(1000 * 3600);
}
void AccountList::authSucceeded() {
qDebug() << "RefreshSchedule: Background account refresh succeeded";
m_currentTask.reset();
endActivity();
- m_nextTimer->start(std::chrono::seconds(20));
+ m_nextTimer->start(1000 * 20);
}
void AccountList::authFailed(QString reason) {
qDebug() << "RefreshSchedule: Background account refresh failed: " << reason;
m_currentTask.reset();
endActivity();
- m_nextTimer->start(std::chrono::seconds(20));
+ m_nextTimer->start(1000 * 20);
}
bool AccountList::isActive() const {
diff --git a/launcher/minecraft/auth/AccountList.h b/launcher/minecraft/auth/AccountList.h
index 75686c21..fa1e7431 100644
--- a/launcher/minecraft/auth/AccountList.h
+++ b/launcher/minecraft/auth/AccountList.h
@@ -67,7 +67,10 @@ public:
MinecraftAccountPtr getAccountByProfileName(const QString &profileName) const;
QStringList profileNames() const;
+ // requesting a refresh pushes it to the front of the queue
void requestRefresh(QString accountId);
+ // queuing a refresh will let it go to the back of the queue (unless it's somewhere inside the queue already)
+ void queueRefresh(QString accountId);
/*!
* Sets the path to load/save the list file from/to.
diff --git a/launcher/minecraft/auth/MinecraftAccount.cpp b/launcher/minecraft/auth/MinecraftAccount.cpp
index 7ce87a3d..ed9e945e 100644
--- a/launcher/minecraft/auth/MinecraftAccount.cpp
+++ b/launcher/minecraft/auth/MinecraftAccount.cpp
@@ -211,7 +211,7 @@ bool MinecraftAccount::shouldRefresh() const {
if(!expiresTimestamp.isValid()) {
expiresTimestamp = issuedTimestamp.addSecs(24 * 3600);
}
- if (now.secsTo(expiresTimestamp) < 12 * 3600) {
+ if (now.secsTo(expiresTimestamp) < (12 * 3600)) {
return true;
}
return false;