mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-07-10 19:42:15 +02:00
Title Id -> Program Id
This commit is contained in:
parent
1faa2b581c
commit
b9f313ba08
@ -582,12 +582,12 @@ namespace ams::ncm {
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
static constexpr ContentMetaKey Make(ProgramId title_id, u32 version, ContentMetaType type) {
|
||||
return { .id = title_id, .version = version, .type = type };
|
||||
static constexpr ContentMetaKey Make(ProgramId program_id, u32 version, ContentMetaType type) {
|
||||
return { .id = program_id, .version = version, .type = type };
|
||||
}
|
||||
|
||||
static constexpr ContentMetaKey Make(ProgramId title_id, u32 version, ContentMetaType type, ContentInstallType install_type) {
|
||||
return { .id = title_id, .version = version, .type = type, .install_type = install_type };
|
||||
static constexpr ContentMetaKey Make(ProgramId program_id, u32 version, ContentMetaType type, ContentInstallType install_type) {
|
||||
return { .id = program_id, .version = version, .type = type, .install_type = install_type };
|
||||
}
|
||||
};
|
||||
|
||||
@ -598,7 +598,7 @@ namespace ams::ncm {
|
||||
|
||||
struct ApplicationContentMetaKey {
|
||||
ContentMetaKey key;
|
||||
ProgramId application_title_id;
|
||||
ProgramId application_program_id;
|
||||
};
|
||||
|
||||
static_assert(sizeof(ApplicationContentMetaKey) == 0x18, "ApplicationContentMetaKey definition!");
|
||||
|
@ -22,20 +22,20 @@ namespace ams::lr::impl {
|
||||
NON_COPYABLE(LocationRedirection);
|
||||
NON_MOVEABLE(LocationRedirection);
|
||||
private:
|
||||
ncm::ProgramId title_id;
|
||||
ncm::ProgramId owner_tid;
|
||||
ncm::ProgramId program_id;
|
||||
ncm::ProgramId owner_id;
|
||||
Path path;
|
||||
u32 flags;
|
||||
public:
|
||||
LocationRedirection(ncm::ProgramId title_id, ncm::ProgramId owner_tid, const Path& path, u32 flags) :
|
||||
title_id(title_id), owner_tid(owner_tid), path(path), flags(flags) { /* ... */ }
|
||||
LocationRedirection(ncm::ProgramId program_id, ncm::ProgramId owner_id, const Path& path, u32 flags) :
|
||||
program_id(program_id), owner_id(owner_id), path(path), flags(flags) { /* ... */ }
|
||||
|
||||
ncm::ProgramId GetTitleId() const {
|
||||
return this->title_id;
|
||||
ncm::ProgramId GetProgramId() const {
|
||||
return this->program_id;
|
||||
}
|
||||
|
||||
ncm::ProgramId GetOwnerTitleId() const {
|
||||
return this->owner_tid;
|
||||
ncm::ProgramId GetOwnerProgramId() const {
|
||||
return this->owner_id;
|
||||
}
|
||||
|
||||
void GetPath(Path *out) const {
|
||||
@ -51,13 +51,13 @@ namespace ams::lr::impl {
|
||||
}
|
||||
};
|
||||
|
||||
bool LocationRedirector::FindRedirection(Path *out, ncm::ProgramId title_id) {
|
||||
bool LocationRedirector::FindRedirection(Path *out, ncm::ProgramId program_id) {
|
||||
if (this->redirection_list.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const auto &redirection : this->redirection_list) {
|
||||
if (redirection.GetTitleId() == title_id) {
|
||||
if (redirection.GetProgramId() == program_id) {
|
||||
redirection.GetPath(out);
|
||||
return true;
|
||||
}
|
||||
@ -65,27 +65,27 @@ namespace ams::lr::impl {
|
||||
return false;
|
||||
}
|
||||
|
||||
void LocationRedirector::SetRedirection(ncm::ProgramId title_id, const Path &path, u32 flags) {
|
||||
this->SetRedirection(title_id, path, flags);
|
||||
void LocationRedirector::SetRedirection(ncm::ProgramId program_id, const Path &path, u32 flags) {
|
||||
this->SetRedirection(program_id, path, flags);
|
||||
}
|
||||
|
||||
void LocationRedirector::SetRedirection(ncm::ProgramId title_id, ncm::ProgramId owner_tid, const Path &path, u32 flags) {
|
||||
this->EraseRedirection(title_id);
|
||||
this->redirection_list.push_back(*(new LocationRedirection(title_id, owner_tid, path, flags)));
|
||||
void LocationRedirector::SetRedirection(ncm::ProgramId program_id, ncm::ProgramId owner_id, const Path &path, u32 flags) {
|
||||
this->EraseRedirection(program_id);
|
||||
this->redirection_list.push_back(*(new LocationRedirection(program_id, owner_id, path, flags)));
|
||||
}
|
||||
|
||||
void LocationRedirector::SetRedirectionFlags(ncm::ProgramId title_id, u32 flags) {
|
||||
void LocationRedirector::SetRedirectionFlags(ncm::ProgramId program_id, u32 flags) {
|
||||
for (auto &redirection : this->redirection_list) {
|
||||
if (redirection.GetTitleId() == title_id) {
|
||||
if (redirection.GetProgramId() == program_id) {
|
||||
redirection.SetFlags(flags);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LocationRedirector::EraseRedirection(ncm::ProgramId title_id) {
|
||||
void LocationRedirector::EraseRedirection(ncm::ProgramId program_id) {
|
||||
for (auto &redirection : this->redirection_list) {
|
||||
if (redirection.GetTitleId() == title_id) {
|
||||
if (redirection.GetProgramId() == program_id) {
|
||||
this->redirection_list.erase(this->redirection_list.iterator_to(redirection));
|
||||
delete &redirection;
|
||||
break;
|
||||
@ -105,13 +105,13 @@ namespace ams::lr::impl {
|
||||
}
|
||||
}
|
||||
|
||||
void LocationRedirector::ClearRedirections(const ncm::ProgramId* excluding_tids, size_t num_tids) {
|
||||
void LocationRedirector::ClearRedirections(const ncm::ProgramId* excluding_ids, size_t num_ids) {
|
||||
for (auto it = this->redirection_list.begin(); it != this->redirection_list.end();) {
|
||||
bool skip = false;
|
||||
for (size_t i = 0; i < num_tids; i++) {
|
||||
ncm::ProgramId tid = excluding_tids[i];
|
||||
for (size_t i = 0; i < num_ids; i++) {
|
||||
ncm::ProgramId id = excluding_ids[i];
|
||||
|
||||
if (it->GetOwnerTitleId() == tid) {
|
||||
if (it->GetOwnerProgramId() == id) {
|
||||
skip = true;
|
||||
break;
|
||||
}
|
||||
|
@ -35,13 +35,13 @@ namespace ams::lr::impl {
|
||||
public:
|
||||
LocationRedirector() { /* ... */ }
|
||||
|
||||
bool FindRedirection(Path *out, ncm::ProgramId title_id);
|
||||
void SetRedirection(ncm::ProgramId title_id, const Path &path, u32 flags = RedirectionFlags_None);
|
||||
void SetRedirection(ncm::ProgramId title_id, ncm::ProgramId owner_tid, const Path &path, u32 flags = RedirectionFlags_None);
|
||||
void SetRedirectionFlags(ncm::ProgramId title_id, u32 flags);
|
||||
void EraseRedirection(ncm::ProgramId title_id);
|
||||
bool FindRedirection(Path *out, ncm::ProgramId program_id);
|
||||
void SetRedirection(ncm::ProgramId program_id, const Path &path, u32 flags = RedirectionFlags_None);
|
||||
void SetRedirection(ncm::ProgramId program_id, ncm::ProgramId owner_id, const Path &path, u32 flags = RedirectionFlags_None);
|
||||
void SetRedirectionFlags(ncm::ProgramId program_id, u32 flags);
|
||||
void EraseRedirection(ncm::ProgramId program_id);
|
||||
void ClearRedirections(u32 flags = RedirectionFlags_None);
|
||||
void ClearRedirections(const ncm::ProgramId* excluding_tids, size_t num_tids);
|
||||
void ClearRedirections(const ncm::ProgramId* excluding_ids, size_t num_ids);
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ namespace ams::lr::impl {
|
||||
private:
|
||||
struct Entry {
|
||||
Value value;
|
||||
ncm::ProgramId owner_tid;
|
||||
ncm::ProgramId owner_id;
|
||||
Key key;
|
||||
bool is_valid;
|
||||
};
|
||||
@ -39,7 +39,7 @@ namespace ams::lr::impl {
|
||||
this->Clear();
|
||||
}
|
||||
|
||||
bool Register(const Key &key, const Value &value, const ncm::ProgramId owner_tid) {
|
||||
bool Register(const Key &key, const Value &value, const ncm::ProgramId owner_id) {
|
||||
/* Try to find an existing value. */
|
||||
for (size_t i = 0; i < this->GetSoftEntryLimit(); i++) {
|
||||
Entry& entry = this->entries[i];
|
||||
@ -54,7 +54,7 @@ namespace ams::lr::impl {
|
||||
if (!entry.is_valid) {
|
||||
entry.key = key;
|
||||
entry.value = value;
|
||||
entry.owner_tid = owner_tid;
|
||||
entry.owner_id = owner_id;
|
||||
entry.is_valid = true;
|
||||
return true;
|
||||
}
|
||||
@ -72,10 +72,10 @@ namespace ams::lr::impl {
|
||||
}
|
||||
}
|
||||
|
||||
void UnregisterOwnerTitle(ncm::ProgramId owner_tid) {
|
||||
void UnregisterOwnerProgram(ncm::ProgramId owner_id) {
|
||||
for (size_t i = 0; i < this->GetSoftEntryLimit(); i++) {
|
||||
Entry& entry = this->entries[i];
|
||||
if (entry.owner_tid == owner_tid) {
|
||||
if (entry.owner_id == owner_id) {
|
||||
entry.is_valid = false;
|
||||
}
|
||||
}
|
||||
@ -99,15 +99,15 @@ namespace ams::lr::impl {
|
||||
}
|
||||
}
|
||||
|
||||
void ClearExcluding(const ncm::ProgramId* tids, size_t num_tids) {
|
||||
void ClearExcluding(const ncm::ProgramId* ids, size_t num_ids) {
|
||||
for (size_t i = 0; i < this->GetSoftEntryLimit(); i++) {
|
||||
Entry& entry = this->entries[i];
|
||||
bool found = false;
|
||||
|
||||
for (size_t j = 0; j < num_tids; j++) {
|
||||
ncm::ProgramId tid = tids[j];
|
||||
for (size_t j = 0; j < num_ids; j++) {
|
||||
ncm::ProgramId id = ids[j];
|
||||
|
||||
if (entry.owner_tid == tid) {
|
||||
if (entry.owner_id == id) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
@ -19,10 +19,10 @@
|
||||
|
||||
namespace ams::lr {
|
||||
|
||||
Result AddOnContentLocationResolverInterface::ResolveAddOnContentPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
Result AddOnContentLocationResolverInterface::ResolveAddOnContentPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
ncm::StorageId storage_id = ncm::StorageId::None;
|
||||
|
||||
if (!this->registered_storages.Find(&storage_id, tid)) {
|
||||
if (!this->registered_storages.Find(&storage_id, id)) {
|
||||
return ResultAddOnContentNotFound();
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ namespace ams::lr {
|
||||
|
||||
ncm::ContentId data_content_id;
|
||||
R_TRY(ncm::impl::OpenContentMetaDatabase(&content_meta_database, storage_id));
|
||||
R_TRY(content_meta_database->GetLatestData(&data_content_id, tid));
|
||||
R_TRY(content_meta_database->GetLatestData(&data_content_id, id));
|
||||
|
||||
std::shared_ptr<ncm::IContentStorage> content_storage;
|
||||
R_TRY(ncm::impl::OpenContentStorage(&content_storage, storage_id));
|
||||
@ -39,16 +39,16 @@ namespace ams::lr {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result AddOnContentLocationResolverInterface::RegisterAddOnContentStorageDeprecated(ncm::StorageId storage_id, ncm::ProgramId tid) {
|
||||
if (!this->registered_storages.Register(tid, storage_id, ncm::ProgramId::Invalid)) {
|
||||
Result AddOnContentLocationResolverInterface::RegisterAddOnContentStorageDeprecated(ncm::StorageId storage_id, ncm::ProgramId id) {
|
||||
if (!this->registered_storages.Register(id, storage_id, ncm::ProgramId::Invalid)) {
|
||||
return ResultTooManyRegisteredPaths();
|
||||
}
|
||||
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result AddOnContentLocationResolverInterface::RegisterAddOnContentStorage(ncm::StorageId storage_id, ncm::ProgramId tid, ncm::ProgramId application_tid) {
|
||||
if (!this->registered_storages.Register(tid, storage_id, application_tid)) {
|
||||
Result AddOnContentLocationResolverInterface::RegisterAddOnContentStorage(ncm::StorageId storage_id, ncm::ProgramId id, ncm::ProgramId application_id) {
|
||||
if (!this->registered_storages.Register(id, storage_id, application_id)) {
|
||||
return ResultTooManyRegisteredPaths();
|
||||
}
|
||||
|
||||
@ -60,18 +60,18 @@ namespace ams::lr {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result AddOnContentLocationResolverInterface::RefreshApplicationAddOnContent(const sf::InArray<ncm::ProgramId> &tids) {
|
||||
if (tids.GetSize() == 0) {
|
||||
Result AddOnContentLocationResolverInterface::RefreshApplicationAddOnContent(const sf::InArray<ncm::ProgramId> &ids) {
|
||||
if (ids.GetSize() == 0) {
|
||||
this->registered_storages.Clear();
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
this->registered_storages.ClearExcluding(tids.GetPointer(), tids.GetSize());
|
||||
this->registered_storages.ClearExcluding(ids.GetPointer(), ids.GetSize());
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result AddOnContentLocationResolverInterface::UnregisterApplicationAddOnContent(ncm::ProgramId tid) {
|
||||
this->registered_storages.UnregisterOwnerTitle(tid);
|
||||
Result AddOnContentLocationResolverInterface::UnregisterApplicationAddOnContent(ncm::ProgramId id) {
|
||||
this->registered_storages.UnregisterOwnerProgram(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
|
@ -37,12 +37,12 @@ namespace ams::lr {
|
||||
public:
|
||||
AddOnContentLocationResolverInterface() : registered_storages(hos::GetVersion() < hos::Version_900 ? 0x800 : 0x2) { /* ... */ }
|
||||
|
||||
virtual Result ResolveAddOnContentPath(sf::Out<Path> out, ncm::ProgramId tid);
|
||||
virtual Result RegisterAddOnContentStorageDeprecated(ncm::StorageId storage_id, ncm::ProgramId tid);
|
||||
virtual Result RegisterAddOnContentStorage(ncm::StorageId storage_id, ncm::ProgramId tid, ncm::ProgramId application_tid);
|
||||
virtual Result ResolveAddOnContentPath(sf::Out<Path> out, ncm::ProgramId id);
|
||||
virtual Result RegisterAddOnContentStorageDeprecated(ncm::StorageId storage_id, ncm::ProgramId id);
|
||||
virtual Result RegisterAddOnContentStorage(ncm::StorageId storage_id, ncm::ProgramId id, ncm::ProgramId application_id);
|
||||
virtual Result UnregisterAllAddOnContentPath();
|
||||
virtual Result RefreshApplicationAddOnContent(const sf::InArray<ncm::ProgramId> &tids);
|
||||
virtual Result UnregisterApplicationAddOnContent(ncm::ProgramId tid);
|
||||
virtual Result RefreshApplicationAddOnContent(const sf::InArray<ncm::ProgramId> &ids);
|
||||
virtual Result UnregisterApplicationAddOnContent(ncm::ProgramId id);
|
||||
public:
|
||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
||||
MAKE_SERVICE_COMMAND_META(ResolveAddOnContentPath, hos::Version_200),
|
||||
|
@ -27,14 +27,14 @@ namespace ams::lr {
|
||||
R_ASSERT(this->content_storage->GetPath(out, content_id));
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->program_redirector, tid)) {
|
||||
Result ContentLocationResolverInterface::ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->program_redirector, id)) {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
ncm::ContentId program_content_id;
|
||||
|
||||
R_TRY_CATCH(this->content_meta_database->GetLatestProgram(&program_content_id, tid)) {
|
||||
R_TRY_CATCH(this->content_meta_database->GetLatestProgram(&program_content_id, id)) {
|
||||
R_CATCH(ncm::ResultContentMetaNotFound) {
|
||||
return ResultProgramNotFound();
|
||||
}
|
||||
@ -44,70 +44,70 @@ namespace ams::lr {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectProgramPath(const Path &path, ncm::ProgramId tid) {
|
||||
this->program_redirector.SetRedirection(tid, path);
|
||||
Result ContentLocationResolverInterface::RedirectProgramPath(const Path &path, ncm::ProgramId id) {
|
||||
this->program_redirector.SetRedirection(id, path);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->app_control_redirector, tid)) {
|
||||
Result ContentLocationResolverInterface::ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->app_control_redirector, id)) {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
return ResultControlNotFound();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->html_docs_redirector, tid)) {
|
||||
Result ContentLocationResolverInterface::ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->html_docs_redirector, id)) {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
return ResultHtmlDocumentNotFound();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::ResolveDataPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
Result ContentLocationResolverInterface::ResolveDataPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
ncm::ContentId data_content_id;
|
||||
|
||||
R_TRY(this->content_meta_database->GetLatestData(&data_content_id, tid));
|
||||
R_TRY(this->content_meta_database->GetLatestData(&data_content_id, id));
|
||||
this->GetContentStoragePath(out.GetPointer(), data_content_id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->app_control_redirector.SetRedirection(tid, path, impl::RedirectionFlags_Application);
|
||||
Result ContentLocationResolverInterface::RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->app_control_redirector.SetRedirection(id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectApplicationControlPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->app_control_redirector.SetRedirection(tid, owner_tid, path, impl::RedirectionFlags_Application);
|
||||
Result ContentLocationResolverInterface::RedirectApplicationControlPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->app_control_redirector.SetRedirection(id, owner_id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->html_docs_redirector.SetRedirection(tid, path, impl::RedirectionFlags_Application);
|
||||
Result ContentLocationResolverInterface::RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->html_docs_redirector.SetRedirection(id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->html_docs_redirector.SetRedirection(tid, owner_tid, path, impl::RedirectionFlags_Application);
|
||||
Result ContentLocationResolverInterface::RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->html_docs_redirector.SetRedirection(id, owner_id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->legal_info_redirector, tid)) {
|
||||
Result ContentLocationResolverInterface::ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->legal_info_redirector, id)) {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
return ResultLegalInformationNotFound();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->legal_info_redirector.SetRedirection(tid, path, impl::RedirectionFlags_Application);
|
||||
Result ContentLocationResolverInterface::RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->legal_info_redirector.SetRedirection(id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->legal_info_redirector.SetRedirection(tid, owner_tid, path, impl::RedirectionFlags_Application);
|
||||
Result ContentLocationResolverInterface::RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->legal_info_redirector.SetRedirection(id, owner_id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
@ -124,13 +124,13 @@ namespace ams::lr {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->program_redirector.SetRedirection(tid, path, impl::RedirectionFlags_Application);
|
||||
Result ContentLocationResolverInterface::RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->program_redirector.SetRedirection(id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectApplicationProgramPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->program_redirector.SetRedirection(tid, owner_tid, path, impl::RedirectionFlags_Application);
|
||||
Result ContentLocationResolverInterface::RedirectApplicationProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->program_redirector.SetRedirection(id, owner_id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
@ -139,37 +139,37 @@ namespace ams::lr {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_tids) {
|
||||
this->ClearRedirections(excluding_tids.GetPointer(), excluding_tids.GetSize());
|
||||
Result ContentLocationResolverInterface::ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_ids) {
|
||||
this->ClearRedirections(excluding_ids.GetPointer(), excluding_ids.GetSize());
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::EraseProgramRedirection(ncm::ProgramId tid) {
|
||||
this->program_redirector.EraseRedirection(tid);
|
||||
Result ContentLocationResolverInterface::EraseProgramRedirection(ncm::ProgramId id) {
|
||||
this->program_redirector.EraseRedirection(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::EraseApplicationControlRedirection(ncm::ProgramId tid) {
|
||||
this->app_control_redirector.EraseRedirection(tid);
|
||||
Result ContentLocationResolverInterface::EraseApplicationControlRedirection(ncm::ProgramId id) {
|
||||
this->app_control_redirector.EraseRedirection(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::EraseApplicationHtmlDocumentRedirection(ncm::ProgramId tid) {
|
||||
this->html_docs_redirector.EraseRedirection(tid);
|
||||
Result ContentLocationResolverInterface::EraseApplicationHtmlDocumentRedirection(ncm::ProgramId id) {
|
||||
this->html_docs_redirector.EraseRedirection(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::EraseApplicationLegalInformationRedirection(ncm::ProgramId tid) {
|
||||
this->legal_info_redirector.EraseRedirection(tid);
|
||||
Result ContentLocationResolverInterface::EraseApplicationLegalInformationRedirection(ncm::ProgramId id) {
|
||||
this->legal_info_redirector.EraseRedirection(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->debug_program_redirector, tid)) {
|
||||
Result ContentLocationResolverInterface::ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->debug_program_redirector, id)) {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
R_TRY_CATCH(this->ResolveProgramPath(out.GetPointer(), tid)) {
|
||||
R_TRY_CATCH(this->ResolveProgramPath(out.GetPointer(), id)) {
|
||||
R_CATCH(ResultProgramNotFound) {
|
||||
return ResultDebugProgramNotFound();
|
||||
}
|
||||
@ -178,23 +178,23 @@ namespace ams::lr {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectProgramPathForDebug(const Path &path, ncm::ProgramId tid) {
|
||||
this->debug_program_redirector.SetRedirection(tid, path);
|
||||
Result ContentLocationResolverInterface::RedirectProgramPathForDebug(const Path &path, ncm::ProgramId id) {
|
||||
this->debug_program_redirector.SetRedirection(id, path);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->debug_program_redirector.SetRedirection(tid, path, impl::RedirectionFlags_Application);
|
||||
Result ContentLocationResolverInterface::RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->debug_program_redirector.SetRedirection(id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->debug_program_redirector.SetRedirection(tid, owner_tid, path, impl::RedirectionFlags_Application);
|
||||
Result ContentLocationResolverInterface::RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->debug_program_redirector.SetRedirection(id, owner_id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentLocationResolverInterface::EraseProgramRedirectionForDebug(ncm::ProgramId tid) {
|
||||
this->debug_program_redirector.EraseRedirection(tid);
|
||||
Result ContentLocationResolverInterface::EraseProgramRedirectionForDebug(ncm::ProgramId id) {
|
||||
this->debug_program_redirector.EraseRedirection(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
|
@ -37,32 +37,32 @@ namespace ams::lr {
|
||||
private:
|
||||
void GetContentStoragePath(Path* out, ncm::ContentId content_id);
|
||||
public:
|
||||
virtual Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectProgramPath(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result ResolveDataPath(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationControlPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) override;
|
||||
virtual Result RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) override;
|
||||
virtual Result ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) override;
|
||||
virtual Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result RedirectProgramPath(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result ResolveDataPath(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationControlPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) override;
|
||||
virtual Result RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) override;
|
||||
virtual Result ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) override;
|
||||
virtual Result Refresh() override;
|
||||
virtual Result RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationProgramPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) override;
|
||||
virtual Result RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) override;
|
||||
virtual Result ClearApplicationRedirectionDeprecated() override;
|
||||
virtual Result ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_tids) override;
|
||||
virtual Result EraseProgramRedirection(ncm::ProgramId tid) override;
|
||||
virtual Result EraseApplicationControlRedirection(ncm::ProgramId tid) override;
|
||||
virtual Result EraseApplicationHtmlDocumentRedirection(ncm::ProgramId tid) override;
|
||||
virtual Result EraseApplicationLegalInformationRedirection(ncm::ProgramId tid) override;
|
||||
virtual Result ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectProgramPathForDebug(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) override;
|
||||
virtual Result EraseProgramRedirectionForDebug(ncm::ProgramId tid) override;
|
||||
virtual Result ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_ids) override;
|
||||
virtual Result EraseProgramRedirection(ncm::ProgramId id) override;
|
||||
virtual Result EraseApplicationControlRedirection(ncm::ProgramId id) override;
|
||||
virtual Result EraseApplicationHtmlDocumentRedirection(ncm::ProgramId id) override;
|
||||
virtual Result EraseApplicationLegalInformationRedirection(ncm::ProgramId id) override;
|
||||
virtual Result ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result RedirectProgramPathForDebug(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) override;
|
||||
virtual Result EraseProgramRedirectionForDebug(ncm::ProgramId id) override;
|
||||
public:
|
||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
||||
MAKE_SERVICE_COMMAND_META(ContentLocationResolverInterface, ResolveProgramPath),
|
||||
|
@ -59,8 +59,8 @@ namespace ams::lr {
|
||||
impl::LocationRedirector html_docs_redirector;
|
||||
impl::LocationRedirector legal_info_redirector;
|
||||
protected:
|
||||
bool GetRedirectedPath(Path* out, impl::LocationRedirector* redirector, ncm::ProgramId tid) {
|
||||
return redirector->FindRedirection(out, tid);
|
||||
bool GetRedirectedPath(Path* out, impl::LocationRedirector* redirector, ncm::ProgramId id) {
|
||||
return redirector->FindRedirection(out, id);
|
||||
}
|
||||
|
||||
void ClearRedirections(u32 flags = impl::RedirectionFlags_None) {
|
||||
@ -71,40 +71,40 @@ namespace ams::lr {
|
||||
this->legal_info_redirector.ClearRedirections(flags);
|
||||
}
|
||||
|
||||
void ClearRedirections(const ncm::ProgramId* excluding_tids, size_t num_tids) {
|
||||
this->program_redirector.ClearRedirections(excluding_tids, num_tids);
|
||||
this->debug_program_redirector.ClearRedirections(excluding_tids, num_tids);
|
||||
this->app_control_redirector.ClearRedirections(excluding_tids, num_tids);
|
||||
this->html_docs_redirector.ClearRedirections(excluding_tids, num_tids);
|
||||
this->legal_info_redirector.ClearRedirections(excluding_tids, num_tids);
|
||||
void ClearRedirections(const ncm::ProgramId* excluding_ids, size_t num_ids) {
|
||||
this->program_redirector.ClearRedirections(excluding_ids, num_ids);
|
||||
this->debug_program_redirector.ClearRedirections(excluding_ids, num_ids);
|
||||
this->app_control_redirector.ClearRedirections(excluding_ids, num_ids);
|
||||
this->html_docs_redirector.ClearRedirections(excluding_ids, num_ids);
|
||||
this->legal_info_redirector.ClearRedirections(excluding_ids, num_ids);
|
||||
}
|
||||
public:
|
||||
virtual Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId tid) = 0;
|
||||
virtual Result RedirectProgramPath(const Path &path, ncm::ProgramId tid) = 0;
|
||||
virtual Result ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId tid) = 0;
|
||||
virtual Result ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId tid) = 0;
|
||||
virtual Result ResolveDataPath(sf::Out<Path> out, ncm::ProgramId tid) = 0;
|
||||
virtual Result RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId tid) = 0;
|
||||
virtual Result RedirectApplicationControlPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) = 0;
|
||||
virtual Result RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId tid) = 0;
|
||||
virtual Result RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) = 0;
|
||||
virtual Result ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId tid) = 0;
|
||||
virtual Result RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId tid) = 0;
|
||||
virtual Result RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) = 0;
|
||||
virtual Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
||||
virtual Result RedirectProgramPath(const Path &path, ncm::ProgramId id) = 0;
|
||||
virtual Result ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
||||
virtual Result ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
||||
virtual Result ResolveDataPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
||||
virtual Result RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
||||
virtual Result RedirectApplicationControlPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
||||
virtual Result RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
||||
virtual Result RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
||||
virtual Result ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
||||
virtual Result RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
||||
virtual Result RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
||||
virtual Result Refresh() = 0;
|
||||
virtual Result RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId tid) = 0;
|
||||
virtual Result RedirectApplicationProgramPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) = 0;
|
||||
virtual Result RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
||||
virtual Result RedirectApplicationProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
||||
virtual Result ClearApplicationRedirectionDeprecated() = 0;
|
||||
virtual Result ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_tids) = 0;
|
||||
virtual Result EraseProgramRedirection(ncm::ProgramId tid) = 0;
|
||||
virtual Result EraseApplicationControlRedirection(ncm::ProgramId tid) = 0;
|
||||
virtual Result EraseApplicationHtmlDocumentRedirection(ncm::ProgramId tid) = 0;
|
||||
virtual Result EraseApplicationLegalInformationRedirection(ncm::ProgramId tid) = 0;
|
||||
virtual Result ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId tid) = 0;
|
||||
virtual Result RedirectProgramPathForDebug(const Path &path, ncm::ProgramId tid) = 0;
|
||||
virtual Result RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId tid) = 0;
|
||||
virtual Result RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) = 0;
|
||||
virtual Result EraseProgramRedirectionForDebug(ncm::ProgramId tid) = 0;
|
||||
virtual Result ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_ids) = 0;
|
||||
virtual Result EraseProgramRedirection(ncm::ProgramId id) = 0;
|
||||
virtual Result EraseApplicationControlRedirection(ncm::ProgramId id) = 0;
|
||||
virtual Result EraseApplicationHtmlDocumentRedirection(ncm::ProgramId id) = 0;
|
||||
virtual Result EraseApplicationLegalInformationRedirection(ncm::ProgramId id) = 0;
|
||||
virtual Result ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId id) = 0;
|
||||
virtual Result RedirectProgramPathForDebug(const Path &path, ncm::ProgramId id) = 0;
|
||||
virtual Result RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId id) = 0;
|
||||
virtual Result RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) = 0;
|
||||
virtual Result EraseProgramRedirectionForDebug(ncm::ProgramId id) = 0;
|
||||
public:
|
||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
||||
MAKE_SERVICE_COMMAND_META(ResolveProgramPath),
|
||||
|
@ -27,74 +27,74 @@ namespace ams::lr {
|
||||
this->legal_info_redirector.ClearRedirections();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->program_redirector, tid)) {
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->program_redirector, id)) {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
return ResultProgramNotFound();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectProgramPath(const Path &path, ncm::ProgramId tid) {
|
||||
this->program_redirector.SetRedirection(tid, path);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectProgramPath(const Path &path, ncm::ProgramId id) {
|
||||
this->program_redirector.SetRedirection(id, path);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->app_control_redirector, tid)) {
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->app_control_redirector, id)) {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
return ResultControlNotFound();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->html_docs_redirector, tid)) {
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->html_docs_redirector, id)) {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
return ResultHtmlDocumentNotFound();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveDataPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveDataPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
return ResultDataNotFound();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->app_control_redirector.SetRedirection(tid, path, impl::RedirectionFlags_Application);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->app_control_redirector.SetRedirection(id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationControlPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->app_control_redirector.SetRedirection(tid, owner_tid, path, impl::RedirectionFlags_Application);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationControlPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->app_control_redirector.SetRedirection(id, owner_id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->html_docs_redirector.SetRedirection(tid, path, impl::RedirectionFlags_Application);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->html_docs_redirector.SetRedirection(id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->html_docs_redirector.SetRedirection(tid, owner_tid, path, impl::RedirectionFlags_Application);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->html_docs_redirector.SetRedirection(id, owner_id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->legal_info_redirector, tid)) {
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->legal_info_redirector, id)) {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
return ResultLegalInformationNotFound();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->legal_info_redirector.SetRedirection(tid, path, impl::RedirectionFlags_Application);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->legal_info_redirector.SetRedirection(id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->legal_info_redirector.SetRedirection(tid, owner_tid, path, impl::RedirectionFlags_Application);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->legal_info_redirector.SetRedirection(id, owner_id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
@ -107,13 +107,13 @@ namespace ams::lr {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->program_redirector.SetRedirection(tid, path, impl::RedirectionFlags_Application);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->program_redirector.SetRedirection(id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationProgramPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->program_redirector.SetRedirection(tid, owner_tid, path, impl::RedirectionFlags_Application);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->program_redirector.SetRedirection(id, owner_id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
@ -126,37 +126,37 @@ namespace ams::lr {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_tids) {
|
||||
this->ClearRedirections(excluding_tids.GetPointer(), excluding_tids.GetSize());
|
||||
Result RedirectOnlyLocationResolverInterface::ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_ids) {
|
||||
this->ClearRedirections(excluding_ids.GetPointer(), excluding_ids.GetSize());
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::EraseProgramRedirection(ncm::ProgramId tid) {
|
||||
this->program_redirector.EraseRedirection(tid);
|
||||
Result RedirectOnlyLocationResolverInterface::EraseProgramRedirection(ncm::ProgramId id) {
|
||||
this->program_redirector.EraseRedirection(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::EraseApplicationControlRedirection(ncm::ProgramId tid) {
|
||||
this->app_control_redirector.EraseRedirection(tid);
|
||||
Result RedirectOnlyLocationResolverInterface::EraseApplicationControlRedirection(ncm::ProgramId id) {
|
||||
this->app_control_redirector.EraseRedirection(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::EraseApplicationHtmlDocumentRedirection(ncm::ProgramId tid) {
|
||||
this->html_docs_redirector.EraseRedirection(tid);
|
||||
Result RedirectOnlyLocationResolverInterface::EraseApplicationHtmlDocumentRedirection(ncm::ProgramId id) {
|
||||
this->html_docs_redirector.EraseRedirection(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::EraseApplicationLegalInformationRedirection(ncm::ProgramId tid) {
|
||||
this->legal_info_redirector.EraseRedirection(tid);
|
||||
Result RedirectOnlyLocationResolverInterface::EraseApplicationLegalInformationRedirection(ncm::ProgramId id) {
|
||||
this->legal_info_redirector.EraseRedirection(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->debug_program_redirector, tid)) {
|
||||
Result RedirectOnlyLocationResolverInterface::ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (this->GetRedirectedPath(out.GetPointer(), &this->debug_program_redirector, id)) {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
R_TRY_CATCH(this->ResolveProgramPath(out.GetPointer(), tid)) {
|
||||
R_TRY_CATCH(this->ResolveProgramPath(out.GetPointer(), id)) {
|
||||
R_CATCH(ResultProgramNotFound) {
|
||||
return ResultDebugProgramNotFound();
|
||||
}
|
||||
@ -165,23 +165,23 @@ namespace ams::lr {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectProgramPathForDebug(const Path &path, ncm::ProgramId tid) {
|
||||
this->debug_program_redirector.SetRedirection(tid, path);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectProgramPathForDebug(const Path &path, ncm::ProgramId id) {
|
||||
this->debug_program_redirector.SetRedirection(id, path);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->debug_program_redirector.SetRedirection(tid, path, impl::RedirectionFlags_Application);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->debug_program_redirector.SetRedirection(id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->debug_program_redirector.SetRedirection(tid, owner_tid, path, impl::RedirectionFlags_Application);
|
||||
Result RedirectOnlyLocationResolverInterface::RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->debug_program_redirector.SetRedirection(id, owner_id, path, impl::RedirectionFlags_Application);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RedirectOnlyLocationResolverInterface::EraseProgramRedirectionForDebug(ncm::ProgramId tid) {
|
||||
this->debug_program_redirector.EraseRedirection(tid);
|
||||
Result RedirectOnlyLocationResolverInterface::EraseProgramRedirectionForDebug(ncm::ProgramId id) {
|
||||
this->debug_program_redirector.EraseRedirection(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
|
@ -26,32 +26,32 @@ namespace ams::lr {
|
||||
public:
|
||||
~RedirectOnlyLocationResolverInterface();
|
||||
public:
|
||||
virtual Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectProgramPath(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result ResolveDataPath(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationControlPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) override;
|
||||
virtual Result RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) override;
|
||||
virtual Result ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) override;
|
||||
virtual Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result RedirectProgramPath(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result ResolveApplicationControlPath(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result ResolveApplicationHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result ResolveDataPath(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationControlPathDeprecated(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationControlPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) override;
|
||||
virtual Result RedirectApplicationHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) override;
|
||||
virtual Result ResolveApplicationLegalInformationPath(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationLegalInformationPathDeprecated(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationLegalInformationPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) override;
|
||||
virtual Result Refresh() override;
|
||||
virtual Result RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationProgramPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) override;
|
||||
virtual Result RedirectApplicationProgramPathDeprecated(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) override;
|
||||
virtual Result ClearApplicationRedirectionDeprecated() override;
|
||||
virtual Result ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_tids) override;
|
||||
virtual Result EraseProgramRedirection(ncm::ProgramId tid) override;
|
||||
virtual Result EraseApplicationControlRedirection(ncm::ProgramId tid) override;
|
||||
virtual Result EraseApplicationHtmlDocumentRedirection(ncm::ProgramId tid) override;
|
||||
virtual Result EraseApplicationLegalInformationRedirection(ncm::ProgramId tid) override;
|
||||
virtual Result ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectProgramPathForDebug(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId tid) override;
|
||||
virtual Result RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) override;
|
||||
virtual Result EraseProgramRedirectionForDebug(ncm::ProgramId tid) override;
|
||||
virtual Result ClearApplicationRedirection(const sf::InArray<ncm::ProgramId> &excluding_ids) override;
|
||||
virtual Result EraseProgramRedirection(ncm::ProgramId id) override;
|
||||
virtual Result EraseApplicationControlRedirection(ncm::ProgramId id) override;
|
||||
virtual Result EraseApplicationHtmlDocumentRedirection(ncm::ProgramId id) override;
|
||||
virtual Result EraseApplicationLegalInformationRedirection(ncm::ProgramId id) override;
|
||||
virtual Result ResolveProgramPathForDebug(sf::Out<Path> out, ncm::ProgramId id) override;
|
||||
virtual Result RedirectProgramPathForDebug(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationProgramPathForDebugDeprecated(const Path &path, ncm::ProgramId id) override;
|
||||
virtual Result RedirectApplicationProgramPathForDebug(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) override;
|
||||
virtual Result EraseProgramRedirectionForDebug(ncm::ProgramId id) override;
|
||||
public:
|
||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
||||
MAKE_SERVICE_COMMAND_META(ResolveProgramPath),
|
||||
|
@ -28,103 +28,103 @@ namespace ams::lr {
|
||||
this->program_redirector.ClearRedirections();
|
||||
}
|
||||
|
||||
void RegisteredLocationResolverInterface::RegisterPath(const Path& path, impl::RegisteredLocations<ncm::ProgramId, RegisteredLocationResolverInterface::MaxRegisteredLocations>* locations, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
if (!locations->Register(tid, path, owner_tid)) {
|
||||
void RegisteredLocationResolverInterface::RegisterPath(const Path& path, impl::RegisteredLocations<ncm::ProgramId, RegisteredLocationResolverInterface::MaxRegisteredLocations>* locations, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
if (!locations->Register(id, path, owner_id)) {
|
||||
locations->Clear();
|
||||
locations->Register(tid, path, owner_tid);
|
||||
locations->Register(id, path, owner_id);
|
||||
}
|
||||
}
|
||||
|
||||
bool RegisteredLocationResolverInterface::ResolvePath(Path* out, impl::LocationRedirector* redirector, impl::RegisteredLocations<ncm::ProgramId, RegisteredLocationResolverInterface::MaxRegisteredLocations>* locations, ncm::ProgramId tid) {
|
||||
if (!redirector->FindRedirection(out, tid)) {
|
||||
if (!locations->Find(out, tid)) {
|
||||
bool RegisteredLocationResolverInterface::ResolvePath(Path* out, impl::LocationRedirector* redirector, impl::RegisteredLocations<ncm::ProgramId, RegisteredLocationResolverInterface::MaxRegisteredLocations>* locations, ncm::ProgramId id) {
|
||||
if (!redirector->FindRedirection(out, id)) {
|
||||
if (!locations->Find(out, id)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::RefreshImpl(const ncm::ProgramId* excluding_tids, size_t num_tids) {
|
||||
Result RegisteredLocationResolverInterface::RefreshImpl(const ncm::ProgramId* excluding_ids, size_t num_ids) {
|
||||
if (hos::GetVersion() < hos::Version_900) {
|
||||
this->ClearRedirections();
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
if (num_tids == 0) {
|
||||
if (num_ids == 0) {
|
||||
this->ClearRedirections();
|
||||
} else {
|
||||
this->registered_program_locations.ClearExcluding(excluding_tids, num_tids);
|
||||
this->registered_html_docs_locations.ClearExcluding(excluding_tids, num_tids);
|
||||
this->registered_program_locations.ClearExcluding(excluding_ids, num_ids);
|
||||
this->registered_html_docs_locations.ClearExcluding(excluding_ids, num_ids);
|
||||
}
|
||||
|
||||
this->program_redirector.ClearRedirections(excluding_tids, num_tids);
|
||||
this->html_docs_redirector.ClearRedirections(excluding_tids, num_tids);
|
||||
this->program_redirector.ClearRedirections(excluding_ids, num_ids);
|
||||
this->html_docs_redirector.ClearRedirections(excluding_ids, num_ids);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (!this->ResolvePath(out.GetPointer(), &this->program_redirector, &this->registered_program_locations, tid)) {
|
||||
Result RegisteredLocationResolverInterface::ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (!this->ResolvePath(out.GetPointer(), &this->program_redirector, &this->registered_program_locations, id)) {
|
||||
return ResultProgramNotFound();
|
||||
}
|
||||
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::RegisterProgramPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->RegisterPath(path, &this->registered_program_locations, tid, ncm::ProgramId::Invalid);
|
||||
Result RegisteredLocationResolverInterface::RegisterProgramPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->RegisterPath(path, &this->registered_program_locations, id, ncm::ProgramId::Invalid);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::RegisterProgramPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->RegisterPath(path, &this->registered_program_locations, tid, owner_tid);
|
||||
Result RegisteredLocationResolverInterface::RegisterProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->RegisterPath(path, &this->registered_program_locations, id, owner_id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::UnregisterProgramPath(ncm::ProgramId tid) {
|
||||
this->registered_program_locations.Unregister(tid);
|
||||
Result RegisteredLocationResolverInterface::UnregisterProgramPath(ncm::ProgramId id) {
|
||||
this->registered_program_locations.Unregister(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::RedirectProgramPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->program_redirector.SetRedirection(tid, path);
|
||||
Result RegisteredLocationResolverInterface::RedirectProgramPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->program_redirector.SetRedirection(id, path);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::RedirectProgramPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->program_redirector.SetRedirection(tid, owner_tid, path);
|
||||
Result RegisteredLocationResolverInterface::RedirectProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->program_redirector.SetRedirection(id, owner_id, path);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::ResolveHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId tid) {
|
||||
if (!this->ResolvePath(out.GetPointer(), &this->html_docs_redirector, &this->registered_html_docs_locations, tid)) {
|
||||
Result RegisteredLocationResolverInterface::ResolveHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId id) {
|
||||
if (!this->ResolvePath(out.GetPointer(), &this->html_docs_redirector, &this->registered_html_docs_locations, id)) {
|
||||
return ResultHtmlDocumentNotFound();
|
||||
}
|
||||
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::RegisterHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->RegisterPath(path, &this->registered_html_docs_locations, tid, ncm::ProgramId::Invalid);
|
||||
Result RegisteredLocationResolverInterface::RegisterHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->RegisterPath(path, &this->registered_html_docs_locations, id, ncm::ProgramId::Invalid);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::RegisterHtmlDocumentPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->RegisterPath(path, &this->registered_html_docs_locations, tid, owner_tid);
|
||||
Result RegisteredLocationResolverInterface::RegisterHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->RegisterPath(path, &this->registered_html_docs_locations, id, owner_id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::UnregisterHtmlDocumentPath(ncm::ProgramId tid) {
|
||||
this->registered_html_docs_locations.Unregister(tid);
|
||||
Result RegisteredLocationResolverInterface::UnregisterHtmlDocumentPath(ncm::ProgramId id) {
|
||||
this->registered_html_docs_locations.Unregister(id);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::RedirectHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId tid) {
|
||||
this->html_docs_redirector.SetRedirection(tid, path);
|
||||
Result RegisteredLocationResolverInterface::RedirectHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id) {
|
||||
this->html_docs_redirector.SetRedirection(id, path);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::RedirectHtmlDocumentPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid) {
|
||||
this->html_docs_redirector.SetRedirection(tid, owner_tid, path);
|
||||
Result RegisteredLocationResolverInterface::RedirectHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id) {
|
||||
this->html_docs_redirector.SetRedirection(id, owner_id, path);
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
@ -132,8 +132,8 @@ namespace ams::lr {
|
||||
return this->RefreshImpl(nullptr, 0);
|
||||
}
|
||||
|
||||
Result RegisteredLocationResolverInterface::RefreshExcluding(const sf::InArray<ncm::ProgramId> &tids) {
|
||||
return this->RefreshImpl(tids.GetPointer(), tids.GetSize());
|
||||
Result RegisteredLocationResolverInterface::RefreshExcluding(const sf::InArray<ncm::ProgramId> &ids) {
|
||||
return this->RefreshImpl(ids.GetPointer(), ids.GetSize());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -50,27 +50,27 @@ namespace ams::lr {
|
||||
impl::RegisteredLocations<ncm::ProgramId, MaxRegisteredLocations> registered_html_docs_locations;
|
||||
private:
|
||||
void ClearRedirections(u32 flags = impl::RedirectionFlags_None);
|
||||
void RegisterPath(const Path& path, impl::RegisteredLocations<ncm::ProgramId, MaxRegisteredLocations>* locations, ncm::ProgramId tid, ncm::ProgramId owner_tid);
|
||||
bool ResolvePath(Path* out, impl::LocationRedirector* redirector, impl::RegisteredLocations<ncm::ProgramId, MaxRegisteredLocations>* locations, ncm::ProgramId tid);
|
||||
Result RefreshImpl(const ncm::ProgramId* excluding_tids, size_t num_tids);
|
||||
void RegisterPath(const Path& path, impl::RegisteredLocations<ncm::ProgramId, MaxRegisteredLocations>* locations, ncm::ProgramId id, ncm::ProgramId owner_id);
|
||||
bool ResolvePath(Path* out, impl::LocationRedirector* redirector, impl::RegisteredLocations<ncm::ProgramId, MaxRegisteredLocations>* locations, ncm::ProgramId id);
|
||||
Result RefreshImpl(const ncm::ProgramId* excluding_ids, size_t num_ids);
|
||||
public:
|
||||
RegisteredLocationResolverInterface() : registered_program_locations(hos::GetVersion() < hos::Version_900 ? 0x10 : MaxRegisteredLocations), registered_html_docs_locations(hos::GetVersion() < hos::Version_900 ? 0x10 : MaxRegisteredLocations) { /* ... */ }
|
||||
~RegisteredLocationResolverInterface();
|
||||
|
||||
Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId tid);
|
||||
Result RegisterProgramPathDeprecated(const Path &path, ncm::ProgramId tid);
|
||||
Result RegisterProgramPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid);
|
||||
Result UnregisterProgramPath(ncm::ProgramId tid);
|
||||
Result RedirectProgramPathDeprecated(const Path &path, ncm::ProgramId tid);
|
||||
Result RedirectProgramPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid);
|
||||
Result ResolveHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId tid);
|
||||
Result RegisterHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId tid);
|
||||
Result RegisterHtmlDocumentPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid);
|
||||
Result UnregisterHtmlDocumentPath(ncm::ProgramId tid);
|
||||
Result RedirectHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId tid);
|
||||
Result RedirectHtmlDocumentPath(const Path &path, ncm::ProgramId tid, ncm::ProgramId owner_tid);
|
||||
Result ResolveProgramPath(sf::Out<Path> out, ncm::ProgramId id);
|
||||
Result RegisterProgramPathDeprecated(const Path &path, ncm::ProgramId id);
|
||||
Result RegisterProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id);
|
||||
Result UnregisterProgramPath(ncm::ProgramId id);
|
||||
Result RedirectProgramPathDeprecated(const Path &path, ncm::ProgramId id);
|
||||
Result RedirectProgramPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id);
|
||||
Result ResolveHtmlDocumentPath(sf::Out<Path> out, ncm::ProgramId id);
|
||||
Result RegisterHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id);
|
||||
Result RegisterHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id);
|
||||
Result UnregisterHtmlDocumentPath(ncm::ProgramId id);
|
||||
Result RedirectHtmlDocumentPathDeprecated(const Path &path, ncm::ProgramId id);
|
||||
Result RedirectHtmlDocumentPath(const Path &path, ncm::ProgramId id, ncm::ProgramId owner_id);
|
||||
Result Refresh();
|
||||
Result RefreshExcluding(const sf::InArray<ncm::ProgramId> &tids);
|
||||
Result RefreshExcluding(const sf::InArray<ncm::ProgramId> &ids);
|
||||
public:
|
||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
||||
MAKE_SERVICE_COMMAND_META(ResolveProgramPath),
|
||||
|
@ -143,11 +143,11 @@ namespace ams::ncm {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentMetaDatabaseInterface::GetLatestContentMetaKeyImpl(ContentMetaKey* out_key, ProgramId tid) {
|
||||
Result ContentMetaDatabaseInterface::GetLatestContentMetaKeyImpl(ContentMetaKey* out_key, ProgramId id) {
|
||||
R_TRY(this->EnsureEnabled());
|
||||
|
||||
ContentMetaKey key = {0};
|
||||
key.id = tid;
|
||||
key.id = id;
|
||||
|
||||
bool found_key = false;
|
||||
for (auto entry = this->kvs->lower_bound(key); entry != this->kvs->end(); entry++) {
|
||||
@ -215,7 +215,7 @@ namespace ams::ncm {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentMetaDatabaseInterface::List(sf::Out<u32> out_entries_total, sf::Out<u32> out_entries_written, const sf::OutArray<ContentMetaKey> & out_info, ContentMetaType type, ProgramId application_title_id, ProgramId title_id_min, ProgramId title_id_max, ContentInstallType install_type) {
|
||||
Result ContentMetaDatabaseInterface::List(sf::Out<u32> out_entries_total, sf::Out<u32> out_entries_written, const sf::OutArray<ContentMetaKey> &out_info, ContentMetaType type, ProgramId application_program_id, ProgramId program_id_min, ProgramId program_id_max, ContentInstallType install_type) {
|
||||
R_TRY(this->EnsureEnabled());
|
||||
|
||||
size_t entries_total = 0;
|
||||
@ -232,29 +232,29 @@ namespace ams::ncm {
|
||||
ContentMetaKey key = entry->GetKey();
|
||||
|
||||
/* Check if this entry matches the given filters. */
|
||||
if (!((static_cast<u8>(type) == 0 || key.type == type) && (title_id_min <= key.id && key.id <= title_id_max) && (key.install_type == ContentInstallType::Unknown || key.install_type == install_type))) {
|
||||
if (!((static_cast<u8>(type) == 0 || key.type == type) && (program_id_min <= key.id && key.id <= program_id_max) && (key.install_type == ContentInstallType::Unknown || key.install_type == install_type))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (static_cast<u64>(application_title_id) != 0) {
|
||||
if (static_cast<u64>(application_program_id) != 0) {
|
||||
const void* value = nullptr;
|
||||
size_t value_size = 0;
|
||||
R_TRY(GetContentMetaValuePointer(&value, &value_size, key, this->kvs));
|
||||
|
||||
/* Each of these types are owned by an application. We need to check if their owner application matches the filter. */
|
||||
if (key.type == ContentMetaType::Application || key.type == ContentMetaType::Patch || key.type == ContentMetaType::AddOnContent || key.type == ContentMetaType::Delta) {
|
||||
ProgramId entry_application_tid = key.id;
|
||||
ProgramId entry_application_id = key.id;
|
||||
|
||||
switch (key.type) {
|
||||
case ContentMetaType::Application:
|
||||
break;
|
||||
default:
|
||||
/* The first u64 of all non-application extended headers is the application title id. */
|
||||
entry_application_tid = *GetValueExtendedHeader<ProgramId>(value);
|
||||
/* The first u64 of all non-application extended headers is the application program id. */
|
||||
entry_application_id = *GetValueExtendedHeader<ProgramId>(value);
|
||||
}
|
||||
|
||||
/* Application tid doesn't match filter, skip this entry. */
|
||||
if (entry_application_tid != application_title_id) {
|
||||
/* Application id doesn't match filter, skip this entry. */
|
||||
if (entry_application_id != application_program_id) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -274,10 +274,10 @@ namespace ams::ncm {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentMetaDatabaseInterface::GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, ProgramId title_id) {
|
||||
Result ContentMetaDatabaseInterface::GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, ProgramId program_id) {
|
||||
R_TRY(this->EnsureEnabled());
|
||||
ContentMetaKey key;
|
||||
R_TRY(this->GetLatestContentMetaKeyImpl(&key, title_id));
|
||||
R_TRY(this->GetLatestContentMetaKeyImpl(&key, program_id));
|
||||
out_key.SetValue(key);
|
||||
return ResultSuccess();
|
||||
}
|
||||
@ -308,20 +308,20 @@ namespace ams::ncm {
|
||||
R_TRY(GetContentMetaValuePointer(&value, &value_size, key, this->kvs));
|
||||
|
||||
if (key.type == ContentMetaType::Application || key.type == ContentMetaType::Patch || key.type == ContentMetaType::AddOnContent || key.type == ContentMetaType::Delta) {
|
||||
ProgramId application_tid = key.id;
|
||||
ProgramId application_id = key.id;
|
||||
|
||||
switch (key.type) {
|
||||
case ContentMetaType::Application:
|
||||
break;
|
||||
default:
|
||||
/* The first u64 of all non-application extended headers is the application title id. */
|
||||
application_tid = *GetValueExtendedHeader<ProgramId>(value);
|
||||
/* The first u64 of all non-application extended headers is the application program id. */
|
||||
application_id = *GetValueExtendedHeader<ProgramId>(value);
|
||||
}
|
||||
|
||||
/* Write the entry to the output buffer. */
|
||||
if (entries_written < out_keys.GetSize()) {
|
||||
ApplicationContentMetaKey* out_app_key = &out_keys[entries_written];
|
||||
out_app_key->application_title_id = application_tid;
|
||||
out_app_key->application_program_id = application_id;
|
||||
out_app_key->key = key;
|
||||
entries_written++;
|
||||
}
|
||||
@ -353,7 +353,7 @@ namespace ams::ncm {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentMetaDatabaseInterface::HasAll(sf::Out<bool> out, const sf::InArray<ContentMetaKey> & keys) {
|
||||
Result ContentMetaDatabaseInterface::HasAll(sf::Out<bool> out, const sf::InArray<ContentMetaKey> &keys) {
|
||||
R_TRY(this->EnsureEnabled());
|
||||
|
||||
bool has = true;
|
||||
@ -420,7 +420,7 @@ namespace ams::ncm {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentMetaDatabaseInterface::LookupOrphanContent(const sf::OutArray<bool> & out_orphaned, const sf::InArray<ContentId> &content_ids) {
|
||||
Result ContentMetaDatabaseInterface::LookupOrphanContent(const sf::OutArray<bool> &out_orphaned, const sf::InArray<ContentId> &content_ids) {
|
||||
R_TRY(this->EnsureEnabled());
|
||||
|
||||
if (out_orphaned.GetSize() < content_ids.GetSize()) {
|
||||
@ -570,30 +570,30 @@ namespace ams::ncm {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentMetaDatabaseInterface::GetLatestProgram(ContentId* out_content_id, ProgramId title_id) {
|
||||
Result ContentMetaDatabaseInterface::GetLatestProgram(ContentId* out_content_id, ProgramId program_id) {
|
||||
ContentMetaKey key;
|
||||
|
||||
R_TRY(this->GetLatestContentMetaKey(&key, title_id));
|
||||
R_TRY(this->GetLatestContentMetaKey(&key, program_id));
|
||||
R_TRY(this->GetContentIdByType(out_content_id, key, ContentType::Program));
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result ContentMetaDatabaseInterface::GetLatestData(ContentId* out_content_id, ProgramId title_id) {
|
||||
Result ContentMetaDatabaseInterface::GetLatestData(ContentId* out_content_id, ProgramId program_id) {
|
||||
ContentMetaKey key;
|
||||
|
||||
R_TRY(this->GetLatestContentMetaKey(&key, title_id));
|
||||
R_TRY(this->GetLatestContentMetaKey(&key, program_id));
|
||||
R_TRY(this->GetContentIdByType(out_content_id, key, ContentType::Data));
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result OnMemoryContentMetaDatabaseInterface::GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, ProgramId title_id) {
|
||||
Result OnMemoryContentMetaDatabaseInterface::GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, ProgramId program_id) {
|
||||
R_TRY(this->EnsureEnabled());
|
||||
|
||||
const ContentMetaKey key = ContentMetaKey::Make(title_id, 0, ContentMetaType::Unknown);
|
||||
const ContentMetaKey key = ContentMetaKey::Make(program_id, 0, ContentMetaType::Unknown);
|
||||
|
||||
std::optional<ContentMetaKey> found_key;
|
||||
for (auto entry = this->kvs->lower_bound(key); entry != this->kvs->end(); entry++) {
|
||||
if (entry->GetKey().id != title_id) {
|
||||
if (entry->GetKey().id != program_id) {
|
||||
break;
|
||||
}
|
||||
|
||||
@ -608,7 +608,7 @@ namespace ams::ncm {
|
||||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result OnMemoryContentMetaDatabaseInterface::LookupOrphanContent(const sf::OutArray<bool> & out_orphaned, const sf::InArray<ContentId> &content_ids) {
|
||||
Result OnMemoryContentMetaDatabaseInterface::LookupOrphanContent(const sf::OutArray<bool> &out_orphaned, const sf::InArray<ContentId> &content_ids) {
|
||||
return ResultInvalidContentMetaDatabase();
|
||||
}
|
||||
|
||||
|
@ -30,15 +30,15 @@ namespace ams::ncm {
|
||||
}
|
||||
private:
|
||||
Result GetContentIdByTypeImpl(ContentId* out, const ContentMetaKey& key, ContentType type, std::optional<u8> id_offset);
|
||||
Result GetLatestContentMetaKeyImpl(ContentMetaKey* out_key, ProgramId tid);
|
||||
Result GetLatestContentMetaKeyImpl(ContentMetaKey* out_key, ProgramId id);
|
||||
public:
|
||||
virtual Result Set(ContentMetaKey key, sf::InBuffer value) override;
|
||||
virtual Result Get(sf::Out<u64> out_size, ContentMetaKey key, sf::OutBuffer out_value) override;
|
||||
virtual Result Remove(ContentMetaKey key) override;
|
||||
virtual Result GetContentIdByType(sf::Out<ContentId> out_content_id, ContentMetaKey key, ContentType type) override;
|
||||
virtual Result ListContentInfo(sf::Out<u32> out_entries_written, const sf::OutArray<ContentInfo> &out_info, ContentMetaKey key, u32 start_index) override;
|
||||
virtual Result List(sf::Out<u32> out_entries_total, sf::Out<u32> out_entries_written, const sf::OutArray<ContentMetaKey> &out_info, ContentMetaType type, ProgramId application_title_id, ProgramId title_id_min, ProgramId title_id_max, ContentInstallType install_type) override;
|
||||
virtual Result GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, ProgramId tid) override;
|
||||
virtual Result List(sf::Out<u32> out_entries_total, sf::Out<u32> out_entries_written, const sf::OutArray<ContentMetaKey> &out_info, ContentMetaType type, ProgramId application_program_id, ProgramId program_id_min, ProgramId program_id_max, ContentInstallType install_type) override;
|
||||
virtual Result GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, ProgramId id) override;
|
||||
virtual Result ListApplication(sf::Out<u32> out_entries_total, sf::Out<u32> out_entries_written, const sf::OutArray<ApplicationContentMetaKey> &out_keys, ContentMetaType type) override;
|
||||
virtual Result Has(sf::Out<bool> out, ContentMetaKey key) override;
|
||||
virtual Result HasAll(sf::Out<bool> out, const sf::InArray<ContentMetaKey> &keys) override;
|
||||
@ -55,8 +55,8 @@ namespace ams::ncm {
|
||||
virtual Result GetContentIdByTypeAndIdOffset(sf::Out<ContentId> out_content_id, ContentMetaKey key, ContentType type, u8 id_offset) override;
|
||||
|
||||
/* APIs. */
|
||||
virtual Result GetLatestProgram(ContentId* out_content_id, ProgramId title_id) override;
|
||||
virtual Result GetLatestData(ContentId* out_content_id, ProgramId title_id) override;
|
||||
virtual Result GetLatestProgram(ContentId* out_content_id, ProgramId program_id) override;
|
||||
virtual Result GetLatestData(ContentId* out_content_id, ProgramId program_id) override;
|
||||
};
|
||||
|
||||
class OnMemoryContentMetaDatabaseInterface : public ContentMetaDatabaseInterface {
|
||||
@ -64,8 +64,8 @@ namespace ams::ncm {
|
||||
OnMemoryContentMetaDatabaseInterface(ams::kvdb::MemoryKeyValueStore<ContentMetaKey>* kvs) : ContentMetaDatabaseInterface(kvs) {
|
||||
}
|
||||
public:
|
||||
virtual Result GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, ProgramId tid) override;
|
||||
virtual Result LookupOrphanContent(const sf::OutArray<bool> & out_orphaned, const sf::InArray<ContentId> &content_ids) override;
|
||||
virtual Result GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, ProgramId id) override;
|
||||
virtual Result LookupOrphanContent(const sf::OutArray<bool> &out_orphaned, const sf::InArray<ContentId> &content_ids) override;
|
||||
virtual Result Commit() override;
|
||||
};
|
||||
|
||||
|
@ -75,8 +75,8 @@ namespace ams::ncm {
|
||||
virtual Result Remove(ContentMetaKey key) = 0;
|
||||
virtual Result GetContentIdByType(sf::Out<ContentId> out_content_id, ContentMetaKey key, ContentType type) = 0;
|
||||
virtual Result ListContentInfo(sf::Out<u32> out_entries_written, const sf::OutArray<ContentInfo> &out_info, ContentMetaKey key, u32 start_index) = 0;
|
||||
virtual Result List(sf::Out<u32> out_entries_total, sf::Out<u32> out_entries_written, const sf::OutArray<ContentMetaKey> &out_info, ContentMetaType meta_type, ProgramId application_title_id, ProgramId title_id_min, ProgramId title_id_max, ContentInstallType install_type) = 0;
|
||||
virtual Result GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, ProgramId tid) = 0;
|
||||
virtual Result List(sf::Out<u32> out_entries_total, sf::Out<u32> out_entries_written, const sf::OutArray<ContentMetaKey> &out_info, ContentMetaType meta_type, ProgramId application_program_id, ProgramId program_id_min, ProgramId program_id_max, ContentInstallType install_type) = 0;
|
||||
virtual Result GetLatestContentMetaKey(sf::Out<ContentMetaKey> out_key, ProgramId id) = 0;
|
||||
virtual Result ListApplication(sf::Out<u32> out_entries_total, sf::Out<u32> out_entries_written, const sf::OutArray<ApplicationContentMetaKey> &out_keys, ContentMetaType meta_type) = 0;
|
||||
virtual Result Has(sf::Out<bool> out, ContentMetaKey key) = 0;
|
||||
virtual Result HasAll(sf::Out<bool> out, const sf::InArray<ContentMetaKey> &keys) = 0;
|
||||
@ -93,8 +93,8 @@ namespace ams::ncm {
|
||||
virtual Result GetContentIdByTypeAndIdOffset(sf::Out<ContentId> out_content_id, ContentMetaKey key, ContentType type, u8 id_offset) = 0;
|
||||
|
||||
/* APIs. */
|
||||
virtual Result GetLatestProgram(ContentId* out_content_id, ProgramId title_id) = 0;
|
||||
virtual Result GetLatestData(ContentId* out_content_id, ProgramId title_id) = 0;
|
||||
virtual Result GetLatestProgram(ContentId* out_content_id, ProgramId program_id) = 0;
|
||||
virtual Result GetLatestData(ContentId* out_content_id, ProgramId program_id) = 0;
|
||||
public:
|
||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
||||
MAKE_SERVICE_COMMAND_META(Set),
|
||||
|
Loading…
Reference in New Issue
Block a user