mirror of
https://github.com/yuzu-emu/yuzu-android
synced 2025-08-03 06:02:26 -07:00
main, applets/web: Re-add progress dialog for RomFS extraction
This commit is contained in:
@@ -120,7 +120,7 @@ QtNXWebEngineView::QtNXWebEngineView(QWidget* parent, Core::System& system)
|
||||
[this] {
|
||||
if (page()->url() == url_interceptor->GetRequestedURL()) {
|
||||
SetFinished(true);
|
||||
SetExitReason(WebExitReason::WindowClosed);
|
||||
SetExitReason(Service::AM::Applets::WebExitReason::WindowClosed);
|
||||
}
|
||||
},
|
||||
Qt::QueuedConnection);
|
||||
@@ -135,7 +135,7 @@ void QtNXWebEngineView::LoadLocalWebPage(std::string_view main_url,
|
||||
std::string_view additional_args) {
|
||||
SetUserAgent(UserAgent::WebApplet);
|
||||
SetFinished(false);
|
||||
SetExitReason(WebExitReason::EndButtonPressed);
|
||||
SetExitReason(Service::AM::Applets::WebExitReason::EndButtonPressed);
|
||||
SetLastURL("http://localhost/");
|
||||
StartInputThread();
|
||||
|
||||
@@ -176,11 +176,11 @@ void QtNXWebEngineView::SetFinished(bool finished_) {
|
||||
finished = finished_;
|
||||
}
|
||||
|
||||
WebExitReason QtNXWebEngineView::GetExitReason() const {
|
||||
Service::AM::Applets::WebExitReason QtNXWebEngineView::GetExitReason() const {
|
||||
return exit_reason;
|
||||
}
|
||||
|
||||
void QtNXWebEngineView::SetExitReason(WebExitReason exit_reason_) {
|
||||
void QtNXWebEngineView::SetExitReason(Service::AM::Applets::WebExitReason exit_reason_) {
|
||||
exit_reason = exit_reason_;
|
||||
}
|
||||
|
||||
@@ -316,6 +316,8 @@ void QtNXWebEngineView::InputThread() {
|
||||
QtWebBrowser::QtWebBrowser(GMainWindow& main_window) {
|
||||
connect(this, &QtWebBrowser::MainWindowOpenLocalWebPage, &main_window,
|
||||
&GMainWindow::WebBrowserOpenLocalWebPage, Qt::QueuedConnection);
|
||||
connect(&main_window, &GMainWindow::WebBrowserExtractOfflineRomFS, this,
|
||||
&QtWebBrowser::MainWindowExtractOfflineRomFS, Qt::QueuedConnection);
|
||||
connect(&main_window, &GMainWindow::WebBrowserClosed, this,
|
||||
&QtWebBrowser::MainWindowWebBrowserClosed, Qt::QueuedConnection);
|
||||
}
|
||||
@@ -323,7 +325,9 @@ QtWebBrowser::QtWebBrowser(GMainWindow& main_window) {
|
||||
QtWebBrowser::~QtWebBrowser() = default;
|
||||
|
||||
void QtWebBrowser::OpenLocalWebPage(
|
||||
std::string_view local_url, std::function<void(WebExitReason, std::string)> callback) const {
|
||||
std::string_view local_url, std::function<void()> extract_romfs_callback,
|
||||
std::function<void(Service::AM::Applets::WebExitReason, std::string)> callback) const {
|
||||
this->extract_romfs_callback = std::move(extract_romfs_callback);
|
||||
this->callback = std::move(callback);
|
||||
|
||||
const auto index = local_url.find('?');
|
||||
@@ -335,6 +339,11 @@ void QtWebBrowser::OpenLocalWebPage(
|
||||
}
|
||||
}
|
||||
|
||||
void QtWebBrowser::MainWindowWebBrowserClosed(WebExitReason exit_reason, std::string last_url) {
|
||||
void QtWebBrowser::MainWindowExtractOfflineRomFS() {
|
||||
extract_romfs_callback();
|
||||
}
|
||||
|
||||
void QtWebBrowser::MainWindowWebBrowserClosed(Service::AM::Applets::WebExitReason exit_reason,
|
||||
std::string last_url) {
|
||||
callback(exit_reason, last_url);
|
||||
}
|
||||
|
@@ -69,8 +69,8 @@ public:
|
||||
[[nodiscard]] bool IsFinished() const;
|
||||
void SetFinished(bool finished_);
|
||||
|
||||
[[nodiscard]] WebExitReason GetExitReason() const;
|
||||
void SetExitReason(WebExitReason exit_reason_);
|
||||
[[nodiscard]] Service::AM::Applets::WebExitReason GetExitReason() const;
|
||||
void SetExitReason(Service::AM::Applets::WebExitReason exit_reason_);
|
||||
|
||||
[[nodiscard]] const std::string& GetLastURL() const;
|
||||
void SetLastURL(std::string last_url_);
|
||||
@@ -148,7 +148,8 @@ private:
|
||||
|
||||
std::atomic<bool> finished{};
|
||||
|
||||
WebExitReason exit_reason{WebExitReason::EndButtonPressed};
|
||||
Service::AM::Applets::WebExitReason exit_reason{
|
||||
Service::AM::Applets::WebExitReason::EndButtonPressed};
|
||||
|
||||
std::string last_url{"http://localhost/"};
|
||||
};
|
||||
@@ -162,15 +163,21 @@ public:
|
||||
explicit QtWebBrowser(GMainWindow& parent);
|
||||
~QtWebBrowser() override;
|
||||
|
||||
void OpenLocalWebPage(std::string_view local_url,
|
||||
std::function<void(WebExitReason, std::string)> callback) const override;
|
||||
void OpenLocalWebPage(std::string_view local_url, std::function<void()> extract_romfs_callback,
|
||||
std::function<void(Service::AM::Applets::WebExitReason, std::string)>
|
||||
callback) const override;
|
||||
|
||||
signals:
|
||||
void MainWindowOpenLocalWebPage(std::string_view main_url,
|
||||
std::string_view additional_args) const;
|
||||
|
||||
private:
|
||||
void MainWindowWebBrowserClosed(WebExitReason exit_reason, std::string last_url);
|
||||
void MainWindowExtractOfflineRomFS();
|
||||
|
||||
mutable std::function<void(WebExitReason, std::string)> callback;
|
||||
void MainWindowWebBrowserClosed(Service::AM::Applets::WebExitReason exit_reason,
|
||||
std::string last_url);
|
||||
|
||||
mutable std::function<void()> extract_romfs_callback;
|
||||
|
||||
mutable std::function<void(Service::AM::Applets::WebExitReason, std::string)> callback;
|
||||
};
|
||||
|
@@ -372,25 +372,50 @@ void GMainWindow::WebBrowserOpenLocalWebPage(std::string_view main_url,
|
||||
|
||||
QtNXWebEngineView web_browser_view(this, Core::System::GetInstance());
|
||||
|
||||
web_browser_view.LoadLocalWebPage(main_url, additional_args);
|
||||
|
||||
ui.action_Pause->setEnabled(false);
|
||||
ui.action_Restart->setEnabled(false);
|
||||
ui.action_Stop->setEnabled(false);
|
||||
|
||||
if (render_window->IsLoadingComplete()) {
|
||||
render_window->hide();
|
||||
{
|
||||
QProgressDialog loading_progress(this);
|
||||
loading_progress.setLabelText(tr("Loading Web Applet..."));
|
||||
loading_progress.setRange(0, 3);
|
||||
loading_progress.setValue(0);
|
||||
|
||||
if (!Common::FS::Exists(std::string(main_url))) {
|
||||
loading_progress.show();
|
||||
|
||||
auto future = QtConcurrent::run([this] { emit WebBrowserExtractOfflineRomFS(); });
|
||||
|
||||
while (!future.isFinished()) {
|
||||
QCoreApplication::processEvents();
|
||||
}
|
||||
}
|
||||
|
||||
loading_progress.setValue(1);
|
||||
|
||||
web_browser_view.LoadLocalWebPage(main_url, additional_args);
|
||||
|
||||
if (render_window->IsLoadingComplete()) {
|
||||
render_window->hide();
|
||||
}
|
||||
|
||||
const auto& layout = render_window->GetFramebufferLayout();
|
||||
web_browser_view.resize(layout.screen.GetWidth(), layout.screen.GetHeight());
|
||||
web_browser_view.move(layout.screen.left, layout.screen.top + menuBar()->height());
|
||||
web_browser_view.setZoomFactor(static_cast<qreal>(layout.screen.GetWidth()) /
|
||||
static_cast<qreal>(Layout::ScreenUndocked::Width));
|
||||
|
||||
web_browser_view.setFocus();
|
||||
web_browser_view.show();
|
||||
|
||||
loading_progress.setValue(2);
|
||||
|
||||
QCoreApplication::processEvents();
|
||||
|
||||
loading_progress.setValue(3);
|
||||
}
|
||||
|
||||
const auto& layout = render_window->GetFramebufferLayout();
|
||||
web_browser_view.resize(layout.screen.GetWidth(), layout.screen.GetHeight());
|
||||
web_browser_view.move(layout.screen.left, layout.screen.top + menuBar()->height());
|
||||
web_browser_view.setZoomFactor(static_cast<qreal>(layout.screen.GetWidth()) /
|
||||
static_cast<qreal>(Layout::ScreenUndocked::Width));
|
||||
|
||||
web_browser_view.setFocus();
|
||||
web_browser_view.show();
|
||||
|
||||
bool exit_check = false;
|
||||
|
||||
while (!web_browser_view.IsFinished()) {
|
||||
@@ -402,7 +427,8 @@ void GMainWindow::WebBrowserOpenLocalWebPage(std::string_view main_url,
|
||||
exit_check = false;
|
||||
if (variant.toBool()) {
|
||||
web_browser_view.SetFinished(true);
|
||||
web_browser_view.SetExitReason(WebExitReason::EndButtonPressed);
|
||||
web_browser_view.SetExitReason(
|
||||
Service::AM::Applets::WebExitReason::EndButtonPressed);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -412,7 +438,7 @@ void GMainWindow::WebBrowserOpenLocalWebPage(std::string_view main_url,
|
||||
if (web_browser_view.GetCurrentURL().contains(QStringLiteral("localhost"))) {
|
||||
if (!web_browser_view.IsFinished()) {
|
||||
web_browser_view.SetFinished(true);
|
||||
web_browser_view.SetExitReason(WebExitReason::CallbackURL);
|
||||
web_browser_view.SetExitReason(Service::AM::Applets::WebExitReason::CallbackURL);
|
||||
}
|
||||
|
||||
web_browser_view.SetLastURL(web_browser_view.GetCurrentURL().toStdString());
|
||||
@@ -436,12 +462,14 @@ void GMainWindow::WebBrowserOpenLocalWebPage(std::string_view main_url,
|
||||
ui.action_Restart->setEnabled(true);
|
||||
ui.action_Stop->setEnabled(true);
|
||||
|
||||
QCoreApplication::processEvents();
|
||||
|
||||
emit WebBrowserClosed(exit_reason, last_url);
|
||||
|
||||
#else
|
||||
|
||||
// Utilize the same fallback as the default web browser applet.
|
||||
emit WebBrowserClosed(WebExitReason::WindowClosed, "http://localhost");
|
||||
emit WebBrowserClosed(Service::AM::Applets::WebExitReason::WindowClosed, "http://localhost");
|
||||
|
||||
#endif
|
||||
}
|
||||
|
@@ -130,6 +130,7 @@ signals:
|
||||
void SoftwareKeyboardFinishedText(std::optional<std::u16string> text);
|
||||
void SoftwareKeyboardFinishedCheckDialog();
|
||||
|
||||
void WebBrowserExtractOfflineRomFS();
|
||||
void WebBrowserClosed(Service::AM::Applets::WebExitReason exit_reason, std::string last_url);
|
||||
|
||||
public slots:
|
||||
|
Reference in New Issue
Block a user