Merge pull request #13032 from german77/qlauncher
service: Implement functions needed by Qlaunch
This commit is contained in:
commit
1fc86b1e3a
|
@ -329,9 +329,8 @@ bool ProfileManager::GetProfileBaseAndData(const ProfileInfo& user, ProfileBase&
|
||||||
|
|
||||||
/// Returns if the system is allowing user registrations or not
|
/// Returns if the system is allowing user registrations or not
|
||||||
bool ProfileManager::CanSystemRegisterUser() const {
|
bool ProfileManager::CanSystemRegisterUser() const {
|
||||||
return false; // TODO(ogniK): Games shouldn't have
|
// TODO: Both games and applets can register users. Determine when this condition is not meet.
|
||||||
// access to user registration, when we
|
return true;
|
||||||
// emulate qlaunch. Update this to dynamically change.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProfileManager::RemoveUser(UUID uuid) {
|
bool ProfileManager::RemoveUser(UUID uuid) {
|
||||||
|
|
|
@ -35,6 +35,21 @@ AppletStorageChannel& InitializeFakeCallerApplet(Core::System& system,
|
||||||
return applet->caller_applet_broker->GetInData();
|
return applet->caller_applet_broker->GetInData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PushInShowQlaunch(Core::System& system, AppletStorageChannel& channel) {
|
||||||
|
const CommonArguments arguments{
|
||||||
|
.arguments_version = CommonArgumentVersion::Version3,
|
||||||
|
.size = CommonArgumentSize::Version3,
|
||||||
|
.library_version = 0,
|
||||||
|
.theme_color = ThemeColor::BasicBlack,
|
||||||
|
.play_startup_sound = true,
|
||||||
|
.system_tick = system.CoreTiming().GetClockTicks(),
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<u8> argument_data(sizeof(arguments));
|
||||||
|
std::memcpy(argument_data.data(), &arguments, sizeof(arguments));
|
||||||
|
channel.Push(std::make_shared<IStorage>(system, std::move(argument_data)));
|
||||||
|
}
|
||||||
|
|
||||||
void PushInShowAlbum(Core::System& system, AppletStorageChannel& channel) {
|
void PushInShowAlbum(Core::System& system, AppletStorageChannel& channel) {
|
||||||
const CommonArguments arguments{
|
const CommonArguments arguments{
|
||||||
.arguments_version = CommonArgumentVersion::Version3,
|
.arguments_version = CommonArgumentVersion::Version3,
|
||||||
|
@ -284,6 +299,9 @@ void AppletManager::CreateAndInsertByFrontendAppletParameters(
|
||||||
|
|
||||||
// Starting from frontend, some applets require input data.
|
// Starting from frontend, some applets require input data.
|
||||||
switch (applet->applet_id) {
|
switch (applet->applet_id) {
|
||||||
|
case AppletId::QLaunch:
|
||||||
|
PushInShowQlaunch(m_system, InitializeFakeCallerApplet(m_system, applet));
|
||||||
|
break;
|
||||||
case AppletId::Cabinet:
|
case AppletId::Cabinet:
|
||||||
PushInShowCabinetData(m_system, InitializeFakeCallerApplet(m_system, applet));
|
PushInShowCabinetData(m_system, InitializeFakeCallerApplet(m_system, applet));
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -284,17 +284,17 @@ Result ILibraryAppletSelfAccessor::GetCurrentApplicationId(Out<u64> out_applicat
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers(
|
Result ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers(
|
||||||
Out<bool> out_no_users_available, Out<s32> out_users_count,
|
Out<bool> out_can_select_any_user, Out<s32> out_users_count,
|
||||||
OutArray<Common::UUID, BufferAttr_HipcMapAlias> out_users) {
|
OutArray<Common::UUID, BufferAttr_HipcMapAlias> out_users) {
|
||||||
const Service::Account::ProfileManager manager{};
|
const Service::Account::ProfileManager manager{};
|
||||||
|
|
||||||
*out_no_users_available = true;
|
*out_can_select_any_user = false;
|
||||||
*out_users_count = -1;
|
*out_users_count = -1;
|
||||||
|
|
||||||
LOG_INFO(Service_AM, "called");
|
LOG_INFO(Service_AM, "called");
|
||||||
|
|
||||||
if (manager.GetUserCount() > 0) {
|
if (manager.GetUserCount() > 0) {
|
||||||
*out_no_users_available = false;
|
*out_can_select_any_user = true;
|
||||||
*out_users_count = static_cast<s32>(manager.GetUserCount());
|
*out_users_count = static_cast<s32>(manager.GetUserCount());
|
||||||
|
|
||||||
const auto users = manager.GetAllUsers();
|
const auto users = manager.GetAllUsers();
|
||||||
|
|
|
@ -71,7 +71,7 @@ private:
|
||||||
ErrorCode error_code, InLargeData<ErrorContext, BufferAttr_HipcMapAlias> error_context);
|
ErrorCode error_code, InLargeData<ErrorContext, BufferAttr_HipcMapAlias> error_context);
|
||||||
Result GetMainAppletApplicationDesiredLanguage(Out<u64> out_desired_language);
|
Result GetMainAppletApplicationDesiredLanguage(Out<u64> out_desired_language);
|
||||||
Result GetCurrentApplicationId(Out<u64> out_application_id);
|
Result GetCurrentApplicationId(Out<u64> out_application_id);
|
||||||
Result GetMainAppletAvailableUsers(Out<bool> out_no_users_available, Out<s32> out_users_count,
|
Result GetMainAppletAvailableUsers(Out<bool> out_can_select_any_user, Out<s32> out_users_count,
|
||||||
OutArray<Common::UUID, BufferAttr_HipcMapAlias> out_users);
|
OutArray<Common::UUID, BufferAttr_HipcMapAlias> out_users);
|
||||||
Result ShouldSetGpuTimeSliceManually(Out<bool> out_should_set_gpu_time_slice_manually);
|
Result ShouldSetGpuTimeSliceManually(Out<bool> out_should_set_gpu_time_slice_manually);
|
||||||
Result Cmd160(Out<u64> out_unknown0);
|
Result Cmd160(Out<u64> out_unknown0);
|
||||||
|
|
|
@ -16,7 +16,7 @@ IAlbumAccessorService::IAlbumAccessorService(Core::System& system_,
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, nullptr, "GetAlbumFileCount"},
|
{0, nullptr, "GetAlbumFileCount"},
|
||||||
{1, nullptr, "GetAlbumFileList"},
|
{1, C<&IAlbumAccessorService::GetAlbumFileList>, "GetAlbumFileList"},
|
||||||
{2, nullptr, "LoadAlbumFile"},
|
{2, nullptr, "LoadAlbumFile"},
|
||||||
{3, C<&IAlbumAccessorService::DeleteAlbumFile>, "DeleteAlbumFile"},
|
{3, C<&IAlbumAccessorService::DeleteAlbumFile>, "DeleteAlbumFile"},
|
||||||
{4, nullptr, "StorageCopyAlbumFile"},
|
{4, nullptr, "StorageCopyAlbumFile"},
|
||||||
|
@ -62,6 +62,15 @@ IAlbumAccessorService::IAlbumAccessorService(Core::System& system_,
|
||||||
|
|
||||||
IAlbumAccessorService::~IAlbumAccessorService() = default;
|
IAlbumAccessorService::~IAlbumAccessorService() = default;
|
||||||
|
|
||||||
|
Result IAlbumAccessorService::GetAlbumFileList(
|
||||||
|
Out<u64> out_count, AlbumStorage storage,
|
||||||
|
OutArray<AlbumEntry, BufferAttr_HipcMapAlias> out_entries) {
|
||||||
|
LOG_INFO(Service_Capture, "called, storage={}", storage);
|
||||||
|
|
||||||
|
const Result result = manager->GetAlbumFileList(out_entries, *out_count, storage, 0);
|
||||||
|
R_RETURN(TranslateResult(result));
|
||||||
|
}
|
||||||
|
|
||||||
Result IAlbumAccessorService::DeleteAlbumFile(AlbumFileId file_id) {
|
Result IAlbumAccessorService::DeleteAlbumFile(AlbumFileId file_id) {
|
||||||
LOG_INFO(Service_Capture, "called, application_id=0x{:0x}, storage={}, type={}",
|
LOG_INFO(Service_Capture, "called, application_id=0x{:0x}, storage={}, type={}",
|
||||||
file_id.application_id, file_id.storage, file_id.type);
|
file_id.application_id, file_id.storage, file_id.type);
|
||||||
|
|
|
@ -21,6 +21,9 @@ public:
|
||||||
~IAlbumAccessorService() override;
|
~IAlbumAccessorService() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Result GetAlbumFileList(Out<u64> out_count, AlbumStorage storage,
|
||||||
|
OutArray<AlbumEntry, BufferAttr_HipcMapAlias> out_entries);
|
||||||
|
|
||||||
Result DeleteAlbumFile(AlbumFileId file_id);
|
Result DeleteAlbumFile(AlbumFileId file_id);
|
||||||
|
|
||||||
Result IsAlbumMounted(Out<bool> out_is_mounted, AlbumStorage storage);
|
Result IsAlbumMounted(Out<bool> out_is_mounted, AlbumStorage storage);
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
#include "common/logging/log.h"
|
||||||
|
#include "core/hle/service/cmif_serialization.h"
|
||||||
#include "core/hle/service/erpt/erpt.h"
|
#include "core/hle/service/erpt/erpt.h"
|
||||||
#include "core/hle/service/server_manager.h"
|
#include "core/hle/service/server_manager.h"
|
||||||
#include "core/hle/service/service.h"
|
#include "core/hle/service/service.h"
|
||||||
|
@ -15,7 +17,7 @@ public:
|
||||||
explicit ErrorReportContext(Core::System& system_) : ServiceFramework{system_, "erpt:c"} {
|
explicit ErrorReportContext(Core::System& system_) : ServiceFramework{system_, "erpt:c"} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, nullptr, "SubmitContext"},
|
{0, C<&ErrorReportContext::SubmitContext>, "SubmitContext"},
|
||||||
{1, nullptr, "CreateReportV0"},
|
{1, nullptr, "CreateReportV0"},
|
||||||
{2, nullptr, "SetInitialLaunchSettingsCompletionTime"},
|
{2, nullptr, "SetInitialLaunchSettingsCompletionTime"},
|
||||||
{3, nullptr, "ClearInitialLaunchSettingsCompletionTime"},
|
{3, nullptr, "ClearInitialLaunchSettingsCompletionTime"},
|
||||||
|
@ -36,6 +38,14 @@ public:
|
||||||
|
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Result SubmitContext(InBuffer<BufferAttr_HipcMapAlias> buffer_a,
|
||||||
|
InBuffer<BufferAttr_HipcMapAlias> buffer_b) {
|
||||||
|
LOG_WARNING(Service_SET, "(STUBBED) called, buffer_a_size={}, buffer_b_size={}",
|
||||||
|
buffer_a.size(), buffer_b.size());
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ErrorReportSession final : public ServiceFramework<ErrorReportSession> {
|
class ErrorReportSession final : public ServiceFramework<ErrorReportSession> {
|
||||||
|
|
Reference in New Issue