// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin // SPDX-License-Identifier: CC-BY-NC-ND-4.0 #pragma once #include "common/heap_array.h" #include "common/types.h" #include #include #include #include class Error; namespace Threading { class ThreadHandle; } enum class WindowInfoType : u8; namespace Host { /// Returns true if the specified resource file exists. bool ResourceFileExists(std::string_view filename, bool allow_override); /// Reads a file from the resources directory of the application. /// This may be outside of the "normal" filesystem on platforms such as Mac. std::optional> ReadResourceFile(std::string_view filename, bool allow_override, Error* error = nullptr); /// Reads a resource file file from the resources directory as a string. std::optional ReadResourceFileToString(std::string_view filename, bool allow_override, Error* error = nullptr); /// Returns the modified time of a resource. std::optional GetResourceFileTimestamp(std::string_view filename, bool allow_override); /// Reports a fatal error on the main thread. This does not assume that the main window exists, /// unlike ReportErrorAsync(), and will exit the application after the popup is closed. [[noreturn]] void ReportFatalError(std::string_view title, std::string_view message); /// Displays an asynchronous error on the UI thread, i.e. doesn't block the caller. void ReportErrorAsync(std::string_view title, std::string_view message); /// Displays a message in either the on-screen display or status bar, depending on host capabilities. void ReportStatusMessage(std::string_view message); /// Displays an asynchronous confirmation on the UI thread, but does not block the caller. /// The callback may be executed on a different thread. Use RunOnCoreThread() in the callback to ensure safety. using ConfirmMessageAsyncCallback = std::function; void ConfirmMessageAsync(std::string_view icon, std::string_view title, std::string_view message, ConfirmMessageAsyncCallback callback, std::string_view yes_text = std::string_view(), std::string_view no_text = std::string_view()); /// Opens a URL, using the default application. void OpenURL(std::string_view url); /// Returns the current contents of the clipboard as UTF-8 text, if any. std::string GetClipboardText(); /// Copies the provided UTF-8 text to the host's clipboard, if present. bool CopyTextToClipboard(std::string_view text); /// Returns a list of supported languages and codes (suffixes for translation files). std::span> GetAvailableLanguageList(); /// Returns the localized language name for the specified language code. const char* GetLanguageName(std::string_view language_code); /// Refreshes the UI when the language is changed. bool ChangeLanguage(const char* new_language); /// Gets a handle to the core thread. const Threading::ThreadHandle& GetCoreThreadHandle(); /// Returns true if the currently executing thread is the core thread. bool IsOnCoreThread(); /// Safely executes a function on the VM thread. void RunOnCoreThread(std::function function, bool block = false); /// Safely executes a function on the main/UI thread. void RunOnUIThread(std::function function, bool block = false); /// Asynchronous work tasks, complete on worker thread. void QueueAsyncTask(std::function function); void WaitForAllAsyncTasks(); /// Commits any changes made to the base settings layer to the host. void CommitBaseSettingChanges(); /// Returns the window type for the host. WindowInfoType GetRenderWindowInfoType(); /// Changes the screensaver inhibit state. bool SetScreensaverInhibit(bool inhibit, Error* error); } // namespace Host