diff options
| author | Zach Hilman <zachhilman@gmail.com> | 2019-03-11 19:38:53 -0400 | 
|---|---|---|
| committer | Zach Hilman <zachhilman@gmail.com> | 2019-04-17 11:35:24 -0400 | 
| commit | f6e229505583d37c8320f3a01b3f86018fcde22b (patch) | |
| tree | dbdb77d0c739b5e1d5da1e010ca28bcd0d5c5f79 /src/core/hle/service | |
| parent | 80c9e4d3ab7e7b7a4eeda8c3467039d8ca48ff62 (diff) | |
general_backend: Move StubApplet and add backend PhotoViewer
Diffstat (limited to 'src/core/hle/service')
| -rw-r--r-- | src/core/hle/service/am/applets/general_backend.cpp (renamed from src/core/hle/service/am/applets/stub_applet.cpp) | 55 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/general_backend.h | 48 | 
2 files changed, 102 insertions, 1 deletions
diff --git a/src/core/hle/service/am/applets/stub_applet.cpp b/src/core/hle/service/am/applets/general_backend.cpp index ed166b87d..18ab0718b 100644 --- a/src/core/hle/service/am/applets/stub_applet.cpp +++ b/src/core/hle/service/am/applets/general_backend.cpp @@ -6,9 +6,12 @@  #include "common/hex_util.h"  #include "common/logging/log.h" +#include "core/core.h" +#include "core/frontend/applets/general_frontend.h" +#include "core/hle/kernel/process.h"  #include "core/hle/result.h"  #include "core/hle/service/am/am.h" -#include "core/hle/service/am/applets/stub_applet.h" +#include "core/hle/service/am/applets/general_backend.h"  namespace Service::AM::Applets { @@ -30,6 +33,55 @@ static void LogCurrentStorage(AppletDataBroker& broker, std::string prefix) {      }  } +PhotoViewer::PhotoViewer(const Core::Frontend::PhotoViewerApplet& frontend) : frontend(frontend) {} + +PhotoViewer::~PhotoViewer() = default; + +void PhotoViewer::Initialize() { +    Applet::Initialize(); +    complete = false; + +    const auto storage = broker.PopNormalDataToApplet(); +    ASSERT(storage != nullptr); +    const auto data = storage->GetData(); +    ASSERT(!data.empty()); +    mode = static_cast<PhotoViewerAppletMode>(data[0]); +} + +bool PhotoViewer::TransactionComplete() const { +    return complete; +} + +ResultCode PhotoViewer::GetStatus() const { +    return RESULT_SUCCESS; +} + +void PhotoViewer::ExecuteInteractive() { +    UNREACHABLE_MSG("Unexpected interactive applet data."); +} + +void PhotoViewer::Execute() { +    if (complete) +        return; + +    const auto callback = [this] { ViewFinished(); }; +    switch (mode) { +    case PhotoViewerAppletMode::CurrentApp: +        frontend.ShowPhotosForApplication(Core::CurrentProcess()->GetTitleID(), callback); +        break; +    case PhotoViewerAppletMode::AllApps: +        frontend.ShowAllPhotos(callback); +        break; +    default: +        UNIMPLEMENTED_MSG("Unimplemented PhotoViewer applet mode={:02X}!", static_cast<u8>(mode)); +    } +} + +void PhotoViewer::ViewFinished() { +    broker.PushNormalDataFromApplet(IStorage{{}}); +    broker.SignalStateChanged(); +} +  StubApplet::StubApplet() = default;  StubApplet::~StubApplet() = default; @@ -67,4 +119,5 @@ void StubApplet::Execute() {      broker.PushInteractiveDataFromApplet(IStorage{std::vector<u8>(0x1000)});      broker.SignalStateChanged();  } +  } // namespace Service::AM::Applets diff --git a/src/core/hle/service/am/applets/general_backend.h b/src/core/hle/service/am/applets/general_backend.h new file mode 100644 index 000000000..d7313e74a --- /dev/null +++ b/src/core/hle/service/am/applets/general_backend.h @@ -0,0 +1,48 @@ +// Copyright 2019 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include "core/hle/service/am/applets/applets.h" + +namespace Service::AM::Applets { + +enum class PhotoViewerAppletMode : u8 { +    CurrentApp = 0, +    AllApps = 1, +}; + +class PhotoViewer final : public Applet { +public: +    PhotoViewer(const Core::Frontend::PhotoViewerApplet& frontend); +    ~PhotoViewer() override; + +    void Initialize() override; +    bool TransactionComplete() const override; +    ResultCode GetStatus() const override; +    void ExecuteInteractive() override; +    void Execute() override; + +    void ViewFinished(); + +private: +    const Core::Frontend::PhotoViewerApplet& frontend; +    bool complete; +    PhotoViewerAppletMode mode; +}; + +class StubApplet final : public Applet { +public: +    StubApplet(); +    ~StubApplet() override; + +    void Initialize() override; + +    bool TransactionComplete() const override; +    ResultCode GetStatus() const override; +    void ExecuteInteractive() override; +    void Execute() override; +}; + +} // namespace Service::AM::Applets  | 
