I noticed that some plug-ins that have their repository host set as custom seem to have their zips treated differently.  For example, some plug-ins I have downloaded, the editor seems to ignore the base folders and just dump the contents into the project's root.  However, ones that have, say, Github listed as the repository host with a commit hash to get the zips, those unzip correctly.

In both cases, the editor seems to see the folders.  It just doesn't install correctly for some reason.  Not sure if this is intended, a bug, or what.
previews_bg->set_custom_minimum_size(Size2(640 * EDSCALE, 101 * EDSCALE));
	previews = memnew(ScrollContainer);
	previews_bg->add_child(previews);
	previews->set_vertical_scroll_mode(ScrollContainer::SCROLL_MODE_DISABLED);
	preview_hb = memnew(HBoxContainer);
	preview_hb->set_v_size_flags(Control::SIZE_EXPAND_FILL);
	previews->add_child(preview_hb);
	set_ok_button_text(TTR("Download"));
	set_cancel_button_text(TTR("Close"));
}
void EditorAssetLibraryItemDownload::_http_download_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data) {
	String error_text;
	switch (p_status) {
		case HTTPRequest::RESULT_CHUNKED_BODY_SIZE_MISMATCH:
		case HTTPRequest::RESULT_CONNECTION_ERROR:
		case HTTPRequest::RESULT_BODY_SIZE_LIMIT_EXCEEDED: {
			error_text = TTR("Connection error, please try again.");
			status->set_text(TTR("Can't connect."));
		} break;
		case HTTPRequest::RESULT_CANT_CONNECT:
		case HTTPRequest::RESULT_TLS_HANDSHAKE_ERROR: {
			error_text = TTR("Can't connect to host:") + " " + host;
			status->set_text(TTR("Can't connect."));
		} break;
		case HTTPRequest::RESULT_NO_RESPONSE: {
			error_text = TTR("No response from host:") + " " + host;
			status->set_text(TTR("No response."));
		} break;
		case HTTPRequest::RESULT_CANT_RESOLVE: {
			error_text = TTR("Can't resolve hostname:") + " " + host;