1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Improve open error for files from network

This commit is contained in:
disarray2077 2022-01-07 10:22:26 -03:00
parent 36311cab2d
commit 2fd78b36e7
5 changed files with 81 additions and 20 deletions

View file

@ -19,6 +19,9 @@ namespace Beefy2D.utils
[CallingConvention(.Stdcall), CLink] [CallingConvention(.Stdcall), CLink]
static extern int32 HTTP_GetResult(void* netRequest, int32 waitMS); static extern int32 HTTP_GetResult(void* netRequest, int32 waitMS);
[CallingConvention(.Stdcall), CLink]
static extern void HTTP_GetLastError(void* netRequest, out char8* error, out int32 errorLength);
[CallingConvention(.Stdcall), CLink] [CallingConvention(.Stdcall), CLink]
static extern void HTTP_Delete(void* netRequest); static extern void HTTP_Delete(void* netRequest);
@ -37,5 +40,11 @@ namespace Beefy2D.utils
{ {
return (HTTPResult)HTTP_GetResult(mNativeNetRequest, 0); return (HTTPResult)HTTP_GetResult(mNativeNetRequest, 0);
} }
public void GetLastError(String outError)
{
HTTP_GetLastError(mNativeNetRequest, let error, let errorLength);
outError.Append(StringView(error, errorLength));
}
} }
} }

View file

@ -3121,13 +3121,19 @@ namespace IDE.ui
void FileOpenFailed() void FileOpenFailed()
{ {
bool fileFromNetwork = mOldVerLoadCmd?.StartsWith("http", .OrdinalIgnoreCase) == true;
mLoadFailed = true; mLoadFailed = true;
//mLastFileTextVersion = mEditWidget.Content.mData.mCurTextVersionId; //mLastFileTextVersion = mEditWidget.Content.mData.mCurTextVersionId;
mPanelHeader = new PanelHeader(); mPanelHeader = new PanelHeader();
String fileName = scope String(); String fileName = scope String();
Path.GetFileName(mFilePath, fileName); Path.GetFileName(mFilePath, fileName);
String headerStr = scope String(); String headerStr = scope String();
headerStr.AppendF("Source file '{0}' is unavailable. Requested path is '{1}'", fileName, mFilePath); headerStr.AppendF("Source file '{0}' is unavailable. ", fileName);
if (fileFromNetwork)
headerStr.Append("Failed to retrieve from network.");
else
headerStr.AppendF("Requested path is '{0}'", mFilePath);
mPanelHeader.Label = headerStr; mPanelHeader.Label = headerStr;
if (!sPreviousVersionWarningShown) if (!sPreviousVersionWarningShown)
{ {
@ -3162,19 +3168,30 @@ namespace IDE.ui
}); });
} }
var button = mPanelHeader.AddButton("Retry"); if (fileFromNetwork)
button.mOnMouseClick.Add(new (evt) => {
{ var button = mPanelHeader.AddButton("Retry");
Reload(); button.mOnMouseClick.Add(new (evt) =>
}); {
LoadOldVer();
});
}
else
{
var button = mPanelHeader.AddButton("Retry");
button.mOnMouseClick.Add(new (evt) =>
{
Reload();
});
button = mPanelHeader.AddButton("Auto Find"); button = mPanelHeader.AddButton("Auto Find");
button.mOnMouseClick.Add(new (evt) => button.mOnMouseClick.Add(new (evt) =>
{ {
AutoFind(); AutoFind();
}); });
}
button = mPanelHeader.AddButton("Browse..."); var button = mPanelHeader.AddButton("Browse...");
button.mOnMouseClick.Add(new (evt) => button.mOnMouseClick.Add(new (evt) =>
{ {
BrowseForFile(); BrowseForFile();
@ -5719,7 +5736,18 @@ namespace IDE.ui
if (result != .NotDone) if (result != .NotDone)
{ {
if (result == .Failed) if (result == .Failed)
gApp.OutputErrorLine("Failed to retrieve source from {}", mOldVerLoadCmd); {
String errorMsg = scope .();
errorMsg.AppendF("Failed to retrieve source from {}", mOldVerLoadCmd);
String errorReason = scope .();
mOldVerHTTPRequest.GetLastError(errorReason);
if (!errorReason.IsEmpty)
errorMsg.AppendF(" ({})", errorReason);
gApp.OutputErrorLine(errorMsg);
}
CheckAdjustFile(); CheckAdjustFile();
RetryLoad(); RetryLoad();

View file

@ -1617,6 +1617,12 @@ BF_EXPORT int HTTP_GetResult(NetResult* netResult, int waitMS)
} }
} }
BF_EXPORT void HTTP_GetLastError(NetResult* netResult, const char** error, int* errorLength)
{
*error = netResult->mError.GetPtr();
*errorLength = netResult->mError.GetLength();
}
BF_EXPORT void HTTP_Delete(NetResult* netResult) BF_EXPORT void HTTP_Delete(NetResult* netResult)
{ {
if (!netResult->mDoneEvent->WaitFor(0)) if (!netResult->mDoneEvent->WaitFor(0))

View file

@ -165,7 +165,23 @@ void NetRequest::DoTransfer()
curl_easy_getinfo(mCURL, CURLINFO_RESPONSE_CODE, &response_code); curl_easy_getinfo(mCURL, CURLINFO_RESPONSE_CODE, &response_code);
mNetManager->mDebugManager->OutputRawMessage(StrFormat("msgLo Result for '%s': %d\n", mURL.c_str(), response_code)); mNetManager->mDebugManager->OutputRawMessage(StrFormat("msgLo Result for '%s': %d\n", mURL.c_str(), response_code));
if ((response_code == 0) || (response_code == 200) || (response_code == 404)) if (response_code == 0)
{
mError.Clear();
int msgs_left = 0;
CURLMsg* msg = curl_multi_info_read(mCURLMulti, &msgs_left);
if (msg != NULL && msg->msg == CURLMSG_DONE)
{
CURLcode return_code = msg->data.result;
mError.Append(curl_easy_strerror(return_code));
}
break;
}
if ((response_code == 200) || (response_code == 404))
break; break;
Cleanup(); Cleanup();
@ -410,6 +426,7 @@ NetRequest::~NetRequest()
if (mResult != NULL) if (mResult != NULL)
{ {
mResult->mFailed = mFailed; mResult->mFailed = mFailed;
mResult->mError = mError;
mResult->mCurRequest = NULL; mResult->mCurRequest = NULL;
if (mResult->mDoneEvent != NULL) if (mResult->mDoneEvent != NULL)
{ {

View file

@ -74,6 +74,7 @@ public:
String mURL; String mURL;
String mOutPath; String mOutPath;
bool mFailed; bool mFailed;
String mError;
NetRequest* mCurRequest; NetRequest* mCurRequest;
bool mRemoved; bool mRemoved;
SyncEvent* mDoneEvent; SyncEvent* mDoneEvent;