forked from ShuriZma/suyu
general_backend: Move StubApplet and add backend PhotoViewer
This commit is contained in:
parent
80c9e4d3ab
commit
f6e2295055
|
@ -6,9 +6,12 @@
|
||||||
|
|
||||||
#include "common/hex_util.h"
|
#include "common/hex_util.h"
|
||||||
#include "common/logging/log.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/result.h"
|
||||||
#include "core/hle/service/am/am.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 {
|
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;
|
||||||
|
|
||||||
StubApplet::~StubApplet() = default;
|
StubApplet::~StubApplet() = default;
|
||||||
|
@ -67,4 +119,5 @@ void StubApplet::Execute() {
|
||||||
broker.PushInteractiveDataFromApplet(IStorage{std::vector<u8>(0x1000)});
|
broker.PushInteractiveDataFromApplet(IStorage{std::vector<u8>(0x1000)});
|
||||||
broker.SignalStateChanged();
|
broker.SignalStateChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Service::AM::Applets
|
} // namespace Service::AM::Applets
|
|
@ -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
|
Loading…
Reference in New Issue