From c2f8629639c152e2067170dac0fdabf89b161c8e Mon Sep 17 00:00:00 2001 From: Aestia Nerious Date: Tue, 20 Jun 2023 10:54:34 +0900 Subject: [PATCH] hotfix 1.0.05 (crema s apk install error) --- android/app/build.gradle | 5 +- android/app/src/main/AndroidManifest.xml | 4 + .../com/se/ebookmanager/MainApplication.java | 6 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 4024 -> 3315 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 4159 -> 3677 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3148 -> 2137 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2678 -> 2161 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4904 -> 4500 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 5881 -> 4594 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 6445 -> 6691 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 8908 -> 7119 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 7821 -> 8880 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 12643 -> 10084 bytes package.json | 3 +- src/Component/AppList.js | 432 +++++++++++++----- src/Component/AppVersionSelectModal.js | 152 +++--- src/Component/OSSLicense.js | 31 ++ src/MainScreen.js | 231 ++++++---- yarn.lock | 24 +- 19 files changed, 625 insertions(+), 263 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index de888bb..83e7eb9 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -143,8 +143,8 @@ android { applicationId "com.se.ebookmanager" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 13 - versionName "1.0.04" + versionCode 14 + versionName "1.0.05" // Enabling multidex support. multiDexEnabled true } @@ -245,6 +245,7 @@ dependencies { implementation jscFlavor } implementation 'com.android.support:multidex:1.0.3' + implementation 'org.conscrypt:conscrypt-android:2.1.0' } // Run this once to be able to run the application with BUCK diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index cd3b205..94d264b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -4,6 +4,9 @@ + + + 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 QJ^Yt8F)+u}>bu1L2Q<_B-v9sr diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index f3b2425611c6b6247963c243bcbcd792124e2836..2ce7f4723329a9108121d082e6cb70ec5e036c8c 100644 GIT binary patch literal 3677 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 literal 4159 zcmV-F5Ww$=P)! z(3d59hKaG5!`v!rjn&>Du-Ofg7hlcXo~KCJ`9#D4Ql4KBFh_D$8s-#ptA;i052Qvl zJVmp~Cwp#pxwEE`LPsnLCT5mui5VpVNtq>DLPn{$mgM=(0$jsA^fCI2duFnZU=6Hg ztP2@xoJE=H(GQ%@1|;qq|8v7Tn6OY zNREP%JvMD88#(?8i;m~j^uaW-p2}--Kn@hT4wF(mQ0@E)GF&U;Wy{3B2e?U>_;k+3 zx?i*C8gNsaz1X?ovTHAlXctdy;)H`cD>}18RC_SE6U8ob-2OJqAQ^ z%e8Sc=Pq)FUoowQhCG_)LNh#0ScZj#A2k4g|rQ5jV9H{I+U@J3=U(nffY~g4@)lJZ2Uu_bk z;QIFC#r$QOJ8jo~qi@PD`*@w?tnvwhZXy=VBP*JCw}k`8rkj{6E+k<>Jbe#bRvz>Dk<~=YSXs3+lUU19#E& z>*g)vn~xk9*Z2H-lHW{Y{17B{q*&w{9iM3Cz`H5)8k2GrZSHW0UT)?x69f{%W=Y}g zNZql|FF`r`5Ahq*SMqlASCos($gME;Dq3sJ!6RbquHqB?mdsV+`sH*#bGIb!@Tt=x z=J_W`&uEiV3)$1JUu)sQ(iC$sa|Vln;yl<}VTH;hC{X-;`L|+h{pkyN)}Djn+Hta= zhnLCgE#@xen+v4{?L85o1py!_j)L`w@h@1our%p=nifBQo*d-cy#O;o5GEmS51+Dq zmlyJiel-NFEP{Z+tGDpe=VT1pdZdUyv1${ap1;?KOS9?0)FoF8j38atF>#s1fy1G{ z`kE%{^M=IcemTgudjS_3q`PFV;Y-Q#DuR0!t}({Lof7hP^Hb-}S=K-%`}Xir5wp-Q zFoJY9o0xKd4II+M!ii{#v2ioI>Vq6Jml+pAP!I`oDb+9)2Dw(S=}Q4v$dEN#_HfsF43^kD@4oM4gxnkxf%Fg}?a>B50e=vl}*j>QuCTDx~0XkDkKWTG~ zKmdzz0J_V%u&>4#;<1H5%Y!Fr1i}uQ3?w=q%-A7NI2`K*|YqS6&rayiXCmzmh-mrtr$W3C^h~I+D6##!$lj=!)ZBh zsc=!OVJATW+3eS|=lIF9WtLhlLC_iTZJaxgg@rXRjK?U7o_(zmnV5XJz)uDPL3V)x z0Z94>5oDiFVd%Q=jlOSf_|faWLKs!ls}IOR5f25f_XEYKCA0@iqH<&8cR!1{V6kqK zRhLVU%48E#4zfN2Oa-GNX!yu*GPC1GXZr*uG$aA1Y~NX7O!#RBzttnFUMB=f5HcBd z_FX9Lw;*dm%7@#-GO_e0zGrS z;WK{OE1;_53k9;Ln)9{w+q~|ZAUCd)Q%|zTpT5DHprLQKscwR*8D#_w9Nf{Hpy!6S z)DqH*L}x!PW(IcFC>mc}yHy-PAU-Mc29R-Lb9YfCd`P5RRShHPBGUobnPUTr128+@ zBv(`Y-k_{yUc2e+9C2cRlx{{OUBh{i>W9NU1a`ArUQjMJDW#b88`Q3hAeF`X3~Zvs zX9N_a6&g^@0UtlASJcQV*b>~BvC`;+;%$q51c7aVa-Ex~kBSY*HVcV75M>9_yXrTF zQo5QK4+b#}b0TAzfpP)!tG?6d0cFx$>NLO+ilFf`53Y#wqyu!cN z|KPP30#+R;6qPpm1VRw5Z=$rl!2zgkoCrc-US3e>wKjkUc9Xsr1F&b?S$x8f$q_2e zk4?;Hp`i_}1WA%E)nev+B|7^l6alzW?s55aQQs`46pNER{2x^^G7`1{fe^I&*OQ{U z#umhmgrCc{FI7sA()qKgYl(|c6E93{HR`!0%y3&emxDp8Hwz-*R&J_2V7}cJe{B?R zI3q&Z4TPW*1$A@E6!G-n6LvGCKuuo&&HagoU zFyRu~W1+5rFsM`!q}4raD8+RmLv0{^5d<Sq)}yjOgVx&;cm-)zKzS^pH)|y{Qxsm7qA$b0P?Z9$eJEm-B}^vsa6U zgLTRysHCLS*ps2sK0_#%AXpCKPs|+72EW{2aA7&_kiO<(cXVq`TmF6eAfJI6?u2Xw z0glk75>>3ahw~UEC=SJ(2x>kzhbNL-BC}Kk3w9Uq9y#m$66A#P2~q*tUBEhaZY{Vl z;*V;QvCFja(--K2e7YHG4D*@rRkO+#o=B-z357V|L{K}bOLkFUwkzQeu!MiD*-{k* zsra*yIJn$uJ*r8ctIyv5QogKEPO8UAUTm(+E(ox&6kJCkwn7*BG?8)b9OoEx4Y?!& zE)LktQ2l_PDMQ-t$5C8CVOZ$|C3#B4Y2u4-4i_9un&j|ul{BdkcH7<8Yq9eWN@kti z3`8J}!_Vd?OpU7t_$d$QOjZJFUFNUJfF)z%)8M-Xs@w>JJLcGbQJ zg4G?Nab}oL89}uD{`*w5S3W`bb%=DXy%RkPy6YVHXfm7CXOF+|S20LV;<#~z6@5Yh zS$)l7#@3@nyp{g6eG!B`83^$Q^C8?PTYs)xf)X?326fUb&Uz2%D|B~^Kjzk>2YyGZ zvG!%c5;=))D?)I_M$~+=huC3$i^CT|xZW%08^180DOWy0x^5qgSxGuK(RKIJB!dmu zW6$-|;ufgM9IXhz;n@?bHuG^m?%*G8&gIwBF5Udqj4y%$g-Ql?f>3Ip(zX-f3wUsi zOxd=~dQv#+^VnlT=OIHJg0oYLjI2xlHq}0voF>xW1-w870(15q=6fk#VcUR1F?*l# zfU{|g1>V{ClW{$SlzaZ`t$f?DV)5;5dDu?me6%H3Y<-Nm@fx0tJ@_`YsjhQ?tzSRH zq6X})$h)-3sTDpWs_{^nYji>p>vU^Zp=)HMpV(t>Pd*7o8?#rVqVN_LP3$uk)hY;& zAYG=+=4{9-BZZFr`qi_mA4tP6Rqop=-e6}!0n5BKe+61xZ@<`WuJ9-J})=JmW zN8RJENwd3xUEZi8WwkuHP;Dkjm;K{O`RuZ=PC~a%odOKZzS@Hi)~A23W?k;aVeY%#i)d_+oZP*WN-WsaqwqTYH4kzt;x!e{!%kVWtdlwTUD}&e)_*8#O*Z==OUahRnL`RYs0#E*5b+o?)X-5R8-AJh8eP^(k2(ID#+o**&%(m+(qrr3jyHGLhL1|8EGK^T zQD!>v7Z<9|^)NTqkZWt*KEX{56)A zgd2kHePEz#*as=v7t;#xb&6qC0QN$XF!{$#64GUmHv`wiA3hNW>ZrM-r2v>~>RgVw zu|`n0?l`W%D=RI93^l-Ne6=8U-F2b5+kvQv;A@(9bv^$4JGA%7);^EjgVQ@4kQ*nK zN@-s}AM}k)!>cJ=%<;~rS(p=ZV-2wu*2LP7p%%0tu?cL^0v6SbfH$@}1UG5YC8%fL zr(Msy7OlN8YPL3F>>4e4@^)=>{61~0yHJ}j{kQ-=k51U9MaOIxecl{3+x6VAXpF@i zOj--({G(VyZa8ZNG4|%7r+SGfFs1w9-M?0ZwuJT}At5&rZh_LlZQI`;)b6Gp06yay z-TO28pszj#W3Lr+VNT3_5mR?nH>#f^>WHU}YPMCYM(ol{8#9~*OX3jZo9n=5Tx%lw zpfASAvG~^EcSA~fO@7^tBNZGuz#78C>k8mAuF2yTkWp;`_kZovEEw7xgvtN_002ov JPDHLkV1l+@{t*BG diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index b03ff84b096aa835d7bcc550415f4b68b6959710..38a959be425dc7e173924d777ec75fc5765ffdb7 100644 GIT binary patch delta 2124 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 z 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 mJ0(5Otvlt5P^lINfVIJlp-o1 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 N%#k*TDpU9C{{yp5v%&xX diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png index 490f5e7f215c82584ee7ebe7d8540c42b992d360..33f4c5d331529b44cd2dff101aafb94de6b42f5f 100644 GIT binary patch literal 4594 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 literal 5881 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 P00000NkvXXu0mjfPeU#; diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 1449463c8741cd53de54b5c89b141cfbfb619764..2370b843a767944f2039cb89e6e559fe14aa39b3 100644 GIT binary patch literal 6691 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�^tdGg`}UR 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 FV1g@7pSu76 literal 8908 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 + { + downloadAPk(); + }} + /> { + + // 저장소 권한 확인 + async function requestPermission() { + try { + const granted = await PermissionsAndroid.requestMultiple([PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE, PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE + ]).then((result)=>{ + if(result['android.permission.READ_EXTERNAL_STORAGE'] && result['android.permission.WRITE_EXTERNAL_STORAGE'] ==='granted'){ + console.log('모든 권한 획득') + return true; + } + else{ + console.log('거절된 권한있음') + return false; + } + }) + } catch (err) { + console.warn(err); + return false; + } + } + const reqPerm = await requestPermission(); + if (reqPerm === false) { + ToastAndroid.show('저장소 권한이 필요합니다. 저장소 권한을 허용해주세요.', ToastAndroid.SHORT); + return; + } + + const downloadfilePath = `${RNFetchBlob.fs.dirs.DownloadDir}/${item.label}_${item.versionName}.apk`; + console.log('Download APK File : ', downloadfilePath); + + // 다른 다운로드 작업 진행중 or 새로고침 중일 경우 예외처리 + if (globalContextState.isAppRefresh) { + ToastAndroid.show('앱 새로고침 작업이 끝나고 시도해주세요.', ToastAndroid.SHORT); + return; + } else if (globalContextState.nowDownloadJobId != -1) { + ToastAndroid.show('이미 다른 다운로드가 진행 중입니다.', ToastAndroid.SHORT); + return; + } + + if (!isInternetReachable) { + ToastAndroid.show('인터넷이 연결되어 있지 않습니다. 와이파이를 연결해주세요.', ToastAndroid.SHORT); + return; + } + + + try { + const latestActionButtonText = actionButtonText; + setActionButtonText('진행 중'); + setProgressBar(0); + + + // 기존 파일이 있을 경우 삭제 + + const updateApkExist = await RNFS.exists(downloadfilePath); + console.log('download APK exists : ', updateApkExist); + if (updateApkExist) { + console.log('unlink download APK'); + await RNFS.unlink(downloadfilePath); + console.log('unlink download APK OK'); + } + + + const ret = RNFetchBlob.config({ + trusty: true, + path: downloadfilePath, + }).fetch( + "GET", + item.apk_url, + ).progress((received, total) => { + // console.log("Response written ===\n\n"); + let progressPercent = (received / total) * 100; // to calculate in percentage + console.log("progress===", progressPercent) + setProgressBar(progressPercent); + // this.setState({ progress: progressPercent.toString() }); + // item.downloadProgress = progressPercent; + }); + + setNowDownloadJobId(ret); + + globalContextDispatch({ + type: 'SET_NOW_DOWNLOAD_JOBID', + payload: ret + }); + // jobId = ret.jobId; + + // ret.promise.then(res => { + ret.then((res) => { + + globalContextDispatch({ + type: 'SET_NOW_DOWNLOAD_JOBID', + payload: -1 + }); + + setNowDownloadJobId(-1); + setProgressBar(0); + + if(res?.respInfo.status == 200) { + // AppState.addEventListener('change', handleAppStateChange); + // setProgressBar(100); + setActionButtonText(latestActionButtonText); + console.log("res for saving file===", res); + + ToastAndroid.show(`Download 폴더에 APK 파일이 저장되었습니다.\n${item.label}_${item.versionName}.apk`, ToastAndroid.SHORT); + + } + }).catch(error => { + + globalContextDispatch({ + type: 'SET_NOW_DOWNLOAD_JOBID', + payload: -1 + }); + + if (error.message.includes('canceled')) { + ToastAndroid.show('다운로드를 취소했습니다.', ToastAndroid.SHORT); + } else { + ToastAndroid.show('다운로드에 실패했습니다. 잠시 후 다시 시도하세요.', ToastAndroid.SHORT); + } + + setActionButtonText(latestActionButtonText); + setNowDownloadJobId(-1); + setProgressBar(0); + + console.log('_____ERROR ', error.message, error.code); + }); + + } catch (e) { + console.log('error : ', e); + if (globalContextState.nowDownloadJobId != -1) { + RNFS.stopDownload(globalContextState.nowDownloadJobId); + console.log('stopDownload ', globalContextState.nowDownloadJobId); + + globalContextDispatch({ + type: 'SET_NOW_DOWNLOAD_JOBID', + payload: -1 + }); + } + setNowDownloadJobId(-1); + setProgressBar(0); + + } + + + } + // 앱 정보 확인 const showAppSetting = (appPackage) => { NativeModules.InstalledApps.showApplicationSetting(appPackage); @@ -365,6 +518,7 @@ function AppListItem({item, index, scrollEnable}) { console.log(`appPackage ${appPackage} newVersion ${newVersion} url ${url}`); const downloadfilePath = `${RNFS.ExternalCachesDirectoryPath}/@sem_temp.apk`; + // const downloadfilePath = `${RNFS.DownloadDirectoryPath}/@sem_temp.apk`; // 다른 다운로드 작업 진행중 or 새로고침 중일 경우 예외처리 if (globalContextState.isAppRefresh) { @@ -373,7 +527,8 @@ function AppListItem({item, index, scrollEnable}) { } else if (nowDownloadJobId != -1) { // 다운로드 취소 setActionButtonText('취소 중'); - RNFS.stopDownload(nowDownloadJobId); + // RNFS.stopDownload(nowDownloadJobId); + nowDownloadJobId.cancel((err) => {console.log("DOWNLOAD CANCELED ERROR : ", err)}); console.log('stopDownload ', nowDownloadJobId); if (nowDownloadJobId == globalContextState.nowDownloadJobId) { @@ -418,11 +573,12 @@ function AppListItem({item, index, scrollEnable}) { try { const latestActionButtonText = actionButtonText; setActionButtonText('진행 중'); + setProgressBar(0); // 키보드 숨김 Keyboard.dismiss(); - let jobId = -1; + // let jobId = -1; // update apk 파일이 이미 있는 경우 삭제 const updateApkExist = await RNFS.exists(downloadfilePath); @@ -435,67 +591,88 @@ function AppListItem({item, index, scrollEnable}) { // 자체 타임아웃 구현 - const downloadTimeout = setTimeout(() => { - console.log('jobid :: ', jobId); - if (jobId != -1) { - RNFS.stopDownload(jobId); - console.log('stopDownload ', jobId); - - globalContextDispatch({ - type: 'SET_NOW_DOWNLOAD_JOBID', - payload: -1 - }); - } - - setNowDownloadJobId(-1); - setProgressBar(0); - - ToastAndroid.show('서버에 연결하는데 실패했습니다.', ToastAndroid.SHORT); - setActionButtonText(latestActionButtonText); + // const downloadTimeout = setTimeout(() => { + // console.log('jobid :: ', jobId); + // if (jobId != -1) { + // // RNFS.stopDownload(jobId); + // jobId.cancel((err) => {console.log("DOWNLOAD CANCEL ERROR : ", err)}); + // console.log('stopDownload ', jobId); + + // globalContextDispatch({ + // type: 'SET_NOW_DOWNLOAD_JOBID', + // payload: -1 + // }); + // } + + // setNowDownloadJobId(-1); + // setProgressBar(0); + + // ToastAndroid.show('서버에 연결하는데 실패했습니다.', ToastAndroid.SHORT); + // setActionButtonText(latestActionButtonText); + + // console.log('====== timeout :'); + // }, 30000); + + const ret = RNFetchBlob.config({ + trusty: true, + path: downloadfilePath, + }).fetch( + "GET", + url, + ).progress((received, total) => { + // console.log("Response written ===\n\n"); + let progressPercent = (received / total) * 100; // to calculate in percentage + console.log("progress===", progressPercent) + setProgressBar(progressPercent); + // this.setState({ progress: progressPercent.toString() }); + // item.downloadProgress = progressPercent; + }); - console.log('====== timeout :'); - }, 30000); - const ret = RNFS.downloadFile({ - fromUrl: url, - toFile: downloadfilePath, - connectionTimeout: 30000, - readTimeout: 30000, - progressInterval: 500, - // progressDivider: 10, - begin: (res) => { - clearTimeout(downloadTimeout); - console.log("Response begin ===\n\n"); - console.log(res); - if (res.statusCode !== 200) { - ToastAndroid.show('다운로드에 실패했습니다. 잠시 후 다시 시도하세요.', ToastAndroid.SHORT); - setActionButtonText(latestActionButtonText); - setNowDownloadJobId(-1); - setProgressBar(0); - } - }, - progress: (res) => { - //here you can calculate your progress for file download + // const ret = RNFS.downloadFile({ + // fromUrl: url, + // toFile: downloadfilePath, + // connectionTimeout: 30000, + // readTimeout: 30000, + // progressInterval: 500, + // // progressDivider: 10, + // begin: (res) => { + // clearTimeout(downloadTimeout); + // console.log("Response begin ===\n\n"); + // console.log(res); + // if (res.statusCode !== 200) { + // ToastAndroid.show('다운로드에 실패했습니다. 잠시 후 다시 시도하세요.', ToastAndroid.SHORT); + // setActionButtonText(latestActionButtonText); + // setNowDownloadJobId(-1); + // setProgressBar(0); + // } + // }, + // progress: (res) => { + // //here you can calculate your progress for file download - console.log("Response written ===\n\n"); - let progressPercent = (res.bytesWritten / res.contentLength) * 100; // to calculate in percentage - console.log("\n\nprogress===", progressPercent) - setProgressBar(progressPercent); - // this.setState({ progress: progressPercent.toString() }); - // item.downloadProgress = progressPercent; - console.log(res); - } - }); - console.log('set jobId ::: ', ret.jobId); - setNowDownloadJobId(ret.jobId); + // console.log("Response written ===\n\n"); + // let progressPercent = (res.bytesWritten / res.contentLength) * 100; // to calculate in percentage + // console.log("\n\nprogress===", progressPercent) + // setProgressBar(progressPercent); + // // this.setState({ progress: progressPercent.toString() }); + // // item.downloadProgress = progressPercent; + // console.log(res); + // } + // }); + // console.log('set jobId ::: ', ret.jobId); + setNowDownloadJobId(ret); globalContextDispatch({ type: 'SET_NOW_DOWNLOAD_JOBID', - payload: ret.jobId + // === react-native-fs + // payload: ret.jobId + // === rn-fetch-blob + payload: ret }); - jobId = ret.jobId; + // jobId = ret.jobId; - ret.promise.then(res => { + // ret.promise.then(res => { + ret.then((res) => { globalContextDispatch({ type: 'SET_NOW_DOWNLOAD_JOBID', @@ -505,7 +682,8 @@ function AppListItem({item, index, scrollEnable}) { setNowDownloadJobId(-1); setProgressBar(0); - if(res.statusCode == 200) { + // if(res.statusCode == 200) { + if(res?.respInfo.status == 200) { // AppState.addEventListener('change', handleAppStateChange); // setProgressBar(100); setActionButtonText('설치 중'); @@ -524,6 +702,22 @@ function AppListItem({item, index, scrollEnable}) { }); RNApkInstallerN.install(downloadfilePath); + // RNFetchBlob.android.actionViewIntent( + // res.path(), + // "application/vnd.android.package-archive" + // ); + + } else { + globalContextDispatch({ + type: 'SET_NOW_DOWNLOAD_JOBID', + payload: -1 + }); + ToastAndroid.show('다운로드에 실패했습니다. 잠시 후 다시 시도하세요.', ToastAndroid.SHORT); + setActionButtonText(latestActionButtonText); + setNowDownloadJobId(-1); + setProgressBar(0); + + console.log('_____ERROR : status not 200, ', res?.respInfo.status); } }).catch(error => { @@ -531,8 +725,10 @@ function AppListItem({item, index, scrollEnable}) { type: 'SET_NOW_DOWNLOAD_JOBID', payload: -1 }); - - if (error.message.includes('Download has been aborted')) { + // === react-native-fs + // if (error.message.includes('Download has been aborted')) { + // === rn-fetch-blob + if (error.message.includes('canceled')) { ToastAndroid.show('다운로드를 취소했습니다.', ToastAndroid.SHORT); } else { ToastAndroid.show('다운로드에 실패했습니다. 잠시 후 다시 시도하세요.', ToastAndroid.SHORT); @@ -811,68 +1007,72 @@ function AppListItem({item, index, scrollEnable}) { return; } - // 다른 다운로드 작업 진행중 or 새로고침 중일 경우 예외처리 - if (globalContextState.isAppRefresh) { - ToastAndroid.show('앱 새로고침 작업이 끝나고 시도해주세요.', ToastAndroid.SHORT); - return; - } else if (nowDownloadJobId != -1) { - // 다운로드 취소 - setActionButtonText('취소 중'); - RNFS.stopDownload(nowDownloadJobId); - console.log('stopDownload ', nowDownloadJobId); + // // 다른 다운로드 작업 진행중 or 새로고침 중일 경우 예외처리 + // if (globalContextState.isAppRefresh) { + // ToastAndroid.show('앱 새로고침 작업이 끝나고 시도해주세요.', ToastAndroid.SHORT); + // return; + // } else if (nowDownloadJobId != -1) { + // // 다운로드 취소 + // setActionButtonText('취소 중'); + // // RNFS.stopDownload(nowDownloadJobId); + // nowDownloadJobId.cancel((err) => {console.log("DOWNLOAD CANCELED ERROR : ", err)}); + // console.log('stopDownload ', nowDownloadJobId); - if (nowDownloadJobId == globalContextState.nowDownloadJobId) { - console.log('current job ID (GlobalContext)'); - globalContextDispatch({ - type: 'SET_NOW_DOWNLOAD_JOBID', - payload: -1 - }); - } + // if (nowDownloadJobId == globalContextState.nowDownloadJobId) { + // console.log('current job ID (GlobalContext)'); + // globalContextDispatch({ + // type: 'SET_NOW_DOWNLOAD_JOBID', + // payload: -1 + // }); + // } - // 임시파일 삭제 넣어야됨 - try { - // update apk 파일이 이미 있는 경우 삭제 - const downloadfilePath = `${RNFS.ExternalCachesDirectoryPath}/@sem_temp.apk`; + // // 임시파일 삭제 넣어야됨 + // try { + // // update apk 파일이 이미 있는 경우 삭제 + // const downloadfilePath = `${RNFS.ExternalCachesDirectoryPath}/@sem_temp.apk`; - const updateApkExist = await RNFS.exists(downloadfilePath); - console.log('update temp APK exists : ', updateApkExist); - if (updateApkExist) { - console.log('unlink update APK'); - await RNFS.unlink(downloadfilePath); - console.log('unlink update APK OK'); - } - } catch (e) { - console.log('onPressAppButton : temp apk check error === ', e); - } + // const updateApkExist = await RNFS.exists(downloadfilePath); + // console.log('update temp APK exists : ', updateApkExist); + // if (updateApkExist) { + // console.log('unlink update APK'); + // await RNFS.unlink(downloadfilePath); + // console.log('unlink update APK OK'); + // } + // } catch (e) { + // console.log('onPressAppButton : temp apk check error === ', e); + // } - return; - } else if (globalContextState.nowDownloadJobId != -1) { - ToastAndroid.show('이미 다른 다운로드가 진행 중입니다.', ToastAndroid.SHORT); - return; - } + // return; + // } else if (globalContextState.nowDownloadJobId != -1) { + // ToastAndroid.show('이미 다른 다운로드가 진행 중입니다.', ToastAndroid.SHORT); + // return; + // } if (actionButtonText === '버전선택') { - - // app version select modal 활성화 - console.log('======= ', JSON.stringify(item?.past_version_list)); - appVSContextDispatch({ - type: 'INIT_APP_VERSION_LIST', - payload: { - modalVisible: true, - package: item.package, - label: item.label, - iconPath: iconPath, - latestVersion: item.version, - latestDate: item.date, - latestApkUrl: item.apk_url, - latestUpdateLog: item?.update_history_contents?.update_log, - minimumAndroidSdk: item.minimum_android_sdk, - versionCode: item?.past_version_list?.version_code, - versionList: item?.past_version_list?.version_list, - isPatched: item?.is_patched, - apk_size: item?.apk_size, - }, - }); + if (globalContextState.nowDownloadJobId != -1) { + ToastAndroid.show('이미 다른 다운로드가 진행 중입니다.', ToastAndroid.SHORT); + } else { + // app version select modal 활성화 + console.log('======= ', JSON.stringify(item?.past_version_list)); + appVSContextDispatch({ + type: 'INIT_APP_VERSION_LIST', + payload: { + modalVisible: true, + package: item.package, + label: item.label, + iconPath: iconPath, + latestVersion: item.version, + latestDate: item.date, + latestApkUrl: item.apk_url, + latestUpdateLog: item?.update_history_contents?.update_log, + minimumAndroidSdk: item.minimum_android_sdk, + versionCode: item?.past_version_list?.version_code, + versionList: item?.past_version_list?.version_list, + isPatched: item?.is_patched, + apk_size: item?.apk_size, + }, + }); + } } else if (isPatchInstall) { subMenuRef.current.open(); } else { diff --git a/src/Component/AppVersionSelectModal.js b/src/Component/AppVersionSelectModal.js index c436310..2e63326 100644 --- a/src/Component/AppVersionSelectModal.js +++ b/src/Component/AppVersionSelectModal.js @@ -28,9 +28,10 @@ import FastImage from 'react-native-fast-image'; import AppVersionSelectList from './AppVersionSelectList'; import { globalContext, formatBytes, androidAPItoVersion } from './GlobalContext'; import { useNetInfo } from '@react-native-community/netinfo'; -import RNApkInstallerN from 'react-native-apk-installer-n'; import ProgressBar from "react-native-animated-progress"; import DeviceInfo from 'react-native-device-info'; +import RNFetchBlob from "rn-fetch-blob"; +import RNApkInstallerN from 'react-native-apk-installer-n'; /* Peer List Context */ const appVersionSelectContext = createContext(); @@ -171,7 +172,8 @@ export default function AppVersionSelectModal () { } else if (nowDownloadJobId != -1) { // 다운로드 취소 setActionButtonText('취소 중'); - RNFS.stopDownload(nowDownloadJobId); + // RNFS.stopDownload(nowDownloadJobId); + nowDownloadJobId.cancel((err) => {console.log("DOWNLOAD CANCELED ERROR : ", err)}); console.log('stopDownload ', nowDownloadJobId); if (nowDownloadJobId == globalContextState.nowDownloadJobId) { @@ -216,8 +218,8 @@ export default function AppVersionSelectModal () { try { const latestActionButtonText = actionButtonText; setActionButtonText('진행 중'); - - let jobId = -1; + setProgressBar(0); + // let jobId = -1; // update apk 파일이 이미 있는 경우 삭제 const updateApkExist = await RNFS.exists(downloadfilePath); @@ -229,71 +231,95 @@ export default function AppVersionSelectModal () { } - // 자체 타임아웃 구현 - const downloadTimeout = setTimeout(() => { - console.log('jobid :: ', jobId); - if (jobId != -1) { - RNFS.stopDownload(jobId); - console.log('stopDownload ', jobId); + // // 자체 타임아웃 구현 + // const downloadTimeout = setTimeout(() => { + // console.log('jobid :: ', jobId); + // if (jobId != -1) { + // RNFS.stopDownload(jobId); + // console.log('stopDownload ', jobId); - globalContextDispatch({ - type: 'SET_NOW_DOWNLOAD_JOBID', - payload: -1 - }); - } + // globalContextDispatch({ + // type: 'SET_NOW_DOWNLOAD_JOBID', + // payload: -1 + // }); + // } - setNowDownloadJobId(-1); - setProgressBar(0); + // setNowDownloadJobId(-1); + // setProgressBar(0); - ToastAndroid.show('서버에 연결하는데 실패했습니다.', ToastAndroid.SHORT); - setActionButtonText(latestActionButtonText); + // ToastAndroid.show('서버에 연결하는데 실패했습니다.', ToastAndroid.SHORT); + // setActionButtonText(latestActionButtonText); - console.log('====== timeout :'); - }, 30000); + // console.log('====== timeout :'); + // }, 30000); - const ret = RNFS.downloadFile({ - fromUrl: url, - toFile: downloadfilePath, - connectionTimeout: 30000, - readTimeout: 30000, - progressInterval: 500, - // progressDivider: 10, - begin: (res) => { - clearTimeout(downloadTimeout); - console.log("Response begin ===\n\n"); - console.log(res); - if (res.statusCode == 200) { - setProgressBar(0); + // const ret = RNFS.downloadFile({ + // fromUrl: url, + // toFile: downloadfilePath, + // connectionTimeout: 30000, + // readTimeout: 30000, + // progressInterval: 500, + // // progressDivider: 10, + // begin: (res) => { + // clearTimeout(downloadTimeout); + // console.log("Response begin ===\n\n"); + // console.log(res); + // if (res.statusCode == 200) { + // setProgressBar(0); - } else { - ToastAndroid.show('다운로드에 실패했습니다. 잠시 후 다시 시도하세요.', ToastAndroid.SHORT); - setActionButtonText(latestActionButtonText); - setNowDownloadJobId(-1); - setProgressBar(0); - } - }, - progress: (res) => { - //here you can calculate your progress for file download + // } else { + // ToastAndroid.show('다운로드에 실패했습니다. 잠시 후 다시 시도하세요.', ToastAndroid.SHORT); + // setActionButtonText(latestActionButtonText); + // setNowDownloadJobId(-1); + // setProgressBar(0); + // } + // }, + // progress: (res) => { + // //here you can calculate your progress for file download - console.log("Response written ===\n\n"); - let progressPercent = (res.bytesWritten / res.contentLength) * 100; // to calculate in percentage - console.log("\n\nprogress===", progressPercent) - setProgressBar(progressPercent); - // this.setState({ progress: progressPercent.toString() }); - // item.downloadProgress = progressPercent; - console.log(res); - } + // console.log("Response written ===\n\n"); + // let progressPercent = (res.bytesWritten / res.contentLength) * 100; // to calculate in percentage + // console.log("\n\nprogress===", progressPercent) + // setProgressBar(progressPercent); + // // this.setState({ progress: progressPercent.toString() }); + // // item.downloadProgress = progressPercent; + // console.log(res); + // } + // }); + // console.log('set jobId ::: ', ret.jobId); + + + const ret = RNFetchBlob.config({ + trusty: true, + path: downloadfilePath, + }).fetch( + "GET", + url, + ).progress((received, total) => { + // console.log("Response written ===\n\n"); + let progressPercent = (received / total) * 100; // to calculate in percentage + console.log("progress===", progressPercent) + setProgressBar(progressPercent); + // this.setState({ progress: progressPercent.toString() }); + // item.downloadProgress = progressPercent; }); - console.log('set jobId ::: ', ret.jobId); - setNowDownloadJobId(ret.jobId); + + // === react-native-fs + // setNowDownloadJobId(ret.jobId); + // === rn-fetch-blob + setNowDownloadJobId(ret); globalContextDispatch({ type: 'SET_NOW_DOWNLOAD_JOBID', - payload: ret.jobId + // === react-native-fs + // payload: ret.jobId + // === rn-fetch-blob + payload: ret }); - jobId = ret.jobId; + // jobId = ret.jobId; - ret.promise.then(res => { + // ret.promise.then(res => { + ret.then((res) => { globalContextDispatch({ type: 'SET_NOW_DOWNLOAD_JOBID', @@ -303,7 +329,10 @@ export default function AppVersionSelectModal () { setNowDownloadJobId(-1); setProgressBar(0); - if(res.statusCode == 200) { + // === react-native-fs + // if(res.statusCode == 200) { + // === rn-fetch-blob + if(res?.respInfo.status == 200) { // AppState.addEventListener('change', handleAppStateChange); // setProgressBar(100); setActionButtonText('설치 중'); @@ -322,6 +351,10 @@ export default function AppVersionSelectModal () { }); RNApkInstallerN.install(downloadfilePath); + // RNFetchBlob.android.actionViewIntent( + // res.path(), + // "application/vnd.android.package-archive" + // ); } }).catch(error => { @@ -330,7 +363,10 @@ export default function AppVersionSelectModal () { payload: -1 }); - if (error.message.includes('Download has been aborted')) { + // === react-native-fs + // if (error.message.includes('Download has been aborted')) { + // === rn-fetch-blob + if (error.message.includes('canceled')) { ToastAndroid.show('다운로드를 취소했습니다.', ToastAndroid.SHORT); } else { ToastAndroid.show('다운로드에 실패했습니다. 잠시 후 다시 시도하세요.', ToastAndroid.SHORT); diff --git a/src/Component/OSSLicense.js b/src/Component/OSSLicense.js index b92dcd5..adc3d35 100644 --- a/src/Component/OSSLicense.js +++ b/src/Component/OSSLicense.js @@ -302,6 +302,23 @@ export const OSSLicense = [ }, "_licenseContent": "The MIT License (MIT)\n\nCopyright (c) 2015 Joel Arvidsson\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n" }, + { + "libraryName": "react-native-version-check", + "version": "3.4.7", + "_license": "MIT", + "_description": "A version checker for react-native applications", + "homepage": "https://github.com/kimxogus/react-native-version-check", + "author": { + "name": "Taehyun Kim", + "email": "kgyoo8232@gmail.com", + "url": "https://github.com/kimxogus" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/kimxogus/react-native-version-check.git" + }, + "_licenseContent": "MIT License\n\nCopyright (c) 2016 Taehyun Kim\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n" + }, { "libraryName": "react-native-zip-archive", "version": "6.0.9", @@ -360,5 +377,19 @@ export const OSSLicense = [ "url": "git+https://github.com/rt2zz/redux-persist.git" }, "_licenseContent": "MIT License\n\nCopyright (c) 2017 Zack Story\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n" + }, + { + "libraryName": "rn-fetch-blob", + "version": "0.12.0", + "_license": "MIT", + "_description": "A module provides upload, download, and files access API. Supports file stream read/write for process large files.", + "homepage": "https://github.com/joltup/rn-fetch-blob#readme", + "author": { + "name": "Joltup" + }, + "repository": { + "url": "git+https://github.com/joltup/rn-fetch-blob.git" + }, + "_licenseContent": "MIT License\n\nCopyright (c) 2017 xeiyan@gmail.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n" } ]; \ No newline at end of file diff --git a/src/MainScreen.js b/src/MainScreen.js index e18c214..c8cc8e1 100644 --- a/src/MainScreen.js +++ b/src/MainScreen.js @@ -33,7 +33,7 @@ import AlertAsync from "react-native-alert-async"; import ProgressBar from "react-native-animated-progress"; import RNApkInstallerN from 'react-native-apk-installer-n'; import RNExitApp from 'react-native-exit-app'; -import VersionCheck from 'react-native-version-check'; +import RNFetchBlob from "rn-fetch-blob"; import BottomToolbar from './Component/BottomToolbar'; import AppDetailModal from './Component/AppDetailModal'; @@ -136,6 +136,7 @@ const MainScreen = ({navigation, route}) => { // device info 설정 const model = DeviceInfo.getModel(); + switch (model) { case 'CREMA-0630L': // CARTA case 'CREMA-0610L': // SHINE @@ -229,12 +230,28 @@ const MainScreen = ({navigation, route}) => { } + // async function requestPermission() { + // try { + // const granted = await PermissionsAndroid.requestMultiple([PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE, PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE + // ]).then((result)=>{ + // if(result['android.permission.READ_EXTERNAL_STORAGE'] && result['android.permission.WRITE_EXTERNAL_STORAGE'] ==='granted'){ + // console.log('모든 권한 획득') + // } + // else{ + // console.log('거절된 권한있음') + // } + // }) + // } catch (err) { + // console.warn(err); + // } + // } + // 앱 처음 실행 시 동작 코드 console.log('THIS VERSION : ', DeviceInfo.getVersion()); makeAppListFirst(); getSavedSetting(); checkTempFile(); - + // requestPermission(); }, []); useEffect(() => { @@ -469,94 +486,123 @@ const MainScreen = ({navigation, route}) => { console.log('unlink update APK OK'); } + // === react-native-fs + // // 자체 타임아웃 구현 + // const downloadTimeout = setTimeout(() => { + // console.log('jobid :: ', jobId); + // if (jobId != -1) { + // RNFS.stopDownload(jobId); + // console.log('stopDownload ', jobId); + + // globalContextDispatch({ + // type: 'SET_NOW_DOWNLOAD_JOBID', + // payload: -1 + // }); + // } + + // setNowDownloadJobId(-1); + // setRefreshProgressBar(-1); + + // ToastAndroid.show('서버에 연결하는데 실패했습니다.', ToastAndroid.SHORT); + // setRefreshText('앱 업데이트 실패'); + + // // 3초 뒤에 해더 제거 + // setTimeout(() => { + // setIsHeaderEnable(false); + // }, 3000); + + // console.log('====== timeout :'); + // }, 30000); + + // const ret = RNFS.downloadFile({ + // fromUrl: url, + // toFile: downloadfilePath, + // connectionTimeout: 30000, + // readTimeout: 30000, + // progressInterval: 500, + // // progressDivider: 10, + // begin: (res) => { + // clearTimeout(downloadTimeout); + // console.log("Response begin ===\n\n"); + // console.log(res); + // if (res.statusCode == 200) { + // setRefreshProgressBar(0); + // setNowDownloadJobId(res.jobId); + // } else { + // ToastAndroid.show('다운로드에 실패했습니다. 잠시 후 다시 시도하세요.', ToastAndroid.SHORT); + // setRefreshText('앱 업데이트 실패'); + // setRefreshProgressBar(-1); + // setNowDownloadJobId(-1); + + // // 3초 뒤에 해더 제거 + // setTimeout(() => { + // setIsHeaderEnable(false); + // }, 3000); + // } + // }, + // progress: (res) => { + // //here you can calculate your progress for file download + + // console.log("Response written ===\n\n"); + // let progressPercent = (res.bytesWritten / res.contentLength) * 100; // to calculate in percentage + // console.log("\n\nprogress===", progressPercent) + // setRefreshProgressBar(progressPercent); + // // this.setState({ progress: progressPercent.toString() }); + // // item.downloadProgress = progressPercent; + // console.log(res); + // } + // }); + + // console.log('set jobId ::: ', ret.jobId); + + // const result = await ret.promise; + // console.log(' result == ', result); + + // === rn-fetch-blob + const ret = RNFetchBlob.config({ + trusty: true, + path: downloadfilePath, + }).fetch( + "GET", + url, + ).progress((received, total) => { + // console.log("Response written ===\n\n"); + let progressPercent = (received / total) * 100; // to calculate in percentage + console.log("progress===", progressPercent) + setRefreshProgressBar(progressPercent); + // this.setState({ progress: progressPercent.toString() }); + // item.downloadProgress = progressPercent; + }); - // 자체 타임아웃 구현 - const downloadTimeout = setTimeout(() => { - console.log('jobid :: ', jobId); - if (jobId != -1) { - RNFS.stopDownload(jobId); - console.log('stopDownload ', jobId); - - globalContextDispatch({ - type: 'SET_NOW_DOWNLOAD_JOBID', - payload: -1 - }); - } + // === react-native-fs + // if(res.statusCode == 200) { + // === rn-fetch-blob + ret.then((res) => { setNowDownloadJobId(-1); - setRefreshProgressBar(-1); - - ToastAndroid.show('서버에 연결하는데 실패했습니다.', ToastAndroid.SHORT); - setRefreshText('앱 업데이트 실패'); - // 3초 뒤에 해더 제거 - setTimeout(() => { - setIsHeaderEnable(false); - }, 3000); + if(res?.respInfo.status == 200) { + setRefreshProgressBar(-1); + setRefreshText('앱 업데이트 설치'); + + // 3초 뒤에 해더 제거 + setTimeout(() => { + setIsHeaderEnable(false); + }, 3000); + console.log("res for saving file===", res); - console.log('====== timeout :'); - }, 30000); + RNApkInstallerN.install(downloadfilePath); + // RNFetchBlob.android.actionViewIntent( + // res.path(), + // "application/vnd.android.package-archive" + // ); - const ret = RNFS.downloadFile({ - fromUrl: url, - toFile: downloadfilePath, - connectionTimeout: 30000, - readTimeout: 30000, - progressInterval: 500, - // progressDivider: 10, - begin: (res) => { - clearTimeout(downloadTimeout); - console.log("Response begin ===\n\n"); - console.log(res); - if (res.statusCode == 200) { - setRefreshProgressBar(0); - setNowDownloadJobId(res.jobId); - } else { - ToastAndroid.show('다운로드에 실패했습니다. 잠시 후 다시 시도하세요.', ToastAndroid.SHORT); - setRefreshText('앱 업데이트 실패'); - setRefreshProgressBar(-1); - setNowDownloadJobId(-1); - - // 3초 뒤에 해더 제거 - setTimeout(() => { - setIsHeaderEnable(false); - }, 3000); - } - }, - progress: (res) => { - //here you can calculate your progress for file download - - console.log("Response written ===\n\n"); - let progressPercent = (res.bytesWritten / res.contentLength) * 100; // to calculate in percentage - console.log("\n\nprogress===", progressPercent) - setRefreshProgressBar(progressPercent); - // this.setState({ progress: progressPercent.toString() }); - // item.downloadProgress = progressPercent; - console.log(res); + } else { + // throw result.statusCode; + throw res?.respInfo.status; } }); - console.log('set jobId ::: ', ret.jobId); - - const result = await ret.promise; - console.log(' result == ', result); - - if(result.statusCode == 200) { - setRefreshProgressBar(-1); - setRefreshText('앱 업데이트 설치'); - - // 3초 뒤에 해더 제거 - setTimeout(() => { - setIsHeaderEnable(false); - }, 3000); - console.log("res for saving file===", result); - - RNApkInstallerN.install(downloadfilePath); - - } else { - throw result.statusCode; - } - } catch (e) { @@ -816,7 +862,7 @@ const MainScreen = ({navigation, route}) => { // download update.json - const url = 'http://repo.senia.kr/sem/update.json'; + const url = 'https://git.senia.kr/update.json'; const downloadfilePath = `file://${RNFS.CachesDirectoryPath}/update.json`; // update.json이 이미 있는 경우 삭제 @@ -1242,7 +1288,7 @@ const MainScreen = ({navigation, route}) => { const pastVersionListPath = `file://${RNFS.CachesDirectoryPath}/${value.package}/past_version_list.json`; if (needPastVersionList) { // 서버에서 past_version_list.json 다운로드 - console.log('download :: ', value.past_version_list); + console.log('download PAST VERSION LIST :: ', value.past_version_list); const pastVersionList_ret = RNFS.downloadFile({ fromUrl: value.past_version_list, toFile: pastVersionListPath, @@ -1488,7 +1534,7 @@ const MainScreen = ({navigation, route}) => { let installAppLabel = ''; try { - console.log('managedAppList ::: ', managedAppList.current.app); + // console.log('managedAppList ::: ', managedAppList.current.app); const temp = await NativeModules.InstalledApps.getApps(); @@ -1769,6 +1815,23 @@ const MainScreen = ({navigation, route}) => { } }} /> + {/* + { + await menuRef.current.close(); + navigation.navigate("OSSLicenseStack"); + }} + /> + { + await menuRef.current.close(); + navigation.navigate("OSSLicenseStack"); + }} + /> */}