NOISSUE mark used accounts/sessions in selection menus

This commit is contained in:
Petr Mrázek
2016-11-15 02:51:22 +01:00
parent 3769897be1
commit 12f6534e77
13 changed files with 194 additions and 5 deletions

View File

@ -19,6 +19,7 @@
#include "launch/steps/TextPrint.h"
#include "minecraft/launch/LauncherPartLaunch.h"
#include "minecraft/launch/ModMinecraftJar.h"
#include "minecraft/launch/ClaimAccount.h"
#include "java/launch/CheckJava.h"
#include <icons/IIconList.h>
@ -425,6 +426,7 @@ std::shared_ptr<LaunchTask> MinecraftInstance::createLaunchTask(AuthSessionPtr s
// if we aren't in offline mode,.
if(session->status != AuthSession::PlayableOffline)
{
process->appendStep(std::make_shared<ClaimAccount>(pptr, session));
process->appendStep(std::make_shared<Update>(pptr));
}

View File

@ -6,6 +6,8 @@
#include "multimc_logic_export.h"
class MojangAccount;
struct User
{
QString id;
@ -46,6 +48,7 @@ struct MULTIMC_LOGIC_EXPORT AuthSession
bool auth_server_online = false;
// Did the user request online mode?
bool wants_online = true;
std::shared_ptr<MojangAccount> m_accountPtr;
};
typedef std::shared_ptr<AuthSession> AuthSessionPtr;

View File

@ -275,4 +275,26 @@ void MojangAccount::fillSession(AuthSessionPtr session)
session->session = "-";
}
session->u = user();
session->m_accountPtr = shared_from_this();
}
void MojangAccount::decrementUses()
{
Usable::decrementUses();
if(!isInUse())
{
emit changed();
qWarning() << "Account" << m_username << "is no longer in use.";
}
}
void MojangAccount::incrementUses()
{
bool wasInUse = isInUse();
Usable::incrementUses();
if(!wasInUse)
{
emit changed();
qWarning() << "Account" << m_username << "is now in use.";
}
}

View File

@ -24,6 +24,7 @@
#include <memory>
#include "AuthSession.h"
#include "Usable.h"
#include "multimc_logic_export.h"
@ -60,7 +61,10 @@ enum AccountStatus
* Said information may include things such as that account's username, client token, and access
* token if the user chose to stay logged in.
*/
class MULTIMC_LOGIC_EXPORT MojangAccount : public QObject
class MULTIMC_LOGIC_EXPORT MojangAccount :
public QObject,
public Usable,
public std::enable_shared_from_this<MojangAccount>
{
Q_OBJECT
public: /* construction */
@ -157,6 +161,11 @@ protected: /* variables */
// current task we are executing here
std::shared_ptr<YggdrasilTask> m_currentTask;
protected: /* methods */
void incrementUses() override;
void decrementUses() override;
private
slots:
void authSucceeded();

View File

@ -0,0 +1,24 @@
#include "ClaimAccount.h"
#include <launch/LaunchTask.h>
ClaimAccount::ClaimAccount(LaunchTask* parent, AuthSessionPtr session): LaunchStep(parent)
{
if(session->status == AuthSession::Status::PlayableOnline)
{
m_account = session->m_accountPtr;
}
}
void ClaimAccount::executeTask()
{
if(m_account)
{
lock.reset(new UseLock(m_account));
emitSucceeded();
}
}
void ClaimAccount::finalize()
{
lock.reset();
}

View File

@ -0,0 +1,35 @@
/* Copyright 2013-2016 MultiMC Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <launch/LaunchStep.h>
#include <minecraft/auth/MojangAccount.h>
class ClaimAccount: public LaunchStep
{
Q_OBJECT
public:
explicit ClaimAccount(LaunchTask *parent, AuthSessionPtr session);
void executeTask() override;
void finalize() override;
bool canAbort() const override
{
return false;
}
private:
std::unique_ptr<UseLock> lock;
MojangAccountPtr m_account;
};