-more progress to asset sharing client, but still disabled by default

This commit is contained in:
Juan Linietsky 2016-03-05 12:24:12 -03:00
parent 6e86a05350
commit d85f06c42d
2 changed files with 93 additions and 3 deletions

View file

@ -248,12 +248,41 @@ EditorAddonLibraryItemDescription::EditorAddonLibraryItemDescription() {
void EditorAddonLibrary::_notification(int p_what) {
if (p_what==NOTIFICATION_READY) {
TextureFrame *tf = memnew(TextureFrame);
tf->set_texture(get_icon("Error","EditorIcons"));
error_hb->add_child(tf);
error_label->raise();
_api_request("api/configure");
}
if (p_what==NOTIFICATION_PROCESS) {
HTTPClient::Status s = request->get_http_client_status();
bool visible = s!=HTTPClient::STATUS_DISCONNECTED;
if (visible !=load_status->is_visible()) {
load_status->set_hidden(!visible);
}
if (visible) {
switch(s) {
case HTTPClient::STATUS_RESOLVING: {
load_status->set_val(0.1);
} break;
case HTTPClient::STATUS_CONNECTING: {
load_status->set_val(0.2);
} break;
case HTTPClient::STATUS_REQUESTING: {
load_status->set_val(0.3);
} break;
case HTTPClient::STATUS_BODY: {
load_status->set_val(0.4);
} break;
}
}
}
}
@ -514,6 +543,7 @@ void EditorAddonLibrary::_api_request(const String& p_request,const String& p_ar
request->cancel_request();
}
error_hb->hide();
current_request=p_request;
request->request(host+"/"+p_request+p_arguments);
}
@ -531,6 +561,49 @@ void EditorAddonLibrary::_http_request_completed(int p_status, int p_code, const
str.parse_utf8((const char*)r.ptr(),datalen);
}
bool error_abort=true;
switch(p_status) {
case HTTPRequest::RESULT_CANT_RESOLVE: {
error_label->set_text("Can't resolve hostname: "+host);
} break;
case HTTPRequest::RESULT_BODY_SIZE_LIMIT_EXCEEDED:
case HTTPRequest::RESULT_CONNECTION_ERROR:
case HTTPRequest::RESULT_CHUNKED_BODY_SIZE_MISMATCH: {
error_label->set_text("Connection error, please try again.");
} break;
case HTTPRequest::RESULT_SSL_HANDSHAKE_ERROR:
case HTTPRequest::RESULT_CANT_CONNECT: {
error_label->set_text("Can't connect to host: "+host);
} break;
case HTTPRequest::RESULT_NO_RESPONSE: {
error_label->set_text("No response from host: "+host);
} break;
case HTTPRequest::RESULT_REQUEST_FAILED: {
error_label->set_text("Request failed, return code: "+itos(p_code));
} break;
case HTTPRequest::RESULT_REDIRECT_LIMIT_REACHED: {
error_label->set_text("Request failed, too many redirects");
} break;
default: {
if (p_code!=200) {
error_label->set_text("Request failed, return code: "+itos(p_code));
} else {
error_abort=false;
}
} break;
}
if (error_abort) {
error_hb->show();
return;
}
print_line("response: "+itos(p_status)+" code: "+itos(p_code));
Dictionary d;
d.parse_json(str);
@ -717,7 +790,7 @@ EditorAddonLibrary::EditorAddonLibrary() {
border->set_default_margin(MARGIN_LEFT,15);
border->set_default_margin(MARGIN_RIGHT,15);
border->set_default_margin(MARGIN_BOTTOM,15);
border->set_default_margin(MARGIN_TOP,15);
border->set_default_margin(MARGIN_TOP,5);
PanelContainer *margin_panel = memnew( PanelContainer );
@ -729,7 +802,6 @@ EditorAddonLibrary::EditorAddonLibrary() {
margin_panel->add_child(library_main);
HBoxContainer *search_hb = memnew( HBoxContainer );
library_main->add_child(search_hb);
@ -839,9 +911,23 @@ EditorAddonLibrary::EditorAddonLibrary() {
library_vb->add_constant_override("separation",20);
load_status = memnew( ProgressBar );
load_status->set_min(0);
load_status->set_max(1);
load_status->set_step(0.001);
library_main->add_child(load_status);
error_hb = memnew( HBoxContainer );
library_main->add_child(error_hb);
error_label = memnew( Label );
error_label->add_color_override("color",Color(1,0.4,0.3));
error_hb->add_child(error_label);
description = NULL;
host="http://localhost:8000";
//host="http://localhost:8000";
host="http://godotengine.org/addonlib";
set_process(true);
}

View file

@ -10,6 +10,7 @@
#include "scene/gui/panel_container.h"
#include "scene/gui/link_button.h"
#include "scene/gui/check_box.h"
#include "scene/gui/progress_bar.h"
#include "scene/gui/separator.h"
#include "scene/gui/grid_container.h"
@ -103,6 +104,9 @@ class EditorAddonLibrary : public VBoxContainer {
OptionButton *sort;
CheckBox *reverse;
Button *search;
ProgressBar *load_status;
HBoxContainer *error_hb;
Label *error_label;
HBoxContainer *contents;