From da378e5d9bda229ef127a8c0f782d35cdb1b3247 Mon Sep 17 00:00:00 2001 From: PSMinIO Developer Date: Mon, 14 Jul 2025 23:00:34 -0400 Subject: [PATCH] Clean up progress bar text and fix verbose logging visibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🎯 PROGRESS BAR TEXT CLEANUP: ✅ REMOVED REDUNDANT PART INFO: • Before: 'Uploading Win10ISO.zip - 1.75 GB/4.57 GB (Part 34/74) at 18.28 MB/s' • After: 'Uploading Win10ISO.zip - 1.75 GB/4.57 GB at 18.28 MB/s' • Cleaner display - part info is already visible in individual chunk bars 🔧 FIXED VERBOSE LOGGING VISIBILITY: ✅ IMMEDIATE PROCESSING OF START MESSAGES: • Added ProcessQueuedUpdates() after task creation loop • 'Starting upload' messages now appear immediately • All parts now show start messages, not just first 4 ENHANCED LOGGING COVERAGE: Removed 32MB threshold - now logs all chunk starts Better visibility into parallel upload activity Shows all concurrent uploads as they begin EXPECTED VERBOSE OUTPUT: VERBOSE: Starting upload of part 1/74 (64.00 MB) VERBOSE: Starting upload of part 2/74 (64.00 MB) VERBOSE: Starting upload of part 3/74 (64.00 MB) VERBOSE: Starting upload of part 4/74 (64.00 MB) VERBOSE: Starting upload of part 5/74 (64.00 MB) ... (continues for all parts as they start) PROGRESS BAR HIERARCHY: Multipart Upload Collection: Processing Win10ISO.zip [] 50% File Upload: Uploading Win10ISO.zip - 2.28 GB/4.57 GB at 45.2 MB/s [] 50% Uploading Chunk: Part 35 of 74 - 32.1 MB/64.0 MB [] 50% Uploading Chunk: Part 36 of 74 - 45.2 MB/64.0 MB [] 70% Uploading Chunk: Part 37 of 74 - 12.8 MB/64.0 MB [] 20% Perfect balance of clean UI and comprehensive logging! --- Module/PSMinIO/bin/PSMinIO.dll | Bin 184320 -> 183808 bytes src/Core/S3/MultipartUploadManager.cs | 14 +++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Module/PSMinIO/bin/PSMinIO.dll b/Module/PSMinIO/bin/PSMinIO.dll index 21a7f81280f8c562f1b230c221c1fea4f9952901..2a3c20b49e8f6f1c3a27669ba60c5076de5b04e2 100644 GIT binary patch delta 10577 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 delta 10657 zcmY+~34BdQ7Xa{?GcPYM%i~4F5|P}e)RNeORxLq95*j69UxM0Vt%iQBMteolP)jWj zv82Vbv`T7;t@u!aT1pU0)h;5n??El!nVD03`Tc@_&fGh5=FXj&H!&{DXWSy6=@TnO zy0@-m^mUO{GJJR)#`XeZHvK~=nDKLGzQ)CQRS(}Qz#6)o5a#N}t9sjVv6O+O_PQqV zQ2x7XBd^L2yUz1U@vwDb5^uobk-Hd*JrPYN%@umLkWY1$x);UwxVqeP@;_Z;?$xMhAIwJjSw8ud zGplTaceM!o15(NZvn2O$?YuV#uL*ikjsNC~zkdKchPWy|s0#5za-ttx=YfZYF!oNT z1ok8odlOsoPE4oPQTVrQZcdv=?Q5B5GY~A5y)0Qh*yKeMw3hdKFL*o;nxs|65gj~< zkDe@*VQba4n0?2`k~+5KsBcKqnz-3CK9w}Li32rm744B1l zkYH=D;dP_ScIkY+mn6G%K0iXL z+$4uD;HOC8O%ekZ@Qb8fjdOSwFCyhNP7KK6_eeK-6tnO7Qxw*pVSCntBVnq}cVmzK z!9Q?s(*7Qwp!`YJmdpC3Qk0_Yh-ht{unpo4tm+(nis=Jr){S=cuvxFZd$(~ul&yec2a2Jhm{HBsw= zb9uT_hOI)Ro9*RONbf{CP_s$vYq;4y{yk|&4F_sDNe;x{`7b0n5P#>JNOBgB&#_u4%PLku|5Wi27llpi5}j@2LIr$`ymFYL$oMbfP< zc|pf{5$S1{GeP{Gm%maT1VH#@~+NS$jtOk{iF z?fQ|H)4VI`Rs9&h)4VTfR+O9l$p@1bMmbQ)qy+=q>UeGz7O`6o{3~D2(MZd4T&-3l1_{AZj@!79#FGdI#6~}5zeGnc>w7V&ZJj)FljiBwL<_t-rfS&#@*nnNpg+5!8en_{UR+l`A$+xzZk!p ze7{MQbJ;C^lqBb}Tl@@ZNIf^Z%`cO_tmi=8Aj$XO4u3$BZ~7hnoHRAb&hPRP^L0Pj z?Ri0Wc^Oim{R}E(KCOQk5zgSklGl1k^Vq zxo#KpsU*2<7xOtJxokh-Kak|I{e=HSlFRl}Zd;)HVu<5<@KZh-rPjZ5{%-b^uh&5} z5}tBL*1x0l0Tx}Q#dhLr_>$YcS24D{nN)kyJRBD<`5GlXW?u5MBsrX4a^nYi-Cib# z^D90{O0Iu0r&oNY3TD`3POta^()7BmD==6>%Bq`yT1ApMaqwNJ8e+C&jip#$;`0HO%p&L9b`xStxP~NX}D54$>rz3*ixl*)lU}4(J|XY zzZ`CXtt78fi2)YKCCP1y2OJ{FZHfn+)-rAKSy&-zkfi}iNNWA_gquY98rt9?Nxp_QctMh{p%-{8 zX84t1ldqu{lpxKBaO0M|3~4EDU%eqjOZAfvbbPHB!9I|$grmg7S+67vcI%tUc9(=t zNwVD~;Y*Tiw*$tLMFq%v9s44v0_V7&T26ibG^2PP7tPK<>$$e*0 zNE;LSWXlV4+28iZA#GtL$-6li?O+#aas2?+9xf>9?v96RB-!2ZaF+WBBvIa`16&|27|^|90$d|4AJ7|hmlX4%n{|XIq|P5Y zP<*wj(3UvJZgc`K($GQvs8XbG+@^GfKvGNGrgVmPOrrODcB2b~lFGg3kE%~f>zo+W z6`GJ{cJ9u)Lab6QllgW7w~ncNyTKu)R5n1^jBb#)RyR!!(rz%2B-8B%BiEWTsBhC9 zcIcqGO?Svw(%se_ddrXW_}*XnctDBnFo<;bV+(2|>CQkm>j7VoUJP`gQb}b7xmi#6 zmQ;C=12uCUt$%WN*9+!TQ10$}!4lHI4#g}HR+7ea;HdSav{rVbH*6y{xc@*Z4OO7u`UZddngkttF+#$_K;HW30xLR)34_J=wi$1j+ zC@<2mSi8|5{77c3KPr%PwZGjM0F_Ah`}?E9q)h7kfzW4zylE=S56cT22*Z^02u_0i zT58ND!BLWYhDmUSRNUQe42H`jTMvKK4bs{Hc4G)UAnhLDk9w|z>)+=%E{B3;qt0nO zj?1B7C*?M=8^a)gbi9c_Dp*O6nc>h-$JCe^4slAUERI>(a5%J8-%}2~;gC;~%^nWt zv`qDpU<6#HpxjQ5fZL?1jqJuJ@R-z~kw5AcDFQ#kj|9(cx{9{=5q=~%NHV2Qp&Uu3 z^eH$=GNojwPBLXq$q-Kb0^i?J(1Wd^sh&!FLNZ~EdhXimyDu`@n{){0!EQ~g!-e#k~(9v$3Qx17&dzhOeJ0IZ`zG7VKz~Y%P(P(lFlgwe0QsMtDI7x zp;9XDjsuMpn6mdxPAM>pB%f~zd{2@ojfG_-nbKJJg*2*}VH#h-M&g8K@1k~)Txs1`FrBofodcDnq??uj!3WBd5Ya(sle8ITi9r zGvi$RJ2*@FF|KjYcW{+7ZJ>)!1D>b*qIKyUl!LS=;R9nDlq0Q5Xl_ggXP#RBGHe;8 z{~I&|s#9=g>Ak3Ml7SyHW{f1y3|f444hGNEb0S2eL?yFg6F4kz`+FLN-bEMJ8+{$-bBi z$4Ig-=E5b?hPpcg=EC17wf^m^+s-l0omLzAkY}i7Qo0eZ-7fEhfeu0A|Ink_!<0LuJtcJ5BxffUi z1zM&}PP%L0uA+X^*FwSxnT1~c*TQHe`KDXhTF5&kW2tPWN3yXN3Y2t1*TGGaZ0I_8 zL>dq=#>jyeq!AJ0jP+nWt!l8D_M}Q48=wTSLefNI1C%9gPja)35JEbZN?^XBq#6Iix_l8?}%WAByYWcKDGfpVM|&Lz2&F z2W%$E$Fu`-mGooU3Dy48kHW8`mF;eIc21Y9+Hs8W8;m=z zwYA*}6KT1iX^9)d3vQ}YI5!(axuV}UCi6`N3xn}gDexnWz=OQgP@a^E2YIK#tVG<{OP!QuZW$6K6h1P)Le27GPKm@{TzHp zl6`m%GEJiFsPnLpBs=On{6vz!>9_!ENb)xw7vNWtJhHzCzmepT{Y5xHl1KKJ;223B z*drvI+UWIoDpw8AW6=MH{czT7jD9D zLMW*WZo+RuebReLcH+HF_rmsylFgwHBYs&lWrQt5cZFjoadgxT@uc7sL{`5 zYzF(j#be_i*rsK&QeiKQ=Wth1&sQ&?#0!0!KUtpf0xFVjTJnsSP+Lh)Nw462k{o)k zpt+K6C=)YvOudFo{G=q0Gwhs+5-(*988*|WWHDo+3^A}IM}?4P;khIiRY{8nJ5Y5< z)7#)7vS>(J-UiQ*MGMlg2E|N>)}+D)SfA)X`WoxAi0&kpi4|HzKcf6Kv4I)zR^+{dWxSZ_EQ+1@QQV$_4s%_#a5EMi%sk%U5PVe{A}Wo zrn-%nxS%wnT{UtkF$gr^j67|V$@qDONtaK zIR(l%ONz9&Vh%C+Etw86i;8lql{v&_jw68Sb~{9_l5V#{98yYSi=m>^A@WImJSsc= z#930PS7m1@Q9!CALY@BNIcc{Dca|0jAZtite|UsC157bQQCCq$B>$hrQqih5D=QA(qKF&Z< zoz%?J$5}zNC2h79u^`c&G}p_=Sy6N&eS$X)7GIHi`uI3QLy$`I3(bkm$-fs#(b zDVCU2bRTcwbc*F~1*?cP6ic_nJFAF?N|*Su{#I5+{O%<)yu?e@YlS+gq^o#WTvpOm zyeqCNrLjStJ)Q50`=pDue$J}mnU|@b#ZIq&&T0a@wKBbjII9b9QlQTeXAM!Bl9@q#i%e5M{4Su?5ru0NWLuDSxclT>BiI+lPPu!H}AE@Pu|>oJ=p4q^=}oeBeqdd zKaVlaIwF^p<2lAzR~#W-@*3w17pF*@y~jE0i3_C0K0TfF#Wm70R0DB`RL*yT^F2|F z!ur!#BJzFlN(FUG8wyV!-4~<1#yA^_%1S!+fe546Esw;24@4s+-T93~^jjqxiI1q{ zOpj^KMxrxG*rqufi#}2&Rv+s%$Js=@eCxud!iq<-vS~K&h0dm;yppaWLR3-GjfoI7 zsbrSOGa^I-(mWj9%|uhuLCZmFa}i6L=vl;Ch`~x`8slCEt&w81qP}TMF_wxpwB;Es z#pSnRQQ|tq;w@vGQR2m0u~xzZ*B06AT9(9sRw6`6-!ocNrC3>vMT-VHW~xayMl`3O zuq=1Rh!=7hqDd%5csZo>ZDNF%RQA lF~eDg7i5062j*=u4nY>*RAMhY^8iczO@4>q4xdrS^M4(CG= 32 * 1024 * 1024) // Log for chunks >= 32MB - { - _progressCollector.QueueVerboseMessage("Starting upload of part {0}/{1} ({2})", - partNum, totalParts, SizeFormatter.FormatBytes(partSize)); - } + // Log chunk start for all chunks (provides better visibility) + _progressCollector.QueueVerboseMessage("Starting upload of part {0}/{1} ({2})", + partNum, totalParts, SizeFormatter.FormatBytes(partSize)); // Update status to transferring partInfo.Status = PartStatus.Transferring; @@ -164,7 +161,7 @@ namespace PSMinIO.Core.S3 // Update file progress (Layer 2) with intelligent size formatting var sizeDisplay = SizeFormatter.FormatBytesIntelligent(currentUploaded, totalSize); _progressCollector.QueueProgressUpdate(2, "File Upload", - $"Uploading {fileInfo.Name} - {sizeDisplay} (Part {partNum}/{totalParts}) at {SizeFormatter.FormatSpeed(speed)}", + $"Uploading {fileInfo.Name} - {sizeDisplay} at {SizeFormatter.FormatSpeed(speed)}", (int)fileProgress, 1); // Log completion for larger chunks or milestone parts @@ -201,6 +198,9 @@ namespace PSMinIO.Core.S3 uploadTasks.Add(uploadTask); } + // Process initial "starting upload" messages immediately + _progressCollector.ProcessQueuedUpdates(); + // Wait for all uploads to complete with periodic progress updates var allTasks = uploadTasks.ToArray(); while (!Task.WaitAll(allTasks, 1000)) // Wait 1 second at a time