From 32e474b6bec71e18e7d9d9e0d57be6f14acccd8e Mon Sep 17 00:00:00 2001 From: Seil0 Date: Tue, 25 Apr 2017 22:16:30 +0200 Subject: [PATCH] google drive controller clean up --- bin/application/MainWindowController$1.class | Bin 2199 -> 2199 bytes bin/application/MainWindowController$2.class | Bin 4185 -> 4185 bytes bin/application/MainWindowController$3.class | Bin 4201 -> 4201 bytes bin/application/MainWindowController$4.class | Bin 4209 -> 4209 bytes bin/application/MainWindowController$5.class | Bin 1097 -> 1097 bytes bin/application/MainWindowController$6.class | Bin 1097 -> 1097 bytes bin/application/MainWindowController$7.class | Bin 4835 -> 4835 bytes bin/application/MainWindowController.class | Bin 27887 -> 27922 bytes .../GoogleDriveController.class | Bin 13392 -> 13380 bytes src/application/MainWindowController.java | 1 + .../GoogleDriveController.java | 259 +++++++++--------- 11 files changed, 125 insertions(+), 135 deletions(-) diff --git a/bin/application/MainWindowController$1.class b/bin/application/MainWindowController$1.class index f75d55392638253d06bb041c9897b76eb43a698e..5c198934fc4df1ac378b46cd71f5d4b81f289603 100644 GIT binary patch delta 63 zcmV-F0Kos35tk9L5(fd`lM@HJE#m+j0OSBB0ObHK0OkNW0OtTd0O$Zk0Ohp0OtCi@gd~Jd>-kx~ZhQ%5qiHLv=mX&`UkNHPlBVeKkg!f@XNMz$*)%Hu$wA xpdE$|m~t^N36UpEl?Y9uw29FnPL~9Ik_<>OC(W7+`~MvcvYg0qrf9dq20!dIBXa-% diff --git a/bin/application/MainWindowController$3.class b/bin/application/MainWindowController$3.class index 64ba66abeb8683d9460c8ebb8c94a5162f41e88a..ab45bf097872084198c7dac9518117b0abd75610 100644 GIT binary patch delta 178 zcmWN|Ka0Tu0EhAKv&bNM1u{@_{&NUNL@0lc?#g0PN2yzHvYfiIDueAt3*{n%cVM&M zD(}E8&To0@Gdvf^#j$>~;MxoR5Kxn#-U(?;SQ8@pBB~jW zS`gEgxDF(AB&icA{gT$1CtbLf*X=pNRcDM6InXsd7(g;68-=Apv)%~##X9KsWGR{ T7Y!CP`KHB&Hd~%o7xNoe+&Lx- diff --git a/bin/application/MainWindowController$4.class b/bin/application/MainWindowController$4.class index e961a9acca52fd17532381242cc6be50c2fc4c45..e24a6ca263b644cc2ff6c961822d7590bd755d1e 100644 GIT binary patch delta 178 zcmWN_Jxc-s0LS6~Z?OhJKSA8!?AQlzvq^V_!1L|y%=4v;!Y&72vcv=3a&JsH5rpg$ zxV5`ByE%zBJ@6cigR!)uNstiZWE?V#&i+A4elRRJ!OG7(a`lGEq_xk5SM>;z3NQ5WiJaa>rEHC7E#iWNtpC*HFhP*MtzY19}=8Jc} S`C!F_4O4#b`DGSd#4OGnsV>I= delta 178 zcmWN@xsE{r0EW^3Yfwmd0=b2HN)Mo;qL)l!cdfBa2(H391d-|Jl_Vw-$?ya^y;iN8 zN;uVd7!PBYbrRX7-upFGR~fSkhuc@d;th~ diff --git a/bin/application/MainWindowController$6.class b/bin/application/MainWindowController$6.class index fbc393337295649968c542fe1fd7baf06feb1673..9ef430676c627c3b872cceb84cdca093a50a0268 100644 GIT binary patch delta 27 jcmX@fagt+09y8{AgcLK`+eFDq@ zi2}_5lLF2Gp90STq5{wX$pX>=-vZMC`U2Df69Ux&I|9}MJ_6SQXad^;as~q20(k=7 Hljafq2j?=s delta 153 zcmV;K0A~N=CF3QquMPpNv#<`a0)MaoB?7VlDgv_rL;|z`Oaih1Ujn!QY67_cbppBo zfC9V#i~_v?ssg?M$^yUu^#Z{G0RqASD+0p-E&{{>Gy=u}MgqqHT>{7fcLK@*eFDn? zi2}?4lLE~Fp90PSq5{tW$pX;<-vZJB`U2Ae69Uu%I|9`LJ_6PPXad>-as~q10(k=6 Hljafq{kbxn diff --git a/bin/application/MainWindowController.class b/bin/application/MainWindowController.class index e55c18bb0f69e506ca0454fff7ded0cef5b8f379..42a00b97c8f2dbfc45b9c38d4b3ec272740995ba 100644 GIT binary patch delta 12037 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 delta 12026 zcmb_CXJAxS)~CG8OeQbAPI^cnAt8-OfDjNRlt4mnp$J1V34xGc5-^A|=qh#*uexGa zR4k~VFhOELSJz%w*NSbiu60*;#m0B;dy^vTetti`D0AC+=bnDfz3*N6CVuq>Mm_z@ zfrkL#IOAF;5JIMUq#|=q$&9EBH#~#YCQil42<{GFXH|2DcSVcO4Tv=+)~bV1S&o?| z&cfO1oW8R#J%O=!RPnb5b%8BO$pNh;G z;l?epF`lofyFi^AH`u($gh7z)#I1cmttE&6g1P(xd*FUyVd@sB26 zsS@IEFs?K4dUYVa25(mWuq2g{;0(PLZ*$^KgdDXyBwqOwB1Jm4;~i>Y!f0~`?$W}% z3t?!UniZBH%TYB$=ezJ8!R}qrwyx8SJ8+MQ_iBZ>M4fY+J6n7%+>79>_pMpCY+kj7 z2$iqG5NYoF`u>U81#Dl#!Avn6UTPEVRN<{dG#Ro?a9;^wyE>KPNe z>V0eVPFi#CnGgmJ7k+?Xw)B+@^s%t#S zt}pOA6aR((Ru6ebIF6Y31OBLvcrploQOU`JCxZziKrAzn$RzF+aE-U4b7qTogRj9! zAqa5;g|$}ZCwtfU++>hbR7);| zj!i&_pWc>P)!go@?`&(|klEpDk)E%?4O=M5B#-7fQg}XLMMqo9x=x?PI3T5%l&Wq_ ziAzj3DMJH=3D5+w4h`Up6?rj9a-O)636rJjJtsb^Ai zqDGof3JNXirL#u>?==!#nw)UCL^{ajDC)8^#yKy8N_RV7VK;cxM-0&Gks+IYKW5r)S^z#I6kzM);g&TA;WUr=QB(`ncCH%i~^$*AxWj@BxSp)L(|$prq21RF^w1v)5&t_(4pGOxs>3p#mZR1_V&1<|(KJ8Ar ztrnqPNEfM?tcuXBw9QGEAf&3otkevXE+u8}HFv{Wp9mvwXtksUy4<8I=#T1>thq_s zWp-_=5PmfRE^*U&bgfC((e>)5tm$~8nl>msa)+#xXt%hKe2o{dSY?uslRN z?Huvi7N7X0n|4vQlkU22baoWslWOWUh{OnMWgBFW76d)L zYtno4zMTncyc;B-E)?6$s~S3AbNx4y4);E>A^5~c;v66U`jI+~=~I(FgGYkCwX(UT zq21T&q|epCAqkEz>1!u_rQRMggukJGsF2*^#DAIeZ;d5P^jz!hTF~6kxzb5T)U@23 z)bHtM9U6WSMdVeTFD7)2{xn%_r z9OdLlgaj>~#;)RydXYwPr-bn0NfORYj^-HQvQhe~ZE%We${Xp3GdZ3U)XjOr<|Ucz zfv@d!V%dvheEUJEB>>#;F{hcFt_e4V@JY>*O`4llcIt&ple2m`k_C$+Q66WToWq0F z;Guc0!<=h!9uHOXhK|7kwQcA$&tWb!xkwv^&R%mmH?;ViToO#IX3j`A7xQqD2A8R< z{NkShrH^cHT`ja#)?%ELdR%CQ%#=6HR`Q`f~qfhy2&%N=8cZ#Q^gIiS&|RWHeno8 zx_B-^Vqs%f;RZbO#b*&ABRv4?u%y#j7fga=Hg=*@s5x7Wg9+rwr2nC16af&G_ zw0av%h|mxl)suylg{Pa6$*g(53E|+7T8z&y`Aluk;SzT&wM=O7c67M-ELB<*o4Q3L zsYRfTs<5%SrKKYC#F`T(OcTz}Rm+PiQYG|6tP+5g-Zd-MwF`SEY8hW>@oZqB(*N`MaUdI=Mmb9|kh(soFe&ve0XH$28S zntT)QP_GrwpL&}KSMcpxuZsribxx<$rcGm9Q0(GeBFV7drmVUpV=5l~U&6 zFZnAqvMks25r3nl@ekElR#Ey9|I1`6W?8P^-nM4Gw`HBr%^&d*lYi(9iF4bmX(#`r zUMkBQ#Xs^lj)T7U?D)Yy8fY4%VYRzY5+n=VGHIAbh@N!FYMM!0E2sPm3{ul6v$DzC`J zkzpE{1Bs~9L<};G?0zDwsc;n-QRgTyjbTQiiZ3t3Vl|<>BxS2{oXEu(Aq3}DS654X zrmeupRu`8SI>s1dokpd4q&$ho8ON))%O}ay38rzP${Tsskg(UAfwEo^gTGIA5JvnadX%7pYy9@8P-XqOqy5TQ%6FrqN|= zh;$m_4ukSkMrB6w(D_luWfI=2TP1^9KJV*r8do9=R|{vag4Ly!XxOCfm>M#3X71|G#I zSv74O7>zM90-O%@GSeX4&n1?Tw3pnAGh%U00O$4KqPqOOxTG6Ts?qJe=*=%UfU5uk zeq5cu7hdSWlk0?rjsSMb@Z}!t(!*2j;j2BkQ4deIhi~-YCOzD24e^Y7@ee(?MbDfY z!1DzEh1Sf)dghV=!;>%s-j$QVH&BH+Fb9{&5$yN!>mv)4!wcUc99n@2n|^#k&KzTbla98SI4_xDV!HK=Yj*WPDzbz%ZDKFW`$7fiK}Ts&VoV|I1=SujCv1pm`_6$!0H0 zgEhNO(#}c-q?Dw(XqW?eQnkuf3H+JmhCQ^dGvew{5;2vaPN6;?V$M zeh(RS`Ff(89Q!CVe=mgwD6F4`7-0tRd6E7Lkb*D4AbfcM``Nww3td5rpa>CoMD?)j z*9O309~}0=D1h&Y#@~ln`~Xt%ZzAr)kc%He z0e%GKc+w{@9zPY!`wXVw-(ePh4)gFUi}rjiBbeXEMG6iGBPT@4^+msbMfC|as?Tsr zEmYYP1dk<@WAVs!4uuPzh~L38T<~nF$?%tLhcF2ORJIdb5+JBdOIjnfO(R(%CQuAG zDHcqM6U6ZlM~RR`Ndq?U^bzW@3GEF8kzyM(;y0u3ABAlKzl33NyYe6vmX@*dm2}39gMo~6YQqBO1#|A0($o|KW zoF^nt5$Wu$&Cabph{FR^+fCCYR}DzOw$Ab(nubC=<*Q$66T^B#z$|$-b9#|~c3n5k ztqApm>U2Q!q^0=*TBzH)04?@NxUqviE%8X$Sz6)txC3<3c8Jn#{XtL_j-3!CrBCvBrf7d8N0n4t4lm>x5TPg)C~vlm}e4@%aem6Ek8f+%sfpcV>o zpKe!6R_aHIPk6#4FWDID@1-@jLUs>z2!rb?!ad=AJFl;Z@I**VnlAhJEy7p+-bNdK zZ=;<5ZKDdq=4g8`FmAL081ePY|T3ZblXmF+qB)eM>5%VDx?xT zL}O?%okY8&B$4V5hd{NMXb}(I`?XeCaP+dqFTt;U7af?isKZPbeE<<4&dt;LPB0sV9;o=Y3?0y<6j--Nf3AMd8k zxJRz(y6G%@oX*DAX$yW#=TJ1AD-t@7hST{Xql;-aZ52sfLd)gW%}1AOf0utLBCW>W z2qnE6{8sr!LfsEgAVJ8W6;KAH5|Es7ZF#r!3=!xOx<`5;BGx+EEj@<_cRuZro)hl| zrh6swyW}mv2D>L>uciBFuhgtnG>G<5K&}Q>!im%^b77z$k@m}+2?xNxknWcPEet+{ zLONhg9)UO*PdyNhPH@lzf;s{RK^;A);jk8p=phYi_c2VOM`bQt>>||4zG1W+LZtU62=mip65w^>wkdsFD7EQ(T;{eY2!kBVsj3oa=R zda?Zk9w%+Bl4Sh5JEPPS?iEhjr8Cx3^t6;Y4MNV_B4>S=_@M_rmVot4MM#eyKBz0` zre`Z0+P#N~7gsoY=s8(^p~BUJho$pkMQ9IvTIUg;d?`S$cEcAH?)+|g-Q$vU^wv26 zddKR0AiWPIFwiF<57OW3*yET}XLv&A+)rN+Ebutu=$`@l&g1Bz@9QEWBI4+WZu%+U zr=uQ6Ec3k_631ctIXu9zo)C%poam96O?c|TVOA^kZiQ=TC+wix;7+<7?vsn>19T_+NkY;y zbQio!?}`7vZ>86@wy=BM4SukEM;~W@uslm2xcol^-Azwwhcd)zzTvU3NNgfjZa&As zLUFe=IK;<`CphKw_X>}PEIFJM!!vw>tcAjOIKU_J1TkIUs=l-BW~-_IDC5eVR;_yXNG^dU8XMfzOI^X%kSV=pZjxKw8^)&9oP zVtZ+N4==6LsG_2}d0B;_hq1iE9_f>I(Sm&cUT!D|aHC|s3#Dz6R?aS1v>(NcSIQ`_ zf8;T=1GLZ$aG}U>Z7jEo^-Hg_ueZLphwt|GxGR=Vwc$=HwA)R=wo6*SMzB`)(XOR& zNjKE)u9q%aU3^!%;+X<~O9H$(mj7Uz%}$Uz3{A<|eUt=yLW$kelmzF5l5>KT3=2{+ z%x`zPf)hdseAh<_9O5xV%jrjG6$9>|Utl90g+IudWE&$~&kT340ed+F9%2VP z$xe8gUGO%C!eMs9=Nty#ayT622z1LUl6a27OnDhn!m(J!aX6OaaWW_1EKbD5oP<91 z;2KWGb$(94(>V>#<#be>f!A>+-p+&Yejbbu^ALPf+P`z2Wzkb?Qw_SE9K`vL5;Wu# zE1J4edL*Z{t9iTh7?$IOd=+0U=G}^$_!{Yj$UR1}<){wJ8?wPTie>8Cx+worCocu~ z5zf}0D>ps(M$kh5*9ZoY0X(E@H@;Rb$wZD%#PaplafEMJU=ME=VSg0p8{VR2-#@%n zhU510&i z(no!=B<%s?N7(k0q}UVu1e|oVY_K{MO7Hy&ACfA@ic- z$^gGDB7OJ2h;$d+bBst&6p>C8iB5tXo-9(GB1vc}jNxfe%{8!qYr)6UVLi`)bHp02 z=UK3W!)J?F=fG~BD;_pq?Ou{t@d5u$q*Ml{vEAGKE0HFGk!uO`y`!*kpg@TaD_k1y zZ!iMd&>q;`o<<0mC8!2KN|_ zx^BZYy)a;e8V?%oIvy4*XJp3guOzH1TCM{ZFNS1Z0$JipL)fznM)7hup1n}T^-#kN za1#6El}DqxdugIS(ufk~MnQoQZN!M*)ym0b(Ms_&4|v2EMbI z`7J(#0kE0*O+Nf~UG{56@~skLHN-ik){ zh1cR>G>U<0!{(}_kE^NyTqX2!g(et&i>87YK7%1py;xAcT=55TZW|LhCPU*s&1F0x`YNf>@khs6mAPoPI^x0bzqE z@>Gc8jbg#4K^kw8nCX|euvskl4AJKwU>2VR3;AqV%3Hw8=SrM74^HLt!Os^+y0}nX zyDTwnuxJ%w7L*x7Ed6#sw2>=4iKOzG)=SHh{Fd$giaVhwU0BTf@7!q!VNpZ;7w$BK zu&5z^&0K}Nl?C1kA$*A_cN;8ASIj1tLb@<|QE8KuT>@fElJU_@r*P$Q=`IVMV*+e2IH zQqxkpjj{^EBQ{iC5#sTOa!K;F-85v>$f++j|g}i@e2Ziq`i^;Mn!F^&%vkkbA~ZR zJ~`{D9~|9Kw<+Bv!Y{~ajY!Ag-yS$4(>f}05&Q+Rw5q?wvPl`IvVPFUqVdzvG_i<@xAri_{xvP_l4m5(xNW2 z(Ip?azVD5THKre{rEfG+GG*{YY%LkHv^m5aJr>Oo8_jHO9Eo`J zSUf)qo?k3HBZArcgYz z&8F0(`MDAM#ll}T_Y|~Ycl;3TfD#ej;nj~0#B8R4(kSLRzB{QAbJ1y@@ z<*W+L+yB>hs8&9OrzAo@Eq5W$LJT}7moCrCHRKDB0WZqS`j;RVUY483zd*`xctu{u zy((|*UxO3jb(jio!gP2G=D;DfsU`9BA;ww3V%h;lSW0XnuyM9lx3R@IM_M`T8yCym zC5AFCH?EMGsSt`MODlia6>K*K+fBiCOR&AzZsibQ{TY8Wwi{Q=JLX$)hjGn#&;J0_ Cz0u?V diff --git a/bin/cloudControllerInstances/GoogleDriveController.class b/bin/cloudControllerInstances/GoogleDriveController.class index 5498b94c25dacf60a1fd7245e1dc9ac70807b08f..91227225cbef11b7b2c90f14e7f9a3dab7ba967f 100644 GIT binary patch delta 578 zcmWNOYe>^!6vlsNG-+z-!oUeqOWal~bF7Pl7AuRcP?A<=)`!#v>7WcPix!QLidy+* zwFtE!jBZ$eh%Q70LDG#r1RCXsKG$=4l}|L$>gY%aZDm4Wf{k%k`q!(hqPj(jgyj~ zQ#v>;ot%*_Qqs>^86YmhbW55Z`NMgeCzA`d*>u~==`~yYDY<3-`kRWTs7JVhgR3~X zhKuXC=_AAq)^L*=ER&j^D7>xRJKDXgB=0HH`^xhH(|D*nA6cOpK5;)`68&0w%5t75 zq~~no1*dpPkKQly+B#5@Ev`XTywM!qY6kCg{t$I~kMZ8>otZ1{VYTu>mwjX|pEQ)T z+W5jIzOsvN7`|JBr5WP>!DN1FZX??MrAho|GymAns3L)LBGzcYCGHF+h=T$p7?CVi hN;Vs1JW5>H9 z(ngQ8b5?rjl|jx)k`@`EPd;%${&3OePUVuVls;PpSIrGYopRs&TeKtKS0K2CgX?5+ z11C3e(XXa%F_YVh)z4h+5aq7^{hoQWIFa{2BL_6{p;~>Ueh1anX2 r1er*#WD${Umdhk+B?m*CBxJJMn_~Jx^^$LPhr;#(>@v+94sH4mZdi)& diff --git a/src/application/MainWindowController.java b/src/application/MainWindowController.java index 136d83b..8c5ace4 100644 --- a/src/application/MainWindowController.java +++ b/src/application/MainWindowController.java @@ -189,6 +189,7 @@ public class MainWindowController { romTextField.setText(romPath); colorPicker.setValue(Color.valueOf(getColor())); fullscreenToggleBtn.setSelected(isFullscreen()); + cloudSyncToggleBtn.setSelected(isCloudSync()); edit.setDisable(true); applyColor(); } diff --git a/src/cloudControllerInstances/GoogleDriveController.java b/src/cloudControllerInstances/GoogleDriveController.java index 446195d..f81fced 100644 --- a/src/cloudControllerInstances/GoogleDriveController.java +++ b/src/cloudControllerInstances/GoogleDriveController.java @@ -40,24 +40,21 @@ public class GoogleDriveController { private ArrayList localSavegamesName = new ArrayList<>(); private ArrayList cloudSavegamesName = new ArrayList<>(); - /** Application name. */ private final String APPLICATION_NAME ="cemu_Ui Drive API Controller"; - /** Directory to store user credentials for this application. */ + //Directory to store user credentials for this application private final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".credentials/cemu_UI_credential"); - /** Global instance of the {@link FileDataStoreFactory}. */ + //Global instance of the {@link FileDataStoreFactory} private FileDataStoreFactory DATA_STORE_FACTORY; - /** Global instance of the JSON factory. */ + //Global instance of the JSON factory private final JsonFactory JSON_FACTORY =JacksonFactory.getDefaultInstance(); - /** Global instance of the HTTP transport. */ + //Global instance of the HTTP transport private HttpTransport HTTP_TRANSPORT; - /** Global instance of the scopes required by this quickstart. - * - * If modifying these scopes, delete your previously saved credentials + /**If modifying these scopes, delete your previously saved credentials * at ~/.credentials/cemu_UI_credential */ private final java.util.Collection SCOPES = DriveScopes.all(); @@ -99,7 +96,7 @@ public class GoogleDriveController { * @return an authorized Drive client service * @throws IOException */ - public Drive getDriveService() throws IOException { + public Drive getDriveService() throws IOException { Credential credential = authorize(); return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) .setApplicationName(APPLICATION_NAME) @@ -110,87 +107,79 @@ public class GoogleDriveController { public void main(String cemuDirectory) throws IOException { service = getDriveService(); this.cemuDirectory = cemuDirectory; -// sync(); - -// upload(); -// download(); } - public void sync(String cemuDirectory) throws IOException { - getLocalSavegames(); -// upload(); - if(!checkFolder()) { - creatFolder(); - - for(int i = 0; i < localSavegames.size(); i++) { - uploadFile(localSavegames.get(i)); - } - } else { - - getCloudSavegames(); - System.out.println(cloudSavegames.size()+"; "+localSavegames.size()+"; "+localSavegamesName.size()); - - //download files from cloud which don't exist locally - for(int i = 0; i < cloudSavegames.size(); i++) { - -// System.out.println(localSavegamesName.get(i)+"; "+cloudSavegames.get(i).getName()); -// System.out.println(localSavegames.get(a).getName()+"; "+cloudSavegames.get(i).getName().substring(9, cloudSavegames.get(i).getName().length())); - -// if the file exists locally check which one is newer - if(localSavegamesName.contains(cloudSavegames.get(i).getName())) { - - int localSavegamesNumber = localSavegamesName.indexOf(cloudSavegames.get(i).getName()); -// System.out.println(localSavegamesNumber); - System.out.println(localSavegames.get(localSavegamesNumber).getName()+"; "+cloudSavegames.get(i).getName()); - long localModified = new DateTime(localSavegames.get(localSavegamesNumber).lastModified()).getValue(); - long cloudModified = cloudSavegames.get(i).getModifiedTime().getValue(); - - System.out.println(new Date(localModified)+"; "+new Date(cloudModified)); - if(localModified == cloudModified) { - System.out.println("both files are the same, nothing to do \n"); - } else if(localModified >= cloudModified) { - System.out.println("local is newer, going to upload local file \n"); - updateFile(cloudSavegames.get(i), localSavegames.get(localSavegamesNumber)); - } else { - System.out.println("cloud is newer, going to download cloud file \n"); - downloadFile(cloudSavegames.get(i)); - } - } else { - System.out.println("file doesn't exist locally"); - System.out.println("download "+cloudSavegames.get(i).getName()+" from the cloud"); - downloadFile(cloudSavegames.get(i)); - } - } - - //upload file to cloud which don't exist in the cloud - for(int j = 0; j < localSavegames.size(); j++) { - if(!cloudSavegamesName.contains(localSavegamesName.get(j))) { - System.out.println("upload "+localSavegames.get(j).getName()+" to the cloud"); - uploadFile(localSavegames.get(j)); - } - } - - - - //check if there are new local files to upload or download, if so upload/download them and [check if there are files in the cloud were last edit is newer than local, and other way round] - } - - } - - private void creatFolder() throws IOException { + public void sync(String cemuDirectory) throws IOException { + getLocalSavegames(); + + if (!checkFolder()) { + creatFolder(); + + for (int i = 0; i < localSavegames.size(); i++) { + uploadFile(localSavegames.get(i)); + } + } else { + + getCloudSavegames(); + System.out.println(cloudSavegames.size() + "; " + localSavegames.size() + "; " + localSavegamesName.size()); + + // download files from cloud which don't exist locally + for (int i = 0; i < cloudSavegames.size(); i++) { + + // System.out.println(localSavegamesName.get(i)+";"+cloudSavegames.get(i).getName()); + // System.out.println(localSavegames.get(a).getName()+";"+cloudSavegames.get(i).getName().substring(9,cloudSavegames.get(i).getName().length())); + + // if the file exists locally, check which one is newer + if (localSavegamesName.contains(cloudSavegames.get(i).getName())) { + + int localSavegamesNumber = localSavegamesName.indexOf(cloudSavegames.get(i).getName()); + // System.out.println(localSavegamesNumber); + System.out.println(localSavegames.get(localSavegamesNumber).getName() + "; " + cloudSavegames.get(i).getName()); + long localModified = new DateTime(localSavegames.get(localSavegamesNumber).lastModified()).getValue(); + long cloudModified = cloudSavegames.get(i).getModifiedTime().getValue(); + + System.out.println(new Date(localModified) + "; " + new Date(cloudModified)); + if (localModified == cloudModified) { + System.out.println("both files are the same, nothing to do \n"); + } else if (localModified >= cloudModified) { + System.out.println("local is newer, going to upload local file \n"); + updateFile(cloudSavegames.get(i), localSavegames.get(localSavegamesNumber)); + } else { + System.out.println("cloud is newer, going to download cloud file \n"); + downloadFile(cloudSavegames.get(i)); + } + } else { + System.out.println("file doesn't exist locally"); + System.out.println("download " + cloudSavegames.get(i).getName() + " from the cloud"); + downloadFile(cloudSavegames.get(i)); + } + } + + // upload file to cloud which don't exist in the cloud + for (int j = 0; j < localSavegames.size(); j++) { + if (!cloudSavegamesName.contains(localSavegamesName.get(j))) { + System.out.println("upload " + localSavegames.get(j).getName() + " to the cloud"); + uploadFile(localSavegames.get(j)); + } + } + } + + } + + //create a folder in google drive + private void creatFolder() throws IOException { System.out.println("creating new folder"); File fileMetadata = new File(); fileMetadata.setName("cemu_savegames"); fileMetadata.setMimeType("application/vnd.google-apps.folder"); - File file = service.files().create(fileMetadata) - .setFields("id") - .execute(); + File file = service.files().create(fileMetadata).setFields("id").execute(); System.out.println("Folder ID: " + file.getId()); folderID = file.getId(); - } - - private boolean checkFolder() { + } + + //check if folder already exist + private boolean checkFolder() { try { Files.List request = service.files().list().setQ("mimeType = 'application/vnd.google-apps.folder' and name = 'cemu_savegames'"); FileList files = request.execute(); @@ -203,38 +192,40 @@ public class GoogleDriveController { e.printStackTrace(); return false; } - } - - private void getLocalSavegames() throws IOException { - java.io.File dir = new java.io.File(cemuDirectory+"/mlc01/emulatorSave"); - String[] extensions = new String[] { "dat" }; + } + + //reading all local savegames + private void getLocalSavegames() throws IOException { + java.io.File dir = new java.io.File(cemuDirectory+"/mlc01/emulatorSave"); + String[] extensions = new String[] { "dat" }; - System.out.println("Getting all .dat files in " + dir.getCanonicalPath()+" including those in subdirectories \n"); - List files = (List) FileUtils.listFiles(dir, extensions, true); - for (java.io.File file : files) { + System.out.println("Getting all .dat files in " + dir.getCanonicalPath()+" including those in subdirectories \n"); + List files = (List) FileUtils.listFiles(dir, extensions, true); + for (java.io.File file : files) { localSavegamesName.add(file.getParentFile().getName()+"_"+file.getName()); localSavegames.add(file); // System.out.println(file.getAbsolutePath()); // System.out.println(file.getParentFile().getName()); // System.out.println(file.lastModified()); // System.out.println(file.getName()+"\n"); - } - } - - private void getCloudSavegames() throws IOException { - Files.List request = service.files().list().setQ("fileExtension = 'dat' and '"+folderID+"' in parents").setFields("nextPageToken, files(id, name, size, modifiedTime, createdTime)"); - FileList files = request.execute(); + } + } + + //reading all cloud savegames + private void getCloudSavegames() throws IOException { + Files.List request = service.files().list().setQ("fileExtension = 'dat' and '"+folderID+"' in parents").setFields("nextPageToken, files(id, name, size, modifiedTime, createdTime)"); + FileList files = request.execute(); - for (File file : files.getFiles()) { - cloudSavegamesName.add(file.getName()); - cloudSavegames.add(file); + for (File file : files.getFiles()) { + cloudSavegamesName.add(file.getName()); + cloudSavegames.add(file); // System.out.println(file.getName()); // System.out.println(file.getModifiedTime()+"\n"); - } - - } - - public void uploadFile(java.io.File uploadFile) throws IOException{ + } + } + + //upload a file to the cloud from the local savegames folder + public void uploadFile(java.io.File uploadFile) throws IOException{ System.out.println("uploading ..."); File fileMetadata = new File(); fileMetadata.setName(uploadFile.getParentFile().getName()+"_"+uploadFile.getName()); @@ -245,42 +236,40 @@ public class GoogleDriveController { FileContent mediaContent = new FileContent("", uploadFile); File file = service.files().create(fileMetadata, mediaContent).setFields("id, parents").execute(); -// uploadedFile = file; - System.out.println("File ID: " + file.getId()); - } + System.out.println("File ID: " + file.getId()); + } - - - private void downloadFile(File downloadFile) throws IOException{ - System.out.println("downloading "+downloadFile.getName()+" ..."); -// String directory = downloadFile.getName().substring(0,8); - java.io.File directoryFile = new java.io.File("/mlc01/emulatorSave/"+ downloadFile.getName().substring(0,8)); - String file = downloadFile.getName().substring(9,downloadFile.getName().length()); -// System.out.println(cemuDirectory+"/mlc01/emulatorSave/"+ directory +"/"+ file); -// System.out.println(downloadFile.getId()); - if(!directoryFile.exists()) { - directoryFile.mkdir(); - } + //download a file from the cloud to the local savegames folder + private void downloadFile(File downloadFile) throws IOException{ + System.out.println("downloading "+downloadFile.getName()+" ..."); +// String directory = downloadFile.getName().substring(0,8); + java.io.File directoryFile = new java.io.File("/mlc01/emulatorSave/"+ downloadFile.getName().substring(0,8)); + String file = downloadFile.getName().substring(9,downloadFile.getName().length()); +// System.out.println(cemuDirectory+"/mlc01/emulatorSave/"+ directory +"/"+ file); +// System.out.println("DownloadfileID: " + downloadFile.getId()); + if(!directoryFile.exists()) { + directoryFile.mkdir(); + } - OutputStream outputStream = new FileOutputStream(directoryFile +"/"+ file); //TODO needs to be tested - service.files().get(downloadFile.getId()).executeMediaAndDownloadTo(outputStream); - System.out.println("done"); - } - - private void updateFile(File oldFile, java.io.File newFile) throws IOException { - //deleting old file - service.files().delete(oldFile.getId()).execute(); + OutputStream outputStream = new FileOutputStream(directoryFile +"/"+ file); //TODO needs to be tested + service.files().get(downloadFile.getId()).executeMediaAndDownloadTo(outputStream); + System.out.println("done"); + } + + //update a file in the cloud, by deleting the old one and uploading an new with the same id + private void updateFile(File oldFile, java.io.File newFile) throws IOException { + //deleting old file + service.files().delete(oldFile.getId()).execute(); - //uploading new file - File fileMetadata = new File(); - fileMetadata.setName(newFile.getParentFile().getName()+"_"+newFile.getName()); - fileMetadata.setParents(Collections.singletonList(folderID)); - fileMetadata.setModifiedTime(new DateTime(newFile.lastModified())); + //uploading new file + File fileMetadata = new File(); + fileMetadata.setName(newFile.getParentFile().getName()+"_"+newFile.getName()); + fileMetadata.setParents(Collections.singletonList(folderID)); + fileMetadata.setModifiedTime(new DateTime(newFile.lastModified())); - FileContent mediaContent = new FileContent("", newFile); - File file = service.files().create(fileMetadata, mediaContent).setFields("id, parents").execute(); -// uploadedFile = file; - System.out.println("File ID: " + file.getId()); + FileContent mediaContent = new FileContent("", newFile); + File file = service.files().create(fileMetadata, mediaContent).setFields("id, parents").execute(); + System.out.println("File ID: " + file.getId()); } public String getFolderID() {