From 5816ec390bc4097045c928acc38f6268c042f390 Mon Sep 17 00:00:00 2001 From: Jamie Greunbaum Date: Thu, 30 Mar 2023 18:59:16 -0400 Subject: [PATCH] Reworked a whole lot of code so that we can eventually add more than just Bugzilla support to the plugin. --- Content/BP_BugMarkerActorDummy.uasset | Bin 33500 -> 34312 bytes Content/BP_BugPlacerPawn.uasset | Bin 276139 -> 275449 bytes Content/MI_BuggieIcon.uasset | Bin 0 -> 12362 bytes Content/M_BuggieIcon.uasset | Bin 13137 -> 13065 bytes Content/UI/CUI_BugSubmissionForm.uasset | Bin 277087 -> 270242 bytes Content/UI/UMG_BugPlacementOverlay.uasset | Bin 73832 -> 78102 bytes Source/Unrealzilla/Private/BugMarkerActor.cpp | 6 +- .../Unrealzilla/Private/BugMarkerLoader.cpp | 150 ------ .../Private/BugMarkerSubsystem.cpp | Bin 0 -> 8324 bytes Source/Unrealzilla/Private/BugPlacerPawn.cpp | 29 +- .../Unrealzilla/Private/BugSubmissionForm.cpp | 453 ++---------------- Source/Unrealzilla/Private/ServerREST.cpp | Bin 0 -> 41154 bytes Source/Unrealzilla/Public/BugMarkerActor.h | 9 +- Source/Unrealzilla/Public/BugMarkerLoader.h | 34 -- .../Unrealzilla/Public/BugMarkerSubsystem.h | Bin 0 -> 3820 bytes Source/Unrealzilla/Public/BugPlacerPawn.h | 7 +- Source/Unrealzilla/Public/BugSubmissionForm.h | 24 +- .../BugzillaJSONStructs.h} | 36 +- .../Unrealzilla/Public/JSON/JiraJSONStructs.h | 7 + Source/Unrealzilla/Public/ServerREST.h | Bin 0 -> 10294 bytes .../Public/UnrealzillaGlobalSettings.h | 15 +- 21 files changed, 98 insertions(+), 672 deletions(-) create mode 100644 Content/MI_BuggieIcon.uasset delete mode 100644 Source/Unrealzilla/Private/BugMarkerLoader.cpp create mode 100644 Source/Unrealzilla/Private/BugMarkerSubsystem.cpp create mode 100644 Source/Unrealzilla/Private/ServerREST.cpp delete mode 100644 Source/Unrealzilla/Public/BugMarkerLoader.h create mode 100644 Source/Unrealzilla/Public/BugMarkerSubsystem.h rename Source/Unrealzilla/Public/{UnrealzillaJSON.h => JSON/BugzillaJSONStructs.h} (85%) create mode 100644 Source/Unrealzilla/Public/JSON/JiraJSONStructs.h create mode 100644 Source/Unrealzilla/Public/ServerREST.h diff --git a/Content/BP_BugMarkerActorDummy.uasset b/Content/BP_BugMarkerActorDummy.uasset index 764326c371e0ce8e3a9bcad4d8dc005ad85de51f..ed34e0af7ce3e6101e0ca8b4057e5a5beb29d93d 100644 GIT binary patch delta 11516 zcmdT~30zah)}I6sr2-+8ZM^&zMf7nZWPAPORH=4LLk2>SWG_x-*%Kaz82&i|Y_bLPyM znHy>n=%4PPpIAs!E%gOp22rXxm5|IGP59GBX`TWA@aX`+KM4xTWdXv_2v_b#UI>uu zM{tNDdf*Io*uI<_$z$_HybnO(m4iC{TYSN&>koy6Q&g_dCQpROjR@u(=`3IeMDTb5 zb{IE+2kz}>d{cOL6o+o74p9dh}?Z7ZT8qIuvlXx)Iu@RE&GDS2mh zhck$kYS*;KLV#lkZwpT#j097E-XbnE9CMClg_>DhAuoc@4FN4D9?sY6*T4>o;0t+J z3b2|j)e0-ePE&O@ffy@qK?IK*BI1XHaIIEwmPdW`5uZm{0DjnZ>9EmY6w4XIoC87y z;Ka0?JmQJwSGL*^H$;KG>55sS5hH{f83}|jTlXU`lVfrU3FQjGOp#k%VTzU)Z8eO5 zz9BdZlpb0UNAb#dxipYNaOz{vd1-JFb?Zs`$m^MJ%*Tdt)pg%BUc;EnB<{RR& zUW*e0a35Nj^ID)1m-hy^dr)7}8{!VY{>d_u3z0%eU#UjRV% z|5}BFvflwX%4ll-k*iORfTQLg;lAy|!L5)gPauPOMilKusGyY0P$3^dsV}i?iwP00 zKU?pRvIU^LE5*-G*AqK^O^ClB`zUUj4=EEr$8UgaGs4AShF%(O8UrcX{8735lKqLY z1t2zMY|MwGw7TI8JvYooq!n!-urN3zI|#B-8bw<^l9pr3^){32tB{SdC&gZZ*~R<; zY;+Dm(#%ot3zlag1K3Civ0X8HaX86tnlwWXrCdsRHhO?1A&O+X7|qb57J~(JiXmpt zi6Pm!ke#m-AkRUScwkOjq0h|-b>kU&$1vLhQcL_iNlZ#ZHlb-UMsq4uOzlxCm8`2! z5-n=VtZ`WKhLUYLd4?X!N)-DZX5Uw`rI3ws5yeJ*qwx``#SGF6ppEw%x z(W%ofetkc*mR5TrBc=FE?H|3suSh)MsaLR5@IS-`F@E)PbN)Ek6yEqexA>^+_$TTo z&w7>LH+ScpV@*49A^N0^o|KWHVw68~R#ZkR{eW$`m)sA;>UuKA+!9tsO^>bcETuW> zdW=%AZA|^(ABdfQ{y}=v>rQzSm7d z46LPbWsOc{jZ6(rv6ng*jFU1;st!$dO4<3f(+83zjf>6YW7i!v$q5eJEaj(rM;KUd ze_ZnLxTv(X{b$4be-O`B`93T7`fB_5AHD8J6uQn|a4#)qQF<@17KxhmLX!185(SZ` ze+O~Cc_(U}O51$aE_Y~OY?`voq`rA=hmm-N;h1|<7sLh-rVmnW{?em*WOk|n#_95 zKhT}*AHLVvRS|UHbXVQeYt`N3q_dhH#);GBXWxicw`%j->VNuS*#r>Ay!+Wt&d(Dj zt`&D=?dh<}lZ)?n&G!;KnU-a9b75CNY(2+BFcVI#rdv`|kWlW`7m|$3G|9xc4u?Y* zM8}w_5TSA1zM{6T4CATz*QOft~ ztdisLK!am&s%u+jSELK7U7``Y z#g&GrAX{JX?avo#@4m1qGgwn&DJ$u^_k8Jr4|9Fg zU4MHjwtV+i=hj}3D1OX!kC-ItsTNeUxM<$g*b!dTWN|LRXm>G~9+g$`;M{&^MYk7C zaib*L76rS$_P{Tfz!eF?fH=i!)-=yFR(H(_J0U#Ronl&CbMTXWVLD*Pa*U z721*i)aws%Z9QyHu>ToNw!@)YTmLLc{>*Xa9I)7yos(0ZvYLLlmYisfjI=KY#>=?s zSVlGfv4@KFF&7V}fjz(Sr|zF5lf^}%vLaEXPyyukmUt?8;qE$+n*hL@WMMfci9Vt_t|da#Gad+zk0M2SeJ9%mVF^99`GEBDTUcRjt)TAuv%~bpc-@M?()(ka3UPt_DpXkj5El zQvb!&nwbDig`t5ghU9$7v|bQ%@aYBdN-jGr*T%H@M*9nIQFe{EAoPc4o=1DZxsvCc zboK4~*?+cHSTuJA*UPTJ96^&+CA$d})yz4Ta9W{}4zOc5n?bhw&o^c_0F*{vl}Z%% znpvszBPo0sNKCCXsf9$=$yxv-KwO~;-Vc3oCaA+>S5HJwP)}^!@?H==^M2QK_2h&# z$vwew69u`f7pHRWUub>MftKE0YScTn6(uEkGPMTh3JX3XRTU<4HkvDB4&Bm{h4UQD zab*fJdkRz4%3N#2v4LsbnNiYBWdAbxt>HbzyC4<|6CJfl5 z)GxyLHy~nsFUaTQ2YNFqwKmFug-h?}K|9xqEp!0;KeqYv}iZG=(C`L#0Aq@0Nu^SGTIs4Q}IrH%B+=Vg%g3 z=fePyn3{H7>5`sVQ{M|dxZvqCt9gNG-5=LrTA1~&1E-^)W6{^X58l<9eLM2oVD>A!$aZMy`|l=k7;-%SXfH`{AfvaC^Oe9`;k$zPmsQ(aDv#VAm8x( zqM#0U#A>;CDywP(0s!P>wEjgo3vNp-U0YAu+qWoaKb zx@DjpW6X`8Lho&dy9txFZ}4%-|Her;cthc^qQ$xCzEhUs{7HjdeXXXW5NQ zscN3A8hdd=4a~0XPbpVjeMyD%_oWp}C0pT!OrmS=h`@|REk>gu(4sm00nWbc?%-hZzm@yK_~ zQ&UoQ`l|(f1DAQ?okxcSHpbHDojM!-%(E01-ZX;P}sEY-TBVrzUB~@ZeJ7mRmprkvvXGo&5nP=veS=qXt=#*oqMK(be8u4 z{@E{T3rQEV+5# zfr>oAx~7gwlUg(A=-{Ou5JjGZm}8wCb-`n}oCmCHc=S=fAj-(Hx+y1*y=uh!bM5GL zQ;ARK+KpZUZ=x4{3xAnA#zH)WJneUOIDha?>4CO^(0&ese%tUtv>Ltn$ zNhC$R0>)QB@DWG_e{Oir%RY zER^{Y+)UM3$Q4A3-}qHjcL*?IfQ&es9Ac?~DUoV0YWb)!AA_gxlDZW4h<#7i`uBxq z5ZR83SV;hSeGULoI@e^to5*O)=3+|C80dlhe25#Vh@eJDfyn?vuP4x}8T4ZWicD07 zI?Gkb01^N+$wx|;(p&GXAOH4dQLh>L%tB*FFO$^Z=Z#E47O8`mCY7ycxb$~u7y`gT zIpPw2V`FV2}lh2QzaFrHt%zbSrc;^@@c{?A)Mh$iPra(QaI4AVogB z;S@nVy)l?ct#mXwWQoI+>Q;j5FUO36cF~99`&Qm8jG&NPaa{{p;V>1~D32@}geI#L zNP?LZ(L^f5)U*u^7RvP$9oBab`}+=Sr$z{n{$X7SmjYp+_m<9_G^i^Ht`BskNx*-X zGaroPO!VIDKjX|fZ{*DDoc}Iowv6OVv>*RxoVnwToVlI*f9Fj1H(%z|az|ru!2^+C zO65QwlsX6rZ;bnpL<&9L>y6<<^4}+zu?ABKrURC&o4L7h!|%HnxXChdxEVjbbBeNP zJw|(A+LvQ~h7Id*qXg5JD(f~eXdFVFXGe1)N<$3Pfg^@+&?q2FJ7PYuce5ICh8IYS zhY-WDuSWRLwi5R?TaWeclTQ)6ls6~OK`Sv&f~gaxeIBE6iSfa@;$dARzyj2u(NFiN z49?Fq;GkrH<(Q7al!+-=h9A(m0F{0!lv^E*JT44kkx&}&BPl$&5c>lI4TtwG3It33 zc<4quz8!57={_qgiyW-0+6f~g#wHNGXR1PodLoFiQ# zM8Fs(kpB%c5c(D~a3b{o(G2h(n3g^L@iV963gc6od?GqHL}l3UGZ5N019{=En}N^> z25lZW1K&i<9vgxkwF;-AoxanF$&rqRgA?yCX=M4ZYk)G%F* zY2W4mfd4WoH7c2K)%W9$Tec933^At}nnO8|q8K~iw|RBgh;BMG_?bTKoGOer;Z=^2wXkJ7J zH;htOSiFr*qnQzQG0P`V0!Z^3en2pVAwITc(FU?3^_khr}X}Y&Bb6YrhTD} z+}|IFA{3ROoDdBO&gWXz!+0%HCf|2ScD&@4+FHJfbZdlnV3p2 zy`w^WzR}bn0#~Wjat=RGFmjPmAgb{b42ndyT28|%hPZArW`tvEOvr+#ETH@|teEue z#J0bk*q*l&OME-Az_%0Qzn$1;ZzneY?ZkrKPE7PFF$*e6hND;rp!2Q{ksZJAUuRS- A9smFU delta 10720 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 KVkmQCEBD_SKv;1A diff --git a/Content/BP_BugPlacerPawn.uasset b/Content/BP_BugPlacerPawn.uasset index cd9d41ec2bae598edad304f93e8f341b74f4e2e0..d897a509033a459c6e8d0431f8c5a5199a86fb94 100644 GIT binary patch delta 19399 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 diff --git a/Content/MI_BuggieIcon.uasset b/Content/MI_BuggieIcon.uasset new file mode 100644 index 0000000000000000000000000000000000000000..993419e9b944e1ef331ddde042da1d4f9ce3e326 GIT binary patch literal 12362 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 KAz}v*|Nj9z?zv?E literal 0 HcmV?d00001 diff --git a/Content/M_BuggieIcon.uasset b/Content/M_BuggieIcon.uasset index c97b9fa631dc674fe6bded07ec8509ecfbfe61c1..b7f4ec825fcc0dba97081b64e5c40c7a2ccc7640 100644 GIT binary patch delta 7591 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%0A~Kh%%Z8NIB9rqh zKSxW)Lm5s|pb1?3;P2f50PjDL0suXaNtfS!Ab{Qv1Hg=4fKivEN52UyxyL7YS=7@?Rm1ZYRwh~y$VCKG4wAv zN2%Y9^wgsXn58T%$?RplYZC^J*+|PY!KCpTj8-v*{@DcpL>r?RjeqHa-fqM&Dl;^5 zZvo8Yurb5H?2t*V%V?)7uunz6_~+i($*}w-UOKll!^oujW$HEsPF<7V<@wl@v^%C} z%y#Dxf}Y0~75dGGNi0BLFHlW|3qsF9i-E5YT%xM~fYqd9H!uhP10T)9Ar@_{_W$+} z{>=l)sLRp&klf0sF;5M12mcr~=)f;*!8}FVe}kU>jd*>;BE!h+{+B%fnr{=>Da$}GSDLwQ>l4C^gN~t}61p&{n4@4u z!p2T_MSycE|0SBA*#8>MAdUQAqdDkvLw;(9exY5oTn@EMrR8>|2Ek<|JU#^L^QhP-F&ZgHfM%CN>+U8KM!vcjhZgZiD#~%%=!nC2Rr!mcl-bV zfB9uGV;Dpj`ge-;pJ7l+UErU0kps>3U*{c+R2MM+*I<~t_pkpR{=C1|&kAH4_(5HT Kb|yA!82=CNSQSM8 delta 7509 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 X-k-QkSpuCD1h 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 I{qN}i08Hv8T>t<8 delta 25433 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 diff --git a/Source/Unrealzilla/Private/BugMarkerActor.cpp b/Source/Unrealzilla/Private/BugMarkerActor.cpp index a9ad55c..2d9f415 100644 --- a/Source/Unrealzilla/Private/BugMarkerActor.cpp +++ b/Source/Unrealzilla/Private/BugMarkerActor.cpp @@ -10,15 +10,15 @@ EBugStatus ABugMarkerActor::GetBugStatus() const { - if (GetDefault()->ResolvedStatuses.Contains(this->BugData.status)) + if (GetDefault()->ResolvedStatuses.Contains(this->BugData.Status)) { return EBugStatus::Resolved; } - else if (GetDefault()->InProgressStatuses.Contains(this->BugData.status)) + else if (GetDefault()->InProgressStatuses.Contains(this->BugData.Status)) { return EBugStatus::InProgress; } - else if (GetDefault()->UnresolvedStatuses.Contains(this->BugData.status)) + else if (GetDefault()->UnresolvedStatuses.Contains(this->BugData.Status)) { return EBugStatus::Unresolved; } diff --git a/Source/Unrealzilla/Private/BugMarkerLoader.cpp b/Source/Unrealzilla/Private/BugMarkerLoader.cpp deleted file mode 100644 index 022a0f4..0000000 --- a/Source/Unrealzilla/Private/BugMarkerLoader.cpp +++ /dev/null @@ -1,150 +0,0 @@ -// ©2022 Batty Bovine Productions, LLC. All Rights Reserved. - -#include "BugMarkerLoader.h" - -#include "BugMarkerActor.h" -#include "HttpModule.h" -#include "JsonObjectConverter.h" -#include "UnrealzillaGlobalSettings.h" -#include "Kismet/GameplayStatics.h" - - -void ABugMarkerLoader::BeginPlay() -{ - Super::BeginPlay(); - - const FString FullURL = GetDefault()->SubmissionServer + "/rest.cgi"; - - TArray StatusQueries; - if (GetDefault()->bShowUnresolvedBugs) - { - for (const FString Unresolved : GetDefault()->UnresolvedStatuses) - { - StatusQueries.Add("status=" + Unresolved); - } - } - if (GetDefault()->bShowInProgressBugs) - { - for (const FString InProgress : GetDefault()->InProgressStatuses) - { - StatusQueries.Add("status=" + InProgress); - } - } - if (GetDefault()->bShowResolvedBugs) - { - for (const FString Resolved : GetDefault()->ResolvedStatuses) - { - StatusQueries.Add("status=" + Resolved); - } - } - StatusQueries.Add("cf_mapname=" + this->GetWorld()->GetMapName().RightChop(this->GetWorld()->StreamingLevelsPrefix.Len())); - StatusQueries.Add("api_key=" + GetDefault()->APIKey); - const FString QueryString = FString::Join(StatusQueries, TEXT("&")); - - FHttpModule &HttpModule = FHttpModule::Get(); - TSharedRef SeverityRequest = HttpModule.CreateRequest(); - SeverityRequest->SetVerb(TEXT("GET")); - SeverityRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json")); - SeverityRequest->SetURL(FullURL + "/bug" + "?" + QueryString); - SeverityRequest->OnProcessRequestComplete().BindUObject(this, &ABugMarkerLoader::ServerBugResponse); - SeverityRequest->ProcessRequest(); -} - -void ABugMarkerLoader::EndPlay(const EEndPlayReason::Type EndPlayReason) -{ - this->GetWorldTimerManager().ClearTimer(this->NewBatchTimerHandle); - this->GetWorldTimerManager().ClearTimer(this->UnloadAllTimerHandle); - - Super::EndPlay(EndPlayReason); -} - -void ABugMarkerLoader::ServerBugResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success) -{ - if (Success) - { - FJSONBugResponse ResponseData; - FString JSONResponse = Response->GetContentAsString(); - FJsonObjectConverter::JsonObjectStringToUStruct(JSONResponse, &ResponseData); - - if (ResponseData.error) - { - this->Destroy(); - return; - } - else - { - this->BugBatch = ResponseData.bugs; - this->GetWorldTimerManager().SetTimer(this->NewBatchTimerHandle, this, &ABugMarkerLoader::LoadNewBatch, 1.0f/*this->GetWorld()->GetDeltaSeconds()*/); - } - } - else - { - this->Destroy(); - return; - } -} -void ABugMarkerLoader::LoadNewBatch() -{ - while (!this->BugBatch.IsEmpty()) - { - const FJSONBugData BugData = this->BugBatch[0]; - - FString LocationString, UpVectorString; - BugData.cf_location.Split(":", &LocationString, &UpVectorString); - - FString LocationX, LocationY, LocationZ; - LocationString.Split(",", &LocationX, &LocationY); - LocationY.Split(",", &LocationY, &LocationZ); - - FString UpVectorX, UpVectorY, UpVectorZ; - UpVectorString.Split(",", &UpVectorX, &UpVectorY); - UpVectorY.Split(",", &UpVectorY, &UpVectorZ); - - const FVector Location(FCString::Atof(*LocationX),FCString::Atof(*LocationY),FCString::Atof(*LocationZ)); - const FVector UpVector(FCString::Atof(*UpVectorX),FCString::Atof(*UpVectorY),FCString::Atof(*UpVectorZ)); - - TSubclassOf Class = StaticLoadClass(ABugMarkerActor::StaticClass(), this, BUG_MARKER_ACTOR_BP); - FActorSpawnParameters SpawnParams; - SpawnParams.Owner = this; - const FTransform Transform = FTransform(FRotationMatrix::MakeFromZ(UpVector).Rotator(), Location, FVector::OneVector); - ABugMarkerActor *Marker = this->GetWorld()->SpawnActor(Class, Transform, SpawnParams); - Marker->SetBugData(BugData); - this->Markers.Add(Marker); - - this->BugBatch.RemoveAt(0); - if (!(this->BugBatch.Num() % GetDefault()->LoadMarkersBatch)) - { - break; - } - } - - if (!this->BugBatch.IsEmpty()) - { - this->GetWorldTimerManager().SetTimer(this->NewBatchTimerHandle, this, &ABugMarkerLoader::LoadNewBatch, this->GetWorld()->GetDeltaSeconds()); - } -} - -void ABugMarkerLoader::UnloadAll() -{ - this->GetWorldTimerManager().ClearTimer(this->NewBatchTimerHandle); - - while (!this->Markers.IsEmpty()) - { - AActor *Marker = this->Markers[0]; - this->Markers.RemoveAt(0); - Marker->Destroy(); - if (!(this->Markers.Num() % GetDefault()->UnloadMarkersBatch)) - { - break; - } - } - - if (!this->Markers.IsEmpty()) - { - this->GetWorldTimerManager().SetTimer(this->UnloadAllTimerHandle, this, &ABugMarkerLoader::UnloadAll, this->GetWorld()->GetDeltaSeconds()); - } - else - { - this->Destroy(); - } -} diff --git a/Source/Unrealzilla/Private/BugMarkerSubsystem.cpp b/Source/Unrealzilla/Private/BugMarkerSubsystem.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b0a2a52cf4c869e694b603334a20e8fffa71e087 GIT binary patch literal 8324 zcmeHMTTdHD6h5!6)c@e7Dl!!%Q64EpG8c!m1dy>?psFI*7($C}v|b=-)F0G8+4lS9 zcs#SSS7Rs5LuIX5&+eSdckaVKe?OI{QkTEvxje)59QWJOlNg_O=6)>qaxEhn;McK4 zGL{RulRlnb<9;L)S;Lb9e0F3VcTKs$r!H+gzmhk2Z(@E8@OOay_xQfRo1e>Pv+GO4 zp^trcct%c7AjKW_zk)20{BCxhVC7d(d50^;$`DlE;7v=Z8kMGzeGIB@ch=5*@QCFW z5~#*E;8?uld&osZjv(c4c$*mQm=)?A8JWwto|rfF{kH7MiF8W1cEK^it{%|)12_`> zp1i>K7;aP*dIEGAh`3~11C_f~uya~;+EVt!RTm>%5 zww~Go17Ot#)DXc2Cy>g!eE*YhKAn+-?V)T-w~>V^^5uaDx~n?ZDKiE?Lv-= zSSH`z%a4$JUW;g8QBj*)tZ3I|c$C%@`cORcodzOU^9XZi3ppaI${yn#_9E8Pm`%d9 zPd%p{BTCt2{O@tL%G=t{%3*!YTDXy6-_Qpi+w;s`vH|GylLjSq7RxOZh-Ar1yDcbAUeT$xkxsjda1}^QI%A{al zl`n_Q+_YE~9Z#oIW>WLB%+>QLexzF@WvJU)u5QYGB}MIQR)Mm3ouLCwqLHA!)A{8Lxgsq+^J)!8Ep{Wf}sd@FWL_2zlnrODbu(9Bxn2}CR73GLj*POCAy zS0bgA<1KXAFu!@0)&j3Fs@*v}JG96uvX-O6`oU^Q4Z~c@wN|3ikjD}D4ic-r&c!yY zBhGy5rt9Sk(2nINgAmU*D4X_coCqJl+j&H}$22@|pf+i|ec64yZRb=02W*oyD( zx8B0NX;0>vOA{JVC!dq0V51{V#r0RT9M460W;*~i*6e2qpUXSzQh9tzhls(U!M847 z0UJer7j!RyG*6de#AFwrtjVb8{E??(YBhQkW75}m0&M8D>@-~$=AW6>kQ*Y%(Zd;w z>u2;-!JbqpT29+y)T(rUK7~9l)b$R!r6J^tj9w$id1Zc4Yt}h>uzSayM$s?Aj@iAp z4?3Jk*wNBgtvtM+=M2kY9&++&Qj%gF=?C>b znw*RBCijr4jaOo6@AD_3aCa!vI zDC@cOGKZv|q*O;zC#B{3+CCze|9{HL&h%_%6+2)0S`^2Mi(%%uFdwk1U@nUm%n23= z&3xt4Z!+grvs}}wuI05l3q^mvWhd*SnDu^nMf3HbM=>)^K$jhkPV%lsIFC(c-E7Vu zqXM#e-u#DE&_|CQ$fr{YePo)z=*EkWW!1u>c>fsnkg@uhGqCEX?8yp{R}CFKo5@)R U-D-a3bMKUAZuhRuRayoA1ql>lkpKVy literal 0 HcmV?d00001 diff --git a/Source/Unrealzilla/Private/BugPlacerPawn.cpp b/Source/Unrealzilla/Private/BugPlacerPawn.cpp index e2c43f4..54c19ef 100644 --- a/Source/Unrealzilla/Private/BugPlacerPawn.cpp +++ b/Source/Unrealzilla/Private/BugPlacerPawn.cpp @@ -3,10 +3,10 @@ #include "BugPlacerPawn.h" #include "BugMarkerActor.h" -#include "BugMarkerLoader.h" +#include "BugMarkerSubsystem.h" #include "ExitingBugPlacementScreen.h" #include "UnrealzillaGlobalSettings.h" -#include "UnrealzillaJSON.h" +#include "BugzillaJSONStructs.h" #include "Components/MaterialBillboardComponent.h" #include "Components/SphereComponent.h" @@ -100,7 +100,7 @@ void ABugPlacerPawn::TraceTimerElapsed() else { this->PlacementMarkerRoot->SetVisibility(true, true); - this->UpdateBugInformation(FJSONBugData()); + this->UpdateBugInformation(FUnrealzillaBugData()); this->ShowDummyMarker(true); } @@ -209,31 +209,16 @@ void ABugPlacerPawn::SpawnBugPlacerPawn(const UObject *WorldContextObject, TSubc void ABugPlacerPawn::ShowBugMarkersInLevel(const UObject *WorldContextObject) { - for (TActorIterator Iterator(WorldContextObject->GetWorld(), ABugMarkerLoader::StaticClass()); Iterator; ++Iterator) + if (UBugMarkerSubsystem *BugMarkerSubsystem = UGameplayStatics::GetPlayerController(WorldContextObject, 0)->GetLocalPlayer()->GetSubsystem()) { - return; + BugMarkerSubsystem->ShowBugMarkers(); } - WorldContextObject->GetWorld()->SpawnActor(ABugMarkerLoader::StaticClass(), FVector::ZeroVector, FRotator::ZeroRotator); } void ABugPlacerPawn::HideBugMarkersInLevel(const UObject *WorldContextObject) { - for (TActorIterator Iterator(WorldContextObject->GetWorld(), ABugMarkerLoader::StaticClass()); Iterator; ++Iterator) + if (UBugMarkerSubsystem *BugMarkerSubsystem = UGameplayStatics::GetPlayerController(WorldContextObject, 0)->GetLocalPlayer()->GetSubsystem()) { - ABugMarkerLoader *BugMarkerLoader = Cast(*Iterator); - BugMarkerLoader->UnloadAll(); + BugMarkerSubsystem->HideBugMarkers(); } } - -const FString ABugPlacerPawn::FormatQueryString(const TMap &QueryData) -{ - TArray AssembledKeyValuePairs; - TArray QueryKeys; - QueryData.GenerateKeyArray(QueryKeys); - for (const FString &QueryKey : QueryKeys) - { - AssembledKeyValuePairs.Add(QueryKey + "=" + QueryData[QueryKey]); - } - - return FString::Join(AssembledKeyValuePairs, TEXT("&")); -} diff --git a/Source/Unrealzilla/Private/BugSubmissionForm.cpp b/Source/Unrealzilla/Private/BugSubmissionForm.cpp index cdcf5e6..bcd71b6 100644 --- a/Source/Unrealzilla/Private/BugSubmissionForm.cpp +++ b/Source/Unrealzilla/Private/BugSubmissionForm.cpp @@ -3,13 +3,13 @@ #include "BugSubmissionForm.h" #include "BugMarkerActor.h" -#include "BugPlacerPawn.h" +//#include "BugPlacerPawn.h" +#include "BugMarkerSubsystem.h" #include "CommonButtonBase.h" #include "CommonTextBlock.h" #include "HttpModule.h" #include "JsonObjectConverter.h" #include "UnrealzillaGlobalSettings.h" -#include "UnrealzillaJSON.h" #include "Components/CircularThrobber.h" #include "Components/Overlay.h" @@ -33,67 +33,33 @@ const FText FormatFloatToText(float Float, int32 IntegralDigits, int32 Fractiona return FText::AsNumber(Float, &NumberFormat); } -const FString GetGameVersion() -{ - FString GameVersion; - GConfig->GetString(TEXT("/Script/EngineSettings.GeneralProjectSettings"), TEXT("ProjectVersion"), GameVersion, GGameIni); - if (GameVersion.IsEmpty()) - { - GameVersion = "1.0.0.0"; - } - return GameVersion; -} - - void UBugSubmissionForm::NativeOnInitialized() { this->ShowProcessingOverlayLoading(); this->ProductNameValue->SetText(FText::AsCultureInvariant(GetDefault()->ProductName)); - const FString FullURL = GetDefault()->SubmissionServer + "/rest.cgi"; - - // Assemble query data into key:value pairs - TMap QueryData; - QueryData.Add("api_key", GetDefault()->APIKey); - const FString QueryString = ABugPlacerPawn::FormatQueryString(QueryData); - - // Query the server for information about the current product - FHttpModule &HttpModule = FHttpModule::Get(); - TSharedRef ProductRequest = HttpModule.CreateRequest(); - ProductRequest->SetVerb(TEXT("GET")); - ProductRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json")); - ProductRequest->SetURL(FullURL + "/product/" + GetDefault()->ProductName + "?" + QueryString); - ProductRequest->OnProcessRequestComplete().BindUObject(this, &UBugSubmissionForm::ServerProductInfoResponse); - ProductRequest->ProcessRequest(); - - // Send a second query to retrieve severity options - TSharedRef SeverityRequest = HttpModule.CreateRequest(); - SeverityRequest->SetVerb(TEXT("GET")); - SeverityRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json")); - SeverityRequest->SetURL(FullURL + "/field/bug/bug_severity" + "?" + QueryString); - SeverityRequest->OnProcessRequestComplete().BindUObject(this, &UBugSubmissionForm::ServerSeverityInfoResponse); - SeverityRequest->ProcessRequest(); - - // Send a third query to retrieve platform options - TSharedRef PlatformsRequest = HttpModule.CreateRequest(); - PlatformsRequest->SetVerb(TEXT("GET")); - PlatformsRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json")); - PlatformsRequest->SetURL(FullURL + "/field/bug/rep_platform" + "?" + QueryString); - PlatformsRequest->OnProcessRequestComplete().BindUObject(this, &UBugSubmissionForm::ServerPlatformInfoResponse); - PlatformsRequest->ProcessRequest(); - - // Send a final query to retrieve OS options - TSharedRef OSRequest = HttpModule.CreateRequest(); - OSRequest->SetVerb(TEXT("GET")); - OSRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json")); - OSRequest->SetURL(FullURL + "/field/bug/op_sys" + "?" + QueryString); - OSRequest->OnProcessRequestComplete().BindUObject(this, &UBugSubmissionForm::ServerOSInfoResponse); - OSRequest->ProcessRequest(); + UBugMarkerSubsystem *BugMarkerSubsystem = UGameplayStatics::GetPlayerController(this, 0)->GetLocalPlayer()->GetSubsystem(); + BugMarkerSubsystem->FormPrepResponse.BindUObject(this, &UBugSubmissionForm::PrepareFormData); + BugMarkerSubsystem->PrepareSubmissionFormData(); this->SubmitButton->OnClicked().AddUObject(this, &UBugSubmissionForm::SubmitForm); this->CancelButton->OnClicked().AddUObject(this, &UBugSubmissionForm::CancelForm); } +void UBugSubmissionForm::PrepareFormData(const FUnrealzillaFormPrepData &Data) +{ + this->ComponentsList = Data.ComponentsList; + this->SeverityList = Data.SeverityList; + this->VersionsList = Data.VersionsList; + this->PlatformsList = Data.PlatformsList; + this->OSList = Data.OSList; + + this->VersionButton->SetText(FText::AsCultureInvariant(Data.DetectedVersion)); + this->HardwareButton->SetText(FText::AsCultureInvariant(Data.DetectedHardware)); + this->OSButton->SetText(FText::AsCultureInvariant(Data.DetectedOS)); + + this->HideProcessingOverlay(); +} void UBugSubmissionForm::SetMarkerData(ABugMarkerActor *BugMarker) @@ -153,74 +119,30 @@ void UBugSubmissionForm::SubmitForm() { this->ShowProcessingOverlayLoading(); - const FString FullURL = GetDefault()->SubmissionServer + "/rest.cgi"; - const FString RequestURL = "/bug"; + FUnrealzillaPostData PostData; + PostData.Version = this->VersionButton->GetText().ToString(); + PostData.Platform = this->HardwareButton->GetText().ToString(); + PostData.OS = this->OSButton->GetText().ToString(); + PostData.Component = this->ComponentButton->GetText().ToString(); + PostData.Severity = this->SeverityButton->GetText().ToString(); + PostData.MapName = this->MapName.ToString(); + PostData.MapLocation = this->MarkerLocation.ToString(); + PostData.Summary = this->SummaryEntryBox->GetText().ToString(); + PostData.Comment = this->CommentEntryBox->GetText().ToString(); - // Assemble query data into key:value pairs - TMap QueryData; - QueryData.Add("api_key", GetDefault()->APIKey); - - const FString SummaryText = this->SummaryEntryBox->GetText().ToString(); - const FString CommentText = this->CommentEntryBox->GetText().ToString(); - - const FString DefaultStatus = GetDefault()->DefaultStatus; - - FString PostJsonString; - FJSONPostBug PostData; - PostData.product = GetDefault()->ProductName; - PostData.version = this->VersionButton->GetText().ToString(); - PostData.platform = this->HardwareButton->GetText().ToString(); - PostData.op_sys = this->OSButton->GetText().ToString(); - PostData.component = this->ComponentButton->GetText().ToString(); - PostData.severity = this->SeverityButton->GetText().ToString(); - PostData.cf_mapname = this->MapName.ToString(); - PostData.cf_location = this->MarkerLocation.ToString(); - PostData.summary = SummaryText; - PostData.description = CommentText; - if (!DefaultStatus.IsEmpty()) - { - PostData.status = DefaultStatus; - } - FJsonObjectConverter::UStructToJsonObjectString(PostData, PostJsonString); - - if (PostData.version.IsEmpty()) - { - this->ShowProcessingOverlayMessage("You must select a version number."); - return; - } - if (PostData.platform.IsEmpty() || PostData.op_sys.IsEmpty()) - { - PostData.platform = "All"; - PostData.op_sys = "All"; - } - if (PostData.component.IsEmpty()) - { - this->ShowProcessingOverlayMessage("You must select a component."); - return; - } - if (PostData.severity.IsEmpty()) - { - this->ShowProcessingOverlayMessage("You must select a severity level."); - return; - } - if (SummaryText.IsEmpty()) - { - this->ShowProcessingOverlayMessage("You must provide a summary."); - return; - } - - FHttpModule &HttpModule = FHttpModule::Get(); - TSharedRef Request = HttpModule.CreateRequest(); - Request->SetVerb(TEXT("POST")); - Request->SetHeader(TEXT("Content-Type"), TEXT("application/json")); - Request->SetURL(FullURL + RequestURL + "?" + ABugPlacerPawn::FormatQueryString(QueryData)); - Request->SetContentAsString(PostJsonString); - Request->OnProcessRequestComplete().BindUObject(this, &UBugSubmissionForm::ServerPOSTResponse); - Request->ProcessRequest(); + UBugMarkerSubsystem *BugMarkerSubsystem = UGameplayStatics::GetPlayerController(this, 0)->GetLocalPlayer()->GetSubsystem(); + BugMarkerSubsystem->FormPostResponse.BindUObject(this, &UBugSubmissionForm::UpdateReportMarker); + BugMarkerSubsystem->SubmitForm(PostData); this->OnFormSubmit.ExecuteIfBound(); } +void UBugSubmissionForm::UpdateReportMarker(const FUnrealzillaBugData &BugData) +{ + this->BugMarkerActor->SetBugData(BugData); + this->CloseForm(); +} + void UBugSubmissionForm::CancelForm() { this->OnFormCancelled.ExecuteIfBound(); @@ -238,302 +160,7 @@ void UBugSubmissionForm::CloseForm() } -void UBugSubmissionForm::ServerPOSTResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success) +void UBugSubmissionForm::ErrorResponseCallback(const FUnrealzillaErrorData &Error) { - if (Success) - { - FJSONPostResponse ResponseData; - FString JSONResponse = Response->GetContentAsString(); - FJsonObjectConverter::JsonObjectStringToUStruct(JSONResponse, &ResponseData); - - if (ResponseData.error) - { - this->ShowProcessingOverlayMessage(ResponseData.message); - } - else - { - const FString FullURL = GetDefault()->SubmissionServer + "/rest.cgi"; - - TArray StatusQueries; - StatusQueries.Add("id=" + FString::FromInt(ResponseData.id)); - if (GetDefault()->bShowUnresolvedBugs) - { - for (const FString Unresolved : GetDefault()->UnresolvedStatuses) - { - StatusQueries.Add("status=" + Unresolved); - } - } - if (GetDefault()->bShowInProgressBugs) - { - for (const FString InProgress : GetDefault()->InProgressStatuses) - { - StatusQueries.Add("status=" + InProgress); - } - } - if (GetDefault()->bShowResolvedBugs) - { - for (const FString Resolved : GetDefault()->ResolvedStatuses) - { - StatusQueries.Add("status=" + Resolved); - } - } - StatusQueries.Add("cf_mapname=" + this->GetWorld()->GetMapName().RightChop(this->GetWorld()->StreamingLevelsPrefix.Len())); - StatusQueries.Add("api_key=" + GetDefault()->APIKey); - const FString QueryString = FString::Join(StatusQueries, TEXT("&")); - - FHttpModule &HttpModule = FHttpModule::Get(); - TSharedRef SeverityRequest = HttpModule.CreateRequest(); - SeverityRequest->SetVerb(TEXT("GET")); - SeverityRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json")); - SeverityRequest->SetURL(FullURL + "/bug" + "?" + QueryString); - SeverityRequest->OnProcessRequestComplete().BindUObject(this, &UBugSubmissionForm::ServerPOSTUpdateMarkerResponse); - SeverityRequest->ProcessRequest(); - } - } - else - { - this->ServerConnectionError(Request->GetStatus()); - } -} - -void UBugSubmissionForm::ServerPOSTUpdateMarkerResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success) -{ - if (Success) - { - FJSONBugResponse ResponseData; - FString JSONResponse = Response->GetContentAsString(); - FJsonObjectConverter::JsonObjectStringToUStruct(JSONResponse, &ResponseData); - - if (ResponseData.error) - { - this->ShowProcessingOverlayMessage(ResponseData.message); - } - else - { - if (!ResponseData.bugs.IsEmpty()) - { - this->BugMarkerActor->SetBugData(ResponseData.bugs[0]); - } - this->CloseForm(); - } - } - else - { - this->ServerConnectionError(Request->GetStatus()); - } -} - -void UBugSubmissionForm::ServerProductInfoResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success) -{ - if (Success) - { - FJSONProductResponse ResponseData; - FString JSONResponse = Response->GetContentAsString(); - FJsonObjectConverter::JsonObjectStringToUStruct(JSONResponse, &ResponseData); - - if (ResponseData.error) - { - this->ShowProcessingOverlayMessage(ResponseData.message); - } - else - { - if (!ResponseData.products.IsEmpty()) - { - const FJSONProductData &ProductData = ResponseData.products[0]; - if (ProductData.name == GetDefault()->ProductName) - { - for (const FJSONComponentData &ComponentData : ProductData.components) - { - this->ComponentList.Add(ComponentData.name); - } - for (const FJSONVersionData &VersionData : ProductData.versions) - { - this->VersionsList.Add(VersionData.name); - } - } - - if (this->VersionsList.Contains(GetGameVersion())) - { - this->VersionButton->SetText(FText::AsCultureInvariant(GetGameVersion())); - } - else if (this->VersionsList.Contains("unspecified")) - { - this->VersionButton->SetText(FText::AsCultureInvariant("unspecified")); - } - else if (this->VersionsList.Contains("Latest")) - { - this->VersionButton->SetText(FText::AsCultureInvariant("Latest")); - } - else if (!this->VersionsList.IsEmpty()) - { - this->VersionButton->SetText(FText::AsCultureInvariant(this->VersionsList[0])); - } - - this->CheckIfAllInitialResponsesAreIn(); - } - else - { - FStringFormatOrderedArguments Args; - Args.Add(FStringFormatArg(GetDefault()->ProductName)); - this->ShowProcessingOverlayMessage(FString::Format(TEXT("Could not find data for a product called {0}"), Args), true); - } - } - } - else - { - this->ServerConnectionError(Request->GetStatus()); - } -} - -void UBugSubmissionForm::ServerSeverityInfoResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success) -{ - if (Success) - { - FJSONFieldResponse ResponseData; - FString JSONResponse = Response->GetContentAsString(); - FJsonObjectConverter::JsonObjectStringToUStruct(JSONResponse, &ResponseData); - - if (ResponseData.error) - { - this->ShowProcessingOverlayMessage(ResponseData.message); - } - else - { - if (!ResponseData.fields.IsEmpty() && ResponseData.fields[0].name == "bug_severity") - { - for (const FJSONFieldValueData &FieldValue : ResponseData.fields[0].values) - { - this->SeverityList.Add(FieldValue.name); - } - } - - this->CheckIfAllInitialResponsesAreIn(); - } - } - else - { - this->ServerConnectionError(Request->GetStatus()); - } -} - -void UBugSubmissionForm::ServerPlatformInfoResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success) -{ - if (Success) - { - FJSONFieldResponse ResponseData; - FString JSONResponse = Response->GetContentAsString(); - FJsonObjectConverter::JsonObjectStringToUStruct(JSONResponse, &ResponseData); - - if (ResponseData.error) - { - this->ShowProcessingOverlayMessage(ResponseData.message); - } - else - { - if (!ResponseData.fields.IsEmpty() && ResponseData.fields[0].name == "rep_platform") - { - for (const FJSONFieldValueData &FieldValue : ResponseData.fields[0].values) - { - this->PlatformsList.Add(FieldValue.name); - } - } - - this->CheckIfAllInitialResponsesAreIn(); - } - } - else - { - this->ServerConnectionError(Request->GetStatus()); - } -} - -void UBugSubmissionForm::ServerOSInfoResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success) -{ - if (Success) - { - FJSONFieldResponse ResponseData; - FString JSONResponse = Response->GetContentAsString(); - FJsonObjectConverter::JsonObjectStringToUStruct(JSONResponse, &ResponseData); - - if (ResponseData.error) - { - this->ShowProcessingOverlayMessage(ResponseData.message); - } - else - { - if (!ResponseData.fields.IsEmpty() && ResponseData.fields[0].name == "op_sys") - { - for (const FJSONFieldValueData &FieldValue : ResponseData.fields[0].values) - { - this->OSList.Add(FieldValue.name); - } - } - - this->CheckIfAllInitialResponsesAreIn(); - } - } - else - { - this->ServerConnectionError(Request->GetStatus()); - } -} - -void UBugSubmissionForm::CheckIfAllInitialResponsesAreIn() -{ - if (!this->ComponentList.IsEmpty() && !this->VersionsList.IsEmpty() && !this->SeverityList.IsEmpty() && - !this->PlatformsList.IsEmpty() && !this->OSList.IsEmpty()) - { - // Set these as defaults in case nothing below changes this setting - this->HardwareButton->SetText(FText::AsCultureInvariant("All")); - this->OSButton->SetText(FText::AsCultureInvariant("All")); - - if (this->PlatformsList.Contains("PC")) // Try our best to auto-detect PC hardware - { - if (UGameplayStatics::GetPlatformName() == "Windows" && this->OSList.Contains("Windows")) - { - this->HardwareButton->SetText(FText::AsCultureInvariant("PC")); - this->OSButton->SetText(FText::AsCultureInvariant("Windows")); - } - else if (UGameplayStatics::GetPlatformName() == "Linux" && this->OSList.Contains("Linux")) - { - this->HardwareButton->SetText(FText::AsCultureInvariant("PC")); - this->OSButton->SetText(FText::AsCultureInvariant("Linux")); - } - else if (UGameplayStatics::GetPlatformName() == "Mac" && this->OSList.Contains("Mac OS")) - { - this->HardwareButton->SetText(FText::AsCultureInvariant("All")); - this->OSButton->SetText(FText::AsCultureInvariant("Mac OS")); - } - } - if (UGameplayStatics::GetPlatformName() == "Mac") // Try our best to auto-detect Macintosh hardware - { - if (this->PlatformsList.Contains("Macintosh")) - { - if (this->OSList.Contains("Mac OS")) - { - this->HardwareButton->SetText(FText::AsCultureInvariant("Macintosh")); - this->OSButton->SetText(FText::AsCultureInvariant("Mac OS")); - } - } - } - - this->HideProcessingOverlay(); - } -} - -void UBugSubmissionForm::ServerConnectionError(const EHttpRequestStatus::Type Status) -{ - switch (Status) { - case EHttpRequestStatus::Failed_ConnectionError: - this->ShowProcessingOverlayMessage("Unable to connect to the server", true); - break; - case EHttpRequestStatus::NotStarted: - this->ShowProcessingOverlayMessage("Connection could not start", true); - break; - case EHttpRequestStatus::Failed: - this->ShowProcessingOverlayMessage("Connection failed", true); - break; - default: - this->ShowProcessingOverlayMessage("Request failed for unknown reasons", true); - } + this->ShowProcessingOverlayMessage(Error.ErrorMessage); } diff --git a/Source/Unrealzilla/Private/ServerREST.cpp b/Source/Unrealzilla/Private/ServerREST.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1fd52941f5503cc7f503490248fd96e7122b8415 GIT binary patch literal 41154 zcmeHQZF3v95x%eNO#cI;&Zx??q0@YH6L%cja_l&fQ_D#@nT$s-l&o5o6;gJhs`)|v zlWm^|%jIHmz}-Eow z@cB*kt~#iWsv-V*T8*kV)o%5++QIV!d_Jni)t~X?3I5%y2KaQhI>f(z^>;kquU?|v zIQ%ul?;-lX!_Qr`{C)Mi>Hj~35q8k;EuL|tmFn5F^$4&Y;O|ZJdWk36GuP{jfcbIt z)dbH&K(SuA9*=<+=dn?3SN}w7&g@?JhM11<7k@Uxc#i%fwA;cA{)M@a0$bHX{Coqb z{FbvJO-adpjA-yUn;c$WqV2eP9s1n@tgZ0*I6yuHyc2vwcsn&{gt!xCFh+}hwH{iJ zCS&&ji?}GnZ}Ha%Foc_H)rWz;XW?fr(^v5Dz5Y6B{cu9LJwV&9KC13a#v-;l{u=oB zp!yy^*TBnLz-=cyJ4TyZctZM!ywzz&%qfYZKvR)MD(*y?N^@x@=Em=NX*C6 z|0~mxf1OaC(su&w838k5TIQ1UP#t;)IXQsN^{eMWMnykO<8D{Cp?wDX30hOCHZbGQ zF&Aj;k;nTOWe<4s`APLDTFkChcLFYyyJvv24T=+6mF?J~ z^s7H%WXc~Y#~BSEhm<^}Eh*H4^xQ=Y%G)V$@|tu95GdKy!?%F(4SrHK4+6xxY>-Dt|cJYsvhCEhIeTKh90&=68UiT{1Fa2$rzDRD;zKE^b2cJ0e@l@NC24*?BaWe;V zaoo&}ws>ylM!kA&(tgG|bWy!b;Vq7f=}3#`U^-$G_hM|k?Tz(*2dl~ptOQ$FeUI>y z9+m0;3G64=2=i6G3%2nvSd9;(@4pHVzMeqfnm34i+(8JIJ?#ke=a7r%<@p7^)h;6?0RKg3Kn9mTmeH(_iLzd*Y! z=p6kg4^?6@;(dgXKf(y7km_L=C*?Qgoe>hFB8iR|+1)~1Cox_u4c&1QUv&*q;C)y1 zAh+@T{?wybss1+ooR@Hum3HcE0DtiWb}(o90iJuL4&w^OxulWUrO$(=?7}OIqgt~~ zq}wWW8y7(UP zjN?A>_w2O|y3q5cjxsx<-15=1dXKp_u}`}`@%Aj2@ECA6s;?*Cr@WAP#5mm#^1n5; zO7%!yA=Y8h;-%l(`snrXE@VPhGg-%sn>|EN>#*9Qd9fS{gm*#qB)cN^z1}j0yb1bJ zV#znjKdk|}P$k7yp>5?BGLN?wOMPALBN%{uMy;4`82xZY+O%ck(P%lve9@vM3ite6wI z4=gBaB|Hb<%x)yX99h~9!1uSXd-Uo?SP$CZj9u$IK59v6-(;<6gSrEGpzXCDdC1;# zY=>I+SDWBI!T9lN*9|^1lX0*72v1?rxQ>b}zHX(nWGAhC9_j{YCOJIKhdu)j=?x7* z&o=zup!W;3W{*7lbUkW=IL5eQjl`=eLACrrJ49=nhbG#`72_@DExFe=s3YJhaisOh zL%$EGu^%)H`MNgv%&a^*~6kQLe9MgO!~w9Nt`7s#O}l+>IdKW1hel?;^N!Tey-EZ-u9sZTWG-@5n1Oq z5t%WrNVC7>q>oa$o}0(7TvZLNKQWnK2_smfz7phQ5fqwS?$pxa{1oI{^qu;waZxYfy?I#v-B&;^2 zH^DZq6P!`gY%H#gZ4}_F;p#N34|< zx&m>RZ<$dPYLMnJ&Ail^^|=ab(G|Bgd%@g4{m@JCc67 zuBWtY*YC7PT{14J;o|>~g2s2z?=&91eEm)%_%wek5!}Um0iPpCM=*_?#UJPj^D4Bw zjixr^^XNHO31&D_**TA%cfs_1SjRoL+cmw*ye_Kiw87jjW=_A0u5TbGdHMRyQN5kJ zxJK7unnZWk;U*|op|wr;oJUXNJmh(FGmp>JYa{V$*T6jX-E?lYY!+8_`q-LL&|E=U zyO!UPcnXi2F|YPw^qzj__vmg$UaW_#XF0#;Erv+H*bP=hipS~eAeR}o=6Y_cJk4d; zBywruh_4G}o{SkRR+S207Lh3^k107z!MeN`t$HL`b)F9Jx~99cngK06AHdg%vu}%= zvDhcg0BCNc9Y2XTwT@WuOJ_5fRK;kkcBrX`SAv^*JMEC;wW$P^7Q7u2W!CR;mf+p1 zwQPqzPGZ>->@>1#hn%bWD?#`Bvt41QJE+aj(_Py3QT(2D3A*10Z->eXt1;FFR*+ey zsRUhk%8E(WUMX~|mnd71Zf71+9a4)i2y3>tfaS3iFY_y`rlUN9*XeHfcG>@1sr~^? zcniDzI@oXSI#AA;2j$r!$rbw1`=BrD8Me`eXN_2=rnBnd8|Dq=Y=?d;bL}$E)XL;$ z+OPhNe`O0kz>I9yJqJN+Mb4)Cre(^f7>V?)RCht6L(E<0$c$}%Me+EQ`gf;M-O6>F zAPe$WSM!Qq_c-P_H@&Qtsro{ywm)m?zNGO4>RtG5;Jk(x$o z9bNoX^<2zT&_a`;g zQf;u0mT|=scQaTW#d;}bTUcq!S<`P}#q-bb#8^qqeGkSetYJ{N9Q7D|cpCz}9I1I= zwdiihQxOJhXNil{Wb?$?D8vHFqvnj{b*ngJCF;e`h7$@sCXIBz0Ut>>IYA!R2hzi| zQ;WXtkkzH@6P_}2e}Y=ivL+Ccorxm`raz0wGR}5Jo!D3m$-ktc?>e7Vug|F~*T<1; z825FjLu$bpLy@DlPH;SpebdjHyICx!DTU%Ul+Ul%snU(pIoOLk0i7Ey)>!&cn)~34 zQt7=Ir*osfUz`>@Q@(SePLXb0PT?+&!|6zu$K7<~uAGfAEUy^347k~l*xwOba6Qhw zQ=Yob|LV`a6IbT-N~bK8cb9wqomefpvYlgG=X3BPWxmdm+A4KGW30-SE%-KgY+cU6 z&jR%-vN*Hg*Ob|bYY1kqJMV_Y`;$v~9z{XiNgRb!MZ7_)lw;{O!)|#O!ct#PfBO?` z=1s>oKhC~LzKb!S-Rk!M^UxD*b;*|%Beuh=kGJ(pFp-}Z$p>|%?aj**Nlis6L(43Y z*C}RPR%@E3Ss#^0%|K}ElTuaNFE&dg=bq-9Bhnc)-CQ6!9NsutzJ-uh#OwtBN^=_; zbDsY`19}}@py+)7KAshQ;2iYUfHD_##y{Z3#2+#5*=`Z&4%hEA=JBO%&DGCzAB7&I zhmar1SFy+*)hwgTc8lv%J=5Bp|0mVmo3_cy~goUHUYwWFJ@JgZlMM=bj&X z02z>5O1WMy>gE+cwpPM7?_`uR_a)laeP5*$>D%;__mg=HwI^@sPW|C@2PTbW>hfQQ zptlLyo@*ID?%5cEf1<@FcZ1o|O;8fcN2hZP#y&YUMGcE#D)++6`av ze$gB8y*`=7r!qXhmCDaksuYBKq^G|XhT6v4Ratd%gwL!qkrTN5W;aA-ykkRc5I-M- z-gakCACkiCgx0Q{A^QI{)J!txqFj)7LdYGG@g1fjDPH=>X<|BzZuFwx$h@cCR{Xxq z%5%{qUO(w?FaIX{@yy@v+;AE<|8_k5^-vc?9Z9WU*&{JqES$b z&!wVew%OS|g{dzWQ=e;DYR|pUh+9#siazw$7=q}O|?#w%sZ6@a?W!aWN5x|Tc9PZ9;{T=ZMsw@}{8lT2n;E?S&v z&`Z>=LoT(#*Xd)>}EnxRUS5U}Xb$a=359T{L^s zbAM9ppu3d*E+n2&=9y*QgeRwr`K~TT#H@5UKz5J&Jvy4|Zp`x%4MldC$>#e$7+>qY zTmJ3YQsJ&L?bk4q81C6|$B32m+$Z#-3-!b|FOOnW)SQ>qQt+I$yshlKb6f!}Ia^kz z?F4Ad!|qOQ7g0){O=;SjYU3d6NVd(c41dw{dNSFqV+ABq!BienSnC9aw26d$@eJE-RXNlK}I!d{a4F@ofhD zp0R`6LU0g1vF{1~NiXGIS-ZXf9PY~h9DdV2uwEv2lUNxB?N`2^j-S)GvIWiAl@(O8 z+-s0Yq4y@{!W$U46V7*2l4g`;wSimsp4RZAU_n(6St)Z5ZR8CRMhnH>PWL~@4xUsN z9fKFFE#pr1R-pF|Mv}Kwkpt=Mv|4~RkhBsie;4?)8@M{g?9}IpK@S)zOxxCU(wE zSLxjk_jCCb$NL9OGFOt^`fZ5aW!K}Cr>@Dc+P8VjtdiwR{iZi1B6Cd)q`$$|r|+pqqO8!Gq}==g3_`!w!tOyi;wCm{W=%M#ty$IQbBg`OwGWzz^ zn#D3x$^x&1(~o=?AtP4x>4ZW$f__VQY(w1jjyzf$(=uAmcvQY2jNY|WdFmV4#E))1 zPjGR(SYMf|sN4qbte|`~#d~&se2rP1O!&*&#~7*3O81W+}yiH@BvQfaQmYI2Zh5yu4#>=7~^4@z! zP>a&=`Cyl)<$2bSl8vNJ+InGo2(k`ugJOCPVmrJcH*Vklo(fVSzV(#Q%#UEqsq0JW zq`G0G{rXXDxY`SAMK41uM{N#_p7pQhK9q3ErQ|1cOgRI?@0)x3lVd3ie_AXD={`p1 zdvf)RgJcTGA&K2y)$n32Am2mb$7`0+Cgn`s-?O%=BO-TQJeJFrw)j*+I`GpQ|~Q3ZL}JB zLf$X&k^SO5uhK2vj5HaC=d6V3jmKSls?t-1G;g1Wo+|%)@0U3cJ(buGC#8n?`yFP) zyXYPuhTaVM70tELo6Fxo>FcmIL+10i`ZPKD$Y{WG`3}BWjbN(3>N%X=EEVHT2z=iH z^B#N~lAPuI5`Ue-W9I2j*0??mvDFBzl)`N=ZJq+ldfF4kb`Z|FQ4-`XpkXC_c!HGQ zFkfiB6rOsey<#<6JWo$2fg$ICa*$;=>};BCnuS7k>Nth0H#6Fuu+~Cp@k4EBugData = Data; this->ReloadBugData(); } + void SetBugData(const FUnrealzillaBugData &Data) { this->BugData = Data; this->ReloadBugData(); } UFUNCTION(BlueprintPure) - FJSONBugData GetBugData() const { return this->BugData; } + FUnrealzillaBugData GetBugData() const { return this->BugData; } UFUNCTION(BlueprintPure) EBugStatus GetBugStatus() const; protected: - FJSONBugData BugData; + FUnrealzillaBugData BugData; }; diff --git a/Source/Unrealzilla/Public/BugMarkerLoader.h b/Source/Unrealzilla/Public/BugMarkerLoader.h deleted file mode 100644 index b6fad08..0000000 --- a/Source/Unrealzilla/Public/BugMarkerLoader.h +++ /dev/null @@ -1,34 +0,0 @@ -// ©2022 Batty Bovine Productions, LLC. All Rights Reserved. - -#pragma once - -#include "CoreMinimal.h" - -#include "UnrealzillaJSON.h" -#include "Interfaces/IHttpRequest.h" -#include "Interfaces/IHttpResponse.h" - -#include "BugMarkerLoader.generated.h" - - -UCLASS() -class UNREALZILLA_API ABugMarkerLoader : public AActor -{ - GENERATED_BODY() - -public: - virtual void BeginPlay() override; - virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; - - void UnloadAll(); - -private: - void ServerBugResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success); - void LoadNewBatch(); - - TArray Markers; - - TArray BugBatch; - FTimerHandle NewBatchTimerHandle; - FTimerHandle UnloadAllTimerHandle; -}; diff --git a/Source/Unrealzilla/Public/BugMarkerSubsystem.h b/Source/Unrealzilla/Public/BugMarkerSubsystem.h new file mode 100644 index 0000000000000000000000000000000000000000..294cc862c57db5b1cf4b19ad0c8789f89a236bdd GIT binary patch literal 3820 zcmcha+fEcg5Qgh^O?-!mBnF7OhD#tOoWXF|>_Vd6kO4+mIV{dD7&JVPFR6Zi_qKD| z6A;a0c4oS(s;mC`tGf61ue#MOvY$3*Z@K4qU$)qKTzBrhW4G3}D@*ulSZWl#et}@YfGi|t*U~PRsURA?lVd7Zldx<)aG8NfNSL5aR8D`Xv zl*`nunAn2zNuJhnezf312Ub)u?Yii^R$gPXZ*R0lc^!2`@l4D}`cYnDNjdj1t>Z@u z&sLG?af=(nd{$Pa-2*YNHSIXBF6&vG)oFyx0cdMoWg)BT2D*|DD+SkZ@l@_uAr zu%r&q;7)Ck_dI)B%=+$~Iv%%R%{!N=4Q6`8p3QqsE7AzQ`C1fPQvCJxEQDU8U)5Sb z;y#ztRk-OZOVx8oRBP~k4gPxG9^$*YOvB|M20!twn#F2|3K)kRY9CXFc^KMdD|yrd z%C$#&q#S!51RtA3n(zF1CjC340(;7dWChL{r^g_UMuO?(~?i`_XvlwsYyNcHE$sM3{mGE2=E{#`91ka& zbt2b4q6B|7sQ{gGb;^n=RWVp@yd9l7F8Y<`|Lu*kbf1g8yhCl1y$$yCmHuA7!FQ89 f9+J@y#G$ &QueryData); - protected: UFUNCTION(BlueprintCallable) void SetArbitraryPlacement(bool bSet); diff --git a/Source/Unrealzilla/Public/BugSubmissionForm.h b/Source/Unrealzilla/Public/BugSubmissionForm.h index 76ad1a7..e364f1e 100644 --- a/Source/Unrealzilla/Public/BugSubmissionForm.h +++ b/Source/Unrealzilla/Public/BugSubmissionForm.h @@ -6,7 +6,7 @@ #include "BugFormButton.h" #include "CommonActivatableWidget.h" -#include "UnrealzillaJSON.h" +#include "BugzillaJSONStructs.h" #include "Interfaces/IHttpRequest.h" #include "Interfaces/IHttpResponse.h" @@ -30,7 +30,7 @@ protected: virtual void NativeOnInitialized() override; UFUNCTION(BlueprintImplementableEvent, meta=(DisplayName="Display POST Response")) - void DisplayPOSTResponse(const FJSONPostResponse &Response); + void DisplayPOSTResponse(const FBugzillaJSONPostResponse &Response); UPROPERTY(BlueprintReadOnly, meta=(BindWidget)) TObjectPtr ProductNameValue; @@ -67,26 +67,18 @@ protected: UPROPERTY(BlueprintReadOnly, meta=(BindWidget)) TObjectPtr ProcessingRequestErrorButton; + UPROPERTY(BlueprintReadOnly) + TArray ComponentsList; + UPROPERTY(BlueprintReadOnly) + TArray SeverityList; UPROPERTY(BlueprintReadOnly) TArray VersionsList; UPROPERTY(BlueprintReadOnly) TArray PlatformsList; UPROPERTY(BlueprintReadOnly) TArray OSList; - UPROPERTY(BlueprintReadOnly) - TArray ComponentList; - UPROPERTY(BlueprintReadOnly) - TArray SeverityList; private: - void ServerPOSTResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success); - void ServerPOSTUpdateMarkerResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success); - void ServerProductInfoResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success); - void ServerSeverityInfoResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success); - void ServerPlatformInfoResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success); - void ServerOSInfoResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool Success); - void CheckIfAllInitialResponsesAreIn(); - UFUNCTION(BlueprintCallable) void ShowProcessingOverlayLoading(); UFUNCTION(BlueprintCallable) @@ -101,7 +93,9 @@ private: void CloseForm(); - void ServerConnectionError(const EHttpRequestStatus::Type Status); + void PrepareFormData(const struct FUnrealzillaFormPrepData &Data); + void ErrorResponseCallback(const struct FUnrealzillaErrorData &Error); + void UpdateReportMarker(const struct FUnrealzillaBugData &BugData); FText MapName; FText MarkerLocation; diff --git a/Source/Unrealzilla/Public/UnrealzillaJSON.h b/Source/Unrealzilla/Public/JSON/BugzillaJSONStructs.h similarity index 85% rename from Source/Unrealzilla/Public/UnrealzillaJSON.h rename to Source/Unrealzilla/Public/JSON/BugzillaJSONStructs.h index c032e1f..1736be5 100644 --- a/Source/Unrealzilla/Public/UnrealzillaJSON.h +++ b/Source/Unrealzilla/Public/JSON/BugzillaJSONStructs.h @@ -4,14 +4,14 @@ #include "CoreMinimal.h" -#include "UnrealzillaJSON.generated.h" +#include "BugzillaJSONStructs.generated.h" /** * JSON structs for POST */ USTRUCT() -struct FJSONPostBug +struct FBugzillaJSONPostBug { GENERATED_BODY() public: @@ -40,7 +40,7 @@ public: }; USTRUCT(Blueprintable) -struct FJSONPostResponse +struct FBugzillaJSONPostResponse { GENERATED_BODY() public: @@ -64,7 +64,7 @@ public: * JSON structs for product data */ USTRUCT(Blueprintable) -struct FJSONComponentData +struct FBugzillaJSONComponentData { GENERATED_BODY() public: @@ -83,7 +83,7 @@ public: }; USTRUCT(Blueprintable) -struct FJSONVersionData +struct FBugzillaJSONVersionData { GENERATED_BODY() public: @@ -98,7 +98,7 @@ public: }; USTRUCT(Blueprintable) -struct FJSONProductData +struct FBugzillaJSONProductData { GENERATED_BODY() public: @@ -109,18 +109,18 @@ public: UPROPERTY(BlueprintReadOnly) FString description; UPROPERTY(BlueprintReadOnly) - TArray components; + TArray components; UPROPERTY(BlueprintReadOnly) - TArray versions; + TArray versions; }; USTRUCT(Blueprintable) -struct FJSONProductResponse +struct FBugzillaJSONProductResponse { GENERATED_BODY() public: UPROPERTY(BlueprintReadOnly) - TArray products; + TArray products; UPROPERTY(BlueprintReadOnly) bool error = false; @@ -140,7 +140,7 @@ public: * JSON structs for product data */ USTRUCT(Blueprintable) -struct FJSONFieldValueData +struct FBugzillaJSONFieldValueData { GENERATED_BODY() public: @@ -151,7 +151,7 @@ public: }; USTRUCT(Blueprintable) -struct FJSONFieldData +struct FBugzillaJSONFieldData { GENERATED_BODY() public: @@ -164,16 +164,16 @@ public: UPROPERTY(BlueprintReadOnly) bool is_mandatory = false; UPROPERTY(BlueprintReadOnly) - TArray values; + TArray values; }; USTRUCT(Blueprintable) -struct FJSONFieldResponse +struct FBugzillaJSONFieldResponse { GENERATED_BODY() public: UPROPERTY(BlueprintReadOnly) - TArray fields; + TArray fields; UPROPERTY(BlueprintReadOnly) bool error = false; @@ -193,7 +193,7 @@ public: * JSON structs for bug lists */ USTRUCT(Blueprintable) -struct FJSONBugData +struct FBugzillaJSONBugData { GENERATED_BODY() public: @@ -224,12 +224,12 @@ public: }; USTRUCT(Blueprintable) -struct FJSONBugResponse +struct FBugzillaJSONBugResponse { GENERATED_BODY() public: UPROPERTY(BlueprintReadOnly) - TArray bugs; + TArray bugs; UPROPERTY(BlueprintReadOnly) bool error = false; UPROPERTY(BlueprintReadOnly) diff --git a/Source/Unrealzilla/Public/JSON/JiraJSONStructs.h b/Source/Unrealzilla/Public/JSON/JiraJSONStructs.h new file mode 100644 index 0000000..73ae81e --- /dev/null +++ b/Source/Unrealzilla/Public/JSON/JiraJSONStructs.h @@ -0,0 +1,7 @@ +// ©2022 Batty Bovine Productions, LLC. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" + +//#include "JiraJSONStructs.generated.h" diff --git a/Source/Unrealzilla/Public/ServerREST.h b/Source/Unrealzilla/Public/ServerREST.h new file mode 100644 index 0000000000000000000000000000000000000000..a8b14fc693d99c435f10bf71abaa2dff91c292f2 GIT binary patch literal 10294 zcmds7+fE}#5Up1t74VC@zDCyr(lYy5q3Z-QnQ`-tKNI9+2;DmxC@x!ZXOnrFE8*uE`L%CN63C*Vac z9Z0_=oA@>Zj(vRdH~8@TETH$&@hM^$g;obNRY&O%YQIQL_GA}m-h=?5~0>e?EtHH@qb4afQEWcosDRR z4Ev7oT`J!=O_N#|`cIsN8qgc9y@soei&py0aXZ4dOZe+LO=j|w+kNl;&w(4Yl**jr zx(1{x;9bF5YLHsE!YH5mA^R#`hwGfaX`YbCI`*~jIfZ^M1HbVWsNfFmMqZ|I zO23Q0ec-L*wIYYG^&VdT00On`4Xj05pTo9Gxt0$Q1NO15>h{*%>Run=Ich-OJs`V; z?UWvE)88{ZR_`tE2Kdnuu$cW-hqTwzP^oAC=%Sy;!YHE=hge?A54p{r&Tk!lMjMjv zsgu)A%MLWhGsJk9md39F$(rum^8C^_EShgSOcy!l^1W1}-7I-%=nGpo4+$bpxz?{a zOECMjaaJbf)3J}yo3HYGq*gDB(+(uLd5G8La@lsC?ESYaZdI3sGSm&sX;-CLX%Cu9 z!9gWrbg02681d5yay^0+*N`YdeBT0f<=V=9U9(Gh(TA0Z)+OhVt2~cqjHMpCkgzPj zV5aLhU3S4qE8$(546JS+1OOcyZBl9S$#h+0Z zg*kQ^y6TO99ds?MF|&#J$1n`B?@yb*)>oa}Q>QO~97m^*fHi(m>#U0>U(;1^K6p;q zDYMTiYJO5NqUhxb&SR15CQd^e+&{S2@?v_-ms(aC!hA>KTZA1-41HW5_MhDqry|Rc#E{R8 zjezrf`mSj+Myz&tibl*{G38;p7-UJKXTD>|i(0T%!?@C8)a#5+yyNK_2+ydWAI5yX zR3DzANkHGWnJTLcA0hnOVca>Tx2a>iHq=P$v2jfgS$>q(TkQOl$FHv7#aQuPQT|fs$#t#Q?#?r)xV;yVNSnur^|j5Q9P-2{1%DNl;fv5 zT35v#$$UUFJ_Cw$Sm)3?fAkfx#h+m`;!J6E<*54ySNEgI5a+k?B`DU=