From a0a44f6f9a336deeceee60d0aa36f407799e77a3 Mon Sep 17 00:00:00 2001 From: Stewie Date: Sun, 2 Oct 2022 08:18:37 -0400 Subject: [PATCH] Updating extract_Iso function to use pycdlib --- ToolsTOR.py | 2 +- ToolsTales.py | 73 +++++++++++++++++++++++++++++++++++++++++++++-- piso.exe | Bin 19600 -> 0 bytes requirements.txt | 13 +++++++++ 4 files changed, 84 insertions(+), 4 deletions(-) delete mode 100644 piso.exe create mode 100644 requirements.txt diff --git a/ToolsTOR.py b/ToolsTOR.py index 01bdb54..5d52980 100644 --- a/ToolsTOR.py +++ b/ToolsTOR.py @@ -36,7 +36,7 @@ class ToolsTOR(ToolsTales): def __init__(self, tbl): - super().__init__("TOR", tbl, "Tales-of-Rebirth") + super().__init__("TOR", tbl, "Tales-Of-Rebirth") with open("../{}/Data/{}/Misc/{}".format(self.repo_name, self.gameName, self.tblFile), encoding="utf-8") as f: diff --git a/ToolsTales.py b/ToolsTales.py index 24c7145..a5d1014 100644 --- a/ToolsTales.py +++ b/ToolsTales.py @@ -16,6 +16,8 @@ import comptolib import lxml.etree as ET import string import pygsheets +import pycdlib +import collections from googleapiclient.errors import HttpError class ToolsTales: @@ -969,7 +971,72 @@ class ToolsTales: # def extract_Iso(self, umd_iso): - print("Extract files from Iso") - subprocess.run(['piso', 'extract', umd_iso, "\\", '-od', "../Data/{}/Disc/Original".format(self.repo_name), "-y"]) + + print("Extracting ISO files") - \ No newline at end of file + iso = pycdlib.PyCdlib() + iso.open(umd_iso) + start_path = "/"+os.path.dirname(umd_iso) + extract_to = "../Data/{}/Disc/Original".format(self.repo_name) + shutil.rmtree(extract_to) + os.mkdir(extract_to) + pathname = '' + if iso.has_udf(): + pathname = 'udf_path' + elif iso.has_rock_ridge(): + pathname = 'rr_path' + elif iso.has_joliet(): + pathname = 'joliet_path' + else: + pathname = 'iso_path' + + root_entry = iso.get_record(**{pathname: start_path}) + + dirs = collections.deque([root_entry]) + while dirs: + dir_record = dirs.popleft() + ident_to_here = iso.full_path_from_dirrecord(dir_record, + rockridge=pathname == 'rr_path') + + if self.repo_name == "Tales-Of-Rebirth": + relname = ident_to_here[1:] + print(relname) + else: + relname = ident_to_here[len(start_path):] + + if relname and relname[0] == '/': + relname = relname[1:] + + if dir_record.is_dir(): + if relname != '': + os.makedirs(os.path.join(extract_to, relname)) + child_lister = iso.list_children(**{pathname: ident_to_here}) + + for child in child_lister: + if child is None or child.is_dot() or child.is_dotdot(): + continue + dirs.append(child) + else: + if dir_record.is_symlink(): + fullpath = os.path.join(extract_to, relname) + local_dir = os.path.dirname(fullpath) + local_link_name = os.path.basename(fullpath) + old_dir = os.getcwd() + os.chdir(local_dir) + os.symlink(dir_record.rock_ridge.symlink_path(), local_link_name) + os.chdir(old_dir) + else: + iso.get_file_from_iso(os.path.join(extract_to, relname), **{pathname: ident_to_here}) + + iso.close() + + if self.repo_name == "Narikiri-Dungeon-X": + + for element in os.listdir(extract_to): + + if os.path.isdir(os.path.join(extract_to, element)): + os.rename(os.path.join(extract_to, element), os.path.join(extract_to, "PSP_GAME")) + else: + os.rename(os.path.join(extract_to, element), os.path.join(extract_to, "UMD_DATA.BIN")) + + \ No newline at end of file diff --git a/piso.exe b/piso.exe deleted file mode 100644 index 52e2a28f8e36738cc2168fd65aba79d481438aa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19600 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 Z7fayL?yC+o#|} zv18ByX?3PxLs_Sz-7yC$UI;w9$ev<&R%d1Nr*p@XXDr>fy)N-mLBWbHIVrv8o z{q`*xP2G>xM(vsl1GhwJr2Fn&dvtp#mp6E-E*e)%AGs!aozepjmv?L?HD6=XxMWM7f zRUtnwr_#{Xz!{{MS=a`qMFCbe29ze{WF{*F6lLZn7F8-ZrxulDre!9B3ta_Ah*>3- z3c3pJrl11T(Adz(5K>+mfD24RBLhoVfjQtMI-z27db1pZ*m|9fmpG1G&zKyTAXoV9 zk^7e05x&YvSzGo;Ne6yk%qvlzvHOPEYJJ6kTk}3Yk5~8OJ~aIVXTju^w_AaOQmd>}QA0L}WFIzOywuFLQJ{ zyGq~3>V1Z~wt089&UBjZoj5gKrr@1;?d|TTiJcY4Go;rGR!GfQcO=w3_~vG#YYX|@ z9F9(()O9g<`ON56)9}l$CMP8-a2+=&R}u70YTmZ1I-|+(UFxa(Kd<&~GQHEIou5?{ zlh88f6VH^m17Sf79%nB9SXz5e|GMxKixn+b-F67K9g?2=D$3&S?Ax$nv)Q1DvED!* zR*En(vM3uUVlQ@#5ak@Wu9Fo86|NixY>bTmnHU)iazI6l0!ykvvOyvncS4&7W7`i` zMs{&#gCImP#l$EED|gGw%RwfBQYok?(+8EE8Zd`2F&W56;Zg}IJ`F&&$+Ku0s2iv* zP+p+eCJ!qf4MCXsC6NCTF?TO=ARw`E^u6+0J8!6^c%io1lkEcd0 z?=!gM5|wznApe#k>mj}3U7jB=PW~5r@@yRQgU)&OC34rlTXe6yc7C_1zH!8gNnsaH z_*yqTt85Ybqp@M5`)AojcJJD6E~{S>w$y%Yi=O7anmsF4Ew*K0e6?%xBEA46O>v+0 zCsu;-*OsVu&SuTl-*S@CN4=VRjU=nmf&@|fTPJ_}`t<)UN-zJbKIQl>Q@#$*f4zS- z)_V!<<=s4;^_~ll=r1#E<~s)i7(Xr)j1_tMXs^0=$Ug0sIR0gaOIW$yPe0tLv{AnN z^WL-0S3dfzwBOp@vOeY01rbHVCha2zP1*;T7#R&3Cl7cF5lb5u(SBY~U?70hUgj|b zH9sWbO1+muQUytZ``_6TV7b`#khXsZ;ne#N;JaXibpecYMWfMOkVlm>GSKV{7o0kPp;ou z={afJAr;e{#p3nL7CKm^)-_CMU&NngP&t*#%)-QI(D;vy8`@Xm6kudo(D;s}@wGwY3noTJ)Zz@a52QGw zFPrt}#DY0e%dMLyZHZ{p%NJx45f3|2YO&}0`{nB`Qdqc?yw0zlBDZiFJpgnuRbo6=(i&ew}Q-Z)!)@(K}x@dS5yBf^%a0)|N`su8K91M*YeMjU1&T`BvI(JoEFK z_WSKOo?Mm96||c4ZSu)Ek3HV)4(7XJHodLl=t6T?^QGLNiLn@?>IU`1(OV~Jpz2(K zCEg&`AR0A0lhdt}!r86UgEc7_89{9a134JqfU!*o)Lnk?&+ubo=#*IM*o`5wp5nu{#z8%mQFknd z1p&CpQu=Cx?o|`X7$etzd=IbqFRM71fBn_nJN};+o@ng&zPw-bnS^1n_2bU|%<2&FLU+!+y*7m9&a%&u%BLId3H$yO zIJt^TA}2I4{NhI@og-UUf67t5G@qAWGG}dTQs!U3)`ML^hO47*oGb}?9G;`JKeRso z6x(WhukA`@sc+txeVR74QBCLX?is5XEiSKDb(qZ={6RCkH6rd+tB0dv`_p?{E~{;- zb_kBB>QVo)gu9=-*4?}{@LjZDpSONxtilM}&3 zm>9?eRZu4qc@T^PwK!*QFerx=p^S_y*#?;gS}?u=W1Aep(){G&0(4sqtl?^zkR6zq znTW1bAI*WOMMM{;W=O^9QenoG^IOkI=ZVS1TN|#bG-IfiMJZ0Pmba(_;^5-cZQlA1 zI~K(+n(1+Vg}S%m*-bl_6%{1wKMvKbwsiA*UYE)i(Y+_UYZ5QV4S`)|D!;g@e_LNp z+V3?*^jXvGu8`dS8voMI7ur8F=DfKmQs9f6*T2*=_pW3=4$>@T@X}s-=Jf0rD}BFj z5s#eYczC;g+p}*6>RoKyV#K2!FR{LwsdiPd_F+SMUDBHEetM#_p3YHTA1(N*aHZo< z-b#y=3wh6P*?7xtR@HH(qa|nWyK}Z3`7=>&1{-fL5nEVRo zzf5zrFEeaniZWu2Z^Ot4 z>Mky{$P#6~e{OgEC*A!`@!6TDQyEt`oK>GTTlfEsSuE|#Z7f>mG`Q6%DO~Lim-#U- zD0pkat<9IJ0uKGT%lF*%+Jsk=9J}LE*)Ct~a+O?ggYDvA*>U+elIeaL^#l=DKyaxr(EE}S^?FZR9q!aQLKivYL10ZjP^kIh`bxA~pHgZJ;3 zJM5F`lfN=QT>J8xy%(A;-V&>vdHV0Wr?R#;1d;=G)VQcD6I^~IsrEtuk1~(Ecj>Bz zo;$PGzdc;tD(zuy5@NE8fBVkW78buQiG2Be(XvrP-r+a8eW2zr|4Ku za37sQ8=XQMok9c8vyD!njZUF~Rxg0p35-sm(Q{G6=oH%M6k2|+{^%6ikexykXf$XN zs0DYR2IUkQFVgf2E5m}uek}87f^1ySjti$Giy={*>z5A9H53f)N)4XG#jJ(ybm6_tC}0tZ_ar!L-BzZZ~MxJ zd)PZ`rrmpZL4Ly-gEwJc{{{(8&7W{{&yBrh=lvUQUJv$~Juhv>+oewyKlZ#_doMxM z<+|J&oyVD_n+11%`?vq3+d1LY2hMD{bS?kS;TGqP*wnJ*JAyKN=_&^TA6{*Z{&-Jd z{!{fEmkZyuh)l^?8SLG>1KOpngHaIu$D%8{YrsLJ{!m3_*Mix!FHwF<00 z^D@wm+mMD$NeYD?j(y7#)aLIuGFihr zsc2`E-bs(+dat#`Wj?+&`E~Ay;eP8qHU&Bhb-QBDbC{lABmH>_W3V&qXJB#414&mNJO8H|G9JW{U7Hv_ZTMfD2buXvzd?1vmw?-Vyqn+oo7QDd&5{= zIXchA$N*YhIXcgVv`lk!o^5oVjaiuB9RBD$+vq$S(d)!o3c+PKk7Yb9eXi7MY;Ll!gakVN8IH8pP8^oxu>@4_}t}w>wZMu{cHcG;KsM) zB`g6_*It_W=koV?UlUGy|KLT#s&`pNWhq@Qcdz(Xyx%-+0^7xuC(TnLPB=bKG3alY z|7g2`P0-E1YZ)a4w4CK8KVFsgQ7nhMHauico_%HQpX6K1R0|jU(-yfHVeHU+&8uQcs%S^} QuC*pXdnY>ooXh|M0BKA|S^xk5 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..d65d452 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,13 @@ +dicttoxml==1.7.4 +et-xmlfile==1.0.1 +google-api-core==1.31.5 +google-api-python-client==2.1.0 +google-auth==1.28.0 +google-auth-httplib2==0.1.0 +google-auth-oauthlib==0.4.4 +google-cloud-vision==2.6.3 +googleapis-common-protos==1.53.0 +openpyxl +lxml +pygsheet +pycdlib \ No newline at end of file