Browse Source

Improve open error for files from network

disarray2077 3 năm trước cách đây
mục cha
commit
2fd78b36e7

+ 9 - 0
BeefLibs/Beefy2D/src/utils/HTTP.bf

@@ -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));
+		}
 	}
 	}
 }
 }

+ 42 - 14
IDE/src/ui/SourceViewPanel.bf

@@ -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");
-			button.mOnMouseClick.Add(new (evt) =>
-			    {
-					Reload();
-			    });
-
-			button = mPanelHeader.AddButton("Auto Find");
-			button.mOnMouseClick.Add(new (evt) =>
-			    {
-					AutoFind();
-			    });
+			if (fileFromNetwork)
+			{
+				var button = mPanelHeader.AddButton("Retry");
+				button.mOnMouseClick.Add(new (evt) =>
+					{
+						LoadOldVer();
+					});
+			}
+			else
+			{
+				var button = mPanelHeader.AddButton("Retry");
+				button.mOnMouseClick.Add(new (evt) =>
+				    {
+						Reload();
+				    });
+	
+				button = mPanelHeader.AddButton("Auto Find");
+				button.mOnMouseClick.Add(new (evt) =>
+				    {
+						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();

+ 6 - 0
IDEHelper/DebugManager.cpp

@@ -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))

+ 18 - 1
IDEHelper/NetManager.cpp

@@ -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)
 		{
 		{

+ 6 - 5
IDEHelper/NetManager.h

@@ -36,12 +36,12 @@ public:
 #else
 #else
 #endif
 #endif
 	volatile bool mCancelling;
 	volatile bool mCancelling;
-	bool mFailed;		
+	bool mFailed;
 	String mError;
 	String mError;
 	uint32 mLastUpdateTick;
 	uint32 mLastUpdateTick;
 	bool mShowTracking;
 	bool mShowTracking;
-	NetResult* mResult;	
-	NetResult* mCancelOnSuccess;	
+	NetResult* mResult;
+	NetResult* mCancelOnSuccess;
 
 
 	NetRequest()
 	NetRequest()
 	{
 	{
@@ -74,8 +74,9 @@ public:
 	String mURL;
 	String mURL;
 	String mOutPath;
 	String mOutPath;
 	bool mFailed;
 	bool mFailed;
-	NetRequest* mCurRequest;	
-	bool mRemoved;	
+	String mError;
+	NetRequest* mCurRequest;
+	bool mRemoved;
 	SyncEvent* mDoneEvent;
 	SyncEvent* mDoneEvent;
 
 
 	NetResult()
 	NetResult()