mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	general_frontend: Add documentation for parental controls and ecommerce applets
This commit is contained in:
		
							parent
							
								
									73dcb13619
								
							
						
					
					
						commit
						01ff38cca8
					
				@ -60,10 +60,11 @@ DefaultECommerceApplet::~DefaultECommerceApplet() = default;
 | 
			
		||||
void DefaultECommerceApplet::ShowApplicationInformation(
 | 
			
		||||
    std::function<void()> finished, u64 title_id, std::optional<u128> user_id,
 | 
			
		||||
    std::optional<bool> full_display, std::optional<std::string> extra_parameter) {
 | 
			
		||||
    const auto value = user_id.value_or(u128{});
 | 
			
		||||
    LOG_INFO(Service_AM,
 | 
			
		||||
             "Application requested frontend show application information for EShop, "
 | 
			
		||||
             "title_id={:016X}, user_id={:016X}{:016X}, full_display={}, extra_parameter={}",
 | 
			
		||||
             title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0],
 | 
			
		||||
             title_id, value[1], value[0],
 | 
			
		||||
             full_display.has_value() ? fmt::format("{}", *full_display) : "null",
 | 
			
		||||
             extra_parameter.value_or("null"));
 | 
			
		||||
    finished();
 | 
			
		||||
@ -72,30 +73,33 @@ void DefaultECommerceApplet::ShowApplicationInformation(
 | 
			
		||||
void DefaultECommerceApplet::ShowAddOnContentList(std::function<void()> finished, u64 title_id,
 | 
			
		||||
                                                  std::optional<u128> user_id,
 | 
			
		||||
                                                  std::optional<bool> full_display) {
 | 
			
		||||
    const auto value = user_id.value_or(u128{});
 | 
			
		||||
    LOG_INFO(Service_AM,
 | 
			
		||||
             "Application requested frontend show add on content list for EShop, "
 | 
			
		||||
             "title_id={:016X}, user_id={:016X}{:016X}, full_display={}",
 | 
			
		||||
             title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0],
 | 
			
		||||
             title_id, value[1], value[0],
 | 
			
		||||
             full_display.has_value() ? fmt::format("{}", *full_display) : "null");
 | 
			
		||||
    finished();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DefaultECommerceApplet::ShowSubscriptionList(std::function<void()> finished, u64 title_id,
 | 
			
		||||
                                                  std::optional<u128> user_id) {
 | 
			
		||||
    const auto value = user_id.value_or(u128{});
 | 
			
		||||
    LOG_INFO(Service_AM,
 | 
			
		||||
             "Application requested frontend show subscription list for EShop, title_id={:016X}, "
 | 
			
		||||
             "user_id={:016X}{:016X}",
 | 
			
		||||
             title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0]);
 | 
			
		||||
             title_id, value[1], value[0]);
 | 
			
		||||
    finished();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DefaultECommerceApplet::ShowConsumableItemList(std::function<void()> finished, u64 title_id,
 | 
			
		||||
                                                    std::optional<u128> user_id) {
 | 
			
		||||
    const auto value = user_id.value_or(u128{});
 | 
			
		||||
    LOG_INFO(
 | 
			
		||||
        Service_AM,
 | 
			
		||||
        "Application requested frontend show consumable item list for EShop, title_id={:016X}, "
 | 
			
		||||
        "user_id={:016X}{:016X}",
 | 
			
		||||
        title_id, user_id.value_or(u128{})[1], user_id.value_or(u128{})[0]);
 | 
			
		||||
        title_id, value[1], value[0]);
 | 
			
		||||
    finished();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -14,10 +14,20 @@ class ParentalControlsApplet {
 | 
			
		||||
public:
 | 
			
		||||
    virtual ~ParentalControlsApplet();
 | 
			
		||||
 | 
			
		||||
    // Prompts the user to enter a PIN and calls the callback with whether or not it matches the
 | 
			
		||||
    // correct PIN. If the bool is passed, and the PIN was recently entered correctly, the frontend
 | 
			
		||||
    // should not prompt and simply return true.
 | 
			
		||||
    virtual void VerifyPIN(std::function<void(bool)> finished,
 | 
			
		||||
                           bool suspend_future_verification_temporarily) = 0;
 | 
			
		||||
 | 
			
		||||
    // Prompts the user to enter a PIN and calls the callback for correctness. Frontends can
 | 
			
		||||
    // optionally alert the user that this is to change parental controls settings.
 | 
			
		||||
    virtual void VerifyPINForSettings(std::function<void(bool)> finished) = 0;
 | 
			
		||||
 | 
			
		||||
    // Prompts the user to create a new PIN for pctl and stores it with the service.
 | 
			
		||||
    virtual void RegisterPIN(std::function<void()> finished) = 0;
 | 
			
		||||
 | 
			
		||||
    // Prompts the user to verify the current PIN and then store a new one into pctl.
 | 
			
		||||
    virtual void ChangePIN(std::function<void()> finished) = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -52,18 +62,32 @@ class ECommerceApplet {
 | 
			
		||||
public:
 | 
			
		||||
    virtual ~ECommerceApplet();
 | 
			
		||||
 | 
			
		||||
    // Shows a page with application icons, description, name, and price.
 | 
			
		||||
    virtual void ShowApplicationInformation(std::function<void()> finished, u64 title_id,
 | 
			
		||||
                                            std::optional<u128> user_id = {},
 | 
			
		||||
                                            std::optional<bool> full_display = {},
 | 
			
		||||
                                            std::optional<std::string> extra_parameter = {}) = 0;
 | 
			
		||||
 | 
			
		||||
    // Shows a page with all of the add on content available for a game, with name, description, and
 | 
			
		||||
    // price.
 | 
			
		||||
    virtual void ShowAddOnContentList(std::function<void()> finished, u64 title_id,
 | 
			
		||||
                                      std::optional<u128> user_id = {},
 | 
			
		||||
                                      std::optional<bool> full_display = {}) = 0;
 | 
			
		||||
 | 
			
		||||
    // Shows a page with all of the subscriptions (recurring payments) for a game, with name,
 | 
			
		||||
    // description, price, and renewal period.
 | 
			
		||||
    virtual void ShowSubscriptionList(std::function<void()> finished, u64 title_id,
 | 
			
		||||
                                      std::optional<u128> user_id = {}) = 0;
 | 
			
		||||
 | 
			
		||||
    // Shows a page with a list of any additional game related purchasable items (DLC,
 | 
			
		||||
    // subscriptions, etc) for a particular game, with name, description, type, and price.
 | 
			
		||||
    virtual void ShowConsumableItemList(std::function<void()> finished, u64 title_id,
 | 
			
		||||
                                        std::optional<u128> user_id = {}) = 0;
 | 
			
		||||
 | 
			
		||||
    // Shows the home page of the shop.
 | 
			
		||||
    virtual void ShowShopHome(std::function<void()> finished, u128 user_id, bool full_display) = 0;
 | 
			
		||||
 | 
			
		||||
    // Shows the user settings page of the shop.
 | 
			
		||||
    virtual void ShowSettings(std::function<void()> finished, u128 user_id, bool full_display) = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -103,6 +103,17 @@ enum class ShimKind : u32 {
 | 
			
		||||
    Lobby = 7,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum class ShopWebTarget {
 | 
			
		||||
    ApplicationInfo,
 | 
			
		||||
    AddOnContentList,
 | 
			
		||||
    SubscriptionList,
 | 
			
		||||
    ConsumableItemList,
 | 
			
		||||
    Home,
 | 
			
		||||
    Settings,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
 | 
			
		||||
constexpr std::size_t SHIM_KIND_COUNT = 0x8;
 | 
			
		||||
 | 
			
		||||
struct WebArgHeader {
 | 
			
		||||
@ -148,31 +159,20 @@ enum class OfflineWebSource : u32 {
 | 
			
		||||
    SystemDataPage = 0x3,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum class ShopWebTarget {
 | 
			
		||||
    ApplicationInfo,
 | 
			
		||||
    AddOnContentList,
 | 
			
		||||
    SubscriptionList,
 | 
			
		||||
    ConsumableItemList,
 | 
			
		||||
    Home,
 | 
			
		||||
    Settings,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
 | 
			
		||||
std::map<WebArgTLVType, std::vector<u8>> GetWebArguments(const std::vector<u8>& arg) {
 | 
			
		||||
    WebArgHeader header{};
 | 
			
		||||
    if (arg.size() < sizeof(WebArgHeader))
 | 
			
		||||
        return {};
 | 
			
		||||
 | 
			
		||||
    WebArgHeader header{};
 | 
			
		||||
    std::memcpy(&header, arg.data(), sizeof(WebArgHeader));
 | 
			
		||||
 | 
			
		||||
    std::map<WebArgTLVType, std::vector<u8>> out;
 | 
			
		||||
    u64 offset = sizeof(WebArgHeader);
 | 
			
		||||
    for (std::size_t i = 0; i < header.count; ++i) {
 | 
			
		||||
        WebArgTLV tlv{};
 | 
			
		||||
        if (arg.size() < (offset + sizeof(WebArgTLV)))
 | 
			
		||||
            return out;
 | 
			
		||||
 | 
			
		||||
        WebArgTLV tlv{};
 | 
			
		||||
        std::memcpy(&tlv, arg.data() + offset, sizeof(WebArgTLV));
 | 
			
		||||
        offset += sizeof(WebArgTLV);
 | 
			
		||||
 | 
			
		||||
@ -392,7 +392,7 @@ void WebBrowser::InitializeShop() {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const std::map<std::string, ShopWebTarget> target_map{
 | 
			
		||||
    const std::map<std::string, ShopWebTarget, std::less<>> target_map{
 | 
			
		||||
        {"product_detail", ShopWebTarget::ApplicationInfo},
 | 
			
		||||
        {"aocs", ShopWebTarget::AddOnContentList},
 | 
			
		||||
        {"subscriptions", ShopWebTarget::SubscriptionList},
 | 
			
		||||
@ -480,7 +480,7 @@ void WebBrowser::InitializeOffline() {
 | 
			
		||||
 | 
			
		||||
    std::string path_additional_directory;
 | 
			
		||||
    if (source == OfflineWebSource::OfflineHtmlPage) {
 | 
			
		||||
        path_additional_directory = std::string(DIR_SEP) + "html-document";
 | 
			
		||||
        path_additional_directory = std::string(DIR_SEP).append("html-document");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    filename =
 | 
			
		||||
 | 
			
		||||
@ -67,7 +67,7 @@ private:
 | 
			
		||||
    std::string filename;
 | 
			
		||||
 | 
			
		||||
    ShopWebTarget shop_web_target;
 | 
			
		||||
    std::map<std::string, std::string> shop_query;
 | 
			
		||||
    std::map<std::string, std::string, std::less<>> shop_query;
 | 
			
		||||
    std::optional<u64> title_id = 0;
 | 
			
		||||
    std::optional<u128> user_id;
 | 
			
		||||
    std::optional<bool> shop_full_display;
 | 
			
		||||
 | 
			
		||||
@ -814,13 +814,13 @@ bool GMainWindow::LoadROM(const QString& filename) {
 | 
			
		||||
    system.SetGPUDebugContext(debug_context);
 | 
			
		||||
 | 
			
		||||
    system.SetAppletFrontendSet({
 | 
			
		||||
        nullptr,                                     ///< Parental Controls
 | 
			
		||||
        std::make_unique<QtErrorDisplay>(*this),     ///<
 | 
			
		||||
        nullptr,                                     ///< Photo Viewer
 | 
			
		||||
        std::make_unique<QtProfileSelector>(*this),  ///<
 | 
			
		||||
        std::make_unique<QtSoftwareKeyboard>(*this), ///<
 | 
			
		||||
        std::make_unique<QtWebBrowser>(*this),       ///<
 | 
			
		||||
        nullptr,                                     ///< E-Commerce
 | 
			
		||||
        nullptr,                                     // Parental Controls
 | 
			
		||||
        std::make_unique<QtErrorDisplay>(*this),     //
 | 
			
		||||
        nullptr,                                     // Photo Viewer
 | 
			
		||||
        std::make_unique<QtProfileSelector>(*this),  //
 | 
			
		||||
        std::make_unique<QtSoftwareKeyboard>(*this), //
 | 
			
		||||
        std::make_unique<QtWebBrowser>(*this),       //
 | 
			
		||||
        nullptr,                                     // E-Commerce
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const Core::System::ResultStatus result{system.Load(*render_window, filename.toStdString())};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user