|
@@ -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
|