From 54ea7f09a0b6099fbdb89fe1899f3ca172864762 Mon Sep 17 00:00:00 2001 From: Alex <15199219+muskit@users.noreply.github.com> Date: Wed, 27 Aug 2025 16:11:06 -0700 Subject: [PATCH] wire up even more export UI --- src/Assets/awb.csv | 395 ++++++++++++++++++ .../imgs/status/indeterminate_spinner.png | Bin 0 -> 29754 bytes src/Assets/imgs/status/task_alert.png | Bin 0 -> 14556 bytes src/Assets/imgs/status/task_complete.png | Bin 0 -> 12364 bytes src/Assets/imgs/status/task_error.png | Bin 0 -> 12595 bytes src/ExportOperation/Exporter.cs | 19 +- src/Settings.cs | 19 + src/UI/Views/Export/Export.axaml | 14 +- src/UI/Views/Export/Export.axaml.cs | 67 ++- src/Utility/Utils.cs | 9 + 10 files changed, 504 insertions(+), 19 deletions(-) create mode 100644 src/Assets/awb.csv create mode 100644 src/Assets/imgs/status/indeterminate_spinner.png create mode 100644 src/Assets/imgs/status/task_alert.png create mode 100644 src/Assets/imgs/status/task_complete.png create mode 100644 src/Assets/imgs/status/task_error.png diff --git a/src/Assets/awb.csv b/src/Assets/awb.csv new file mode 100644 index 0000000..d874507 --- /dev/null +++ b/src/Assets/awb.csv @@ -0,0 +1,395 @@ +songID,awb +3,MER_30 +4,MER_32 +5,MER_34 +6,MER_36 +7,MER_38 +8,MER_40 +9,MER_42 +10,MER_44 +20,MER_46 +21,MER_48 +23,MER_50 +24,MER_52 +25,MER_54 +26,MER_56 +27,MER_58 +30,MER_60 +31,MER_62 +32,MER_64 +33,MER_524 +1001,MER_66 +1002,MER_68 +1003, +1004,MER_70 +1005, +1006,MER_72 +1008,MER_372 +1009,MER_74 +1010,MER_76 +1011,MER_78 +1013,MER_80 +1014,MER_82 +1015,MER_84 +1016,MER_86 +1017,MER_88 +1018,MER_90 +1020,MER_374 +1021,MER_92 +1026,MER_94 +1027,MER_96 +1030,MER_98 +1031,MER_100 +1032,02_0 +1035,MER_102 +1036,MER_104 +1037,MER_106 +1041,MER_108 +1042,MER_110 +1043,MER_112 +1044,MER_114 +1045,MER_116 +1047,MER_118 +1049, +1050,MER_120 +1051,MER_122 +1052,MER_124 +1054,MER_126 +1055,MER_128 +1056,MER_130 +1057,MER_132 +1058,MER_134 +1059,MER_136 +1060,MER_138 +1061,MER_140 +1062,MER_142 +1063,MER_144 +1064,MER_146 +1065,MER_148 +1068,MER_150 +1069,MER_152 +1070,MER_154 +1071,MER_156 +1072,MER_158 +1073,MER_160 +1076,MER_162 +1077,MER_164 +1078,MER_166 +1079,MER_168 +1080,MER_170 +1081,MER_172 +1082,MER_174 +1083,MER_176 +1084,MER_178 +1085,MER_180 +1086,MER_182 +1087,MER_184 +1088,MER_186 +1089,MER_188 +1090,MER_190 +1091,MER_192 +1092,MER_194 +1093,MER_196 +1094,MER_198 +1095,MER_200 +1097,MER_202 +1098,MER_204 +1099,MER_206 +1100,MER_208 +1101,MER_210 +1102,MER_212 +1104,MER_214 +1105,MER_216 +1107,MER_218 +1108,MER_220 +1109,MER_222 +1110,MER_224 +1111,MER_226 +1113,MER_250 +1114,MER_252 +1115,MER_254 +1116,MER_256 +1117,MER_228 +1118,MER_230 +1119,MER_232 +1121,MER_234 +1122,MER_236 +1123,MER_238 +1124,MER_240 +1125,MER_242 +1126,MER_244 +1127,MER_246 +1128,MER_248 +1203,MER_258 +1204,MER_376 +1205,MER_260 +1206,MER_262 +1207,MER_264 +1208,MER_266 +1209,MER_526 +1210,MER_268 +1211,MER_270 +1212,MER_272 +1213,MER_274 +1214,MER_276 +1215,MER_278 +1216,MER_280 +1217,MER_282 +1218,MER_284 +1219,MER_528 +1221,MER_286 +1222,MER_288 +1224,MER_290 +1226,MER_292 +1227,MER_294 +1228,MER_296 +1229,MER_298 +1230,MER_300 +1231,MER_302 +1232,MER_304 +1236,MER_308 +1237,MER_310 +1238,MER_312 +1239,MER_378 +1240,MER_380 +1241,MER_530 +1242,MER_314 +1243,MER_316 +1244,MER_318 +1245,MER_320 +1246,MER_322 +1247,MER_382 +1248,MER_384 +1249,MER_386 +1250,MER_324 +1251,MER_388 +1254,MER_326 +1255,MER_328 +1256,MER_390 +1258,MER_330 +1259,MER_332 +1260,MER_334 +1261,MER_336 +1262,MER_338 +1263,MER_340 +1264,MER_392 +1265,MER_342 +1267,MER_346 +1268,MER_348 +1269,MER_350 +1270,MER_352 +1272,MER_354 +1273,MER_356 +1274,MER_358 +1275,MER_360 +1276,MER_362 +1278,MER_364 +1279,MER_366 +2001,MER_394 +2002,MER_396 +2003,MER_398 +2004,MER_400 +2005,MER_402 +2006,MER_404 +2007,MER_406 +2008,MER_408 +2009,MER_410 +2010,MER_412 +2011,MER_414 +2012,MER_416 +2013,MER_418 +2014,MER_420 +2015,MER_422 +2016,MER_424 +2017,MER_426 +2019,MER_428 +2021,MER_430 +2022,MER_432 +2023,MER_434 +2024,MER_436 +2027,MER_438 +2028,MER_440 +2029,MER_442 +2030,MER_444 +2031,MER_446 +2032,MER_448 +2033,MER_450 +2034,MER_452 +2036,MER_306 +2037,MER_456 +2038,MER_532 +2039,MER_534 +2040,MER_458 +2042,MER_460 +2043,MER_462 +2046,MER_464 +2047,MER_466 +2048,MER_468 +2049,MER_470 +2053,MER_472 +2054,MER_474 +2055,MER_476 +2056,MER_478 +2058,MER_536 +2059,MER_480 +2060,MER_482 +2062,MER_484 +2065,MER_486 +2066,MER_488 +2067,MER_490 +2068,MER_492 +2069,MER_494 +2070,MER_496 +2071,MER_498 +2072,MER_500 +2073,MER_502 +2074,MER_504 +2075,MER_506 +2076,MER_508 +2077,MER_510 +2078,MER_512 +2079,MER_538 +2080,MER_540 +2081,MER_542 +2082,MER_544 +2083,MER_546 +2084,MER_514 +2085,MER_548 +2088,MER_516 +2089,MER_518 +2090,MER_520 +2091,MER_522 +2092,MER_550 +2202,MER_552 +2203,MER_554 +2204,MER_556 +2205,MER_558 +2206,MER_560 +2207,MER_562 +2208,MER_564 +2209,MER_566 +2210,MER_568 +2211,MER_570 +2212,MER_572 +2213,MER_574 +2214,MER_576 +2215,MER_578 +2216,MER_580 +2217,MER_582 +2218,MER_584 +2219,MER_586 +2220,MER_588 +2221,MER_590 +2222,MER_592 +2223,MER_594 +2224,MER_596 +2225,MER_598 +2226,MER_600 +2227,MER_602 +2228,MER_652 +2229,MER_604 +2230,MER_606 +2231,MER_608 +2232,MER_610 +2234,MER_612 +2235,MER_614 +2236,MER_616 +2238,MER_618 +2239,MER_620 +2240,MER_622 +2243,MER_624 +2244,MER_626 +2245,MER_628 +2246,MER_630 +2247,MER_632 +2248,MER_634 +2249,MER_636 +2250,MER_638 +2251,MER_640 +2252,MER_642 +2253,MER_644 +2254,MER_646 +2255,MER_648 +2256,MER_650 +3003,MER_654 +3004,05_0 +3005,MER_656 +3006,MER_658 +3007,MER_660 +3008,MER_662 +3009,MER_664 +3011,MER_666 +3012,MER_668 +3013,MER_670 +3015,MER_672 +3016,MER_674 +3017,MER_676 +3018,MER_678 +3019,MER_680 +3020,MER_682 +3021,MER_684 +3022,MER_686 +3023,MER_688 +3024,01_0 +3025,02_2 +3026,01_2 +3027,03_0 +3028,MER_690 +3029,MER_692 +3030,03_2 +3031,01_4 +3032,06_0 +3033,01_6 +3034,01_8 +3035,01_10 +3036,02_4 +3037,02_6 +3038,02_8 +3039,02_10 +3040,02_12 +3041,02_14 +3042,03_4 +3044,04_0 +3045,04_2 +3046,04_4 +3047,04_6 +3048,04_8 +3049,04_10 +3050,04_12 +3052,05_2 +3053,05_4 +3055,04_14 +3056,04_16 +3057,04_18 +3058,05_6 +3059,05_8 +3060,05_10 +3061,05_12 +3062,06_2 +3063,06_4 +3064,06_6 +3070,05_14 +3071,07_0 +3072,07_2 +3073,07_4 +3074,07_6 +3075,07_8 +3076,07_10 +3077,07_12 +3078,07_14 +3079,07_16 +3080,07_18 +3081,07_20 +3082,07_22 +3083,07_24 +3084,07_26 +3085,07_28 +3086,07_30 +3087,07_32 +3088,07_34 +3089,07_36 +3090,07_38 +3091,07_40 +3092,07_42 +3093,07_44 +3094,07_46 diff --git a/src/Assets/imgs/status/indeterminate_spinner.png b/src/Assets/imgs/status/indeterminate_spinner.png new file mode 100644 index 0000000000000000000000000000000000000000..32967e838289383ee111dfc490389c91f8446ca9 GIT binary patch literal 29754 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
gIeCLXb4vcvd-0*M1D0|BZaup zI`?|0!rvj#LA+Tb&6&f`o-nn7^%tcecgKMdU?@9pq+=M-q3f8 zy+(f;#Bu*lso6gS+iY>JcyO6TE5LL5tt^Cj~{3BpwlNSVXR#H?&Me{hZA&U1q z`?H-VDoucw>1DMf-`d2#eG_O#xW z8fZY%7F`7{s)Pc#Z{~#x*15;1b2SrV2p8Fme^fTv^ca=Zq*W~*Ke{S?TZ&NNcffj3 zF?pbTCUloDG9rG)XO&fdWTaA7pV7^5`mxF_DlH$Yy|1%^&ptK&m}zK%XG3!z}Xpp zpD?k+wrdBE)9S1cfGoO>^ACF~3`yMN*@R&fh-4=pf?OO6_+qiaz~X{ z&x@DSHac)PeKRRI>B)FVmRKF&OeGt=wj1>D=$_oo->T>nYPUOL?I3l0js$PN)7NED z8=;ZNy+GSb#t+7HyzjWe5`$20iJEBigFh(GV11LwBx*9^a%%FOgEE;zyb1-g|H&t5 z5|feKm&rTpE%c97hpB-Cnpc;0?$vZN3Q8JrAxTpu#=BJN?gVF@6cm9WEle0@xQ z7WyYi!aa7uuH+=hcSk9Wy=Pg;q{{3S{Y&__Y@N_wRqv8@GH;=5Dd2{E3-yFck;mo! z-za`iA$Uj^+-Hmwp2NR8Nf4mO{&UkwZ}0qU#5rubgdGl%W&$utG&iFnH#M}(y4_vH zF}>_XrH`Qa57>g|9+~h47oDU)Z)4eo;c#k2C%IW}-~2z=WjW8oDWd5#yov>6X{jn^ zoIozd;%*sc3D?oS;-(Ms8$$u2Ua=#4pYSFd-s1ILh|J#(&#dwW%9*p&XuzrNm&a}u z0HucKvCvriiD%N(2m}RaBU#uWm}#PSFf$i1kaU%Apl(o+D zutJN|*-~K|3FIz5lsBKX@|;%nxu_5a#7tZRUOYNd=s(A)(c?;7GG)l+m^3t?D))4- za%-;VemF8D@1s>5{jR~@V>K|~>vGe`91x5pt`N7h$IlNaPW12OAbF_Hb^=jIPue-_ z`0_#WU)M?|Q?>|)6)XU+UO}mL&X`pG_1G^pI8oF?6lWCfWnn>kKyl&sqy@1)ddGm% z4&y``Q(55#r`n)_tleGlmjWGA@s|Puw1WSKk%@=dVE-Q&nFH;d0a&fo7$tp{e008b zGWg6Xh=aM=b@rs==_?D897aA%qMN}@dg`4Gx-6D(w~tA^Ah4WM&C|D^I}X1N%!gdD zzRG<<_d=|$ra^J+t-@Fe;N$-bOf$30?wcfM2eeU) zRZ~%95EOwd5hWxJihy^VS+OYDDzfrJP-y>h;>bdu0AaRaS>kDD2nu z{=Z#pb|c#gT4y9|%Mrk{6Mt~aE60tUu?tC#*BDD4NtTcjHZBn*0y0>5DB9S?c=`z$ z!>$c)UjNZckKJwzs*$k8jg5JW8x^GIgzRzI}yu(9z`NWyjRyl2tZjafC0`Byf2h#%|Z4i^2Q zA_7|0)eFgxA)=IxY}@M!3;{F^zPD)2#lh?hL0K7SkX8^xNQ4dr)Sz==k2qum*o14c zedm4rC^I;u0kA1&d6pk($ z4jWdTdF9EgjG5Il0Vuyp;@*z3WZ101K+_Yzo!9?v)@!G`WC#cuy~?Xi5sAWDbLN$Q zw!#=%y`KJ7sC;gvIL$y2{TlkAqXAHvdSEl>vpyhIVsF$u}hdJU9NwH@-A0H#0yG5XJM+vB)4s zJsLK{PR8oj$#BThE6+1VS6`>URg5qDV!v;+-EQS9LIg-GA}6#&6Qu>4up98(mn?qx z4;MHy`*d-yKw^`@Az;_2Uwwd13S_Vlg#3Qy!}E>N)zkSe!|D$9PzWrf_5ebZZxv3m~;X`|N;T&F)u`T)o(8aXN0@E*X!^H*Q=r^&gQc?ygnB6&J?d1c1)okyGQ zfRvqoD-``H9A`y~E-}23+{Oc_64uQ4-|PQ0*_sIa{Em1h{ymX(CxiRBJMD^SNzi{#t73zk1hQm z@q6uZSD`>T%8G2uYb+XQ&=BCBOV%!8RvZ1;TGb`O28yHZ_8T^X5@J*Ae0uUbw;Cf% z&-ml3zvRnWByqK12)>0wv179}t${KE4Oj^D=&4sfwB`bPmcSzmWC0(E!Y7mXr-^k0 z?3vGf#F$}vP*&*UM=5OQSVROYEFwy{{Z_cy-Rv3fg`GcD12&bB~~YZZG22 zVBdYR+sK5al>w+XLQ;T478N*~U8vu*VBHhIW_Q_*8&7YaK9&+Co$-(3ElGViegcp% zYu6+U0i@`7OT9DF|13g>rvTEIsO)C9Ud2W0oB)*J%Ld0dI|S>@B(77d9*Bv-5+H)8h zU4I^EN8#b<3_y9flcv-vAR1aDnu4AEdH zA>-f*7J>8?Q8vA7$Zy71ZFU?`L!vHQBO3(mln*$?5Y0a#AjQQ0;FlMQS z-%W9jz$yx&go1$tJ%GEfc={Y>?}>dP1Wp6o^B)*l`q$lZyfMG@(QAj6Rc!o8SLLjj z$_i?)E0~Z6@bLT4r=0^0BBch1J!qZCrjgG_De8f}$)Cr~pJq^F5w3rz2MIpY8 z%5HXRml3G>g8j=KuTIOKDzRxpF@S|bteYZfg3*L)K6%#OSG1O0ZDX=)APl7)lxho$~^J{bzMt(bX_846loKEP&o zns`x#<^KDIOAGG##N}B>3WX@z;MC%Rux14Ci`kD|_1a{2W}_$h2CERqVhwZkhNwPXxDSo8apB@ zo4-Yzn2G3Q=Z3@9|HH?PsnshsyOHhmiv|#s8UB8pDtc|-t=71asuRF}UGePMg}F8v zBKqlQ070j6Av6Ur@G*bvr2};3o6xGQGRG9#7ziG?K z?kpc0pO75IhOf;M6@}M`2!#b}x*xmfE5m=K7dl@#x^MDplM7?>hZV<)Fxxj~d$zB0 z>s!|yZ^Xm^*f74(8Dt|X%tn?B?V{~j-ps8dr-0D4ye6nN--k~sP>!mKhCo#b;2(dm zdy<@0B&(J3irR5*^elkD((3M+6`_6Rl_#$n-YYyl^ToM4x{96A1!cu}p{3115-kq0 z?K`IabpC^_YWN#-JG+XV%C?Kv>X>F@l_iNh9*UicvD;>isNb^JRx}p{#6w4X=;+Qv zk3Cv1po#?WFL(T5MlcsF1R+6#2znhn1PBmVghaGGHumMeKW})y{~uQs#t%#g7R5rR z<+}u>Ma=~g4-1##l49p!8>X!Iz$2|?{Htb#R%El%(ms~d>!MIP^io(@$NM?Ogx=$} z4c`v{nur7>0pM_i*p!3r{0p5&_0Am*)%eXrDm%JBph^Vry+u!-8=n3eW11lAZxInyocwasn*kIyXSoR!1Zd=ztn?4cWGY#+WSAi!69CifzAr9gwj ziLBA62vvmuo}IY(VL4L`8j9Gsa48UxLE&S?W69P{Suy|0;Vkmn?p2qSa?YY65t(7W ze?SHgd&#uN&R*KA#{bNuSG%o1tPFIG#c)t!4B_!`(z@aM0SXyPKhpChB?{F9Nov32 z$o$A#hpR#WH{QK{p`ge(1{$7G3$)?j6C#0d-62~)_?6k~hw};#EZlsmy~sn-jyG&V zwDE9>DBhFXd0A8T8LXMnf0+AdJm@VP_WHyj8S~&R>xO?9zA$fZuqib`f1ibp_q{^o~R-G1u+$o(ahkQX)I-kTF6MVqxQ*GQRhn!@eZ!)mv0GO|Q@*#fPpOKBL}#Q+|T8DAFb@$W$g74+lO1 zL4mOpa2Kx0x9xaWlN1X5YWl!<=V1p0xRmf2LvaKiK!JFMRPib2gy%a)(vR7lhb^wk ziehuDY=B+#J4T|3I%*H#%gck4Ri(vOG<*`!Uw`O^lW%_S2vq*>x#Z>J#6=!i0zw=j z0-Ry5M~F*ENS2ZgADlbqUwKqtGnoJGN$#TpA9PJbL^y&%F^M2R#pfRW8B>2c()f3a z3nFan8UcaOb2Pierrhx7435$R_}}?{7WUky*1!2Xl!%3w6gCo{a=b18XT|&fd1MuN z%ND$RTyT*^EKO|@0rm*i!y+KAMkr54h%Wk(byUN59;}#adpxT2#amSQwj*(Q<82?O z@p2EpcuKH#WbyA*4|?n<3sxxn_)Z|Im=z6jOAz;~Mr?6MGG=s?N&Dv(FuSof;%?#y zJ?6f+SD}E7O}K8xm7hCpWai&%KYKP8)g}N6vAlaOX>9XfH`&P-pBPgE-F^?b{I$s= z|NSY!G;f-x2nbLJEG*slr5eJUEzcShs7it}K?3;QyBlpQj={pGM5GH(1(2h#e&XVb zPFeKzkt(k}`hQqdU@Tq@9vj^>~3TNc7O>dHy#2UO0?A^tyVTtXL*LA!AI6WqtBv*6>BvGznJ~rHPw05Y2FrBWodvK zfx)WPfFBOC9B32-&^JlWrtX?4EPW3z2tn74D@tUrD8^lWYi56|T5{fxoL=a(w8_{t zse@F+wF?=1TyN#9k@_rayEmO~d6^sEIF~`~xf6xVdbl`hUWpu(GWmAxO~YLY#3kNS3jz+J0Dp=7VI}P4>!UcK}`ujS+WlA0AknQC4-_!ks!`)uVuxlU;W3k z=B%&YJ8jH8x1jx;+Q)ct;xZt@0iGGQNj8;S(IevTs-nMhfaHlJwyuF zm`i5Ei^|_Ee0Q`}f%~R_sa|MBS>dSH)d$qy9f3%W0NQs(b*TU-fshCY86a5Kx%6|V zo_|BN-{qGx|Ja>`0Gf>?L}2Uh^~%x1`R)Im-#5v*#ijrViX+l%hzO8m$dJK75#8Z< z-@RyP834Jm_8yYbUVx^`m9+}Xrg>96-zBTE<9!oN#~KN>+Ue>(^$E2onO-qVPbP{-lnUG-XI`FL zpl*{WY!oFd1f>ypEQ9Zv6%df6M3&%==N26FcZ1p+NThrA%0pazGN_f?X4djOrvx&L zvdSqpm8sXQP|`7fsK=)$Kv`Sd#0UV!_d1n(SWC+iB#nR$6!A3p*!&CY-*)F`&-ly@ zwR_KRU*hH?N~xRxLw(2pouBOsYtVlm;p50ZcpT>2;l82#h}waj=+;f35x;&85{y~E1YE?z4Y%cuBDdl zvlD+et9Y4%BuZiOVKk(-d}h+luHaj>xTlttdPjNNZ|814;CZ9$bfRQIwEB-V*H4({ zb?0SR>WFl9CWuGJrtocr4i864A0x)mKMvLkT_zdoY;4jPOCMvgC{kJ%Y?!_Hx-o$#F}0tj^Z3j^O(~MY zC%~$Ki(L%@*z87j9viy`NlH<1IwLyR+4X#9H3F7uhDahFC%XEz!;^Twu3$$-17bdd{!^<<-yS*N(m=lyX(L=qB{?zjxd}2 zet6yapL7TS@3|wpLg=!aJ(++cQCw%Q_|V^9bJp>RXy^ar^j(t#E=3$&pPw|^hfved z_m+|tC$Ii(ScIj|IZ1%U?unx#s~W`rx;@xgnV+yJF~y20L3iE?yF^+9AW-&5MA1e` z0LO0ce92``Z&cz@@tQez{L?9?B{oib-MRAIEP1kcgtVp5F5bT5U_bHneA_fs@ZH5RL z9K2kqnwaKI38n-B992>3llt3-Py>%q5I^gY3te)lY6*pyLWWUMMN+6nM+@0_&mV87vKqXaY3iqPJ_ zImBB(s*va6k4oh8 z1qY}Fuskuyi%Ua7*3Yd?VWPrOeN%!>IX`PTR^`s5HW{+G7A4G%ROO-yPh|Se6BoOW z<*{m_ira}z31635NV2P@{q)9p)fC7c8Xlk7H`z(yn#b1CW*!-A#=LT{pMR<=vPp2V zjUdeKe`rbj4lzd}bxU&^bs}VVYN63|O2q|{_4rIu!jbvN3bSDrT`FJwCt~4eLwn>yQL02q|L0>? zkf#=t9W(=wpJ3_Cupk-9 zDna1@b@xs_)aR5)rBFtoRu?9`keYnmG;f+G!muOC)+i`*ls%fc4OR0={_?NvwN?!b zqy+fuSTX0$YtKyXy6^RPzVrF{?F)mN$bJuD1D884mrfnR_b-eWiO#f%fOtamzAgslpgS+ZC|jH6sP0iIb5)H1W^VoP7sIvHzZZ9i)*kcV*G@TS zae5E%mzStTMREiwxUdor3yDw1D?`bAlvVhI{;T!|2BCYP6VS;kAgb9l@xeY{tfKJi zR4E{CAy!%8RNXvAAHr1&?_aUt@?gD9frtzNlAtnn0T^FM!Z*vuW|8N)8d&`(wm;#L)T>o>ZPLN_u*dInB_%>WLWHMv*bbLSb$NEs`> z6fEkXpc9c+;u|tn|%)`P^5#+b9u2D)-p2ALT8c@c<2rw>?>!=cJ;Z5a&=F z1QEO5(qpH;7E=P)?252kK#0^0bV7etxla#Z&$QwYNd`fwBeagpS7(1!o#U=O^XO%5 zkF{aZhL1$*E0BH1qzW4ci-02KJiA(6n+y;U;;ic2dg=|ek@6fqzH^bXLke^d5^AZ5 zq+M8>V9D&oG&JU|{n^Pb1GFbz4jh7hc8dOq&+a&Od%chVY|7aVD8DS|wXa!&ueTTB zgziYI{u3ksIKKDz)0WR&d6}9lXRC@}V|lvG8$Ez{wyq+(qHX6XH@cOC%!Z% zvuFT`BEZE9}q6v@Tr% z0Uq?)%E6cW@Q`Dz|0y*RSE+GOcG9|&J`Rtb`uvCfa9m-$k9^}`t2H)G|C`qz`@>To ztG6w?a@N3v0GkpH5{XZiQu1lQ#cx~N70?72xAm1%tmR3+Yb+095#r;bR{r6P`XYcm zM9^z1XYV9=WQh?7ebo&C#5nD-xQ1`_j6WO~xPI=B-HJmuIeFVVY{Prj)$4}+^}^^P zL4>XQ{?&*k>kQxJSA+;0LIN@f@6VUe6gXz*j-u3(VuBJfk(`Po)aw0lTUFc6U(9~* zn);-Geg5kjlYgRV**WW3-zeMlC#MJ5Fa@R8a$Q6~NE^HE`?Dr7e}K0=*?Wq+Tu>xK zhSEOkLTZiR2{~trJJrKL6QsdDu*H3LL3B|X*M8BUJK=!CHq2eyJgeFjbZigjlq*8_ z$XOQ9+@S1$Hl!X_mV9@hg`$*O zKhf-QLje25`iZ}t>wq3JnzZ?s&qnW_BUaAX-fU|-zSlb=COIpW(P0V!EC1MScDW&d z{riX)vqh_FxuWb*Y<3t3$px6RFaD6CXE1IiL>k^NMc+2@7;_K9E4eD!Dt zrG+e$e;`3zaj^Kf2byzz-?~=Ji*N{18m0x1S-xwM+3AJ=_Duj6XV3K^l`$tE2;#2D z{29xdbA6|IZGF)x@%3C95@CMqXW1)fnZ0fZU@ttd(CsfGuv4Od0G9x{xY^QwgE4!( zLgC`4k^``S2z$AotL+GJLjVnl-_07hBF;}MtQ3|fo^Ri=eb%OCUgh>3(VQri0AP;* zO|(3JnAz`!0A7dhUerIa+&?Z-QL**0VeyB)uw3@Z4| zq@I&A=f*N-@m5LWp1O2T*NS&;ZT7XE&>PINQxOR*U$t69D|b&c1Yl6XN!|pwg)X)EB%Gi^zInx*-4q0DgM%?ny$+lUZ7{2 z)>!YiJy|*}jqMkcP8h3Ht}cvCZiKiYfV#$03*ALNLhBco=gcOJ@x6bxqBYigO3=PT zo{$a!2(3h^V0CL(1sVd-cwnLB4G<4H4=8D+qQr9mi)Y@`I&1!(bz$NzR=E*rkItU& zJ~PP>K#QZt?wuE15^Kmy?E@rLsu~YJj}VlY_t^I_a;1pXcE~V2MU=uvmx}5=r0Dxa! zH1^#1G>%eucOM&pBD?F%2U>6Kr|)$03I`vBOY-7}@q1_Tt7jMjXi@y+^umN9v3i`F z!uvb;I27(_HTS=aN$Y}nA?WJM5t7Yc_~3L$_%qV9a_y5_I`KM=;g?472_rr?3a zE#F15M63UBoFRY~!;i0*ivR*FBJ2c`fD#`In+QdOz(U}S{nV|k{T$x8Rbe0RrLY|> zA_O)?EHe4WXBq-%A*`I`cO-w}xP%lDI9Mn`iub*H2`!J)9?MV6q|_W#4nNcr$~FYh zLRh;fx+v-Q43Q`VHX$J)(7E;WM+^ag+ZWAA%lKoN5JhCQ+I3(H6TpublyXrD3my{T zpeP}*iI%*3sWEPm5sQvH`1ngty4@Il8Sm;%rx;jK zmL`cs;96;BK#LNjC0q{aJ#m9E_I+dQw$eO_ zLq3HN&Bg-+_VQP!8v)zFC zjC*JpyDgd{wb94Z{F1*G6f1u}(-1&Y#Q&vSI=yD`wNglc3ro!TKXjb9LD>qBL_~U| zcj5#17THh?aCeVy^#&gF`ojr-XW%pVZU*k|u!6qs?3r z)FK41W=1I&rjk=ekN%QCw(q0&7^5Bzj@g;*3r~wregUb>ZIG0V2hi~6|NP9tbSBRT zly+V-cfQk@|FH3%b#^gIs**~MfaoZw0uFgv*6A+i-9vKwglB13GUGP2n7yVk#1D zaUd6q$QS}>Ncg!3n;?}h807+m%fX0Ogz#>GZ5JP&X zB`2EZ-%;bFb;Zv1RPJ%o8Cz}$pvn(0iU)Bg{@xactv_jfo*G{CQF<1AtEwIe`cZg-v7`0%%x7mLwiEQF|XCK%vOs@){k05&xx+XA*yj&@2TH?`JgFzq) zbbUem|2`QC_ncsE|7(gVy+e;fVpeIVW4JTS5(yNB_$4d>6BH* zNNbC1UpOa;<}N{4xkfew(7>4XSh%=UgK^+$P#B<4*r+A5mKX!AHQuu>$U2D-fSC8D zO@;s(9%nE0bGe#r7*+YJMAxblHW&k~Jr3RE&#C?PjmYGW>N5n;1UPz`zohy(0P#9s zKqAfgpAe4Q7G`Uo15ooiw>9%Bwh#fFy|kkyvYevwcMI$G84q*?#yFF~o1c*<)cQTz zcOJXl5J0n>8TZ+XYq^vXD=?$Klf(3#GGI?P2R#9OvvM0%rv6 zq~Z-t#SXj301_W{=Lf%H%rZ%wv`&U0LeCDaM$3MLBE&)v;2fXb)$FqzWovDig}2Jk zr2u$@BQ7Kz{CoYpl@f{)&f=q&nbDs~qjOv5lma0c9P*4_xif$X95jzlp)t_q@|K9V9X(L5Q< zTig8W*K!1KWc~x!cuR^{WEdEM)A&ZOp@>b6!qN#npS<0eV;Xo@@0jiKgghOTs!$nd zQ6!5$PX?_q$x*i6hMBqby*FD+LI!wK6;2F^B)W6rhEIRpm||KuzSk~h=XkVLrPSLc zoa1<{GRRf7;)a>Ce!=C|ol1*$jRpcAdFS|^&zQlVDL>J+opMgG3TZ%(Xr2t`u5Fc- zvs-h+9Np(!_DEm#Un> z)eSS%`}~z}TN^DImH97b@w{7&`PT=I-G1__V&^F90_NnlzjsY5t(x7+Tjt!`pPBSn zKC;7$l%5-;^z@)TvxK78o%awR5!i(IOOISpe_j8vUY-Sn$b=+N+`8$OJ9*W*$^9pI zoz|l^s-gp}Doxw*GmiB0EbBxH1OZ~+m~G=;n$lu*oGncNaNM@zE`9XW-=Hk_f&u|; zl-SeU8|spf!P}?r(UDTcW!0ty2-E2Q+6irJrS!kNaEQLzODi- z4~mf|gszi6bW^LAa2Wys;EZKwEZZ>t`PJKI4orw_vCu*i5)hHq!GMKzr`w;&&%JL> zU2FZ?MIX6moJAruP>+gvGqg zOy4KmNf6e^qJK1S= zc4Gu^2BX5*m#vCnCNBU zEEIMPWY8llB#~~W7D&9D(Lgde0E7B@q@GIvNCK*_n`;rGkou-U5z@?>xyA!9XgIw2 z87{VJmH?DQx-ud}5fXfH@*1<|h5!ue26NVjwuJ=j5lEgL3?Tvw2=t$<;ybpPH8%uc zP)8WwTfl;v%+4(<@L4!Wgt-AQ1Yl5anD&@|jY8m8MJDr&8^$8i?M6P~um_Y zpuPyed-F3PwP^~uS7Tu5aALMRH^DKkHjVa#pCWXYitO>plmx72_9rc2L~k7ZMTSXj+hF1khPU_cU924}^CP&{lTiU5U$O@Mc0=S$O<9o1)6&k%q?6JU$G`PA1A zk8F8cNJvKiTct;3IfPp3L!d5=?9Q!6Jz^B}4FMQ58P;~cJTpID*^$jHU|`VH`2P<8 Xi!=#(2&4;600000NkvXXu0mjfs6b?H literal 0 HcmV?d00001 diff --git a/src/Assets/imgs/status/task_alert.png b/src/Assets/imgs/status/task_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..0a49c617c3443e05021ac3eea73b81b293f5b57c GIT binary patch literal 14556 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 SjC1fM1+4elSv)oOyZk?c7e4p^ literal 0 HcmV?d00001 diff --git a/src/Assets/imgs/status/task_error.png b/src/Assets/imgs/status/task_error.png new file mode 100644 index 0000000000000000000000000000000000000000..bd80d5ed9b4402720a23109278289bf652f7787f GIT binary patch literal 12595 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 CjA};! literal 0 HcmV?d00001 diff --git a/src/ExportOperation/Exporter.cs b/src/ExportOperation/Exporter.cs index 3cd6d8e..91e013f 100644 --- a/src/ExportOperation/Exporter.cs +++ b/src/ExportOperation/Exporter.cs @@ -3,9 +3,21 @@ using System.Diagnostics.Contracts; using System.IO; using MercuryConverter.Data; using MercuryConverter.UI.Views; +using SaturnData.Notation.Serialization; namespace MercuryConverter.ExportOperation; +public enum AudioFormat { WAV, MP3, OGG } + +public class ExportOptions +{ + + public required FormatVersion ChartFormat; + public required AudioFormat AudioFormat; + public required bool ExcludeVideo; + public required bool SourceSubdir; +} + public class ExportResult { public enum Status @@ -21,10 +33,11 @@ public class ExportResult public class Exporter { - public static ExportResult Run(string outputPath, Song song) + public static ExportResult Run(string outputPath, Song song, ExportOptions options) { - var exportPath = Path.Combine(outputPath, song.FolderName); - Console.WriteLine($"Exporting to {exportPath}..."); + var exportPath = Path.Combine(outputPath, options.SourceSubdir ? song.SourceName : "", song.FolderName); + + Console.WriteLine($"Exporting {song.Id} to {exportPath}"); return new ExportResult { status = ExportResult.Status.Failed, message = "Unimplemented" }; } } \ No newline at end of file diff --git a/src/Settings.cs b/src/Settings.cs index bd5b41a..5fc72cb 100644 --- a/src/Settings.cs +++ b/src/Settings.cs @@ -23,6 +23,11 @@ public partial class Settings : ObservableObject [ObservableProperty] private string dataPath = ""; + [ObservableProperty] + private string exportPath = ""; + [ObservableProperty] + private string concurrentExports = (Environment.ProcessorCount/2).ToString(); + [ObservableProperty] private Theme theme = Theme.System; @@ -34,6 +39,12 @@ public partial class Settings : ObservableObject case nameof(DataPath): Console.WriteLine(DataPath); break; + case nameof(ExportPath): + Console.WriteLine(ExportPath); + break; + case nameof(ConcurrentExports): + Console.WriteLine(ConcurrentExports); + break; default: Console.WriteLine("unknown variable"); break; @@ -66,7 +77,12 @@ public partial class Settings : ObservableObject private void SaveToIni() { var data = new IniData(); + data["paths"]["data"] = DataPath; + data["paths"]["export"] = ExportPath; + + data["export"]["concurrentOperations"] = ConcurrentExports; + data["ui"]["theme"] = Theme.ToString(); try @@ -88,6 +104,9 @@ public partial class Settings : ObservableObject var iniData = parser.ReadFile(iniPath); DataPath = iniData["paths"]["data"]; + ExportPath = iniData["paths"]["export"]; + ConcurrentExports = iniData["export"]["concurrentOperations"]; + if (Enum.TryParse(iniData["ui"]["theme"], out Theme loadedTheme)) Theme = loadedTheme; } diff --git a/src/UI/Views/Export/Export.axaml b/src/UI/Views/Export/Export.axaml index 97b98eb..bf9cb71 100644 --- a/src/UI/Views/Export/Export.axaml +++ b/src/UI/Views/Export/Export.axaml @@ -10,6 +10,7 @@ xmlns:views="clr-namespace:MercuryConverter.UI.Views" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:util="clr-namespace:MercuryConverter.Utility" + xmlns:merc="clr-namespace:MercuryConverter" > @@ -20,11 +21,11 @@ - + + - @@ -64,7 +65,14 @@ CanUserResizeColumns="True" CanUserSortColumns="False" > - + + + + + + + + diff --git a/src/UI/Views/Export/Export.axaml.cs b/src/UI/Views/Export/Export.axaml.cs index b9f2fae..0a69ff3 100644 --- a/src/UI/Views/Export/Export.axaml.cs +++ b/src/UI/Views/Export/Export.axaml.cs @@ -1,16 +1,23 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using Avalonia; using Avalonia.Controls; +using Avalonia.Data; using Avalonia.Interactivity; +using Avalonia.Media; +using Avalonia.Media.Imaging; +using Avalonia.Platform; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; using MercuryConverter.Data; using MercuryConverter.ExportOperation; using MercuryConverter.Utility; +using SaturnData.Notation.Serialization; namespace MercuryConverter.UI.Views; @@ -21,9 +28,22 @@ public enum ExportStatus public partial class ExportRow : ObservableObject { + private static Dictionary StatusImgs = new() + { + { ExportStatus.NotStarted, null }, + { ExportStatus.Working, new Bitmap(Utils.AssetPath("imgs/status/indeterminate_spinner.png")) }, + { ExportStatus.Error, new Bitmap(Utils.AssetPath("imgs/status/task_error.png")) }, + { ExportStatus.Finished, new Bitmap(Utils.AssetPath("imgs/status/task_complete.png")) }, + { ExportStatus.FinishedWithMessages, new Bitmap(Utils.AssetPath("imgs/status/task_alert.png")) }, + }; + + [ObservableProperty] + private IImage? statusImg = null; public required Song Song { get; set; } - public ExportStatus Status { get; set; } = ExportStatus.NotStarted; - public string? Message { get; set; } + public void SetStatus(ExportStatus status) + { + StatusImg = StatusImgs[status]; + } } public partial class Export : Panel @@ -39,7 +59,10 @@ public partial class Export : Panel RadioExportAll.IsCheckedChanged += OnExportSelectionChg; ListingTable.PointerPressed += OnClick; - NumThreads.Text = (Environment.ProcessorCount / 2).ToString(); + NumThreads.Bind(TextBox.TextProperty, new Binding(nameof(Settings.ConcurrentExports)) + { + Source = Settings.I! + }); ToolTip.SetTip(TickGroupExports, "Group exported songs into subfolders named after the version they released in. For example:\n" + @@ -70,7 +93,6 @@ public partial class Export : Panel public void OnExportClick() { - Console.WriteLine("export clicked!"); Task.Run(ExportFlow); } @@ -98,7 +120,6 @@ public partial class Export : Panel { ListSelectAudioConvertFormat.IsEnabled = (bool)RadioShouldAudioConvert.IsChecked!; - Console.WriteLine($"input threads: {NumThreads.Text}"); BtnExport.IsEnabled = ( // ensure we have selections Selection.Selections.Count > 0 @@ -108,7 +129,8 @@ public partial class Export : Panel !(bool)RadioShouldAudioConvert.IsChecked || ListSelectAudioConvertFormat.SelectedIndex != -1 ) && ( - int.TryParse(NumThreads.Text, out var thr) && thr <= Environment.ProcessorCount + // enabled export worker count is in good range + int.TryParse(NumThreads.Text, out var thr) && 1 <= thr && thr <= Environment.ProcessorCount ); } @@ -128,15 +150,34 @@ public partial class Export : Panel UIExportingMode(true); string path = await Utils.BeginDirSelection("Choose your export path..."); - Console.WriteLine($"Exporting to {path}"); - int i = 0; - var mtx = new Mutex(); - - foreach (var r in Rows) + var options = await Dispatcher.UIThread.InvokeAsync(() => { - Exporter.Run(path, r.Song); - } + AudioFormat audFor; + if (!(bool)RadioShouldAudioConvert.IsChecked!) + audFor = AudioFormat.WAV; + else + audFor = (AudioFormat)ListSelectAudioConvertFormat.SelectedIndex + 1; + + return new ExportOptions + { + ChartFormat = (FormatVersion)ListSelectChartFormat.SelectedIndex, + AudioFormat = audFor, + ExcludeVideo = (bool)TickExcludeVideos.IsChecked!, + SourceSubdir = (bool)TickGroupExports.IsChecked! + }; + }); + + // process each song in parallel (for audio conversion) + Parallel.ForEach( + Rows, + new ParallelOptions { MaxDegreeOfParallelism = Convert.ToInt32(Settings.I!.ConcurrentExports) }, + async row => + { + await Dispatcher.UIThread.InvokeAsync(() => row.SetStatus(ExportStatus.Working)); + Exporter.Run(path, row.Song, options); + } + ); UIExportingMode(false); } diff --git a/src/Utility/Utils.cs b/src/Utility/Utils.cs index 556791f..0406921 100644 --- a/src/Utility/Utils.cs +++ b/src/Utility/Utils.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.Platform; using Avalonia.Platform.Storage; using Avalonia.Threading; using MercuryConverter.UI; @@ -38,4 +40,11 @@ public static class Utils return dirSelection!.First().TryGetLocalPath()!; } + + /// + /// Get an AvaloniaResource asset. + /// + /// Forward-slash (/)-separated path to asset. + /// + public static Stream AssetPath(string path) => AssetLoader.Open(new Uri("avares://MercuryConverter/Assets/" + path)); } \ No newline at end of file