From cb9c2100cb472c49a84facf7ba2ff6a0c65c6f02 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Tue, 23 Sep 2008 23:10:25 +0000 Subject: [PATCH] Massive stability and feature improvements to Cydia. --- Cydia.app/Info.plist | 12 + Cydia.app/Purposes/console.png | Bin 0 -> 3264 bytes Cydia.app/Purposes/daemon.png | Bin 0 -> 3467 bytes Cydia.app/Purposes/extension.png | Bin 0 -> 3423 bytes Cydia.app/Purposes/library.png | Bin 0 -> 3580 bytes Cydia.app/Purposes/uikit.png | Bin 0 -> 880 bytes Cydia.app/Purposes/x.png | Bin 0 -> 3425 bytes Cydia.app/Sections.plist | 6 + Cydia.app/Sections/App Addons.png | Bin 0 -> 3609 bytes Cydia.app/Sections/Carrier Bundles.png | Bin 0 -> 7695 bytes Cydia.app/Sections/Education.png | Bin 0 -> 5020 bytes Cydia.app/Sections/Entertainment.png | Bin 0 -> 3703 bytes Cydia.app/Sections/Health and Fitness.png | Bin 0 -> 5319 bytes Cydia.app/Sections/Messaging.png | Bin 0 -> 5171 bytes Cydia.app/Sections/Ringtones.png | Bin 0 -> 7259 bytes Cydia.app/Sections/eBooks.png | Bin 0 -> 7396 bytes ...{modmyifone.com.png => apt.modmyi.com.png} | Bin Cydia.app/Sources/apt.modmyifone.com.png | 1 - Cydia.mm | 504 +++++++++++++----- UICaboodle/BrowserView.h | 1 + internals.h | 5 +- launch.xml | 7 + makefile | 14 +- 23 files changed, 388 insertions(+), 162 deletions(-) create mode 100644 Cydia.app/Purposes/console.png create mode 100644 Cydia.app/Purposes/daemon.png create mode 100644 Cydia.app/Purposes/extension.png create mode 100644 Cydia.app/Purposes/library.png create mode 100644 Cydia.app/Purposes/uikit.png create mode 100644 Cydia.app/Purposes/x.png create mode 100644 Cydia.app/Sections/App Addons.png create mode 100644 Cydia.app/Sections/Carrier Bundles.png create mode 100644 Cydia.app/Sections/Education.png create mode 100644 Cydia.app/Sections/Entertainment.png create mode 100644 Cydia.app/Sections/Health and Fitness.png create mode 100644 Cydia.app/Sections/Messaging.png create mode 100644 Cydia.app/Sections/Ringtones.png create mode 100644 Cydia.app/Sections/eBooks.png rename Cydia.app/Sources/{modmyifone.com.png => apt.modmyi.com.png} (100%) delete mode 120000 Cydia.app/Sources/apt.modmyifone.com.png create mode 100644 launch.xml diff --git a/Cydia.app/Info.plist b/Cydia.app/Info.plist index 0062d2b8..786f6270 100644 --- a/Cydia.app/Info.plist +++ b/Cydia.app/Info.plist @@ -32,6 +32,18 @@ SBUsesNetwork 3 + + CFBundleURLTypes + + + CFBundleURLName + Cydia Internal URL + CFBundleURLSchemes + + cydia + + + diff --git a/Cydia.app/Purposes/console.png b/Cydia.app/Purposes/console.png new file mode 100644 index 0000000000000000000000000000000000000000..48f7e8807b2ba0f16a4e457ae9027baf8a1d4677 GIT binary patch literal 3264 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 literal 0 HcmV?d00001 diff --git a/Cydia.app/Purposes/extension.png b/Cydia.app/Purposes/extension.png new file mode 100644 index 0000000000000000000000000000000000000000..e7025b4dadbba39234653afcbc2f3660e0db1728 GIT binary patch literal 3423 zcmV-l4WROgP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0007dNklT&dTS;MI z;Rg@|!9vAiQ(MHs*2>RdWlGaU77-C4rGG0W2w@chq8Jd9h1}K6-t7K<=bV|>;$BE$ zY3+W+1{F^ajY_v5~h?UqzRO~ol`cIR464U%4B-y*PnkoS}qR& zxO#2>dUMzRso3Z@H*YNglSBbfh!&!@N`xRA3Ijw}M?C`_$$0Gi4(+T3AYctJgJeec zKp65s0g{j))Cs_cPVB<*!?SU3Zx4X<{(J9y_{ZUK{pt4a?Z?ehNTH=+ubr;V&i?Lqg72N+HxQxaq)=DSn-XR?E%T24mKL5~1~ZLn0zJAYqp1mRQURW_ez=chA54(X~%* zD8i0c59k2?$o&ySxWvxRg73cl`tXa-KK(vIULt&T>7^ITa9Vk=T0yMW`42!^|A`E+ zcJr$*F9Wq$&bB;SVXf0*lZUh(jKC#O5Dp%qwuY24kR?%y*{n%nM z$KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0009QNkl&jz|)ZgZ0JtH*VkC8s4$DH6&JSu9=A^ki_(P zeNT(E=kI=Xwt4n>r?Q@%~4#t zy~ycKg!T`T}gaFvI~@jBg!ib0fcK3v6X|pMQJ9 z?+fZY)q0OZqj7fi_|va6ob_ift*sHg6T_9q57t@%ngYQX;&ByWC4rwWx1D6@{x6&u zJbkjIy=B<_5GhqdEUv+9&NiL+Y@1bpSShMnED?$(k=BW{P7uI?dHJYb^1LJCa^$5-M2A#>HPHO9n*Ajz!l?{jlFb_YixCT*wN+XtveC! zKk_F#yS(fj2s5|3{&40lD`T^wbjhn(B2Xwlf#sD&a9$q)X#fDmA4E~M(1zl<`7jIv z$<_R5*c%C7Qy8SLJ$Pltr859s+y+7k|Tzd$ngKFEC@oL z)v>EF;BsDqm~FYz()mTMG%Lp-kW8f~9h+8v2r-*-@eAvN*N?qPGBQ==$DwxjPj~+s zQrLGl%K2*#T%CzGqX2*>i);3^7uW1-2T(8*@6iC8LI*&2pDh6Z0000qSlm7)BQWMGxK>cB?jL4y_dX~_k>c4dy$Hb z?s|CV*1>cp*$JrJaz1-=AvdvJJNw(cT=9Pc+c?%U{Bqxi`wl!ml4;L`!l5t#y|ozqn({Zi!1FBuYV`6g^!J@#gFMIdkqJ3)y9AwFaS(#%APV zvEWTzxZS7gF@Gpu%*#r-gpeAEmN@SoKf=IMkK_9Rhen>JJ=4b8KSfTwf0}BoPT>2v zo}+7~|AK7FW@mnVol2!ju~1_FzJ7*>`u}TK3ZCeCkc1s$cXua)d%7v)OVsOiYPA|f zf=Bcwf?O^~-K>JpNwv1%cuks~2Y{wYK;e2GMkGYJyn&`crCPxa;^=zF%<4uAsR`Vs z$K3o9N`bEH07xkTs5cxgPtW1HE>bFjKp}K9D^-}lB%#1EhB%h=&T+l+Jq6zlGdm69`28GCQ$Uhcn1w`i5M%0WN?0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0007fNklrXrCAnkL?1n$^bo^AUe z#ri0dA?G{ME~6y?bX>(momVN=kOu%IyLzI`VUKHjSad2@q7ni?E+YT8BPDUPUjVwA zG1C@WPX*|)n8NcFA_|E70O((!k!AX0p=#j9Y2aQfCLVQ-BqoP+{J?sph(?}$u=}=0 z@S^U}6t0~F&ijC;ck!g``KV!;j$~R*vN>->cPx?ZI1MgstTef@?MBFCOXp)rmm-l^ zL=^mNF``?`etqUWIKNfy#F9;mg{pkD)^4iV*FqYRdC07jhRiyNBNBX8Q`Jh-33Zxb zFsIjIy51de7_?kU3*AP3%B5qqt-qv@0>mcQeouT9?RN@VuMod2lP$bv?)BzPCbe*p z*9@%YnbE*9{fT9cKkOWl0zP~<5SDWc2nx*oJr>+Vmlj>wxNQ)oQmydJ^@erXlZ9n7 zVN9oq7cg`R0Fi@894*XIUpdX20+B8iph#dmUtilities + CarrierBundle + + Rename + Carrier_Bundles + + Network Rename diff --git a/Cydia.app/Sections/App Addons.png b/Cydia.app/Sections/App Addons.png new file mode 100644 index 0000000000000000000000000000000000000000..424f5658b2f36f1c685d40f28f5e808d70984ac1 GIT binary patch literal 3609 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 literal 0 HcmV?d00001 diff --git a/Cydia.app/Sections/Carrier Bundles.png b/Cydia.app/Sections/Carrier Bundles.png new file mode 100644 index 0000000000000000000000000000000000000000..00f36f739b46e7d80322476523f9c450d3e09534 GIT binary patch literal 7695 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 literal 0 HcmV?d00001 diff --git a/Cydia.app/Sections/Education.png b/Cydia.app/Sections/Education.png new file mode 100644 index 0000000000000000000000000000000000000000..4a2a03fd0eebaf0ef67a0c240d8f7a9c3c053e73 GIT binary patch literal 5020 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 literal 0 HcmV?d00001 diff --git a/Cydia.app/Sections/Health and Fitness.png b/Cydia.app/Sections/Health and Fitness.png new file mode 100644 index 0000000000000000000000000000000000000000..e2db0133303de14837678ca734859ae690e75251 GIT binary patch literal 5319 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 Z{|_o3OyTH3e479O002ovPDHLkV1kM1@wNZ} literal 0 HcmV?d00001 diff --git a/Cydia.app/Sections/Messaging.png b/Cydia.app/Sections/Messaging.png new file mode 100644 index 0000000000000000000000000000000000000000..69d18e00dc2959bdbb257e3b89f84ccac9003dc7 GIT binary patch literal 5171 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 ^Ws=M<|o= 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 literal 0 HcmV?d00001 diff --git a/Cydia.app/Sections/Ringtones.png b/Cydia.app/Sections/Ringtones.png new file mode 100644 index 0000000000000000000000000000000000000000..57fd660b7b395388faa88c7bd6588007d6262c4d GIT binary patch literal 7259 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 literal 0 HcmV?d00001 diff --git a/Cydia.app/Sections/eBooks.png b/Cydia.app/Sections/eBooks.png new file mode 100644 index 0000000000000000000000000000000000000000..512c68b5edea25103dc1e165f623e016bce9c7c5 GIT binary patch literal 7396 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 W@i=j^=xH7R0000 // XXX: remove -#import -#import -#import -#import -#import -#import -#import -#import -#import - -// XXX: remove -#import +#import #include #include @@ -110,10 +99,6 @@ extern "C" { static const NSStringCompareOptions CompareOptions_ = NSCaseInsensitiveSearch | NSNumericSearch | NSDiacriticInsensitiveSearch | NSWidthInsensitiveSearch | NSForcedOrderingSearch; -@interface WebView (Cydia) -- (void) _setLayoutInterval:(float)interval; -@end - /* iPhoneOS 2.0 Compatibility {{{ */ #ifdef __OBJC2__ @interface UICGColor : NSObject { @@ -158,6 +143,8 @@ static const NSStringCompareOptions CompareOptions_ = NSCaseInsensitiveSearch | #endif /* }}} */ +extern NSString * const kCAFilterNearest; + @interface UIApplication (IdleTimer) - (void) setIdleTimerDisabled:(char)arg0; @end @@ -189,6 +176,9 @@ static const NSStringCompareOptions CompareOptions_ = NSCaseInsensitiveSearch | @end /* }}} */ +#define lprintf(args...) fprintf(stderr, args) +#define ForSaurik 0 + extern "C" int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName); extern NSString *kUIButtonBarButtonAction; @@ -290,7 +280,7 @@ class Pcre { code_ = pcre_compile(regex, 0, &error, &offset, NULL); if (code_ == NULL) { - fprintf(stderr, "%d:%s\n", offset, error); + lprintf("%d:%s\n", offset, error); _assert(false); } @@ -447,7 +437,9 @@ static NSString *Home_; static BOOL Sounds_Keyboard_; static BOOL Advanced_; +#if !ForSaurik static BOOL Loaded_; +#endif static BOOL Ignored_; static UIFont *Font12_; @@ -614,6 +606,9 @@ bool isSectionVisible(NSString *section) { - (void) syncData; - (void) askForSettings; - (UIProgressHUD *) addProgressHUD; +- (RVPage *) pageForURL:(NSURL *)url hasTag:(int *)tag; +- (RVPage *) pageForPackage:(NSString *)name; +- (void) openMailToURL:(NSURL *)url; @end /* }}} */ @@ -1094,6 +1089,7 @@ NSString *Scour(const char *field, const char *begin, const char *end) { - (bool) hasSupportingRole; - (BOOL) hasTag:(NSString *)tag; +- (NSString *) primaryPurpose; - (NSComparisonResult) compareByName:(Package *)package; - (NSComparisonResult) compareBySection:(Package *)package; @@ -1486,6 +1482,13 @@ NSString *Scour(const char *field, const char *begin, const char *end) { return tags_ == nil ? NO : [tags_ containsObject:tag]; } +- (NSString *) primaryPurpose { + for (NSString *tag in tags_) + if ([tag hasPrefix:@"purpose::"]) + return [tag substringFromIndex:9]; + return nil; +} + - (NSComparisonResult) compareByName:(Package *)package { NSString *lhs = [self name]; NSString *rhs = [package name]; @@ -1703,7 +1706,7 @@ NSArray *Finishes_; while (std::getline(is, line)) { const char *data(line.c_str()); size_t size = line.size(); - fprintf(stderr, "C:%s\n", data); + lprintf("C:%s\n", data); if (finish_r(data, size)) { NSString *finish = finish_r[1]; @@ -1730,7 +1733,7 @@ NSArray *Finishes_; while (std::getline(is, line)) { const char *data(line.c_str()); size_t size = line.size(); - fprintf(stderr, "S:%s\n", data); + lprintf("S:%s\n", data); if (conffile_r(data, size)) { [delegate_ setConfigurationData:conffile_r[1]]; @@ -1771,7 +1774,7 @@ NSArray *Finishes_; std::string line; while (std::getline(is, line)) { - fprintf(stderr, "O:%s\n", line.c_str()); + lprintf("O:%s\n", line.c_str()); [delegate_ addProgressOutput:[NSString stringWithUTF8String:line.c_str()]]; } @@ -1894,7 +1897,7 @@ NSArray *Finishes_; if (!_error->PopMessage(error)) _assert(false); _error->Discard(); - fprintf(stderr, "cache_.Open():[%s]\n", error.c_str()); + lprintf("cache_.Open():[%s]\n", error.c_str()); if (error == "dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem. ") [delegate_ repairWithSelector:@selector(configure)]; @@ -1974,7 +1977,7 @@ NSArray *Finishes_; if (!cleaner.Go(_config->FindDir("Dir::Cache::Archives") + "partial/", cache_)) { std::string error; while (_error->PopMessage(error)) - fprintf(stderr, "ArchiveCleaner: %s\n", error.c_str()); + lprintf("ArchiveCleaner: %s\n", error.c_str()); } } @@ -2015,7 +2018,7 @@ NSArray *Finishes_; std::string uri = (*item)->DescURI(); std::string error = (*item)->ErrorText; - fprintf(stderr, "pAf:%s:%s\n", uri.c_str(), error.c_str()); + lprintf("pAf:%s:%s\n", uri.c_str(), error.c_str()); failed = true; [delegate_ performSelectorOnMainThread:@selector(_setProgressError:) @@ -2110,6 +2113,112 @@ NSArray *Finishes_; @end /* }}} */ +/* Pop Up Windows {{{ */ +@interface PopUpView : UIView { + _transient id delegate_; + UITransitionView *transition_; + UIView *overlay_; +} + +- (void) cancel; +- (id) initWithView:(UIView *)view delegate:(id)delegate; + +@end + +@implementation PopUpView + +- (void) dealloc { + [transition_ setDelegate:nil]; + [transition_ release]; + [overlay_ release]; + [super dealloc]; +} + +- (void) cancel { + [transition_ transition:UITransitionPushFromTop toView:nil]; +} + +- (void) transitionViewDidComplete:(UITransitionView*)view fromView:(UIView*)from toView:(UIView*)to { + if (from != nil && to == nil) + [self removeFromSuperview]; +} + +- (id) initWithView:(UIView *)view delegate:(id)delegate { + if ((self = [super initWithFrame:[view bounds]]) != nil) { + delegate_ = delegate; + + transition_ = [[UITransitionView alloc] initWithFrame:[self bounds]]; + [self addSubview:transition_]; + + overlay_ = [[UIView alloc] initWithFrame:[transition_ bounds]]; + + [view addSubview:self]; + + [transition_ setDelegate:self]; + + UIView *blank = [[[UIView alloc] initWithFrame:[transition_ bounds]] autorelease]; + [transition_ transition:UITransitionNone toView:blank]; + [transition_ transition:UITransitionPushFromBottom toView:overlay_]; + } return self; +} + +@end +/* }}} */ + +/* Mail Composition {{{ */ +@interface MailToView : PopUpView { + MailComposeController *controller_; +} + +- (id) initWithView:(UIView *)view delegate:(id)delegate url:(NSURL *)url; + +@end + +@implementation MailToView + +- (void) dealloc { + [controller_ release]; + [super dealloc]; +} + +#include "internals.h" + +- (void) mailComposeControllerWillAttemptToSend:(MailComposeController *)controller { + NSLog(@"will"); +} + +- (void) mailComposeControllerDidAttemptToSend:(MailComposeController *)controller mailDelivery:(id)delivery { + NSLog(@"did:%@", delivery); +// [UIApp setStatusBarShowsProgress:NO]; +if ([controller error]){ +NSArray *buttons = [NSArray arrayWithObjects:@"OK", nil]; +UIActionSheet *mailAlertSheet = [[UIActionSheet alloc] initWithTitle:@"Error" buttons:buttons defaultButtonIndex:0 delegate:self context:self]; +[mailAlertSheet setBodyText:[controller error]]; +[mailAlertSheet popupAlertAnimated:YES]; +} +} + +- (void) mailComposeControllerCompositionFinished:(MailComposeController *)controller { + if ([controller needsDelivery]) + [controller deliverMessage]; + else + [self cancel]; +} + +- (id) initWithView:(UIView *)view delegate:(id)delegate url:(NSURL *)url { + if ((self = [super initWithView:view delegate:delegate]) != nil) { + controller_ = [[MailComposeController alloc] initForContentSize:[overlay_ bounds].size]; + [controller_ setDelegate:self]; + [controller_ initializeUI]; + [controller_ setupForURL:url]; + + UIView *view([controller_ view]); + [overlay_ addSubview:view]; + } return self; +} + +@end +/* }}} */ /* Confirmation View {{{ */ void AddTextView(NSMutableDictionary *fields, NSMutableArray *packages, NSString *key) { if ([packages count] == 0) @@ -2142,11 +2251,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (void) confirm; @end -@interface ConfirmationView : UIView { +@interface ConfirmationView : PopUpView { Database *database_; - id delegate_; - UITransitionView *transition_; - UIView *overlay_; UINavigationBar *navbar_; UIPreferencesTable *table_; NSMutableDictionary *fields_; @@ -2156,7 +2262,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (void) cancel; -- (id) initWithView:(UIView *)view database:(Database *)database delegate:(id)delegate; +- (id) initWithView:(UIView *)view delegate:(id)delegate database:(Database *)database; @end @@ -2164,11 +2270,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (void) dealloc { [navbar_ setDelegate:nil]; - [transition_ setDelegate:nil]; [table_ setDataSource:nil]; - [transition_ release]; - [overlay_ release]; [navbar_ release]; [table_ release]; [fields_ release]; @@ -2178,15 +2281,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (void) cancel { - [transition_ transition:7 toView:nil]; + [super cancel]; [delegate_ cancel]; } -- (void) transitionViewDidComplete:(UITransitionView*)view fromView:(UIView*)from toView:(UIView*)to { - if (from != nil && to == nil) - [self removeFromSuperview]; -} - - (void) navigationBar:(UINavigationBar *)navbar buttonClicked:(int)button { switch (button) { case 0: @@ -2301,15 +2399,9 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { return cell; } -- (id) initWithView:(UIView *)view database:(Database *)database delegate:(id)delegate { - if ((self = [super initWithFrame:[view bounds]]) != nil) { +- (id) initWithView:(UIView *)view delegate:(id)delegate database:(Database *)database { + if ((self = [super initWithView:view delegate:delegate]) != nil) { database_ = database; - delegate_ = delegate; - - transition_ = [[UITransitionView alloc] initWithFrame:[self bounds]]; - [self addSubview:transition_]; - - overlay_ = [[UIView alloc] initWithFrame:[transition_ bounds]]; CGSize navsize = [UINavigationBar defaultSize]; CGRect navrect = {{0, 0}, navsize}; @@ -2406,14 +2498,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [overlay_ addSubview:navbar_]; [overlay_ addSubview:table_]; - - [view addSubview:self]; - - [transition_ setDelegate:self]; - - UIView *blank = [[[UIView alloc] initWithFrame:[transition_ bounds]] autorelease]; - [transition_ transition:0 toView:blank]; - [transition_ transition:3 toView:overlay_]; } return self; } @@ -2651,7 +2735,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (void) closeButtonPushed { switch (Finish_) { case 0: - [delegate_ progressViewIsComplete:self]; [self resetView]; break; @@ -2681,6 +2764,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [progress_ removeFromSuperview]; [status_ removeFromSuperview]; + [delegate_ progressViewIsComplete:self]; + { FileFd file("/System/Library/LaunchDaemons/com.apple.SpringBoard.plist", FileFd::ReadOnly); MMap mmap(file, MMap::ReadOnly); @@ -2738,7 +2823,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { goto error; if (false) error: - fprintf(stderr, "%s\n", error == nil ? strerror(errno) : [[error localizedDescription] UTF8String]); + lprintf("%s\n", error == nil ? strerror(errno) : [[error localizedDescription] UTF8String]); } notify_post("com.apple.mobile.application_installed"); @@ -2927,8 +3012,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { NSString *description_; NSString *source_; //UIImageView *trusted_; + UIImage *badge_; #ifdef USE_BADGES - UIImageView *badge_; UITextLabel *status_; #endif } @@ -2962,12 +3047,16 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [source_ release]; source_ = nil; } + + if (badge_ != nil) { + [badge_ release]; + badge_ = nil; + } } - (void) dealloc { [self clearPackage]; #ifdef USE_BADGES - [badge_ release]; [status_ release]; #endif //[trusted_ release]; @@ -2977,8 +3066,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (PackageCell *) init { if ((self = [super init]) != nil) { #ifdef USE_BADGES - badge_ = [[UIImageView alloc] initWithFrame:CGRectMake(17, 70, 16, 16)]; - status_ = [[UITextLabel alloc] initWithFrame:CGRectMake(48, 68, 280, 20)]; [status_ setBackgroundColor:[UIColor clearColor]]; [status_ setFont:small]; @@ -2990,14 +3077,17 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [self clearPackage]; Source *source = [package source]; + NSString *section = [package section]; + if (section != nil) + section = Simplify(section); icon_ = nil; if (NSString *icon = [package icon]) icon_ = [UIImage imageAtPath:[icon substringFromIndex:6]]; - if (icon_ == nil) if (NSString *section = [package section]) - icon_ = [UIImage imageAtPath:[NSString stringWithFormat:@"%@/Sections/%@.png", App_, Simplify(section)]]; - /*if (icon_ == nil) if (NSString *icon = [source defaultIcon]) - icon_ = [UIImage imageAtPath:[icon substringFromIndex:6]];*/ + if (icon_ == nil) if (section != nil) + icon_ = [UIImage imageAtPath:[NSString stringWithFormat:@"%@/Sections/%@.png", App_, section]]; + if (icon_ == nil) if (NSString *icon = [source defaultIcon]) + icon_ = [UIImage imageAtPath:[icon substringFromIndex:6]]; if (icon_ == nil) icon_ = [UIImage applicationImageNamed:@"unknown.png"]; @@ -3019,12 +3109,15 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { NSString *from = [NSString stringWithFormat:@"from %@", label]; - NSString *section = Simplify([package section]); if (section != nil && ![section isEqualToString:label]) from = [from stringByAppendingString:[NSString stringWithFormat:@" (%@)", section]]; source_ = [from retain]; + if (NSString *purpose = [package primaryPurpose]) + if ((badge_ = [UIImage imageAtPath:[NSString stringWithFormat:@"%@/Purposes/%@.png", App_, purpose]]) != nil) + badge_ = [badge_ retain]; + #ifdef USE_BADGES [badge_ removeFromSuperview]; [status_ removeFromSuperview]; @@ -3066,6 +3159,15 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [icon_ drawInRect:rect]; } + if (badge_ != nil) { + CGSize size = [badge_ size]; + + [badge_ drawAtPoint:CGPointMake( + 36 - size.width / 2, + 36 - size.height / 2 + )]; + } + if (selected) UISetColor(White_); @@ -3195,7 +3297,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { UISetColor(White_); if (count_ != nil) - [count_ drawAtPoint:CGPointMake(12 + (29 - size.width) / 2, 15) withFont:Font12Bold_]; + [count_ drawAtPoint:CGPointMake(13 + (29 - size.width) / 2, 16) withFont:Font12Bold_]; [super drawContentInRect:rect selected:selected]; } @@ -3397,6 +3499,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (void) webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)window forFrame:(WebFrame *)frame { [window setValue:package_ forKey:@"package"]; + [super webView:sender didClearWindowObject:window forFrame:frame]; } - (void) _rightButtonClicked { @@ -3949,7 +4052,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { - fprintf(stderr, "connection:\"%s\" didFailWithError:\"%s\"", [href_ UTF8String], [[error localizedDescription] UTF8String]); + lprintf("connection:\"%s\" didFailWithError:\"%s\"", [href_ UTF8String], [[error localizedDescription] UTF8String]); if (error_ != nil) error_ = [error retain]; [self _endConnection:connection]; @@ -4260,9 +4363,17 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { @end /* }}} */ +@interface WebView (Cydia) +- (void) setScriptDebugDelegate:(id)delegate; +- (void) _setFormDelegate:(id)delegate; +- (void) _setUIKitDelegate:(id)delegate; +- (void) setWebMailDelegate:(id)delegate; +- (void) _setLayoutInterval:(float)interval; +@end + /* Indirect Delegate {{{ */ @interface IndirectDelegate : NSProxy { - _transient id delegate_; + _transient volatile id delegate_; } - (void) setDelegate:(id)delegate; @@ -4280,18 +4391,15 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { return self; } -- (void) doesNotRecognizeSelector:(SEL)sel { - fprintf(stderr, "doesNotRecognizeSelector:@selector(%s)", sel_getName(sel)); -} - - (NSMethodSignature*) methodSignatureForSelector:(SEL)sel { if (delegate_ != nil) if (NSMethodSignature *sig = [delegate_ methodSignatureForSelector:sel]) return sig; - return nil; + // XXX: I fucking hate Apple so very very bad + return [NSMethodSignature signatureWithObjCTypes:"v@:"]; } -- (void) forwardInvocation:(NSInvocation*)inv { +- (void) forwardInvocation:(NSInvocation *)inv { SEL sel = [inv selector]; if (delegate_ != nil && [delegate_ respondsToSelector:sel]) [inv invokeWithTarget:delegate_]; @@ -4307,13 +4415,26 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [webview setFrameLoadDelegate:nil]; [webview setResourceLoadDelegate:nil]; [webview setUIDelegate:nil]; + [webview setScriptDebugDelegate:nil]; + [webview setPolicyDelegate:nil]; + + [webview setDownloadDelegate:nil]; + + [webview _setFormDelegate:nil]; + [webview _setUIKitDelegate:nil]; + [webview setWebMailDelegate:nil]; + [webview setEditingDelegate:nil]; [webview_ setDelegate:nil]; [webview_ setGestureDelegate:nil]; + //NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + /*WebFrame *frame = [webview mainFrame]; [frame loadHTMLString:@"" baseURL:[NSURL URLWithString:@"http://cydia.saurik.com/"]];*/ + [webview close]; + //[webview_ removeFromSuperview]; //[Documents_ addObject:[webview_ autorelease]]; [webview_ release]; @@ -4347,8 +4468,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { NSMutableURLRequest *copy = [request mutableCopy]; [copy addValue:[NSString stringWithUTF8String:Firmware_] forHTTPHeaderField:@"X-Firmware"]; - [copy addValue:[NSString stringWithUTF8String:Machine_] forHTTPHeaderField:@"X-Machine"]; - [copy addValue:UniqueID_ forHTTPHeaderField:@"X-Unique-ID"]; + if (Machine_ != NULL) + [copy addValue:[NSString stringWithUTF8String:Machine_] forHTTPHeaderField:@"X-Machine"]; + if (UniqueID_ != nil) + [copy addValue:UniqueID_ forHTTPHeaderField:@"X-Unique-ID"]; if (Role_ != nil) [copy addValue:Role_ forHTTPHeaderField:@"X-Role"]; @@ -4387,29 +4510,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [book_ pushPage:page]; } -- (RVPage *) _pageForPackage:(NSString *)name { - if (Package *package = [database_ packageWithName:name]) { - PackageView *view = [[[PackageView alloc] initWithBook:book_ database:database_] autorelease]; - [view setPackage:package]; - return view; - } else { - UIActionSheet *sheet = [[[UIActionSheet alloc] - initWithTitle:@"Cannot Locate Package" - buttons:[NSArray arrayWithObjects:@"Close", nil] - defaultButtonIndex:0 - delegate:self - context:@"missing" - ] autorelease]; - - [sheet setBodyText:[NSString stringWithFormat: - @"The package %@ cannot be found in your current sources. I might recommend installing more sources." - , name]]; - - [sheet popupAlertAnimated:YES]; - return nil; - } -} - - (BOOL) getSpecial:(NSString *)href { RVPage *page = nil; @@ -4420,27 +4520,13 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [href hasPrefix:@"tel:"] ) [delegate_ openURL:[NSURL URLWithString:href]]; - else if ([href hasPrefix:@"mailto:"]) { + else if ([href hasPrefix:@"mailto:"]) [delegate_ openURL:[NSURL URLWithString:href]]; - } else if ([href isEqualToString:@"cydia://add-source"]) - page = [[[AddSourceView alloc] initWithBook:book_ database:database_] autorelease]; - else if ([href isEqualToString:@"cydia://sources"]) - page = [[[SourceTable alloc] initWithBook:book_ database:database_] autorelease]; - else if ([href isEqualToString:@"cydia://packages"]) - page = [[[InstalledView alloc] initWithBook:book_ database:database_] autorelease]; - else if ([href hasPrefix:@"cydia://files/"]) { - NSString *name = [href substringFromIndex:14]; - - if (Package *package = [database_ packageWithName:name]) { - FileTable *files = [[[FileTable alloc] initWithBook:book_ database:database_] autorelease]; - [files setPackage:package]; - page = files; - } - } else if ([href hasPrefix:@"apptapp://package/"]) - page = [self _pageForPackage:[href substringFromIndex:18]]; - else if ([href hasPrefix:@"cydia://package/"]) - page = [self _pageForPackage:[href substringFromIndex:16]]; - else if (![href hasPrefix:@"apptapp:"] && ![href hasPrefix:@"cydia:"]) + else if ([href hasPrefix:@"apptapp://package/"]) + page = [delegate_ pageForPackage:[href substringFromIndex:18]]; + else if ([href hasPrefix:@"cydia://"]) + page = [delegate_ pageForURL:[NSURL URLWithString:href] hasTag:NULL]; + else if (![href hasPrefix:@"apptapp:"]) return false; if (page != nil) @@ -4448,6 +4534,10 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { return true; } +- (void) webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)window forFrame:(WebFrame *)frame { + [window setValue:delegate_ forKey:@"cydia"]; +} + - (void) webView:(WebView *)sender willClickElement:(id)element { if ([[element localName] isEqualToString:@"img"]) do if ((element = [element parentNode]) == nil) @@ -4461,16 +4551,22 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [self getSpecial:href]; } +- (void) webView:(WebView *)sender setStatusText:(NSString *)text { + //lprintf("Status:%s\n", [text UTF8String]); +} + +- (void) _pushPage { + if (pushed_) + return; + pushed_ = true; + [book_ pushPage:self]; +} + - (NSURLRequest *) webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource { NSURL *url = [request URL]; if ([self getSpecial:[url absoluteString]]) return nil; - - if (!pushed_) { - pushed_ = true; - [book_ pushPage:self]; - } - + [self _pushPage]; return [self _addHeadersToRequest:request]; } @@ -4482,7 +4578,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [scheme isEqualToString:@"tel"]; } -- (WebView *) webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request { +- (WebView *) _createWebViewWithRequest:(NSURLRequest *)request pushed:(BOOL)pushed { if (request != nil) { NSURL *url = [request URL]; NSString *scheme = [url scheme]; @@ -4501,7 +4597,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { BrowserView *browser = [[[BrowserView alloc] initWithBook:book_ database:database_] autorelease]; [browser setDelegate:delegate_]; - if (request != nil) { + if (pushed) { [browser loadRequest:[self _addHeadersToRequest:request]]; [book_ pushPage:browser]; } @@ -4509,6 +4605,14 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { return [browser webView]; } +- (WebView *) webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request { + return [self _createWebViewWithRequest:request pushed:(request != nil)]; +} + +- (WebView *) webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request windowFeatures:(NSDictionary *)features { + return [self _createWebViewWithRequest:request pushed:YES]; +} + - (void) webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame { if ([frame parentFrame] != nil) return; @@ -4537,11 +4641,11 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { NSString *href = [webview mainFrameURL]; [urls_ addObject:[NSURL URLWithString:href]]; + [scroller_ scrollPointVisibleAtTopLeft:CGPointZero]; + CGRect webrect = [scroller_ bounds]; webrect.size.height = 0; [webview_ setFrame:webrect]; - - [scroller_ scrollPointVisibleAtTopLeft:CGPointZero]; } - (void) _finishLoading { @@ -4553,7 +4657,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (BOOL) webView:(WebView *)sender shouldScrollToPoint:(struct CGPoint)point forFrame:(WebFrame *)frame { - _trace(); return [webview_ webView:sender shouldScrollToPoint:point forFrame:frame]; } @@ -4590,6 +4693,12 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { ]]]; } +- (void) webView:(WebView *)sender addMessageToConsole:(NSDictionary *)dictionary { +#if ForSaurik + lprintf("Console:%s\n", [[dictionary description] UTF8String]); +#endif +} + - (id) initWithBook:(RVBook *)book database:(Database *)database { if ((self = [super initWithBook:book]) != nil) { database_ = database; @@ -4640,12 +4749,16 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [webview_ setValue:[NSNumber numberWithBool:YES] forGestureAttribute:0x4]; [webview_ setValue:[NSNumber numberWithBool:YES] forGestureAttribute:0x7]; [webview_ setSmoothsFonts:YES]; + + [webview_ setAllowsMessaging:YES]; } [webview_ setDelegate:self]; [webview_ setGestureDelegate:self]; [scroller_ addSubview:webview_]; + //NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + CGSize indsize = [UIProgressIndicator defaultSizeForStyle:kUIProgressIndicatorStyleMediumWhite]; indicator_ = [[UIProgressIndicator alloc] initWithFrame:CGRectMake(281, 12, indsize.width, indsize.height)]; [indicator_ setStyle:kUIProgressIndicatorStyleMediumWhite]; @@ -4663,6 +4776,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [webview setFrameLoadDelegate:self]; [webview setResourceLoadDelegate:indirect_]; [webview setUIDelegate:self]; + [webview setScriptDebugDelegate:self]; + [webview setPolicyDelegate:self]; //[webview _setLayoutInterval:0.5]; @@ -5748,13 +5863,17 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [self updateData]; +#if !ForSaurik if ([packages count] == 0); else if (Loaded_) +#endif [self _loaded]; +#if !ForSaurik else { Loaded_ = YES; [book_ update]; } +#endif /*[hud show:NO]; [hud removeFromSuperview];*/ @@ -5833,7 +5952,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [database_ prepare]; if ([database_ cache]->BrokenCount() == 0) - confirm_ = [[ConfirmationView alloc] initWithView:underlay_ database:database_ delegate:self]; + confirm_ = [[ConfirmationView alloc] initWithView:underlay_ delegate:self database:database_]; else { NSMutableArray *broken = [NSMutableArray arrayWithCapacity:16]; NSArray *packages = [database_ packages]; @@ -5884,9 +6003,11 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { - (void) cancel { @synchronized (self) { - [confirm_ release]; - confirm_ = nil; [self _reloadData]; + if (confirm_ != nil) { + [confirm_ release]; + confirm_ = nil; + } } } @@ -5919,16 +6040,12 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { } - (void) progressViewIsComplete:(ProgressView *)progress { - @synchronized (self) { - [self _reloadData]; - - if (confirm_ != nil) { - [underlay_ addSubview:overlay_]; - [confirm_ removeFromSuperview]; - [confirm_ release]; - confirm_ = nil; - } + if (confirm_ != nil) { + [underlay_ addSubview:overlay_]; + [confirm_ removeFromSuperview]; } + + [self cancel]; } - (void) setPage:(RVPage *)page { @@ -6238,6 +6355,72 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { return hud; } +- (void) openMailToURL:(NSURL *)url { + [[[MailToView alloc] initWithView:underlay_ delegate:self url:url] autorelease]; +} + +- (RVPage *) pageForPackage:(NSString *)name { + if (Package *package = [database_ packageWithName:name]) { + PackageView *view = [[[PackageView alloc] initWithBook:book_ database:database_] autorelease]; + [view setPackage:package]; + return view; + } else { + UIActionSheet *sheet = [[[UIActionSheet alloc] + initWithTitle:@"Cannot Locate Package" + buttons:[NSArray arrayWithObjects:@"Close", nil] + defaultButtonIndex:0 + delegate:self + context:@"missing" + ] autorelease]; + + [sheet setBodyText:[NSString stringWithFormat: + @"The package %@ cannot be found in your current sources. I might recommend installing more sources." + , name]]; + + [sheet popupAlertAnimated:YES]; + return nil; + } +} + +- (RVPage *) pageForURL:(NSURL *)url hasTag:(int *)tag { + NSString *href = [url absoluteString]; + + if (tag != NULL) + tag = 0; + + if ([href isEqualToString:@"cydia://add-source"]) + return [[[AddSourceView alloc] initWithBook:book_ database:database_] autorelease]; + else if ([href isEqualToString:@"cydia://sources"]) + return [[[SourceTable alloc] initWithBook:book_ database:database_] autorelease]; + else if ([href isEqualToString:@"cydia://packages"]) + return [[[InstalledView alloc] initWithBook:book_ database:database_] autorelease]; + else if ([href hasPrefix:@"cydia://url/"]) + return [self _pageForURL:[NSURL URLWithString:[href substringFromIndex:12]] withClass:[BrowserView class]]; + else if ([href hasPrefix:@"cydia://package/"]) + return [self pageForPackage:[href substringFromIndex:16]]; + else if ([href hasPrefix:@"cydia://files/"]) { + NSString *name = [href substringFromIndex:14]; + + if (Package *package = [database_ packageWithName:name]) { + FileTable *files = [[[FileTable alloc] initWithBook:book_ database:database_] autorelease]; + [files setPackage:package]; + return files; + } + } + + return nil; +} + +- (void) applicationOpenURL:(NSURL *)url { + [super applicationOpenURL:url]; + int tag; + if (RVPage *page = [self pageForURL:url hasTag:&tag]) { + [self setPage:page]; + [buttonbar_ showSelectionForButton:tag]; + tag_ = tag; + } +} + - (void) applicationDidFinishLaunching:(id)unused { Font12_ = [[UIFont systemFontOfSize:12] retain]; Font12Bold_ = [[UIFont boldSystemFontOfSize:12] retain]; @@ -6248,7 +6431,6 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { _assert(pkgInitConfig(*_config)); _assert(pkgInitSystem(*_config, _system)); - confirm_ = nil; tag_ = 1; essential_ = [[NSMutableArray alloc] initWithCapacity:4]; @@ -6259,7 +6441,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [window_ orderFront:self]; [window_ makeKey:self]; - [window_ _setHidden:NO]; + [window_ setHidden:NO]; database_ = [[Database alloc] init]; progress_ = [[ProgressView alloc] initWithFrame:[window_ bounds] database:database_ delegate:self]; @@ -6296,6 +6478,21 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) { [self finish]; } ++ (NSString *) webScriptNameForSelector:(SEL)selector { + if (selector == @selector(supports:)) + return @"supports"; + return nil; +} + +- (BOOL) supports:(NSString *)feature { + return [feature isEqualToString:@"window.open"]; +} + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector { + NSLog(@"exc:%s", sel_getName(selector)); + return selector != @selector(supports:); +} + - (void) showKeyboard:(BOOL)show { CGSize keysize = [UIKeyboard defaultSize]; CGRect keydown = {{0, [overlay_ bounds].size.height}, keysize}; @@ -6375,14 +6572,14 @@ void AddPreferences(NSString *plist) { /*IMP alloc_; id Alloc_(id self, SEL selector) { id object = alloc_(self, selector); - fprintf(stderr, "[%s]A-%p\n", self->isa->name, object); + lprintf("[%s]A-%p\n", self->isa->name, object); return object; }*/ /*IMP dealloc_; id Dealloc_(id self, SEL selector) { id object = dealloc_(self, selector); - fprintf(stderr, "[%s]D-%p\n", self->isa->name, object); + lprintf("[%s]D-%p\n", self->isa->name, object); return object; }*/ @@ -6430,10 +6627,23 @@ int main(int argc, char *argv[]) { } size_t size; + + int maxproc; + size = sizeof(maxproc); + if (sysctlbyname("kern.maxproc", &maxproc, &size, NULL, 0) == -1) + perror("sysctlbyname(\"kern.maxproc\", ?)"); + else if (maxproc < 64) { + maxproc = 64; + if (sysctlbyname("kern.maxproc", NULL, NULL, &maxproc, sizeof(maxproc)) == -1) + perror("sysctlbyname(\"kern.maxproc\", #)"); + } + sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = new char[size]; - sysctlbyname("hw.machine", machine, &size, NULL, 0); - Machine_ = machine; + if (sysctlbyname("hw.machine", machine, &size, NULL, 0) == -1) + perror("sysctlbyname(\"hw.machine\", ?)"); + else + Machine_ = machine; UniqueID_ = [[UIDevice currentDevice] uniqueIdentifier]; diff --git a/UICaboodle/BrowserView.h b/UICaboodle/BrowserView.h index 7a227d0b..48dac915 100644 --- a/UICaboodle/BrowserView.h +++ b/UICaboodle/BrowserView.h @@ -40,5 +40,6 @@ - (id) initWithBook:(RVBook *)book database:(Database *)database; - (void) webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame; +- (void) webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)window forFrame:(WebFrame *)frame; @end diff --git a/internals.h b/internals.h index a34c29ff..62b46e26 100644 --- a/internals.h +++ b/internals.h @@ -4,6 +4,7 @@ } - (BOOL) respondsToSelector:(SEL)selector { - fprintf(stderr, "[%s]R-%s\n", class_getName(self->isa), sel_getName(selector)); - return [super respondsToSelector:selector]; + BOOL responds = [super respondsToSelector:selector]; + fprintf(stderr, "[%s]R%c%s\n", class_getName(self->isa), (responds ? '+' : '-'), sel_getName(selector)); + return responds; } diff --git a/launch.xml b/launch.xml new file mode 100644 index 00000000..6e2a1535 --- /dev/null +++ b/launch.xml @@ -0,0 +1,7 @@ + + + + com.apple.springboard.launchapplications + + + diff --git a/makefile b/makefile index 840ce38b..74130908 100644 --- a/makefile +++ b/makefile @@ -4,16 +4,6 @@ else target := $(PKG_TARG)- endif -frameworks := - -ifneq ($(wildcard $(PKG_ROOT)/System/Library/*Frameworks/QuartzCore.framework),) -frameworks += -framework QuartzCore -endif - -ifneq ($(wildcard $(PKG_ROOT)/System/Library/*Frameworks/LayerKit.framework),) -frameworks += -framework LayerKit -endif - all: Cydia exec clean: @@ -23,9 +13,9 @@ exec: exec.mm makefile $(target)g++ -Wall -Werror -o $@ $< -framework Foundation -framework CoreFoundation -lobjc Cydia: Cydia.mm ../uicaboodle.m/*.mm *.h makefile - $(target)g++ -march=armv6 -mcpu=arm1176jzf-s -I../uicaboodle.m -fobjc-call-cxx-cdtors -g0 -O2 -Wall -Werror -o $@ $(filter %.mm,$^) -framework UIKit -framework IOKit -framework CoreFoundation -framework Foundation -framework CoreGraphics -framework GraphicsServices $(frameworks) -lobjc -lapt-pkg -lpcre -fobjc-exceptions -F"$${PKG_ROOT}"/System/Library/PrivateFrameworks + $(target)g++ -march=armv6 -mcpu=arm1176jzf-s -I../uicaboodle.m -fobjc-call-cxx-cdtors -g0 -O2 -Wall -Werror -o $@ $(filter %.mm,$^) -framework UIKit -framework IOKit -framework CoreFoundation -framework Foundation -framework CoreGraphics -framework GraphicsServices -framework MessageUI -framework QuartzCore -lobjc -lapt-pkg -lpcre -fobjc-exceptions -F"$${PKG_ROOT}"/System/Library/PrivateFrameworks sign: Cydia - CODESIGN_ALLOCATE=$$(which "$(target)codesign_allocate") /apl/tel/util/ldid -S Cydia + CODESIGN_ALLOCATE=$$(which "$(target)codesign_allocate") /apl/tel/util/ldid -Slaunch.xml Cydia .PHONY: all clean sign -- 2.45.2