From c11fe99bda34005c3f18de78993fe4ddd35a0bfc Mon Sep 17 00:00:00 2001 From: Okechi Onyeje Date: Sat, 27 Aug 2016 18:21:08 -0400 Subject: [PATCH] Multiple Images Works for Firebase and Facebook Currently getting the correct number of ebay images uploaded with listing but images are duplicates of the first image posted --- .../UserInterfaceState.xcuserstate | Bin 47817 -> 72428 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 1084 +++++++---------- Vendoo/EbayWebServiceManager.swift | 36 +- Vendoo/HomeViewController.swift | 4 +- Vendoo/ListingPreviewViewController.swift | 294 ++++- Vendoo/Main.storyboard | 6 +- Vendoo/NetworksTableViewController.swift | 2 +- 7 files changed, 718 insertions(+), 708 deletions(-) diff --git a/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate b/Vendoo.xcworkspace/xcuserdata/okechi.xcuserdatad/UserInterfaceState.xcuserstate index fff33d0acee778e359fe7ff800ccd94b397bd93f..5ad267a386778cea45e43c7495991f321deb8513 100644 GIT binary patch literal 72428 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 kefcEvY5S+_PcJ?dep+MOrsbsN+->Tj zLW>|FB!cuI1IQ3^hFl<5$PIFbJRmXT2}MIOP%IP&#X|{DB9sIrLn%-yG#*kyrO*VZ z3@V2zph~C;ng~@xQ=mp@D%1qcf@VW=pl+xKVxeAWKC~KI1FePDLF=In&_-wzv>Dn9 z?SuA12cU1EgOKVw=zHiGbRN0_-GXjIKSTGR`_KdEG4u!Y5_$!_hTg#t48sU4f+<)V z)`9h51K0|-gQc(x4uiwt2sjRohtuGZ@F+M79t-Ee`EUVT0*{Bw;3{|`TnA5vr@%DK zz;obkxCdt8UU)vd8eRjhh1bFBRqzIQBfJUT1Mh|R!TaF@@VD?m_y~L&J_nzNFThve ztME3^+ zkrl{FWDT+j*^cZ*_96R`ACM!+dE^3e5xIn1Mt(=`A@`97$V222@)&u6yhQ#+-lGsI zLJ8CmHA0P1Yt#mHL)}piRE+wf{%8mqg(jeB=y0?MEk;Yw@u(6lMQhPI6s zZAUxMPP7Z{M*Gou=ojb!x&-|SU5BnmH=|q79q4ZK8*~r47u|>MM=zik(M#xM^a^?v zy@p;#Z=g5PpU_{>-_ZN$BlJ1?2176u!!Rvu2&Ro0VaAv>W`o&cc9=cpfVp4+*f1;* z3&MgiRR|V}g<(lpGM0j+Vrke&Y&13o8;>cmQfvZNhE-z?m+34#S-f=EG(AYPCpNEKuV zMhLP5V+1*Zd_j?5ykLT$LNHNKD`*f*5i|*C!3@D{L9?Ju&?)E<^a=S$|_+IdX;F#c~;77qZ!9~Fpf$F;8mf()yuHbjU1Hog# zQ^5%j6B2*+05h5*-jz~{rC^8Y5i>ySpA_tMP$W0^`d5e5S za*@9%P!u8x7e$F;MG2y0QJN@IG*YC>7L66MC(PHL|a8WL|=>ci1v#PiVlg6h>nX+iOz`5 zi!O<-if)K*i+&dUD!M0nDEdS6O!QLpr|6yNJ%JE7AtES3n;1$M5XLIPjIbnZ2z$bb za3wqlFT#hA5q`ulBA5sxqKSB-jHn_e5_Lp9F@-DmjK6 zOO7LR$O&W_Sx#1vQ^-bgDmj;ICR@mUavnLKTtcoOSCVVUwd6)}6S;%jNq$3qM;;+h zkY~tCFY@~C{OfGVVlsA8&w8c!*ya;k=^ zrRu0=s)cH$+NgG_gX*NZsBWr6hT2ALr*=>~sa@39)Nbl~ z>JW99`hhw_ou$rE=c$|2E$R;SjCxMJpk7k1sJGPL)O#&R3)aH5^t6n$jJ3?QEVOL2 zY_%NOHAJvGET=POqSY>Bt=2U^euosbh|xx5PifKSCxBk5Gh*rQuR< zv45CPq&Qjvy7BRgmV>U?=rc0*n=`XjXCVS2Aqw(>0wAZ=kT)cOd>~&)3dtZjq=5V& ze|iY5P3zFQ^iW!l)~5|2v@tLwlRirS$iR*a>_x9& zU>^qdr6b42MMgyxDr+mN!>Wt&a&&b8&KO_Wkeny1SC-@fI=k+iIV|SvXI;+CQjG=- znR)q%dHF?UgBGSiV>k=bp$sS!8V-$sMna>YEGQcqO`FiBv>9zqThNxY6>Ux1(6+0g zvCuduM{Q*gQ~(u1MUVq+M_1AF)mCQGE9w385%3uV&ftT6NtJ~~IWg?1^FnsQ`Aipm z&=6TvoL5&?8(EZJSHhb=RQLYkoq+#p#?;ChWv#NZf;GM9GR`gpf}layra=rRsDfzPnRZzMO^0UCuJlMcGApdC zwy3%yueK;NDNk83$UhfqgY=d{%}@)}O1shSw8v7Y9Slb&Ed~QHoDN|-FXm-JebBrC zsGs(vGX@1eg9ad{mC)zV7toi`0%#$$2wF^g(cZL#_Mv@gDJ@$GErFIo%b?}p-%4l| zEvFT9D4hcSrP671B)j|8YBy*Lv=h=>25p75LEE7nv>)wH2hhWoLA#)@AxG$II*<+m z85soZ_-c3K=n02iGs%4;8ofPiyqiR4phM7M=m+RXwnIT#UQJC!UU|_d{$o+inBwJpnd8g`Ppr zp%rdznyYZ?q2EB!jf)7R-oBx9TX763~z@YblY<5iyyRvJySyDDGaTOqC zit`GJ*zwogRWJ%xP7FE=3!rDfWY7G(nxfI*Z*@^wUahje2!t)2PEhv*6EHbEIRhBG z1SX)PJWUH8GA=nIsjfCJzpO~@@KRWdb6FRR09ZI+U65q(P1Qa%eP5(1%VKXQQwxCCWtgWC!c!k!`|QA1p9Q8`$3 zYLyiw8AUZUU|Q)SgFP04$d90vAo7JHMif;PR#yH?izc1na*)nv=`xVG5PN$^swPp5 z>^^1}T&~WfGJXu}xiM^@E9qEP_g4dpPm-V!ZUVCko=Q&~fTz*bU{;x4^cn_Fhi7t= zjiy}&;8}DH9XU8Qb75|&gPY+NxRtJ@>*)HWFj(r~PPze@-mh8e;6ARyetOc!r1=cy zmOA)z_zU<;cmcc+UIZ_uC(~2tMtUmUL{FntD?!pMg_pt0!M~O8Dv&fZJ%?@q|9a^@ z^-|X%88l-vyaS{NyanD0Z-ckf3_YEmLC;(U?}T@$Q)CuB`{RmNRCdswdZF(tibQ#Sro`@G0o;SepSoPFKd=V+T@rFBw$hfushGu_46o?-ibkhl6g7^bE z_~b)q5)%nT!XT$*NDvZ?gdm~xD*7vWHN9pT5{^V5kw_H1mflS7q4$Dx&iOUS4M{}O zIQAqY8A(A>>2>sadIP<28OY%vBoiEvf`MC`xI+%R zEdxkCy%jJGyI|^#6hrftASK9ndK>-qhoc5E0jYrWmLO$FIlZ0Uu>`3^s_32cE-+z- z>DuOuN-Qc?pPcMN8yAC<(1)`S(tu3)hg>5vmEKK%Lx*IgD@(>}WNJ?TLxw?SaE48% z_YHuRHxn2}{BEv?%tcx_ax;Bk0BNPa?U_C^ih@el?A@-pai~qrT6gkD^#xdkLasoL?pP|pv=jijxkkiPI z$Qk4;eSvY^N73y#3fx@Qhsa-U-2YHI3=Y6i`? zg4~9jRv=fAYshuv267X*MPH;Z(U<8f^i}%W3gjo`4)QbPh};EFHrMF~^h1z|Pr?5q zS>5}aRLCF5Q%G+Bc|zY9K%UVz2Ln7JuMG4NR+Cv>G`N`~uaGz3ERDQI{-kfwx0fJq zk$3b@^c^}qHYqW}2V5Q>I#4HxP5 z0W^Ys^06TrjpZ7a(=7vPpHzc;Hkybgf9O4he)h5VbTs21S&xoD$AYv#N1~(9EHoRr zhK`|M&@bs%^lOkDf3AQW(H!tt38&BOVKKHB3e!V&A<=?>vN)pgOf9AQdJ%}Xcck?r5ZNv zsU3UuiJMA2_0UP^lmWO9oRHqD*JgAo+5{d?G$&y&cuN6g8gvw#m;o4!FOANI^p>L) zzM*XrS1K)*$h-@@d8>NRDN9fmE@WTSXd~en=7aM%`WXX@=!{Rc zN$4!P06K#%LKo8@2qc}%zyt&9vD2UVd!b9gPKho9=B+?iGBCx!Ll{_xfptIZmgs73 z&tqUMFaU+@gJ%gUnX9KuL0M%DnEE#MlK%y0c2aZ$cfe)9{s#`UqcX>X6|vApGPuot zauyxr-^uqll^IL1bjEp4QWSrT4>tz{U=C=OB9;0feQ;b3 zpvNGmuh4HnihYNEj~+q~qd%ZW(4!1&OkZMP69zVAU^50bXJ88kwq#(duRz+JKu@Bl zz~3LyGvL4Hxa6~DU>gRumQ>}xLM0>yy#N~25%I2i5JkkrRYoa z75bWiof+7TfyEy-3G^-cx5=kVKl&a6L+`@Cu3!(2d1-Hf;h5-C28_T+26ks)55O?@ zrBynngX#T)L7&s$sn)>1#2H?z1aCl;U=0QXs<9R`!MG(4GsQqWy%|`tgiCoY)xm21 z=4CjX!#>$!&W?KJ%HBL_j`Am2hX^C}v!m3n2|PSXeEh)60)>yiCVZG9I442I;7!-y z<2>eyNx<s0V`vFz9Fo ztTB=7WOAqfpuOQ(4A}Ru2rLqd!lD^Cgn>gDIE;bAmtnD392SoyFmMEeG&9K04DvUS zUQ3;H!P2ozFeq3C14j;E!x=alERFDor)?~oI|egw6q`CUJ8-b8u~r^w}rcONS3CDaXJP$7cgp#lVT0 zY`|*3SploX>KHhQfzv-E0yYV21fz&e#-=bZnD;45u&G!R1E(@@n))=B>@}!)CN}3k zIOk%`3=CY%RG%%H_NxyJtd5?ApE?7vPB1W77Xy!^W6xnMc<}*Ve_*{>AJ&h}%c?0V z121mCQzrvwGjJ9Ik7AHHARc3-CE-K6$w!0Tet|6lYc}>Jwg6kmz@r&>3rgI`h#Ez#lBcR~HKn4&gA4;3$saI4;12 zxCke35~px2d)^WhP+Sk!#|>~p+z2k4(3^&Iua7)|@x5jO7Tigz}#~pA- z+zEHaU2s?24R^;qa53(Qd*R-=1oy#xRk#$F;c{Go`{Dk006q*4#Dnl)JOmHL!|-rC z0*}O_@Mt^+kHzEgcsv15#FOx3JOxk1)9`dW1JA^V<0J5q_$WLJ&&EgNWAL%~I6Mc> z#q;odyZ|r6i|}H+1Rswp@lt#OUWS+B6?i3Hg-^t*aa9doi`U`xcmqBOpNvnz8}X@l z6Fv=B;WWY_)dHm{x!ZE{|4WK@5T4w`|$(#xA;N)JN$e65Plf{0Y8Et#gE~~@e}w-{1ko~ z{}DffpT*DN=kW{pMf?(e8Nb55DX;^J!2|{_W8iWI2D7G;fx!fy$iUSMT*JV%3=AfB zJp(r|@FWJF%)nqqH!|>41_twa8Uw2sm}X#xfv0bg7i)pj>R|rjkGZTpVB$z{*^Gld zM9DrfG3U_>4h=Q64o)vhw$Rj-Z~U7>eWtc*B!D@z*Hp|Sj6(yZ zK0Fd~NNmQ-3BbOhWXG8)w7BjC;CP|T(RF9@%q-bGW)ZTq|RPnDmt4shWjG5b?2r&8-yin!u){WUDG|d0DVs z09hAKmR)RRz_TQBET<}+c$C7SzbZX=1hyd%qAD96fxU%8ChRzCjrvg>g{jhn39P?L zc3qVj&pnPqr>Zo=0#;Nd`?5+i5MWtVvaS<-c~14hm}aBlEaloJ+1T@KAf1(L>qJdp zKu#;!Jrk|?Hjvm#_N|R3Odz|JtcR^;I6;al*`R98kbyi`vMsh6PLS+McDJp@$LSn; zZ0o}7oW&t)J57IcIh1Cn312HfTPrwK|ghi=#K zb3`zYLss^hFnq3-wdd!SU;&4w*=rnM%%SdDjRQ+Lbi-aVMOFaRQ>PL8ifa`2ca#8a@{ow9XM1qRb#6&hZaudlSJso zp?mIpP71{wvi9IdM(E9<6c0WcLSGJ*Ht{Jclyhi<2S06v{v6uV#1FPGkVB7~G(CiH zXqecO4?{SICW1sn~*4y)GON@+4*DUYCNovM!16D^8 z%8NE~lzr3P*#*=2i7K4NQ=<5GhC@#z;k@dZ0Ojb)SjNYRRn5@jS>|vo6Qd2-TRv9o zMjw7h5VmmCTk#xKlUMB=WoU>2>+P%Yq-#)ezppXd?5jyEc2IJ^uST+;qwJgR$maTB zZ0IZt-k8q-HAmMC7-Pp)NGaZ!FF965>d&J^9NH*1WK(?%*!xm_p1Opi+Rl#Q(Q*z| z&6e>>R{@lx>!mAlKnpH*u_7Fl=TRv+Z(? zOItbWMtLC5vx7rv?G~)A!irb*wOW;g{n6iv%~5Fc#64=F4%bHZ1&^)A2-N&=W|pRqZ(Yu#IBZx9Rh0epO3wQ8HzNhw)29?E$>dA8Mg&wNO={9%~lp!#6xrH~4EBG^^`NHF4Mn?y3$=BK^rJ zO^q{P|L8Dbb%Xd#L->xPaw+gfheqprwSr(yK~In_yCH~Qp+yMCc`AsXY9gFNKQ@E$ z2=-80BND0Q(pc+Y8`iUnp9~_3W1ARl&fW;-mj{tHM;RKz`z9Ky77AgXgqyGxA^hSZ zGT>Mihoq@TUSzCB-I;tZW@>>%ARuQuLiv?SWXZ8ijP_)0!YQ`1X9&+~qhW5Rpi09`?J%-`E^9(#Zex|@m-z| z=MUy0AC9`Xo2NQQX!?|K)P2$Z?2HKhTqW`YlpNg*mNV^61iu!GhH-3*!aUhUQ95jV zq&9C%Fh|XeOyW@(uZrU_X5T~_@}5Sj)g`Lcd4~$v^-&^rOwQseyDpJVxbTvVhMj8>1dERIiN z(RiLMj_+v#hX&#_HdS!waa=s#HjzVN@tU?;UM`qD5znu^q6Us~D?XOzp2DGt(bjBA z0)GS%HSz5Z?2-h2R*Gnjaxx*2mzcpJFwa3CDfWH5E}NF9v2nIqSClooF@<7tf<)|w zB%EEEsF_C1Tmt?>)+9~l^n9vQ zJ4nE4Cu|H;k~JdpIg#8*-V9FUhh%<55PiY5EDHPBVws}J*s4GRYwR;wF0S2+no_FXE!r;FBcimlQ#L*0M<6mi+!D@nIhXc7VY#%o@JMsC6FDO?#j+i*QD1s9E(-jF!p9T|4=I0 zr)HCLnv9ZDGUFnm244V(zEw9V)SZ-NX!7NIPJ=2VhadePI0P@#WX~}Ur7h$4XwgXy zEnXJRbN#Zi;gLML$RWR#{G-0;3P3r!zU;7-mh8Nhro1=T)x*MV!W#atK)`C&7&Yq;YxtohFpl-c z8a@{YA&0!z^0`2eY5}!w!;GlJ=$yFZI8Ym+Hi;O*vxcxH>-fVCq03Rc)@7(YA@tS4 zaqNK&LF~~%79)=3_BuYL2~#yo24IOZjfu)k9hn3EJD4Pdg}ODBYt>Im$jFRJ8hkH7 zSaWK;)`hYuW3*U$tWX_a!j7ZnZ5YlYM-J`X!0&2=i&|L_yJ@2f8?})?vJviT;xIL_ zYa>5`geNDrej|UxB_wK=aKIvFT{iJ63?b!Mx;DxAjuad^xk)A+j7)%9#&md1QMDM< zYbq;>3a3s51yDJfFIflqf;d6*Tssf$JrohDmNNdQRBB3OMoxN43Wz#*!%Kt{5$u9o z8{twSl86Gu7YlNOR74B`zWV&++j}B`7!5gX(A6Oli6kPKNFh>*G$NhIATo*J#0X*} zF^b3{vKgd>LE0FkgF(6&q=!Lz8Kj><<}=9W4Duy|EM$c!yx+@PfSui1|xEj=shLq*iRTPZZ)VHM<6$dGb3;q3l z3gxn5KW`^BXEetcn^!YF$j3)6@%NYc2Kf5=D|}?WGKsg}Cp?4Vd9r+&qM*q8Q={5> zqvm~D0QaefJ$(CTIl4uhhwSE^rk@689^d>0h$mM+CuBEoxBOK6OTK*pcdi&15^WC3 z6u2s@Pc0bWSr)N3b{2dpx`L+<ps`=EJ zZ9IKtj&6n88S!=@d;gS$N?oQ->?HPpFVOz0@|f65?1LPM0}S#NgRBN$$|7s%NUmD* zU{81Bj?s<4KsoqAQR3f})##&8s4I~*-#!tCiQ_;e@dI&$I7%F2kaY~Qo4`jxe}L&8~>xao5U?% z-Bt$K#%lvcD*yc1bI;FNT9!Ns@4J6;*^a`y*i%16Gp4YPQgd?m6$n@E%t0ZowVKTE$! zf+Tr0dl+Qz2Q?E^C#;_6gKAlYzq$@mqWGX`C~5R>-jT+n39o2BgB3DRxODK7ebkjk zj`(+7K-EZc6y!*P{pB2koaeItf;#(4_RN0el0Lf8$43SX^YN24jRK!R{JcL{m`fG` zt)C{p>O=OE#bgOkt7MQ%404%Mdqu5Q`OrakY5tf-DbNTK4NUr`(Ty@ciMk$I`ayLi zS<4yxuftMD*7Lq!W030~L+Mshdq_1M#FAS{fNGh~M@yT?=|J6o%?5G?Ig?j)lL19# z>KO{=6jy=UxALDAxS9!1wvt^y(|@fYWH;FZG^xNm_=!R8d{8xEuH^BTGsiT79fQjh zx$j4tJ|h=^FRsbY$uCH-egDEBzcR@0OUZ@gA`)!m_Zj3VgS`32&Py)mm$$n)x;}%8 zaam;v*wVm7AK!?m=x~+T$3M(ZERFD$fD1f+3UP$O-{0HEJ0jXAO8&`iK(6LB{q|p) z6cV|&L>}fZjs#bI#8O{BA8`Li5(RD-h57l0NBV|K{6OW+he`!<1Fz^FuP9!<-SRd? zD10I#!MZP&%6$}KslPk|nB*NMmiR?Tq9bJ95pw^C!KiK~!58oYBsh#b7$CPX$V0GF z4n1HylH3KptS3QGAJMVrxw{eM9_R_Vm)r-cD8D0@lLtX1Ns+n?E3-PUqNbo)Syh{* zR4pym$}G00s8d3=`qo;(B!aB=c5`2*W>zrw_ioC+P1rAp){>`o1BuF9N@|O(q>i=(ufV;ndQs{j0F8PDH%HV@{ zk$I}xJO+8qc~AZhQRF@HK6kmJFt0W*95rH)KY4c_l8?rIC{Bn3jZ4Xg!QgaU<_0~E?2?*}NH zLE(SQ8j4h>C<;o?$MB`+?5{gx*rbC-KGYCO56osto6@0lsi6#tFeu8P7=z-=D1B-u zWk?w@r~p6)6)`9UhOh5ntq)}hT%)WQR7l5WXG`P7dEsJZimxUjlpO`OlmW_~L5Ts% zkwHly7Wkb-qqO!sS#qIWU+5yZFcmeL~-E=afKp1dt$~2@rY7!MM-LQ`N&9dxkOx? zmXSR^B0?NfDz5XJoUI7=7N>@ZYfB5W;~K_`YbwO5JnyvZ_&SL=MlSZREY41y5G|I( zi)CTi*)d5nv22t$zCI$mu&hk%8zYWOOU%xX^b==RiOY(8v%L$I;>uKUK}=e9neP;F zbc9$DDbJQ?juhvWiPI8F2FI?Hn(&W@Gpd5B0_CVwC4;&R8=xjKs5>3P-AGIZ4+VUM z&fo*n6Ka{0V%bbiQ8 zq%deI9a#X`I3kdZdOf3VllQk&A1wyg75*HwL?RsK59%vS@J0o=t|frxtp*SNDd1H=rWQqv(i#G-($ewM(p5j=gLeS^ z+@n7_mV4+2H^o5zc??Vom$7Gd>|S}t0y!!v5Z<2((6AM7xN?7+`-$e;iy1pG#TzR(8zE`TriJ%A8l82CMa zSYf;{3H%;Fy|7*QIk?)tMz{`K?%yQb0rFoLDCTzh?c}K!ob5~wMNC^eu4_?<~ z6E)!W`*v`z{V9o)2H;RC1}E}JGMbD9SJxB4we?gooy;UhfGg|eWFM6*(x71(YRyeFB){4>^t5vL})S94Gt~EugS*um6 zU8_^8TZ`4|)0(HXLTi=QYOS?e>$Ns&ZPwbVwO#9=)+w!fT7RpCm<{n85;-JmNb!)$ zArptx45=H^FoYg5eaOrqvxm$b(lTWEkmEzHXd~K`ww|`WwuQE{wzqbWcDQzecCL1f z_H^w&?M>QSw6|&R(B7rJTl+ihBihHbPiUXgzNURs`?mJa+IO{o)6vs0*OBP>=|t(o z>cs0L>7?kS>5S2tqtm6Mny<4!XNArdoqak-bdKqq&^a|UXlVG*grRvui-%4fI&0|0 zq1%Su($mtD>4odX>y6MGrI)QYMz2V3f?k#0WWBk1oqFARpX)8qTckIjw^Q$Xz2kZ( z^-k-Z(Yvg7RqwjqO}*QC_w*j>J=S}o_qYBKeI5Ow`uh5Y`o{XE`sVs>`W`BMPknEF zAAPC5T;ESWKtEM~tbVcnc>PlSGW`nu2K~wUjrvXcDt$)3MSq_DTK)C<8}&EqZ`I$f z|C|03{WtpW^#3-13=jj%V5otGft`Vafs=uYL99W%L54xKL4!fR!BT_e1}hD|GB{vx z(BQPe8G~~M7Ywc&+%tG!@W|i~1Jz#!?+sx?)Ue91$xvm;7|t+kGwd|%He?M~8}2at z+VC60eTD}N4;tP#d~NvF@Gm3C2rI9 z^%>1G`pjsB(Ke$UM!Sr58|^XLXLP{mpwStlb4C}8E*V`hx@L64=$6q>Mvsl&s*H_{ z-HfA+3yrIcn~Y~0&oyo_ZZqyMo@e}-@fXGmj29UX7=L4Y$M}hfsfnG5w@H*qj7gkH zf=QA|ipeOGJd*;GB9jsmrO5=7NhVWFrkYGMS!%M}WV6XulkFxuO-`F!H@RtY+vJYP zJ(E`^f112C`O6eD9crp?YG`U~+HAVnRJG6afayWg?@dpd{%CsE^t|Z<)4$C0%sk9u z%;L-v%#zGf%*LBdG@E2L(`=>L7PD<;JIr>O?KazEcE;?S*#)ypW>?Ivnf+q+$m|cZ zr)JO1UYfl&$IXT2ggIqyVs2(`VQyvaZZ0DXvdFh6v?#V1Z&7MdV^L?( zU@_UE(W1#>w#7n=uPnA$?6){#am?a`#VLy)Ev{Hxv$$b#%i<@CpDhtfYs+xU(Uygl zMV2L&wU!N*lP#xOPP3#fdo34OF0ou@xx#XlrD~hy*OuQ{?zKE<`Mu>~%OjQ-E$>-A zvwUYoSZQ17TIpFCTbWv!TUlB;TX|arS%q4KTSZyLSjAb5wJNnLx2m+NwyL$Nw`#Fs zt>#;OZuO)Dz#;vuj z&8;o0EmhXm)*jYg))H%}wcOgzI?OuSI@UVgI?+1IdYpBxb-s0pwbFWmb-8tgb%XUx z>t^d#>vroN>t5@A>-p9L*6XczSnsmlZN0~OpY;#cN3D-rpRztjYkHmx?QB{rLE4%+-`Yh)|44Y!T5jj@fl zO|(t6&9yDJt+uVTt+#EoZL(F_GPZMV+igF$U1U38yVQ1-?P}Y#w(D&-*nVUCz3pM! zBeutEPuO0ty<~gE_L}Vt+grB3*gmp-YX{jOc9~`Dj zu{&ya!tRva8M||K7wqoX-L?D8?!MhayT^9#?B3hM_L#lEUSw}*Z)9(5Z))#k?`to! zSJ?a853>)l53x_QPqt6BPq)vsA8DUuKia<0zR!Mxz3Qm_FZNIE|FnN=|CjxH2Z4jg zfpXAx&~kc;^ zZae(!aMw}WG2F4hvD&fGk#?NnILmR4BkTC3<08i;j>{Z(Iqr7c>$ub%1FE9W)N>zy|_Z*ku4 zywmxt^RLctT}T%@7r9HiONq-gmpLwTU0PgNmtL2Cmqjj%T~te4*0`*7S?{vLWv9#6 zE{9!?x*T^o<#NX5oXd5WpIv@+x##lG<*~~ulF%*H+hsu4`O3x^8jZ?z-D`kLy0y1Fm=6 zV7CIdxo!h)tKHVQZBV&wa@*^6!tJ!%S+@&rm))+p-E{lO?TOnnx0h~zy1jFI?~b_R z?m~Af_hIg_?m6x~?#tZwxgU2w?|#Yss{0N1+wS+=AG-hH{>=TQ`)dy$kI^2pJob4U z_c-No#^b!lC66l}zk2-cao^*SI95DdJWiY^E)mlx!Pc%fceUM^k|FR7Qp%ik;BE7NPFSGLz!uUxOMy$*Vv_PXeG#p}A) zEw5j_?s+}%dhGSY>$TT=mA8X;sCS%qqIZgSn)f*G3Eman6TNG_8@#7@H+i>sw|RGZ zcYCwm{oeDvKlk3}eN}=;TqMbo3Q2=xilj-RlFXI#NctpuC5I)KCATEMOP)$Sr4p%B zs*naqgQTI-2x+u5PMRo9k)}(BOGimZOUFs`q=nKFX{oeas;ZLKNb9AOrBkIU>2&EV z>0D{6v_sl0?Ul}xelA@gT`XNHT_OESx>mYDx>>qSx>LGax>tHY`knN!^r-ZN^tAM> z^n&!V^qTah^e5>r(%+=_rH`afq|c?Vq;I5u$sidj6UYdemP|*cCo`0p$joI{GFzF0 z%vt6p6RTw2;F}w{%wHBL3z3D(qGYkM1X;2yO_nJeDa)3PmF3C`WW_S2tV~uZtCrQt zCdnFQ(`1ZnrfiO^Mb<9slCiRW*=MpZWs77>WXol%WNT#WWt(JMWjkbF%l63j%MQv8 z$&Sd5%TCG8$j-|y$*#(7$ZpGimi;QbCsRF?{ULiMdnx-<_D=R*j>vJjNKVPMQVzS4>t+Rj3rx6*Cp>iY~=w#csu3#RbJp#ZQWNez>2= z&)rW7-ms7LEA~_R&GGB85uz0m7!nl{8&Vij9#R$374ligmmvp3j)$BIxfk**&{?5#L)VAy2>m+rPUwTs$6*FxmSHwwF=44;8DSH{ri3+xeHpeqY*pBy zuv1}Y!k&e_3ws}K8g3Wv7@ib9B0MX+F??qDobZ+58^gDRUk|^l3jaOAB*HerAtE{= zB_chdK0*~SJz`nJx`>SthayfzoQb#}@jT*Hq)nu2q(@|AWKv{mWJzRIWKCpGp~i2N?{cI3Uthf#)6R#CQ50a4)9b5u!GRa8yXx~T0@yP|GI{T}rodT6v+v}JU7 zbV77;baixN^t9+j(W|0WYofo8J{kRE^o!`fW8fIe7^fK5n7EkqnBg(iF^w_PVwS|L ziCG_WH0Er~g_u{dP%Ikj9xIJi#Ey@h7+V|L9s7Cgg4q4BM`Dl1K8Sr0`#R1k&MVF* zZbV#8Tz=g2xYoFixHWNG<95XT7WX9XdAwP?eY{ir$oSm&g81h6p7=gh{O0)G@q6QM z$KQ*8m|&D(onV)cm@qtHR6`Azp@LR(DL_wlXqF$nZVt8UyVnt#@ z;*`YYiR%+LCH|OrCGmQaFiAH_KglmCEGaUnG^r-3K52f^K+>|LJ4p|c9w&PyE0P0} zvy$_Zi;_E&=O=%WyeawX}2^y>7w^tI{R(s!o6&A>8*8HpLgGe%{6p0PAzMaJ2TYZ*5)4KuAWZ8Nh~nFX1} znX5CmWNy#=E%Qm{^Wk2@{e}-4K4tif;j@SD9{%0%!z0KM`Xh`+q>LCfV)Tff5nqg0 zIO5ERt0QiV)E{Xv(t2d_$dMznN4AV)NA{0AJM!Ado1=z~G8<(%Du2|3Q5B=MjQVEO zzEOW>Az65qG%F}8G;2!MjI7yNd$JB?9m#r`rFx%@WQS)bWG830XZL4+mVGk&V)m8M z#-nXU+mFs3T`;-P_Ve*w}K}H&kKVKV+!L72MSjgt}A?3gcpg5GK;yop{C2l3+lJ=7RlFv$hFL_#`dNDp^eC+sy@!jJ;AHQJy z-SLmdKUMlE!<3QAIm#|2tGuGTqr6+{TIy3OD{U;DSvsfmcrL3y1s;fFyb*}2-M5~F;6Wu1( zO`JB7nYef2;fY79scM62xz&m5^6E-jO|EeLdA*vy^VP3=HhNTV98s0U$pA;}DVp8;^rb)9WHBUM@>Efg- zlkFzEPxhQlPi~&vHu=Kjo0ET<;yT4=ifjr!rFlx*lyg(APr23T-Y9KUG|p-4YGfO4 zHvZOle`@s9l&R@cS54hCb!(GQ)uh{`-&D|4)>PSapy_DSiD_2ToTs@>E1gy|t$y0p zX?v#apY~oQQcayyZ>NO417;R5`fS)~!13!IL4So~oGw>TI z->82jWk2{CjYr@|4xWRbAb3On#XtkC}JO-_xP#==A#OGp5g)K4*H%^fxnvGl&_~ z4DA_{XUv{4cSg&M_8E_6yq)pajQ2B&g`Da&g`Fs&eENwH_Kp_@hsJ>wpkss zx@NJn1+(>M8_qUX%{H4|I=f-^Zrj|>W~g~cvr)52vstr6vsJTmvs<&c*{j*7S=t=b9M_!DoZGBy zE^DrAu5PYtp4QAX&upIEJh!=}d3p2k<|{2o3)N!W;?N>)@orK1w#ZxjTf$qST4Gz` zTM}E6TSm6zwN$h;v`lVkY-wsywajg4ZRu#~YUyd|ZCTK=x@AYp{+5F+hgy!b9B(<_ za;fEN%k`F-Twz+Lv+s?KFZQr#W zZadO;tnEbGZ|yqmmhDmP$?YTC3){=vtJ-VY>)R){Pj8>qKDWK4UDe*+**?F0S^K*7 zuiFo{A8J3+e!Tru`=$1)?Kj$Qwcly~rTtO++YVueL5F3BO^1DlQ-^DZPlv3-uOpx% zup_u5rekrE%%xuc9wTmc24Z9 z?fj~9d*{y1uRHg2KJ9$pg>>OvqAsdyNSAAuPnWFAuPdM{r7ORytgEtXVpnxnUDu?p zSzVuXt?gRhwW;gtu0vhNx-NFz>iV-A>Nf56>JID<=??FX>W=M>?=J3ERd!c**L62^ zw{>@RcX#)6_jS+jKGA)p`$6~P?x)>vd(a+157DF7W7Ff@X3WsOLz}v7SpkS9-4X++>5<1U8c$$!4=- z*<4o1ma&y=HCx9vu&jz*$(~^EvX9xP>JFB;=_siaGy{CF#_P+1a>ND)K>Wk}3>`UoO?;GAX zs&91PxW2r;!oHHe(!TP(s=k`O`o771Q~OkX)B9%i&FSmuThOOk)wiW@Z{Lx=bA31a z?)AOshx)00qkh|dkA6jecz;s=sQ#k<;{K9;Wq*DDDss{ZNyGy8k`KkHx7zoY-_ z{yqKs`w#w~n(U<&!Y~TpcqX!7WkpR*rl#B?_iIW?5=rtE*veK>cD}&#obx#6yl*c_ zA#xicmuQ%bl-we>+=_;&!3fD>vibi$#9sweP=(aKx>mR9UOlQO6;=@yRqraM6LhNf z=^EXpJ9VGddP0ZwoBoC*NP~=iaDxZDkPUfI07Xy&T`&McFalFB1M{#5%diUTum^{5 z0%vdmckl>L5QbMw#|G@dUL3$dRLE%KFplCRPU9>t;396|CI;~sFYp>~@d3ja!6<&< zr%5o0CdH&1kLmXspUE->rpT0<3R7k3OcPDf46RX!_UV9*=#A{3<$`lK)V z;Y@DeZZ @@ -25,29 +25,13 @@ shouldBeEnabled = "No" ignoreCount = "0" continueAfterRunningActions = "No" - filePath = "Vendoo/EbayWebServiceManager.swift" - timestampString = "493665751.744" + filePath = "Vendoo/ListingPreviewViewController.swift" + timestampString = "493861794.122107" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "234" - endingLineNumber = "234" - landmarkName = "listItem(_:completion:)" - landmarkType = "5"> - - - - @@ -57,605 +41,29 @@ shouldBeEnabled = "Yes" ignoreCount = "0" continueAfterRunningActions = "No" - filePath = "Vendoo/EbayWebServiceManager.swift" - timestampString = "493665751.744" - startingColumnNumber = "9223372036854775807" - endingColumnNumber = "9223372036854775807" - startingLineNumber = "289" - endingLineNumber = "289" - landmarkName = "listItem(_:completion:)" - landmarkType = "5"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -666,27 +74,59 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/ListingPreviewViewController.swift" - timestampString = "493663551.342447" + timestampString = "493930954.132313" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "268" - endingLineNumber = "268" + startingLineNumber = "567" + endingLineNumber = "567" landmarkName = "publishItem(_:)" landmarkType = "5"> + + + + + + @@ -698,11 +138,123 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/ListingPreviewViewController.swift" - timestampString = "493662437.215315" + timestampString = "493930954.132313" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "500" - endingLineNumber = "500" + startingLineNumber = "579" + endingLineNumber = "579" + landmarkName = "publishItem(_:)" + landmarkType = "5"> + + + + + + + + + + + + + + + + + + + + + + + + @@ -714,28 +266,300 @@ ignoreCount = "0" continueAfterRunningActions = "No" filePath = "Vendoo/EbayWebServiceManager.swift" - timestampString = "493665751.744" + timestampString = "493953484.620568" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "212" - endingLineNumber = "212" - landmarkName = "addImagesToListing(_:imageURL:onCompletion:)" + startingLineNumber = "225" + endingLineNumber = "225" + landmarkName = "addImagesToListing(_:imageURLs:listingOnCompletion:body:onCompletion:)" landmarkType = "5"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Vendoo/EbayWebServiceManager.swift b/Vendoo/EbayWebServiceManager.swift index 59d8111..10daee1 100644 --- a/Vendoo/EbayWebServiceManager.swift +++ b/Vendoo/EbayWebServiceManager.swift @@ -207,8 +207,10 @@ extension EbayWebServiceManager { self.requestMaker(soapMessage, theRequest: theRequest) } - func addImagesToListing(listingID: String, imageURL: String, onCompletion: ServiceResponse) { + func addImagesToListing(listingID: String, imageURLs: [String], listingOnCompletion: ServiceResponse, body: [String:String],onCompletion: ServiceResponse) { + listItem(body, imageUrls: imageURLs, completion: listingOnCompletion) + /* var soapMessage = "" + "" + "" + @@ -217,21 +219,26 @@ extension EbayWebServiceManager { soapMessage = soapMessage + "en_US" + "" + - "\(listingID)" + - "" + - "\(imageURL.stringByReplacingOccurrencesOfString("&", withString: "&"))" + - "" + - "" + "\(listingID)" + + for i in 0...(imageURLs.count - 1) { + soapMessage = soapMessage + "" + + "\(imageURLs[i].stringByReplacingOccurrencesOfString("&", withString: "&"))" + + "" + } + + + soapMessage = soapMessage + "" let url = NSURL(string: self.baseURL) let theRequest = NSMutableURLRequest(URL: url!) theRequest.addValue("ReviseItem", forHTTPHeaderField: "X-EBAY-API-CALL-NAME") self.completion = onCompletion self.requestMaker(soapMessage, theRequest: theRequest) - + */ } - func listItem(params: [String: String], completion: ServiceResponse?){ + func listItem(params: [String: String], imageUrls: [String], completion: ServiceResponse?){ var dict = EbayWebServiceManager.settingsDictionary var emailRetrievalGroup = dispatch_group_create() var soapMessage = "" + @@ -268,8 +275,15 @@ extension EbayWebServiceManager { "\(dict["listingDuration"] as! String!)" + "\(dict["listingType"] as! String!)" + "\(dict["payment"] as! String!)" + - "\(dict["paypal_email"] as! String!)" + - "\(dict["postalCode"] as! String!)" + + "\(dict["paypal_email"] as! String!)" + + for i in 0...(imageUrls.count - 1) { + soapMessage = soapMessage + + "\(imageUrls[i].stringByReplacingOccurrencesOfString("&", withString: "&"))" + + } + + soapMessage = soapMessage + "\(dict["postalCode"] as! String!)" + "\(params["quantity"] as String!)" + "" + "\(dict["return"] as! String!)" + @@ -285,7 +299,7 @@ extension EbayWebServiceManager { "" + "US" + "" - + print(soapMessage) let url = NSURL(string: self.baseURL) let theRequest = NSMutableURLRequest(URL: url!) theRequest.addValue("AddItem", forHTTPHeaderField: "X-EBAY-API-CALL-NAME") diff --git a/Vendoo/HomeViewController.swift b/Vendoo/HomeViewController.swift index e5ceaaf..5c309d0 100644 --- a/Vendoo/HomeViewController.swift +++ b/Vendoo/HomeViewController.swift @@ -54,13 +54,13 @@ class HomeViewController: UITabBarController { var listingImages: [UIImage] = [mainImage!] var count = 0 //Get supporting images - for i in 2...5 { + for i in 1...4 { let supportListingImg1 = storageRef.child("images/\(key)/\(i).jpg") supportListingImg1.dataWithMaxSize(10 * 1024 * 1024, completion: { (data1, error) -> Void in if(error != nil){ - print("support image \(i - 1) for key, \(key), does not exist") + print("support image \(i) for key, \(key), does not exist") }else{ listingImages.append(UIImage(data: data1!)!) } diff --git a/Vendoo/ListingPreviewViewController.swift b/Vendoo/ListingPreviewViewController.swift index a402872..089ceeb 100644 --- a/Vendoo/ListingPreviewViewController.swift +++ b/Vendoo/ListingPreviewViewController.swift @@ -14,13 +14,18 @@ */ import UIKit +import FirebaseStorage //@TODO: Need to make multiple images work for etsy and facebook and need to implement multiple images saving to firebase class ListingPreviewViewController: UIViewController { //IBOutlets @IBOutlet weak var containerScrollView: UIScrollView! @IBOutlet weak var itemQuantity: UITextView! - @IBOutlet weak var itemPicture: UIImageView! + @IBOutlet weak var itemPictureMain: UIImageView! + @IBOutlet weak var itemPictureSup1: UIImageView! + @IBOutlet weak var itemPictureSup2: UIImageView! + @IBOutlet weak var itemPictureSup3: UIImageView! + @IBOutlet weak var itemPictureSup4: UIImageView! @IBOutlet weak var itemTitle: UITextView! @IBOutlet weak var itemDescription: UITextView! @IBOutlet weak var itemPrice: UITextView! @@ -62,7 +67,27 @@ class ListingPreviewViewController: UIViewController { func setListing(){ - self.itemPicture.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![0].image + for i in 0...((self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1) { + switch i { + case 0: + self.itemPictureMain.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image + break + case 1: + self.itemPictureSup1.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image + break + case 2: + self.itemPictureSup2.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image + break + case 3: + self.itemPictureSup3.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image + break + case 4: + self.itemPictureSup4.image = (self.itemListingDictionary["pictures"] as? [UIImageView])![i].image + break + default: + break + } + } self.itemTitle.text = self.itemListingDictionary["title"] as! String self.itemDescription.text = self.itemListingDictionary["description"] as! String self.itemPrice.text = self.itemListingDictionary["price"] as! String @@ -82,7 +107,14 @@ class ListingPreviewViewController: UIViewController { self.etsyManager = etsyManager } - + func saveToFirebase(listingImageRef: FIRStorageReference, completion: ServiceResponse! ) { + + listingImageRef.putData(UIImageJPEGRepresentation(self.itemPictureMain.image!, 0.8)!, metadata: nil,completion: { + (metadata, error) -> Void in + completion(metadata, error) + }) + + } // MARK: - Navigation @@ -96,7 +128,7 @@ class ListingPreviewViewController: UIViewController { vc.itemName.text? = self.itemTitle.text vc.itemPrice.text? = self.itemPrice.text vc.itemDescription.text? = self.itemDescription.text - vc.possibleItemImageMain = self.itemPicture + vc.possibleItemImageMain = self.itemPictureMain vc.itemQuantity.text? = self.itemQuantity.text } } @@ -131,7 +163,7 @@ extension ListingPreviewViewController { @IBAction func publishItem(sender: AnyObject) { - if(self.itemPicture.image == nil){ + if(self.itemPictureMain.image == nil){ let alert = UIAlertController(title: "Image Needed", message: "To proceed to choose networks, you must supply at least one picture for your listing", preferredStyle: .Alert) alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in alert.dismissViewControllerAnimated(true, completion: nil)})) @@ -142,10 +174,14 @@ extension ListingPreviewViewController { //save listing to private user path in firebase let newListingRef = self.firManager.ref.child("Users").child("\(self.firManager.user_email)").child("user_Listings").childByAutoId() let postingGroup: dispatch_group_t = dispatch_group_create() + + /*if(!(self.networksDictionary["ebay"]!)&&(!(self.networksDictionary["etsy"]!))&&(!(self.networksDictionary["amazon"]!))&&(!(self.networksDictionary["facebook"]!))) { - + }else { + dispatch_g + }*/ //post to ebay - if(self.networksDictionary["ebay"]!){ + /*if(self.networksDictionary["ebay"]!){ dispatch_group_enter(postingGroup) var categoryCode: String! var dict = EbayWebServiceManager.settingsDictionary["categories"]! @@ -267,7 +303,7 @@ extension ListingPreviewViewController { self.newInProgressListing["networkIDs"] = networkIDs dispatch_group_leave(postingGroup) }) - } + }*/ //post to amazon @@ -404,7 +440,7 @@ extension ListingPreviewViewController { let imageBody = ["listing_id": networkIDs["etsy"] as! Int, //"type":"image/jpg", - "image": UIImageJPEGRepresentation(self.itemPicture.image!, 0.45)!] + "image": UIImageJPEGRepresentation(self.itemPictureMain.image!, 0.45)!] self.etsyManager.sendPOSTRequest(("listings/\(networkIDs["etsy"] as! Int)/images"), body: imageBody, onCompletion: { (dict, error) -> Void in @@ -421,26 +457,93 @@ extension ListingPreviewViewController { //post to facebook if(self.networksDictionary["facebook"]!){ dispatch_group_enter(postingGroup) - + let fb_group: dispatch_group_t = dispatch_group_create() + let tmpDirURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true) let fileURL = tmpDirURL.URLByAppendingPathComponent("main").URLByAppendingPathExtension("jpg") print("FilePath: \(fileURL.path!)") do { - try UIImageJPEGRepresentation(self.itemPicture.image!, 0.45)!.writeToFile(fileURL.path!, options: NSDataWritingOptions.AtomicWrite) + try UIImageJPEGRepresentation(self.itemPictureMain.image!, 0.45)!.writeToFile(fileURL.path!, options: NSDataWritingOptions.AtomicWrite) }catch{ (error) print(error) } - - //let parameters: Dictionary = ["message":("**"+self.itemTitle.text!+"**\n\n"+"Price: "+self.itemPrice.text! + "\n\n"+self.itemDescription.text!)] - - let parameters: Dictionary = ["Source": UIImageJPEGRepresentation(self.itemPicture.image!, 0.45)!, "published":false] - self.lastListingKey = newListingRef.key - self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { - (imageId, error) -> Void in + + var imageIDs: [String] = [] + + + //post multiple images to fb + for i in 0...(self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1 { + var parameters: Dictionary = Dictionary() + switch (i) { + + case 0: + dispatch_group_enter(fb_group) + parameters["Source"] = UIImageJPEGRepresentation(self.itemPictureMain.image!,0.45)! + parameters["published"] = false + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + imageIDs.append(imageId as! String) + dispatch_group_leave(fb_group) + }) + break + case 1: + dispatch_group_enter(fb_group) + parameters["Source"] = UIImageJPEGRepresentation(self.itemPictureSup1.image!,0.45)! + parameters["published"] = false + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + imageIDs.append(imageId as! String) + dispatch_group_leave(fb_group) + }) + break + case 2: + dispatch_group_enter(fb_group) + parameters["Source"] = UIImageJPEGRepresentation(self.itemPictureSup2.image!,0.45)! + parameters["published"] = false + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + imageIDs.append(imageId as! String) + dispatch_group_leave(fb_group) + }) + break + case 3: + dispatch_group_enter(fb_group) + parameters["Source"] = UIImageJPEGRepresentation(self.itemPictureSup3.image!,0.45)! + parameters["published"] = false + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + imageIDs.append(imageId as! String) + dispatch_group_leave(fb_group) + }) + break + case 4: + dispatch_group_enter(fb_group) + parameters["Source"] = UIImageJPEGRepresentation(self.itemPictureSup4.image!,0.45)! + parameters["published"] = false + self.graphManager.makePOSTResquest("me/photos", params: parameters, onComplete: { + (imageId, error) -> Void in + imageIDs.append(imageId as! String) + dispatch_group_leave(fb_group) + }) + break + default: + break + } + } + + + //notifies that all images are ready to be attached to new listing on facebook + dispatch_group_notify(fb_group, dispatch_get_main_queue(), { + + var listingParams: Dictionary = ["message":("**"+self.itemTitle.text!+"**\n\n"+"Price: "+self.itemPrice.text! + "\n\n"+self.itemDescription.text!)] + + for i in 0...(self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1 { + listingParams["attached_media[\(i)]"] = "{\"media_fbid\":\"\(imageIDs[i])\"}" + } + - var listingParams: Dictionary = ["message":("**"+self.itemTitle.text!+"**\n\n"+"Price: "+self.itemPrice.text! + "\n\n"+self.itemDescription.text!), "attached_media[0]":"{\"media_fbid\":\"\(imageId as! String)\"}"] self.graphManager.makePOSTResquest("me/feed", params: listingParams, onComplete: { (listingId, error) -> Void in @@ -451,19 +554,16 @@ extension ListingPreviewViewController { networkIDs["facebook"] = listingId as! String self.newInProgressListing["networkIDs"] = networkIDs dispatch_group_leave(postingGroup) - - + + }) - /* - - */ + }) - //let parameters: Dictionary = ["":""] - - } + + //notifies once all selected networks have been posted to dispatch_group_notify(postingGroup, dispatch_get_main_queue(), { self.newInProgressListing.update(["listingID": newListingRef.key, "seller email": (NSUserDefaults.standardUserDefaults().objectForKey("email") as? String)!, @@ -482,54 +582,122 @@ extension ListingPreviewViewController { let storageRef = self.firManager.storage.referenceForURL((databaseDict["image_storage"] as? String)!) + var imageURLs: [String] = [] + let completion: ServiceResponse = {(metadata, error) -> Void in + + //for ebay due to its unique posting flow, will use firbase image storage url to add pictures + if (self.networksDictionary["ebay"]!){ + imageURLs.append((metadata?.downloadURL()?.absoluteString)!) + dispatch_group_leave(postingGroup) + }else{ + dispatch_group_leave(postingGroup) + } + + + + + } + //change code to new multi-image saving - - - - let listingImageRef = storageRef.child("images/\(newListingRef.key)"+".jpg") - listingImageRef.putData(UIImageJPEGRepresentation(self.itemPicture.image!, 0.8)!, metadata: nil,completion: - {(metadata, error) -> Void in + for i in 0...(self.itemListingDictionary["pictures"] as! [UIImageView]).count - 1 { + switch (i) { - //for ebay due to its unique posting flow, will use firbase image storage url to add pictures + case 0: dispatch_group_enter(postingGroup) - if (self.networksDictionary["ebay"]!){ - var networkIDs = self.newInProgressListing["networkIDs"] as! Dictionary - - self.ebayManager.addImagesToListing(networkIDs["ebay"] as! String, imageURL: (metadata?.downloadURL()?.absoluteString)!, onCompletion: { - (_, _) -> Void in - dispatch_group_leave(postingGroup) - }) - }else{ + let listingImageRef = storageRef.child("images/\(newListingRef.key)/main"+".jpg") + self.saveToFirebase(listingImageRef, completion: completion) + break + case 1: + dispatch_group_enter(postingGroup) + let listingImageRef = storageRef.child("images/\(newListingRef.key)/1"+".jpg") + self.saveToFirebase(listingImageRef, completion: completion) + break + case 2: + dispatch_group_enter(postingGroup) + let listingImageRef = storageRef.child("images/\(newListingRef.key)/2"+".jpg") + self.saveToFirebase(listingImageRef, completion: completion) + break + case 3: + dispatch_group_enter(postingGroup) + let listingImageRef = storageRef.child("images/\(newListingRef.key)/3"+".jpg") + self.saveToFirebase(listingImageRef, completion: completion) + break + case 4: + dispatch_group_enter(postingGroup) + let listingImageRef = storageRef.child("images/\(newListingRef.key)/4"+".jpg") + self.saveToFirebase(listingImageRef, completion: completion) + break + default: + break + } + } + + //notify to upload multiple ebay photos + dispatch_group_notify(postingGroup, dispatch_get_main_queue(), { + dispatch_group_enter(postingGroup) + if (self.networksDictionary["ebay"]!){ + + let body: [String: String] = [ "title": self.itemTitle.text, + "quantity":self.itemQuantity.text, + "description":self.itemDescription.text, + "price":self.itemPrice.text, + "category_id":self.itemListingDictionary["ebaySubCategoryID"] as! String + ] + let listingCompletion: ServiceResponse = { + (listingID, error) -> Void in + if((self.newInProgressListing["networkIDs"] == nil)){ + self.newInProgressListing["networkIDs"] = Dictionary() + } + var networkIDs = (self.newInProgressListing["networkIDs"] as! Dictionary) + networkIDs["ebay"] = listingID as! String + self.newInProgressListing["networkIDs"] = networkIDs dispatch_group_leave(postingGroup) } + + /*self.ebayManager.listItem(body, completion: { + (listingID, error) -> Void in + if((self.newInProgressListing["networkIDs"] == nil)){ + self.newInProgressListing["networkIDs"] = Dictionary() + } + var networkIDs = (self.newInProgressListing["networkIDs"] as! Dictionary) + networkIDs["ebay"] = listingID as! String + self.newInProgressListing["networkIDs"] = networkIDs + dispatch_group_leave(postingGroup) + })*/ + self.ebayManager.listItem(body, imageUrls: imageURLs, completion: listingCompletion) + //self.ebayManager.addImagesToListing(networkIDs["ebay"] as! String, imageURLs: imageURLs, listingOnCompletion: listingCompletion, body: body, onCompletion: { + //(_, _) -> Void in + //dispatch_group_leave(postingGroup) + //}) + + } + else { + dispatch_group_leave(postingGroup) + } + + //notify to save final listing to firebase + dispatch_group_notify(postingGroup, dispatch_get_main_queue(), { + newListingRef.setValue(self.newInProgressListing) - dispatch_group_notify(postingGroup, dispatch_get_main_queue(), { - newListingRef.setValue(self.newInProgressListing) - - // self.alert.title = "Listing saved with error" - // self.alert.message = "Your listing has been saved but something went wrong when trying to publish to facebook" - - - //let alert = UIAlertController(title: "Listing Published", message: "Your listing has been published", preferredStyle: .Alert) - - // self.alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in self.alert.dismissViewControllerAnimated(true, completion: nil)})) - - //register new listing id in global path of firebase root' - self.firManager.ref.child("Global_listings").child(newListingRef.key).setValue(newListingRef.key) - }) + // self.alert.title = "Listing saved with error" + // self.alert.message = "Your listing has been saved but something went wrong when trying to publish to facebook" + //let alert = UIAlertController(title: "Listing Published", message: "Your listing has been published", preferredStyle: .Alert) + + // self.alert.addAction(UIAlertAction(title: "OK", style: .Default, handler:{(action: UIAlertAction!) in self.alert.dismissViewControllerAnimated(true, completion: nil)})) + + //register new listing id in global path of firebase root' + self.firManager.ref.child("Global_listings").child(newListingRef.key).setValue(newListingRef.key) + }) + }) - - - - }) + }) + } - - } @IBAction func editListing(sender: AnyObject) { @@ -539,8 +707,8 @@ extension ListingPreviewViewController { -} + } extension ListingPreviewViewController: UICollectionViewDelegate { /* diff --git a/Vendoo/Main.storyboard b/Vendoo/Main.storyboard index 98bbf3b..b55d147 100755 --- a/Vendoo/Main.storyboard +++ b/Vendoo/Main.storyboard @@ -1027,7 +1027,11 @@ - + + + + + diff --git a/Vendoo/NetworksTableViewController.swift b/Vendoo/NetworksTableViewController.swift index 9139c15..073f2c3 100644 --- a/Vendoo/NetworksTableViewController.swift +++ b/Vendoo/NetworksTableViewController.swift @@ -158,7 +158,7 @@ extension NetworksTableViewController: UITableViewDataSource { cell = (self.tableView.dequeueReusableCellWithIdentifier("etsy", forIndexPath: indexPath) as! EtsyTableViewCell) break default: - //loads network cell for ebay + //loads network cell for facebook cell = (self.tableView.dequeueReusableCellWithIdentifier("facebook", forIndexPath: indexPath) as! FBTableViewCell) break