general_backend: Move StubApplet and add backend PhotoViewer
This commit is contained in:
		@@ -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
 | 
			
		||||
							
								
								
									
										48
									
								
								src/core/hle/service/am/applets/general_backend.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/core/hle/service/am/applets/general_backend.h
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
		Reference in New Issue
	
	Block a user