mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-06 18:40:36 +00:00
user_manager: megamouse fixes 3
This commit is contained in:
parent
9ca8ec8ec7
commit
e58b7cbe1f
@ -282,10 +282,6 @@ void Emulator::Init()
|
|||||||
const std::string dev_hdd1 = fmt::replace_all(g_cfg.vfs.dev_hdd1, "$(EmulatorDir)", emu_dir);
|
const std::string dev_hdd1 = fmt::replace_all(g_cfg.vfs.dev_hdd1, "$(EmulatorDir)", emu_dir);
|
||||||
const std::string dev_usb = fmt::replace_all(g_cfg.vfs.dev_usb000, "$(EmulatorDir)", emu_dir);
|
const std::string dev_usb = fmt::replace_all(g_cfg.vfs.dev_usb000, "$(EmulatorDir)", emu_dir);
|
||||||
|
|
||||||
// Set selected user.
|
|
||||||
m_usr = g_cfg.usr.selected_usr;
|
|
||||||
m_usrid = static_cast<u32>(std::stoul(m_usr));
|
|
||||||
|
|
||||||
fs::create_path(dev_hdd0);
|
fs::create_path(dev_hdd0);
|
||||||
fs::create_path(dev_hdd1);
|
fs::create_path(dev_hdd1);
|
||||||
fs::create_path(dev_usb);
|
fs::create_path(dev_usb);
|
||||||
@ -409,6 +405,34 @@ void Emulator::Init()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool Emulator::SetUsr(const std::string& user)
|
||||||
|
{
|
||||||
|
if (user.empty())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 id;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
id = static_cast<u32>(std::stoul(user));
|
||||||
|
}
|
||||||
|
catch (const std::exception&)
|
||||||
|
{
|
||||||
|
id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (id == 0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_usrid = id;
|
||||||
|
m_usr = user;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool Emulator::BootRsxCapture(const std::string& path)
|
bool Emulator::BootRsxCapture(const std::string& path)
|
||||||
{
|
{
|
||||||
if (!fs::is_file(path))
|
if (!fs::is_file(path))
|
||||||
|
@ -209,8 +209,8 @@ class Emulator final
|
|||||||
std::string m_title;
|
std::string m_title;
|
||||||
std::string m_cat;
|
std::string m_cat;
|
||||||
std::string m_dir;
|
std::string m_dir;
|
||||||
std::string m_usr;
|
std::string m_usr{"00000001"};
|
||||||
u32 m_usrid;
|
u32 m_usrid{1};
|
||||||
|
|
||||||
bool m_force_boot = false;
|
bool m_force_boot = false;
|
||||||
|
|
||||||
@ -291,6 +291,8 @@ public:
|
|||||||
return m_usrid;
|
return m_usrid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool SetUsr(const std::string& user);
|
||||||
|
|
||||||
u64 GetPauseTime()
|
u64 GetPauseTime()
|
||||||
{
|
{
|
||||||
return m_pause_amend_time;
|
return m_pause_amend_time;
|
||||||
@ -505,14 +507,6 @@ struct cfg_root : cfg::node
|
|||||||
|
|
||||||
} net{this};
|
} net{this};
|
||||||
|
|
||||||
struct node_usr : cfg::node
|
|
||||||
{
|
|
||||||
node_usr(cfg::node* _this) : cfg::node(_this, "User") {}
|
|
||||||
|
|
||||||
cfg::string selected_usr{ this, "Selected User", "00000001" };
|
|
||||||
|
|
||||||
} usr{this};
|
|
||||||
|
|
||||||
struct node_misc : cfg::node
|
struct node_misc : cfg::node
|
||||||
{
|
{
|
||||||
node_misc(cfg::node* _this) : cfg::node(_this, "Miscellaneous") {}
|
node_misc(cfg::node* _this) : cfg::node(_this, "Miscellaneous") {}
|
||||||
|
@ -72,11 +72,12 @@ void rpcs3_app::Init()
|
|||||||
setApplicationName("RPCS3");
|
setApplicationName("RPCS3");
|
||||||
setWindowIcon(QIcon(":/rpcs3.ico"));
|
setWindowIcon(QIcon(":/rpcs3.ico"));
|
||||||
|
|
||||||
Emu.Init();
|
|
||||||
|
|
||||||
guiSettings.reset(new gui_settings());
|
guiSettings.reset(new gui_settings());
|
||||||
emuSettings.reset(new emu_settings());
|
emuSettings.reset(new emu_settings());
|
||||||
|
|
||||||
|
// Force init the emulator
|
||||||
|
InitializeEmulator(guiSettings->GetCurrentUser().toStdString(), true);
|
||||||
|
|
||||||
// Create the main window
|
// Create the main window
|
||||||
RPCS3MainWin = new main_window(guiSettings, emuSettings, nullptr);
|
RPCS3MainWin = new main_window(guiSettings, emuSettings, nullptr);
|
||||||
|
|
||||||
@ -113,6 +114,21 @@ void rpcs3_app::Init()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Emu.Init() wrapper for user manager */
|
||||||
|
bool rpcs3_app::InitializeEmulator(const std::string& user, bool force_init)
|
||||||
|
{
|
||||||
|
// try to set a new user
|
||||||
|
const bool user_was_set = Emu.SetUsr(user);
|
||||||
|
|
||||||
|
// only init the emulation if forced or a user was set
|
||||||
|
if (user_was_set || force_init)
|
||||||
|
{
|
||||||
|
Emu.Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
return user_was_set;
|
||||||
|
}
|
||||||
|
|
||||||
/** RPCS3 emulator has functions it desires to call from the GUI at times. Initialize them in here.
|
/** RPCS3 emulator has functions it desires to call from the GUI at times. Initialize them in here.
|
||||||
*/
|
*/
|
||||||
void rpcs3_app::InitializeCallbacks()
|
void rpcs3_app::InitializeCallbacks()
|
||||||
|
@ -34,6 +34,9 @@ public:
|
|||||||
/** Call this method before calling app.exec
|
/** Call this method before calling app.exec
|
||||||
*/
|
*/
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
|
/** Emu.Init() wrapper for user manager */
|
||||||
|
static bool InitializeEmulator(const std::string& user, bool force_init);
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void OnEmulatorRun();
|
void OnEmulatorRun();
|
||||||
void OnEmulatorPause();
|
void OnEmulatorPause();
|
||||||
|
@ -110,9 +110,6 @@ public:
|
|||||||
// Network
|
// Network
|
||||||
ConnectionStatus,
|
ConnectionStatus,
|
||||||
|
|
||||||
// User
|
|
||||||
SelectedUser,
|
|
||||||
|
|
||||||
// Language
|
// Language
|
||||||
Language,
|
Language,
|
||||||
EnableHostRoot,
|
EnableHostRoot,
|
||||||
@ -290,9 +287,6 @@ private:
|
|||||||
// Networking
|
// Networking
|
||||||
{ ConnectionStatus, { "Net", "Connection status"}},
|
{ ConnectionStatus, { "Net", "Connection status"}},
|
||||||
|
|
||||||
// User
|
|
||||||
{SelectedUser, {"User", "Selected User"}},
|
|
||||||
|
|
||||||
// System
|
// System
|
||||||
{ Language, { "System", "Language"}},
|
{ Language, { "System", "Language"}},
|
||||||
{ EnableHostRoot, { "VFS", "Enable /host_root/"}},
|
{ EnableHostRoot, { "VFS", "Enable /host_root/"}},
|
||||||
|
@ -18,6 +18,23 @@ gui_settings::~gui_settings()
|
|||||||
m_settings.sync();
|
m_settings.sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString gui_settings::GetCurrentUser()
|
||||||
|
{
|
||||||
|
// load user
|
||||||
|
bool is_valid_user;
|
||||||
|
const QString user = GetValue(gui::um_active_user).toString();
|
||||||
|
const u32 user_id = user.toInt(&is_valid_user);
|
||||||
|
|
||||||
|
// set user if valid
|
||||||
|
if (is_valid_user && user_id > 0)
|
||||||
|
{
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_FATAL(GENERAL, "Could not parse user setting: '%s' = '%d'.", user.toStdString(), user_id);
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
QString gui_settings::GetSettingsDir()
|
QString gui_settings::GetSettingsDir()
|
||||||
{
|
{
|
||||||
return m_settingsDir.absolutePath();
|
return m_settingsDir.absolutePath();
|
||||||
|
@ -219,6 +219,7 @@ namespace gui
|
|||||||
const gui_save sd_geometry = gui_save(savedata, "geometry", QByteArray());
|
const gui_save sd_geometry = gui_save(savedata, "geometry", QByteArray());
|
||||||
|
|
||||||
const gui_save um_geometry = gui_save(users, "geometry", QByteArray());
|
const gui_save um_geometry = gui_save(users, "geometry", QByteArray());
|
||||||
|
const gui_save um_active_user = gui_save(users, "active_user", "00000001");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Class for GUI settings..
|
/** Class for GUI settings..
|
||||||
@ -231,6 +232,7 @@ public:
|
|||||||
explicit gui_settings(QObject* parent = nullptr);
|
explicit gui_settings(QObject* parent = nullptr);
|
||||||
~gui_settings();
|
~gui_settings();
|
||||||
|
|
||||||
|
QString GetCurrentUser();
|
||||||
QString GetSettingsDir();
|
QString GetSettingsDir();
|
||||||
|
|
||||||
/** Changes the settings file to the destination preset*/
|
/** Changes the settings file to the destination preset*/
|
||||||
|
@ -1269,7 +1269,7 @@ void main_window::CreateConnects()
|
|||||||
|
|
||||||
connect(ui->actionManage_Users, &QAction::triggered, [=]
|
connect(ui->actionManage_Users, &QAction::triggered, [=]
|
||||||
{
|
{
|
||||||
user_manager_dialog* user_manager = new user_manager_dialog(guiSettings, emuSettings, this);
|
user_manager_dialog* user_manager = new user_manager_dialog(guiSettings, this);
|
||||||
user_manager->show();
|
user_manager->show();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -501,9 +501,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionManage_Users">
|
<action name="actionManage_Users">
|
||||||
<property name="enabled">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>User Accounts</string>
|
<string>User Accounts</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -146,7 +146,6 @@ void save_manager_dialog::UpdateList()
|
|||||||
{
|
{
|
||||||
if (m_dir == "")
|
if (m_dir == "")
|
||||||
{
|
{
|
||||||
// fmt::format(%shome ... is harder to read than straight concatenation.
|
|
||||||
m_dir = Emu.GetHddDir() + "home/" + Emu.GetUsr() + "/savedata/";
|
m_dir = Emu.GetHddDir() + "home/" + Emu.GetUsr() + "/savedata/";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ public:
|
|||||||
|
|
||||||
std::string GetUserId() { return m_user_id; };
|
std::string GetUserId() { return m_user_id; };
|
||||||
std::string GetUserDir() { return m_user_dir; };
|
std::string GetUserDir() { return m_user_dir; };
|
||||||
std::string GetUserName() { return m_username; };
|
std::string GetUsername() { return m_username; };
|
||||||
~UserAccount();
|
~UserAccount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "user_manager_dialog.h"
|
#include "user_manager_dialog.h"
|
||||||
#include "table_item_delegate.h"
|
#include "table_item_delegate.h"
|
||||||
|
#include "rpcs3_app.h"
|
||||||
|
|
||||||
#include "Utilities/StrUtil.h"
|
#include "Utilities/StrUtil.h"
|
||||||
|
|
||||||
@ -43,14 +44,13 @@ namespace
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
user_manager_dialog::user_manager_dialog(std::shared_ptr<gui_settings> gui_settings, std::shared_ptr<emu_settings> emu_settings, QWidget* parent)
|
user_manager_dialog::user_manager_dialog(std::shared_ptr<gui_settings> gui_settings, QWidget* parent)
|
||||||
: QDialog(parent), m_user_list(), m_sort_column(1), m_sort_ascending(true), m_gui_settings(gui_settings), m_emu_settings(emu_settings)
|
: QDialog(parent), m_user_list(), m_sort_column(1), m_sort_ascending(true), m_gui_settings(gui_settings)
|
||||||
{
|
{
|
||||||
setWindowTitle(tr("User Manager"));
|
setWindowTitle(tr("User Manager"));
|
||||||
setMinimumSize(QSize(400, 400));
|
setMinimumSize(QSize(400, 400));
|
||||||
setModal(true);
|
setModal(true);
|
||||||
|
|
||||||
m_emu_settings->LoadSettings();
|
|
||||||
Init();
|
Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ void user_manager_dialog::Init()
|
|||||||
vbox_main->addLayout(hbox_buttons);
|
vbox_main->addLayout(hbox_buttons);
|
||||||
setLayout(vbox_main);
|
setLayout(vbox_main);
|
||||||
|
|
||||||
m_active_user = m_emu_settings->GetSetting(emu_settings::SelectedUser);
|
m_active_user = m_gui_settings->GetValue(gui::um_active_user).toString().toStdString();
|
||||||
UpdateTable();
|
UpdateTable();
|
||||||
|
|
||||||
restoreGeometry(m_gui_settings->GetValue(gui::um_geometry).toByteArray());
|
restoreGeometry(m_gui_settings->GetValue(gui::um_geometry).toByteArray());
|
||||||
@ -173,7 +173,7 @@ void user_manager_dialog::UpdateTable(bool mark_only)
|
|||||||
user_id_item->setFlags(user_id_item->flags() & ~Qt::ItemIsEditable);
|
user_id_item->setFlags(user_id_item->flags() & ~Qt::ItemIsEditable);
|
||||||
m_table->setItem(row, 0, user_id_item);
|
m_table->setItem(row, 0, user_id_item);
|
||||||
|
|
||||||
QTableWidgetItem* username_item = new QTableWidgetItem(qstr(user.second.GetUserName()));
|
QTableWidgetItem* username_item = new QTableWidgetItem(qstr(user.second.GetUsername()));
|
||||||
username_item->setData(Qt::UserRole, user.first); // For sorting to work properly
|
username_item->setData(Qt::UserRole, user.first); // For sorting to work properly
|
||||||
username_item->setFlags(username_item->flags() & ~Qt::ItemIsEditable);
|
username_item->setFlags(username_item->flags() & ~Qt::ItemIsEditable);
|
||||||
m_table->setItem(row, 1, username_item);
|
m_table->setItem(row, 1, username_item);
|
||||||
@ -210,7 +210,7 @@ void user_manager_dialog::OnUserRemove()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString username = qstr(m_user_list[key].GetUserName());
|
const QString username = qstr(m_user_list[key].GetUsername());
|
||||||
const QString user_id = qstr(m_user_list[key].GetUserId());
|
const QString user_id = qstr(m_user_list[key].GetUserId());
|
||||||
const std::string user_dir = m_user_list[key].GetUserDir();
|
const std::string user_dir = m_user_list[key].GetUserDir();
|
||||||
|
|
||||||
@ -256,7 +256,7 @@ void user_manager_dialog::OnUserRename()
|
|||||||
}
|
}
|
||||||
|
|
||||||
const std::string user_id = m_user_list[key].GetUserId();
|
const std::string user_id = m_user_list[key].GetUserId();
|
||||||
const std::string username = m_user_list[key].GetUserName();
|
const std::string username = m_user_list[key].GetUsername();
|
||||||
|
|
||||||
QInputDialog* dialog = new QInputDialog(this);
|
QInputDialog* dialog = new QInputDialog(this);
|
||||||
dialog->setWindowTitle(tr("Rename User"));
|
dialog->setWindowTitle(tr("Rename User"));
|
||||||
@ -334,17 +334,26 @@ void user_manager_dialog::OnUserCreate()
|
|||||||
|
|
||||||
void user_manager_dialog::OnUserLogin()
|
void user_manager_dialog::OnUserLogin()
|
||||||
{
|
{
|
||||||
u32 key = GetUserKey();
|
if (!Emu.IsStopped() && QMessageBox::question(this, tr("Stop emulator?"),
|
||||||
if (key == 0)
|
tr("In order to change the user you have to stop the emulator first.\n\nStop the emulator now?"),
|
||||||
|
QMessageBox::Yes | QMessageBox::Abort) != QMessageBox::Yes)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string selected_user_id = m_user_list[key].GetUserId();
|
Emu.Stop();
|
||||||
|
|
||||||
m_active_user = selected_user_id;
|
const u32 key = GetUserKey();
|
||||||
m_emu_settings->SetSetting(emu_settings::SelectedUser, m_active_user);
|
const std::string new_user = m_user_list[key].GetUserId();
|
||||||
m_emu_settings->SaveSettings();
|
|
||||||
|
if (!rpcs3_app::InitializeEmulator(new_user, false))
|
||||||
|
{
|
||||||
|
LOG_FATAL(GENERAL, "Failed to login user! username=%s key=%d", new_user, key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_active_user = new_user;
|
||||||
|
m_gui_settings->SetValue(gui::um_active_user, qstr(m_active_user));
|
||||||
UpdateTable(true);
|
UpdateTable(true);
|
||||||
Q_EMIT OnUserLoginSuccess();
|
Q_EMIT OnUserLoginSuccess();
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ class user_manager_dialog : public QDialog
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit user_manager_dialog(std::shared_ptr<gui_settings> gui_settings, std::shared_ptr<emu_settings> emu_settings, QWidget* parent = nullptr);
|
explicit user_manager_dialog(std::shared_ptr<gui_settings> gui_settings, QWidget* parent = nullptr);
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void OnUserLoginSuccess();
|
void OnUserLoginSuccess();
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
@ -50,7 +50,6 @@ private:
|
|||||||
std::map<u32, UserAccount> m_user_list;
|
std::map<u32, UserAccount> m_user_list;
|
||||||
|
|
||||||
std::shared_ptr<gui_settings> m_gui_settings;
|
std::shared_ptr<gui_settings> m_gui_settings;
|
||||||
std::shared_ptr<emu_settings> m_emu_settings;
|
|
||||||
|
|
||||||
int m_sort_column;
|
int m_sort_column;
|
||||||
bool m_sort_ascending;
|
bool m_sort_ascending;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user