From a2e4475bbe4e9c40f7e96d4676d12aac415f9398 Mon Sep 17 00:00:00 2001 From: givememystuffplease Date: Tue, 20 Jul 2010 02:49:48 +0000 Subject: [PATCH] Finished code for folder reorganization --- NUS Downloader/Form1.cs | 72 ++++++++++++++++++++++- NUS Downloader/Latest/NUS Downloader.exe | Bin 423936 -> 424448 bytes 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/NUS Downloader/Form1.cs b/NUS Downloader/Form1.cs index 745a093..9104004 100644 --- a/NUS Downloader/Form1.cs +++ b/NUS Downloader/Form1.cs @@ -346,7 +346,7 @@ namespace NUS_Downloader { // Show dialog for opening TMD file... OpenFileDialog opentmd = new OpenFileDialog(); - opentmd.Filter = "TMD Files|tmd"; + opentmd.Filter = "TMD Files|*tmd*"; opentmd.Title = "Open TMD"; if (opentmd.ShowDialog() != DialogResult.Cancel) { @@ -2442,13 +2442,81 @@ namespace NUS_Downloader DirectoryInfo dinfo = new DirectoryInfo(directory); if (TitleDirectoryRegex.IsMatch(dinfo.Name.ToString()) == false) break; + + // name is XXXXXXXXXXXXXXXXvYYYY + if (TitleDirectoryRegex.IsMatch(dinfo.Name.ToString()) && dinfo.Name.Contains("v")) + { + string[] title_info = dinfo.Name.Split('v'); + string titleid_dir = Path.Combine(Path.Combine(CURRENT_DIR, "titles"), title_info[0]); + string newfull_dir = Path.Combine(titleid_dir, String.Format("v{0}", title_info[1])); + + if (Directory.Exists(titleid_dir) == false) + Directory.CreateDirectory(titleid_dir); + + if (Directory.Exists(newfull_dir) == false) + Directory.CreateDirectory(newfull_dir); + + string[] files = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly); + foreach (string file in files) + { + FileInfo titlefile = new FileInfo(file); + titlefile.MoveTo(Path.Combine(newfull_dir, titlefile.Name)); + } + + if (dinfo.GetFiles().Length <= 0 || dinfo.GetDirectories().Length < 0) + Directory.Delete(directory); + + + } + else // name is XXXXXXXXXXXXXXXX + { + string titleid_dir = Path.Combine(Path.Combine(CURRENT_DIR, "titles"), dinfo.Name.ToString()); + + libWiiSharp.TMD tmdfile = new libWiiSharp.TMD(); + int count = 0; + + string[] tmdfiles = Directory.GetFiles(directory, "*tmd*", SearchOption.TopDirectoryOnly); + if (tmdfiles.Length > 1) + break; //Too many TMD files ? + + foreach (string file in tmdfiles) + { + if (file.Contains("tmd")) + { + tmdfile.LoadFile(file); + count++; + } + } + if (count == 0) + break; + + string version = tmdfile.TitleVersion.ToString(); + string newfull_dir = Path.Combine(titleid_dir, String.Format("v{0}", version)); + + if (Directory.Exists(titleid_dir) == false) + Directory.CreateDirectory(titleid_dir); + + if (Directory.Exists(newfull_dir) == false) + Directory.CreateDirectory(newfull_dir); + + string[] files = Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly); + foreach (string file in files) + { + FileInfo titlefile = new FileInfo(file); + titlefile.MoveTo(Path.Combine(newfull_dir, titlefile.Name)); + } + + if (dinfo.GetFiles().Length <= 0 || dinfo.GetDirectories().Length < 0) + Directory.Delete(directory); + + } } } void ReorganizePreviousFolderStructure_Completed(object sender, RunWorkerCompletedEventArgs e) { - + WriteStatus(" - Operation complete!"); } } } \ No newline at end of file diff --git a/NUS Downloader/Latest/NUS Downloader.exe b/NUS Downloader/Latest/NUS Downloader.exe index 67224e311bc15c2a8ce06e6deb36c89a1c7074b8..7832479be866ed6977a8d5e07fa12d6b42bdbb48 100644 GIT binary patch delta 21031 zcmb_^349Y(*Z#dX=`>B(G-;M@NogseX`z*^Aj-bAbffH>D5!v7>a?I(AQS-?K$Z~( z0bd326~v82gTA0Bh#(+~D4QUQ%Ax`SE`Y-SoI8_bQtHe)>S*B$<6P|MckI$|G63Ho}P5Wx*zm&7xyyYaemR8%7qvp!KTek$45=hG8XkM&u(R|C4@ zpIFjUVzl0*u~B*LnfMnss|c7~m0kohyY$8SOj;;iSf4_lkc{tn=wzwod)f3AX~=tx z=w@m9dtK>|>vp}@hMKKKP-7Da0ctb~c{V1xC5JyP=g|P4XVY2Jy%FG3oD$$b*F&wK zZerqmX_(*UyQ~o@yuKJJuA)RBg=-)q!AeFWALei(Fs$}<=t;Mi>(^=ZwN9btI3{ij z*6bOmR$F8gT|L9<1--kF;SqS61>G;dO>KQhEry9!sr`mR`j9kXLnrg15)5o*Ffb;@ zNqaUl={2#GRC)VA&LEyfjMcsc8sZEfS?v)hdY6MpL?w4GD7mY#QRH}THu*9!iA$3M6WhRYittn9p$*S;zgiq$;}t7WxsqVr1_5g$m^NzhY9Cb;K;*eH0d*m3D) zq)KeQZsCXb((GPPcK-}}&6Sq}qn7zj*y?=u+uV(I#SO6Ury`^E=oFKPA0 zBKoHE`^Nj|5vlJcx9dDsfnAu_$P_Pp(zm6QkDAa6|CLIXwD=*x=fA$8=vQW=vfJVhnjP zVt*hKXyG?F@x>%78LAVFy~7+wi4A~Apq@@Tv1fhJql(C_6BpGNZBRt9I`IUQ)VNtK1g`h~ zg3Xe4d@)8?fphY@bob8Y^rlp`GmCbW7VPW+OZ0a;+hwfmL#nC^a3+gi1d7q(^*}L3 zkg9gurGC3iLR?>{#wtC!s}M%xvON~*Kf5~8=F($ddZfm?$K6RBKmW_b$hBam_coRG z?MarJeR&VJc$sdHOnWNo+hozT(zZQq!s&K)gHz6^QG~;bn=@lld)fY)_U+Gn!4`mgH}qjq@NEprlTe6 z;ZC%vH1Kei?VbM6P+Uda{U9&V;%9(k#M9D(!-biV13+ei3ts`EBgG^noEjoix^&no z6d>JRia9dK*$#@z=D@@{C>wY`1(;8y8Alpq-U{j*y9wip9CyPKE>;W-S$-nzJW`M~ zPs5xGmc^xAL2(cSYmN|SNv@-ASa*6HZALFilaA)mCerGo_s}uYxubpV-Z~gGhk$0y zdoZPpf|x%9+5%?@BN4>rFi^br@v?Uqe28s8=xi{nKdv$5(u8kcgKRmEwWTv&9ej*t zy$@2g8MVhSR#m}XSCsGnWM;doMcN@55Gx4C5dNNx;T69R= zPmZTUq>oQ#l|S`Rz&wW#bH1LWK^&7|TZ47!2Flb`%N%8jf^`cQGP9xZ8l3rbV%o#E z$$ylZopPtP1Hp2W(Z*LcDA>hr3gZwCd470@?pb&Ahi24r18SQ*0g~)qin~xwOCm-|4bC)5Y(ENy z&Mjy#oDWL1%O6 z0qL2uE}9^%I{Sd294;i&xy4C1(Xo9dLERgS4)MIS`J9Va(2fpWmvLT4TZB5JHN<8X zOhR5hboSKILI2|BP&p9!fS*dDgO=iPY0Xcm^py1FPnB?O@bjA**(vGp&o9Sb2vs2_ zOVfYxI7%N0IasbKpOtp}k{#c2OhD>^bKsNG&0mrmy%NTK8$|9okZ9$^47$Hd?Jn4S zO~wZ7nb=!X-mfVe9u4V?(UiAq$}!%MPK~C#QB$^81$1&Ag1-F;2DzeJ=Lv3cTY4bO(#){lF8`nWx zzpT#jFPRd&eQ`+X>qlkMTNm^BZ;miUh_j(#CcVwK*!>Y`E4*Ne2(`)pfVaaWXh}gK z4WiO6AH->nB&JBS$!bpYG%=Y>iHpq!Vlq@uLlLYICc&h{$(?xN%x;9{C))a(6HSRe zlj-?UH}%-0ysc5**&uv=l(irs%KN-hys1}?pVPBPrcK$GK5@us*y zAGNvb?_0NWj0AQDBDK9zFmx_vTt{HEVTST)>u87I8~GjeYd^pg8o7-7}( zfitpdcp_k&v>HTe5%1ktH9TN2PQrUgRt+1ranifIxIo%@C50}O&RjWalTqU{PS;^^ z8!yVz;j1Zm@N~pDX?sYvLy;l-MTp(0T4el|P6}}7= z_k(+5AY)Q_O`}Fx6hQj7bcXF$aM%KX<7*7<_=o;MB5P72{~IdHbmKwO6=hoCnhZpG1SAt}2lz|l~sehuW_ ze=9r=$Y3-GoH5S!N-RD#7-YrIHL)P!x(-1*9bw@hpBxB>TRjIi*MV@5uzA&R5I{I$ z{cvznxL=3Ryep}Xw*ncPca;(?0_RQV&9G!4DW22BrDBhk)xZh};zmD{5Hq zXp|BNo>w{lT1VfTiXA-9(!1Y+GK9sWLW1|3GcPO_kYbV#}+;#uzKHB6cLE`pyHYk;aZGdtcsVlAzmCLHNBCMGfJa=73^KF z-mZ>3s6TllEoY8K9iKqlNga7Or+osozphdL?H|;U2lbf0=K9nIZ$Ks)j_`qYAaN&8 zT=8@Caaoy6AEMJ(Da7J6p1@I<%*7)P>wdCWjiF)p@~F&OCPR>TyucNbTgU`*O($v-xMvm;%trO zRYpO!xPM*1nj|E$BMAg3>NI z>Z*Vnyf_Zc)Xf$NmmlJF_EOhSc{8P{IkPoYtg*C5P5NrEHDW6H;q0X&0Om= zIgpDPRGId8s69LXp-SY%LGnDPa`*&|K5Q4^RVw{<4rsR?9`pw~5(#mc#t?}+#m*HE z%BebteLYkb*zIv9-nx5-y*NsS7_LaP#zlE4&2=9t;trI?KW; zMouizRE&gc8P=N|)+NY0)3o)954X~^0p-DiAp$rU!remnITgnagd@iZG}EU&5urew zqX`2EXIi}&IGGxVL8(kViXs4ya3Bx&h{H0NS_F_<<&-`wa7;&5d`sgS3D+G`i+u2) zj`t02zh-*z8wq84{RA?YUI~$*>7|jvct`2IAPr0}jr1EXRfam!FprKyZ-jLk^5Vyu zh>_s)$Tb~xwI@JcN0UI#5Cvz_SMVLYUOXlrjHI4N)LR)0-5KQ^8Rid3Q8ytp$dPct zen6bIFlXF4E8vWqwLmj_CPHlKRyf_Iz2DTV;NcMtQ9q*$r(j)V*D{D?C> z%saQv40z{e4{N+55geiCeSl!VKoshL*`VYcdnY(!5I{Vhuy~LZPix{q;!fG%)(ryj za5LSLfo#CqflM$U1P~8C2@bop`kYV z-~#~smN4)HfV0g4-nh{RXrxXXByifi6HRUO-}2|tv`gUL?-)AR!yU-!G1Mt2jgULV z(8h)5kXO&sKZ2s&`>7H)0@qROx$wIl zSFO=M0lafuy>=ogzJ^+tm3{ss5^rhDkhsl^Yn|4ZokFu;HD*XSN7Z-7)f!IVtFIB@nx};EYnA>>y$FZdFo%z~=o-3)JNVC0-W@9Kq!TUy{M)1YeI? zZm^4X{^{KovQBm0t8Ijjdl%Cthf;~vI;-KKl6FZ^qEH|6VGjjY4g^l0v$wX^S|r5| zno7A=alH)}NMGno!fnQ)joKYZ1a}w&u!_OMpzs~$3Rn7EX&?f1jJ<_L^`MV5JX5R* z3lT}N+NX&T8Gh_{#o)rLZ9cD|Fwlj+V0}^E?TS-G!GVIn>fI5NggvrTq`xZzi~|Pe z$^1l`9d@4N5~p2>0CpWb%!hHX0|q$pX-x}I$!QN*s!wP+*&;0V1n(E22$Q`#DTxl$ zXN9HuL?X30)DsR`L*C&@rkeL%a)KFF^4+rAOg+9Ym3l6q;~3Xj%$xRPjJ&u^6Cqa| zSua9PwhTnbZML9|Iu4NFL1K&uf`j71Lx3PUxQSMyQ_n%`xt4k=MBt1G-`kKAk7)wq zN_=mF76rC8PFlPxo`4ss>Q#V0Bol_kou8EoHK!)U^xUWrwYb z$fpOsJ>gZ@ri8{f63+TZ`lAKN-WA9%>e#*em530yze2wd8@`>(t866qbkJ^L`^pil zBO%}zkyxN{jD+i53^)9Cf}0ftTq6p)MiAy239%bix`xLhCnnRTVL=>3jR6|BNGM=ZmsSEys@rC=y(@ASyc9C_t%_tUxS1zd!)MOtIS2H!~333t8{@=TIQ?U z80fRW;X$nk?_$EM#w3R`*!FM+n*a>|7E!GT@5aKFa0>}%aG?%oAer@;H*aIs-p1hS zhV|fA532jsw<+Pm5bg}8XE=jnKAgD{Vr=ejcs2#mi@kafKnOQRGUz`qN zx3Y+f^H5b;!(df<8&{P-9(EGU8;Zl>{X47s6fajo*`}6f){!c^T3!NWhgx0*7!`kAF|U&;LBzNeR0IekQ&0sUjEAE(&@luEzbt0bQHrOAGE`{+ch)T0 z2HaI-ad%_0=m$y`oO0KObjAO5Dh4a5zz|GEi7lqTSZ>3`9iYI2MFVZR<_?o_fn^P?k?Jr zo|9e8pnuQ%2R5Tdn)(wM?lXFb0E>V*pYk7crNan@HTGwDN^@$n|AJMcf;pd&t}wb~ z6jxu6-)TkSJb@qP9p;>Q~IaerZvqrYUsr+X~XE(G{opTDeTcGeAtRt#0}|F zAqSkus84jNPgK??yc*(2A+P&-O9)a!^Qu?XC)U*`cGf4ps!yD*Pu!?aIHuKWQH%P- zp!&q)8iGfz!94PJ>JwY)6UXWkH$sH}$lcVWW9I4dFZWU>E%3*-qY;c=_nSM=ibxCm zQqTyaFy|p=n`DQsW^TgdC%V&4j52vscbYEG=|Q9AAG_1ILLKVrEd1q47(C3=O1Brj zdG^rGUYVUy-h=M;fh2ZZ8|S=|Frm%jt6cf-?bV_vMd z8{~Tax~eB)au4A6yZO=LLHR-{Y=LKFV;N10vO*;I+Xl0oUq&-&E4gM^<6KD@PzXCSsYPm}V?9@NWqbq2WrlH1(2caFT7CS=cu7hU4>AVpDLDV>u zKd+!3&wpi9FE?^pFPi1UkYWt(2jKofT|Y@mzCfOcA_R`WundcTJqJf1B?IunvsJeo z-hEaxtkZiUM5V71l`e^kcz%?Pzm97*o6LFXU|%@1Uavg~gwku!5u1C_0k&QBRBSPx zF-)|``IR*3?!mLd?QOB1_DrmA0_yejm^fITQc0T?{0)OiJ8YP{5{61JzS~EY{Cy?u z;>NeB|C^D7qvniU(Hm9?tNd7RYBfJoF9`9|SquA8OE%=e3?oS!hEg}ab&Z*VMMS(R zALtGHrCYwyn=VMOK+h1C5*R8E%CGdHb}R33xTP^hD4mZ*uTB244|OJ%&kpw>&XsTV zp>Fds7?xVkU@EuiOWhIM!N4Ie?nkrb*?sAFI3Vl$(FdYz=o#J|kCt8i;BYdlAC01q z%C7!2Ung#V9@`@y>qk2>Hb>6rPxsND@|FIyiyi|;fnDxBfTo$}&$->}v;nk+9+0mM zfOFdlIb|Sy0#2nb41~4rUir^~^l>^>t{Oz0&4R6T!=nILZJGGd-2Y}2`ac~+8&e@> z9!x>I|JT8ED*VvKUo(_`qo+CYvEejXesDN=;N@?i3F}AD<}}BDZUmjLr+wv#qi7Ra z<6k|BmN4p&uRQ{1(PV$w7xCD{I72k3L)tdk9H|Tha3Q z!1bvlV>(fi09lwHv zlB80UHY?r61mY`QtcxQTN}VZjB-2+GT^2{$lqKi{(z`6SP#|?>ds@a3xeUX47p?;N ztn6G1fgIx3i~LH;kxAm$Jh_T}AUBgSB&wqO5d=U$u@pHQu>B}kfhsb%l*=fs&!;jdS=AG=>d+m62HEN ztfVm(MRqHF0$D{@-sA7JS~r;b^l%%2Ka{zWwUivDg(@;M6xb2ElB0#h(9j!kgkDl* zDGl2SM`;4|4BF*#w5W@M+BED4vd%>cs^qc}rHJateaSsQmQ|*p2OE|O-_lt=4rdT= za$DgzZ3}}4D;)=h$LYHj9NAyePawzX1dis}?{B*~<~SYE3uOyQUBkYh2@5DkQp5X% z6Vy@}K%<2p=wKDS)=(7A(9J6HH=H1xqY1rzit4V0KH)qa)>}c}HJmQ|OeY4>bHXol zWf093F4C<*v_QB-e^$}?hD(IY)X+z%<$S|ege%k)M6U@~X`zZPHhe?)jn3)=4-&8y zLiQTrcX~n{KNkL^BNb%mm;HrsjV|D52G7hj>f=bs%r*KFM^CA; zl^jWi9ofgh?y8E8Wq%JSx*t5qf!}}_&SjqmXaR`muk2ri>$J0qVjCfXoQL$;OGTJK5#gm!>y`tCP!CQBy*HCK&f;UN3gQ;K-Y2v z%PB{naI{`U`#JhvMMpWZ3{*6K;;1u6KFM%}!x~k1i=!1Pig#n{52&aCM|ya!fq81q zQF9d)b2LIlLpXXtMPoVIs-ilMt}4i9n8RTfJR!hJU*V{?iq>&7jiZHzsvKA3b-GkR zWOB|Va-D7rqN(HtJsU(>k$=(VaLbOfX->{T@;Ci9h;kxtQTr>%P zPdZIzTUF%9eI_!6eXF9(+~)yV9#JaI%Uuwe%5qiIDt8H>844mDa`CC#A{712DXrhW1 z=RId=z}Bm1W!^$VBX(9r>+@bRG-j!f^03L4yjKl5tUQQb*5|R!9MzG-AS+;Y5jE?` zMX+nmssO=aR7Y+?r7hUcs?gZvIYTS9XriL(HLo_bWi^u&WN%VM+Osz~nqlZCTmy7g zMI!)pU|ExSFou_e7&xj8Q_<^yIC6#s&w`M~3c9KLuSZBm{_?s3piM*=7~_x`D7aJFddMAneV4R?&kX>%)vs z@kkBhK-P!ZRWv>Se$tmsRFRZl1?UBi7Lu*{Lx#R=eGq+T=*PNGQ#x&{{*0kNTdAV8 zzQl`$0n9yJ5x$y#!!VTf4k8kDA6v=M4Dv3xAIA2o$QJPyxu02P@X$zh#9BZFDmoJR zI-s^H+LS*`{{Wk-qAwuq;p{3$b!1J1?{$D9pT%nG$btOGs1aXUrj+E2Vc=jzv%A_36{!(OyzX}94UdJqwKX-$!iM_+Mh^LE|k`LI^ zZC05-U~}8NYhJ@>>l=pF{4{M6@J#A}>ru0VVmX6f3;4A)Tu;eQ?bS8%ttpy7>hwE` z&Y2s7vOZ!TIaYMZypNoR%3stej2zu9VIR3tluqmPq_~FcBe_M}V+(}F#lvFvk#@z~ zbvyI}ivKY0(2oLX2Ax%W6KYrjn=Oi9n}u^GhNvxfA55RX8J9ebKB6|}5pI<24>`Y8SV zAg!SHbV;^U2-}KXAblLHPLhB3%(fH=>v|50r4bn70J;%0qaYNQ<$gM#*!KrSdZcHb z#X&FkY;LL3TT1SRYx9zhmVKnCWIMEP09@m_WQ3(PIaJaup*8uVBf58i;*q_}i4FoR0B8^OT{ z5bPt5$p!m$4&Q$)gUKtUTPy=2-YlI28G65TDM=h%Z_PMEqJD7b!PbHMee zxq?@>kMt|ABCW~ra!eVXavDdjDzCI>M1EX8(B7KtlQX{3r42b=KHgrz&m9#6&l?rw zT=^Kd{s!09P+bkb&P+TEgBZpovsHK_Dww-shy5_Lb+7#zX;~3#yhb`z93&kghgIC` zxSy@>@j6`hwcg-g@|CV3_0=RdAt}TF*G%%Xy$Pu$k3jiu&del}pzPs%Gkz`R*G?oA z_(8lpoHU1WH5rpSU(lYzEQ`qS|< zZNv3f;y-H%AH&HDwx{$r;=iFuP=Njs8uCml<=kaR04$~xA% z*LuWy)_Th-*y3$zwg$F)Y`ttH_F?wX_A2|6_9=G1eUp8Q{gC}nJ9R`mx;T0|`ZxwV z9&kM7nCy7g@q%Nq<88-Bj_r;w9mgE!9akKGIduMR2Xz@y5$i1Wq=WL<6T1Jzj)i9- z`LL|vQZ`F&aZ=Zsr6&2SPUPu2zN3 zTXraH(XrsJmi|L7eP*;!;vN5BZ?FHlN8dEk?{20a);-TrKE82c)OhH>d@_lUNJT*WYgXu^<7q4Zrgi!Tk^VCu>g(VEHQCYq z-TsTa+*R`G%Z;Xup1vmA|HNndRpz?{7fDN;`Zxcm8EIISFF36KOvnrTBZ=_V1(^x||4AaqpYV?)_Nwe$X{O)a|HqP(ofdvL z@8Or8eOJ=S4NvGFPkdATcM3t9e98X}#d#T49sKKs^D@lx{uBD1{R)*$zzqWkA{iM$+#N&MwHmMi`$zff4nL+J7y$5j pC?kTLz-Fj_Pait1_a8bP(Rh9ov?&JI69xWd-Gx#rSG~nn{y#;XfIt8M delta 20297 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

k5872G>LqTY}QulFdvYPnOKn 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