1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-13 13:31:48 +00:00

Make assets in progress open the next step instead of erring

This commit is contained in:
Yuri Sizov
2022-01-19 04:37:38 +03:00
parent f8b8d0d4b8
commit 8e8177521f
3 changed files with 58 additions and 35 deletions

View File

@@ -1442,6 +1442,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
style_info_3d_viewport->set_border_width_all(0); style_info_3d_viewport->set_border_width_all(0);
theme->set_stylebox("Information3dViewport", "EditorStyles", style_info_3d_viewport); theme->set_stylebox("Information3dViewport", "EditorStyles", style_info_3d_viewport);
// Asset Library.
theme->set_stylebox("panel", "AssetLib", style_content_panel);
theme->set_color("status_color", "AssetLib", Color(0.5, 0.5, 0.5));
theme->set_icon("dismiss", "AssetLib", theme->get_icon("Close", "EditorIcons"));
// Theme editor. // Theme editor.
theme->set_color("preview_picker_overlay_color", "ThemeEditor", Color(0.1, 0.1, 0.1, 0.25)); theme->set_color("preview_picker_overlay_color", "ThemeEditor", Color(0.1, 0.1, 0.1, 0.25));
Color theme_preview_picker_bg_color = accent_color; Color theme_preview_picker_bg_color = accent_color;

View File

@@ -369,11 +369,11 @@ void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int
download_error->set_text(TTR("Asset Download Error:") + "\n" + error_text); download_error->set_text(TTR("Asset Download Error:") + "\n" + error_text);
download_error->popup_centered(); download_error->popup_centered();
// Let the user retry the download. // Let the user retry the download.
retry->show(); retry_button->show();
return; return;
} }
install->set_disabled(false); install_button->set_disabled(false);
status->set_text(TTR("Success!")); status->set_text(TTR("Success!"));
// Make the progress bar invisible but don't reflow other Controls around it. // Make the progress bar invisible but don't reflow other Controls around it.
progress->set_modulate(Color(0, 0, 0, 0)); progress->set_modulate(Color(0, 0, 0, 0));
@@ -381,7 +381,7 @@ void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int
set_process(false); set_process(false);
// Automatically prompt for installation once the download is completed. // Automatically prompt for installation once the download is completed.
_install(); install();
} }
void EditorAssetLibraryItemDownload::configure(const String &p_title, int p_asset_id, const Ref<Texture2D> &p_preview, const String &p_download_url, const String &p_sha256_hash) { void EditorAssetLibraryItemDownload::configure(const String &p_title, int p_asset_id, const Ref<Texture2D> &p_preview, const String &p_download_url, const String &p_sha256_hash) {
@@ -400,8 +400,9 @@ void EditorAssetLibraryItemDownload::_notification(int p_what) {
switch (p_what) { switch (p_what) {
case NOTIFICATION_ENTER_TREE: case NOTIFICATION_ENTER_TREE:
case NOTIFICATION_THEME_CHANGED: { case NOTIFICATION_THEME_CHANGED: {
panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("panel"), SNAME("TabContainer"))); panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("panel"), SNAME("AssetLib")));
dismiss->set_normal_texture(get_theme_icon(SNAME("Close"), SNAME("EditorIcons"))); status->add_theme_color_override("font_color", get_theme_color(SNAME("status_color"), SNAME("AssetLib")));
dismiss_button->set_normal_texture(get_theme_icon(SNAME("dismiss"), SNAME("AssetLib")));
} break; } break;
case NOTIFICATION_PROCESS: { case NOTIFICATION_PROCESS: {
// Make the progress bar visible again when retrying the download. // Make the progress bar visible again when retrying the download.
@@ -461,7 +462,7 @@ void EditorAssetLibraryItemDownload::_close() {
queue_delete(); queue_delete();
} }
void EditorAssetLibraryItemDownload::_install() { void EditorAssetLibraryItemDownload::install() {
String file = download->get_download_file(); String file = download->get_download_file();
if (external_install) { if (external_install) {
@@ -475,7 +476,7 @@ void EditorAssetLibraryItemDownload::_install() {
void EditorAssetLibraryItemDownload::_make_request() { void EditorAssetLibraryItemDownload::_make_request() {
// Hide the Retry button if we've just pressed it. // Hide the Retry button if we've just pressed it.
retry->hide(); retry_button->hide();
download->cancel_request(); download->cancel_request();
download->set_download_file(EditorPaths::get_singleton()->get_cache_dir().plus_file("tmp_asset_" + itos(asset_id)) + ".zip"); download->set_download_file(EditorPaths::get_singleton()->get_cache_dir().plus_file("tmp_asset_" + itos(asset_id)) + ".zip");
@@ -499,6 +500,8 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() {
HBoxContainer *hb = memnew(HBoxContainer); HBoxContainer *hb = memnew(HBoxContainer);
panel->add_child(hb); panel->add_child(hb);
icon = memnew(TextureRect); icon = memnew(TextureRect);
icon->set_stretch_mode(TextureRect::STRETCH_KEEP_ASPECT_CENTERED);
icon->set_v_size_flags(0);
hb->add_child(icon); hb->add_child(icon);
VBoxContainer *vb = memnew(VBoxContainer); VBoxContainer *vb = memnew(VBoxContainer);
@@ -511,9 +514,9 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() {
title_hb->add_child(title); title_hb->add_child(title);
title->set_h_size_flags(Control::SIZE_EXPAND_FILL); title->set_h_size_flags(Control::SIZE_EXPAND_FILL);
dismiss = memnew(TextureButton); dismiss_button = memnew(TextureButton);
dismiss->connect("pressed", callable_mp(this, &EditorAssetLibraryItemDownload::_close)); dismiss_button->connect("pressed", callable_mp(this, &EditorAssetLibraryItemDownload::_close));
title_hb->add_child(dismiss); title_hb->add_child(dismiss_button);
title->set_clip_text(true); title->set_clip_text(true);
@@ -521,7 +524,6 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() {
status = memnew(Label(TTR("Idle"))); status = memnew(Label(TTR("Idle")));
vb->add_child(status); vb->add_child(status);
status->add_theme_color_override("font_color", Color(0.5, 0.5, 0.5));
progress = memnew(ProgressBar); progress = memnew(ProgressBar);
vb->add_child(progress); vb->add_child(progress);
@@ -529,19 +531,19 @@ EditorAssetLibraryItemDownload::EditorAssetLibraryItemDownload() {
vb->add_child(hb2); vb->add_child(hb2);
hb2->add_spacer(); hb2->add_spacer();
install = memnew(Button); install_button = memnew(Button);
install->set_text(TTR("Install...")); install_button->set_text(TTR("Install..."));
install->set_disabled(true); install_button->set_disabled(true);
install->connect("pressed", callable_mp(this, &EditorAssetLibraryItemDownload::_install)); install_button->connect("pressed", callable_mp(this, &EditorAssetLibraryItemDownload::install));
retry = memnew(Button); retry_button = memnew(Button);
retry->set_text(TTR("Retry")); retry_button->set_text(TTR("Retry"));
retry->connect("pressed", callable_mp(this, &EditorAssetLibraryItemDownload::_make_request)); retry_button->connect("pressed", callable_mp(this, &EditorAssetLibraryItemDownload::_make_request));
// Only show the Retry button in case of a failure. // Only show the Retry button in case of a failure.
retry->hide(); retry_button->hide();
hb2->add_child(retry); hb2->add_child(retry_button);
hb2->add_child(install); hb2->add_child(install_button);
set_custom_minimum_size(Size2(310, 0) * EDSCALE); set_custom_minimum_size(Size2(310, 0) * EDSCALE);
download = memnew(HTTPRequest); download = memnew(HTTPRequest);
@@ -640,14 +642,10 @@ void EditorAssetLibrary::unhandled_key_input(const Ref<InputEvent> &p_event) {
void EditorAssetLibrary::_install_asset() { void EditorAssetLibrary::_install_asset() {
ERR_FAIL_COND(!description); ERR_FAIL_COND(!description);
for (int i = 0; i < downloads_hb->get_child_count(); i++) { EditorAssetLibraryItemDownload *d = _get_asset_in_progress(description->get_asset_id());
EditorAssetLibraryItemDownload *d = Object::cast_to<EditorAssetLibraryItemDownload>(downloads_hb->get_child(i)); if (d) {
if (d && d->get_asset_id() == description->get_asset_id()) { d->install();
if (EditorNode::get_singleton() != nullptr) { return;
EditorNode::get_singleton()->show_warning(TTR("Download for this asset is already in progress!"));
}
return;
}
} }
EditorAssetLibraryItemDownload *download = memnew(EditorAssetLibraryItemDownload); EditorAssetLibraryItemDownload *download = memnew(EditorAssetLibraryItemDownload);
@@ -1265,6 +1263,13 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const
description->configure(r["title"], r["asset_id"], category_map[r["category_id"]], r["category_id"], r["author"], r["author_id"], r["cost"], r["version"], r["version_string"], r["description"], r["download_url"], r["browse_url"], r["download_hash"]); description->configure(r["title"], r["asset_id"], category_map[r["category_id"]], r["category_id"], r["author"], r["author_id"], r["cost"], r["version"], r["version_string"], r["description"], r["download_url"], r["browse_url"], r["download_hash"]);
EditorAssetLibraryItemDownload *download_item = _get_asset_in_progress(description->get_asset_id());
if (download_item) {
description->get_ok_button()->set_text(TTR("Install"));
} else {
description->get_ok_button()->set_text(TTR("Download"));
}
if (r.has("icon_url") && !r["icon_url"].operator String().is_empty()) { if (r.has("icon_url") && !r["icon_url"].operator String().is_empty()) {
_request_image(description->get_instance_id(), r["icon_url"], IMAGE_QUEUE_ICON, 0); _request_image(description->get_instance_id(), r["icon_url"], IMAGE_QUEUE_ICON, 0);
} }
@@ -1322,6 +1327,17 @@ void EditorAssetLibrary::_manage_plugins() {
ProjectSettingsEditor::get_singleton()->set_plugins_page(); ProjectSettingsEditor::get_singleton()->set_plugins_page();
} }
EditorAssetLibraryItemDownload *EditorAssetLibrary::_get_asset_in_progress(int p_asset_id) const {
for (int i = 0; i < downloads_hb->get_child_count(); i++) {
EditorAssetLibraryItemDownload *d = Object::cast_to<EditorAssetLibraryItemDownload>(downloads_hb->get_child(i));
if (d && d->get_asset_id() == p_asset_id) {
return d;
}
}
return nullptr;
}
void EditorAssetLibrary::_install_external_asset(String p_zip_path, String p_title) { void EditorAssetLibrary::_install_external_asset(String p_zip_path, String p_title) {
emit_signal(SNAME("install_asset"), p_zip_path, p_title); emit_signal(SNAME("install_asset"), p_zip_path, p_title);
} }

View File

@@ -39,6 +39,7 @@
#include "scene/gui/grid_container.h" #include "scene/gui/grid_container.h"
#include "scene/gui/line_edit.h" #include "scene/gui/line_edit.h"
#include "scene/gui/link_button.h" #include "scene/gui/link_button.h"
#include "scene/gui/margin_container.h"
#include "scene/gui/option_button.h" #include "scene/gui/option_button.h"
#include "scene/gui/panel_container.h" #include "scene/gui/panel_container.h"
#include "scene/gui/progress_bar.h" #include "scene/gui/progress_bar.h"
@@ -126,16 +127,16 @@ public:
EditorAssetLibraryItemDescription(); EditorAssetLibraryItemDescription();
}; };
class EditorAssetLibraryItemDownload : public Control { class EditorAssetLibraryItemDownload : public MarginContainer {
GDCLASS(EditorAssetLibraryItemDownload, Control); GDCLASS(EditorAssetLibraryItemDownload, MarginContainer);
PanelContainer *panel; PanelContainer *panel;
TextureRect *icon; TextureRect *icon;
Label *title; Label *title;
ProgressBar *progress; ProgressBar *progress;
Button *install; Button *install_button;
Button *retry; Button *retry_button;
TextureButton *dismiss; TextureButton *dismiss_button;
AcceptDialog *download_error; AcceptDialog *download_error;
HTTPRequest *download; HTTPRequest *download;
@@ -152,7 +153,6 @@ class EditorAssetLibraryItemDownload : public Control {
EditorAssetInstaller *asset_installer; EditorAssetInstaller *asset_installer;
void _close(); void _close();
void _install();
void _make_request(); void _make_request();
void _http_download_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data); void _http_download_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data);
@@ -164,6 +164,7 @@ public:
void set_external_install(bool p_enable) { external_install = p_enable; } void set_external_install(bool p_enable) { external_install = p_enable; }
int get_asset_id() { return asset_id; } int get_asset_id() { return asset_id; }
void configure(const String &p_title, int p_asset_id, const Ref<Texture2D> &p_preview, const String &p_download_url, const String &p_sha256_hash); void configure(const String &p_title, int p_asset_id, const Ref<Texture2D> &p_preview, const String &p_download_url, const String &p_sha256_hash);
void install();
EditorAssetLibraryItemDownload(); EditorAssetLibraryItemDownload();
}; };
@@ -287,6 +288,7 @@ class EditorAssetLibrary : public PanelContainer {
void _api_request(const String &p_request, RequestType p_request_type, const String &p_arguments = ""); void _api_request(const String &p_request, RequestType p_request_type, const String &p_arguments = "");
void _http_request_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data); void _http_request_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data);
void _filter_debounce_timer_timeout(); void _filter_debounce_timer_timeout();
EditorAssetLibraryItemDownload *_get_asset_in_progress(int p_asset_id) const;
void _repository_changed(int p_repository_id); void _repository_changed(int p_repository_id);
void _support_toggled(int p_support); void _support_toggled(int p_support);