DropboxV2Client.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. package com.epson.iprint.storage.dropbox;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.os.AsyncTask;
  5. import android.widget.ImageView;
  6. import com.dropbox.core.DbxException;
  7. import com.dropbox.core.p005v2.DbxClientV2;
  8. import com.dropbox.core.p005v2.files.FileMetadata;
  9. import com.dropbox.core.p005v2.files.FolderMetadata;
  10. import com.dropbox.core.p005v2.files.ListFolderResult;
  11. import com.dropbox.core.p005v2.files.Metadata;
  12. import com.epson.iprint.storage.StorageItem;
  13. import com.epson.iprint.storage.StorageServiceClient;
  14. import epson.print.R;
  15. import epson.print.CommonDefine;
  16. import java.io.File;
  17. import java.io.FileOutputStream;
  18. import java.io.IOException;
  19. import java.util.ArrayList;
  20. import java.util.Collections;
  21. import java.util.List;
  22. import org.apache.commons.lang.CharEncoding;
  23. public class DropboxV2Client extends StorageServiceClient {
  24. public boolean isSupportedUploadType(StorageServiceClient.UploadFileType uploadFileType) {
  25. return true;
  26. }
  27. public StorageServiceClient.Downloader getDownloader(Context context, StorageItem storageItem, String str) {
  28. return new DropboxDownloader(context, storageItem, str);
  29. }
  30. public StorageServiceClient.Enumerator getEnumerator(Context context) {
  31. return new DropboxV2Enumerator();
  32. }
  33. public String getStorageServiceName(Context context) {
  34. return context.getString(R.string.drop_box);
  35. }
  36. public StorageServiceClient.Uploader getUploader(Context context, StorageServiceClient.UploadFileType uploadFileType, String str, String str2) {
  37. return new V2Uploader(context, uploadFileType, str, str2);
  38. }
  39. public boolean isSignedIn(Context context) {
  40. DropboxV2Adapter.init(context);
  41. return DropboxV2Adapter.hasToken(context);
  42. }
  43. protected boolean isValidUploadName(String str) {
  44. if (str.startsWith(CommonDefine.DOT)) {
  45. return false;
  46. }
  47. try {
  48. if (str.getBytes(CharEncoding.UTF_8).length > 256) {
  49. return false;
  50. }
  51. for (char indexOf : str.toCharArray()) {
  52. if ("\\/:,;*?<>|#、\"".indexOf(indexOf) > -1) {
  53. return false;
  54. }
  55. }
  56. return super.isValidUploadName(str);
  57. } catch (Exception unused) {
  58. return false;
  59. }
  60. }
  61. public boolean revokeSignedInData(Activity activity) {
  62. DropboxV2Adapter.clearToken(activity.getApplicationContext());
  63. return false;
  64. }
  65. private class DropboxV2Enumerator extends StorageServiceClient.Enumerator {
  66. public void cleanUpResources() {
  67. }
  68. public void setThumbnailInBackground(StorageItem storageItem, ImageView imageView) {
  69. }
  70. private DropboxV2Enumerator() {
  71. super();
  72. }
  73. public void enumerate(StorageItem storageItem, StorageServiceClient.EnumerateCompletion enumerateCompletion) {
  74. DbxClientV2 client = DropboxV2Adapter.getClient();
  75. if (client == null) {
  76. enumerateCompletion.onEnumerateComplete((List<StorageItem>) null, StorageServiceClient.ProcessError.ERROR);
  77. return;
  78. }
  79. ArrayList arrayList = new ArrayList();
  80. try {
  81. ListFolderResult listFolder = client.files().listFolder(storageItem.path);
  82. while (true) {
  83. for (Metadata convertToStorageItem : listFolder.getEntries()) {
  84. StorageItem convertToStorageItem2 = convertToStorageItem(convertToStorageItem);
  85. if (convertToStorageItem2 != null) {
  86. arrayList.add(convertToStorageItem2);
  87. }
  88. }
  89. if (!listFolder.getHasMore()) {
  90. break;
  91. }
  92. try {
  93. listFolder = client.files().listFolderContinue(listFolder.getCursor());
  94. } catch (DbxException unused) {
  95. }
  96. }
  97. Collections.sort(arrayList, new StorageItem.NameComparator());
  98. enumerateCompletion.onEnumerateComplete(arrayList, StorageServiceClient.ProcessError.NONE);
  99. } catch (DbxException e) {
  100. e.printStackTrace();
  101. enumerateCompletion.onEnumerateComplete((List<StorageItem>) null, StorageServiceClient.ProcessError.ERROR);
  102. }
  103. }
  104. @Nullable
  105. private StorageItem convertToStorageItem(@NonNull Metadata metadata) {
  106. StorageItem.ItemType itemType;
  107. if (metadata instanceof FileMetadata) {
  108. if (!StorageServiceClient.isPrintableFilename(metadata.getName())) {
  109. return null;
  110. }
  111. itemType = StorageItem.ItemType.FILE;
  112. } else if (!(metadata instanceof FolderMetadata)) {
  113. return null;
  114. } else {
  115. itemType = StorageItem.ItemType.DIRECTORY;
  116. }
  117. return new StorageItem(metadata.getName(), metadata.getPathLower(), itemType, metadata);
  118. }
  119. public StorageItem getRootItem() {
  120. return new StorageItem("", "", StorageItem.ItemType.DIRECTORY, (Object) null);
  121. }
  122. }
  123. class DropboxDownloader extends StorageServiceClient.Downloader {
  124. private StorageItem mStorageItem;
  125. private String mWriteFilename;
  126. public boolean isCancelable() {
  127. return false;
  128. }
  129. DropboxDownloader(Context context, StorageItem storageItem, String str) {
  130. super();
  131. this.mStorageItem = storageItem;
  132. this.mWriteFilename = str;
  133. }
  134. public void start(StorageServiceClient.DownloadCompletion downloadCompletion) {
  135. new DownloadTask(downloadCompletion).execute(new Object[]{this.mStorageItem, this.mWriteFilename});
  136. }
  137. }
  138. static class DownloadTask extends AsyncTask<Object, Void, Void> {
  139. private StorageServiceClient.DownloadCompletion mDownloadCompletion;
  140. DownloadTask(@NonNull StorageServiceClient.DownloadCompletion downloadCompletion) {
  141. this.mDownloadCompletion = downloadCompletion;
  142. }
  143. protected Void doInBackground(Object... objArr) {
  144. String str;
  145. StorageItem storageItem;
  146. try {
  147. if (objArr.length < 2 || !(objArr[0] instanceof StorageItem) || !(objArr[1] instanceof String)) {
  148. throw new IllegalArgumentException();
  149. }
  150. storageItem = objArr[0];
  151. try {
  152. if (storageItem.userInfo instanceof FileMetadata) {
  153. FileMetadata fileMetadata = (FileMetadata) storageItem.userInfo;
  154. DbxClientV2 client = DropboxV2Adapter.getClient();
  155. if (client != null) {
  156. str = objArr[1];
  157. try {
  158. client.files().download(fileMetadata.getPathLower(), fileMetadata.getRev()).download(new FileOutputStream(new File(str)));
  159. this.mDownloadCompletion.onDownloadComplete(storageItem, str, StorageServiceClient.ProcessError.NONE);
  160. return null;
  161. } catch (DbxException | IOException unused) {
  162. this.mDownloadCompletion.onDownloadComplete(storageItem, str, StorageServiceClient.ProcessError.ERROR);
  163. return null;
  164. } catch (IllegalArgumentException | IllegalStateException unused2) {
  165. this.mDownloadCompletion.onDownloadComplete(storageItem, str, StorageServiceClient.ProcessError.ERROR);
  166. return null;
  167. }
  168. } else {
  169. throw new IllegalStateException();
  170. }
  171. } else {
  172. throw new IllegalArgumentException();
  173. }
  174. } catch (DbxException | IOException unused3) {
  175. str = null;
  176. this.mDownloadCompletion.onDownloadComplete(storageItem, str, StorageServiceClient.ProcessError.ERROR);
  177. return null;
  178. } catch (IllegalArgumentException | IllegalStateException unused4) {
  179. str = null;
  180. this.mDownloadCompletion.onDownloadComplete(storageItem, str, StorageServiceClient.ProcessError.ERROR);
  181. return null;
  182. }
  183. } catch (DbxException | IOException unused5) {
  184. str = null;
  185. storageItem = null;
  186. this.mDownloadCompletion.onDownloadComplete(storageItem, str, StorageServiceClient.ProcessError.ERROR);
  187. return null;
  188. } catch (IllegalArgumentException | IllegalStateException unused6) {
  189. str = null;
  190. storageItem = null;
  191. this.mDownloadCompletion.onDownloadComplete(storageItem, str, StorageServiceClient.ProcessError.ERROR);
  192. return null;
  193. }
  194. }
  195. }
  196. private class V2Uploader extends StorageServiceClient.Uploader {
  197. private String mOrgFilePath;
  198. private String mUploadPath;
  199. public boolean isCancelable() {
  200. return false;
  201. }
  202. V2Uploader(Context context, StorageServiceClient.UploadFileType uploadFileType, String str, String str2) {
  203. super();
  204. this.mOrgFilePath = str;
  205. this.mUploadPath = str2;
  206. }
  207. public void start(StorageServiceClient.UploadCompletion uploadCompletion) {
  208. AsyncTask.THREAD_POOL_EXECUTOR.execute(new LocalUploader(this.mOrgFilePath, this.mUploadPath, uploadCompletion));
  209. }
  210. }
  211. private static class LocalUploader implements Runnable {
  212. private StorageServiceClient.UploadCompletion mNotifier;
  213. private String mOrgFilePath;
  214. private String mUploadFilename;
  215. LocalUploader(String str, String str2, @NonNull StorageServiceClient.UploadCompletion uploadCompletion) {
  216. this.mOrgFilePath = str;
  217. this.mUploadFilename = str2;
  218. this.mNotifier = uploadCompletion;
  219. }
  220. /* JADX WARNING: Can't wrap try/catch for region: R(5:23|22|25|26|(0)(0)) */
  221. /* JADX WARNING: Code restructure failed: missing block: B:24:0x0071, code lost:
  222. r0 = th;
  223. */
  224. /* JADX WARNING: Code restructure failed: missing block: B:29:?, code lost:
  225. r1.close();
  226. */
  227. /* JADX WARNING: Code restructure failed: missing block: B:33:?, code lost:
  228. r1.close();
  229. */
  230. /* JADX WARNING: Code restructure failed: missing block: B:38:?, code lost:
  231. return;
  232. */
  233. /* JADX WARNING: Code restructure failed: missing block: B:39:?, code lost:
  234. return;
  235. */
  236. /* JADX WARNING: Code restructure failed: missing block: B:40:?, code lost:
  237. return;
  238. */
  239. /* JADX WARNING: Failed to process nested try/catch */
  240. /* JADX WARNING: Missing exception handler attribute for start block: B:25:0x0073 */
  241. /* JADX WARNING: Removed duplicated region for block: B:28:0x0080 A[SYNTHETIC, Splitter:B:28:0x0080] */
  242. /* JADX WARNING: Removed duplicated region for block: B:32:0x0086 A[SYNTHETIC, Splitter:B:32:0x0086] */
  243. /* JADX WARNING: Removed duplicated region for block: B:40:? A[RETURN, SYNTHETIC] */
  244. /* Code decompiled incorrectly, please refer to instructions dump. */
  245. public void run() {
  246. /*
  247. r5 = this;
  248. java.lang.String r0 = r5.mOrgFilePath
  249. if (r0 == 0) goto L_0x008a
  250. java.lang.String r0 = r5.mUploadFilename
  251. if (r0 != 0) goto L_0x000a
  252. goto L_0x008a
  253. L_0x000a:
  254. com.dropbox.core.v2.DbxClientV2 r0 = com.epson.iprint.storage.dropbox.DropboxV2Adapter.getClient()
  255. r1 = 0
  256. if (r0 != 0) goto L_0x0019
  257. com.epson.iprint.storage.StorageServiceClient$UploadCompletion r0 = r5.mNotifier
  258. com.epson.iprint.storage.StorageServiceClient$ProcessError r2 = com.epson.iprint.storage.StorageServiceClient.ProcessError.ERROR
  259. r0.onUploadComplete(r1, r1, r2)
  260. return
  261. L_0x0019:
  262. java.lang.StringBuilder r2 = new java.lang.StringBuilder
  263. r2.<init>()
  264. java.lang.String r3 = "/Epson iPrint/"
  265. r2.append(r3)
  266. java.lang.String r3 = r5.mUploadFilename
  267. r2.append(r3)
  268. java.lang.String r2 = r2.toString()
  269. java.io.FileInputStream r3 = new java.io.FileInputStream // Catch:{ DbxException | IOException -> 0x0073 }
  270. java.lang.String r4 = r5.mOrgFilePath // Catch:{ DbxException | IOException -> 0x0073 }
  271. r3.<init>(r4) // Catch:{ DbxException | IOException -> 0x0073 }
  272. com.dropbox.core.v2.files.DbxUserFilesRequests r0 = r0.files() // Catch:{ DbxException | IOException -> 0x006f, all -> 0x006c }
  273. com.dropbox.core.v2.files.UploadBuilder r0 = r0.uploadBuilder(r2) // Catch:{ DbxException | IOException -> 0x006f, all -> 0x006c }
  274. com.dropbox.core.v2.files.WriteMode r1 = com.dropbox.core.p005v2.files.WriteMode.ADD // Catch:{ DbxException | IOException -> 0x006f, all -> 0x006c }
  275. com.dropbox.core.v2.files.UploadBuilder r0 = r0.withMode(r1) // Catch:{ DbxException | IOException -> 0x006f, all -> 0x006c }
  276. r1 = 1
  277. java.lang.Boolean r1 = java.lang.Boolean.valueOf(r1) // Catch:{ DbxException | IOException -> 0x006f, all -> 0x006c }
  278. com.dropbox.core.v2.files.UploadBuilder r0 = r0.withAutorename(r1) // Catch:{ DbxException | IOException -> 0x006f, all -> 0x006c }
  279. java.lang.Object r0 = r0.uploadAndFinish(r3) // Catch:{ DbxException | IOException -> 0x006f, all -> 0x006c }
  280. com.dropbox.core.v2.files.FileMetadata r0 = (com.dropbox.core.p005v2.files.FileMetadata) r0 // Catch:{ DbxException | IOException -> 0x006f, all -> 0x006c }
  281. r3.close() // Catch:{ IOException -> 0x0053 }
  282. L_0x0053:
  283. if (r0 != 0) goto L_0x0060
  284. com.epson.iprint.storage.StorageServiceClient$UploadCompletion r0 = r5.mNotifier
  285. java.lang.String r1 = r5.mOrgFilePath
  286. java.lang.String r2 = r5.mUploadFilename
  287. com.epson.iprint.storage.StorageServiceClient$ProcessError r3 = com.epson.iprint.storage.StorageServiceClient.ProcessError.ERROR
  288. r0.onUploadComplete(r1, r2, r3)
  289. L_0x0060:
  290. com.epson.iprint.storage.StorageServiceClient$UploadCompletion r0 = r5.mNotifier
  291. java.lang.String r1 = r5.mOrgFilePath
  292. java.lang.String r2 = r5.mUploadFilename
  293. com.epson.iprint.storage.StorageServiceClient$ProcessError r3 = com.epson.iprint.storage.StorageServiceClient.ProcessError.NONE
  294. r0.onUploadComplete(r1, r2, r3)
  295. return
  296. L_0x006c:
  297. r0 = move-exception
  298. r1 = r3
  299. goto L_0x0084
  300. L_0x006f:
  301. r1 = r3
  302. goto L_0x0073
  303. L_0x0071:
  304. r0 = move-exception
  305. goto L_0x0084
  306. L_0x0073:
  307. com.epson.iprint.storage.StorageServiceClient$UploadCompletion r0 = r5.mNotifier // Catch:{ all -> 0x0071 }
  308. java.lang.String r2 = r5.mOrgFilePath // Catch:{ all -> 0x0071 }
  309. java.lang.String r3 = r5.mUploadFilename // Catch:{ all -> 0x0071 }
  310. com.epson.iprint.storage.StorageServiceClient$ProcessError r4 = com.epson.iprint.storage.StorageServiceClient.ProcessError.ERROR // Catch:{ all -> 0x0071 }
  311. r0.onUploadComplete(r2, r3, r4) // Catch:{ all -> 0x0071 }
  312. if (r1 == 0) goto L_0x0083
  313. r1.close() // Catch:{ IOException -> 0x0083 }
  314. L_0x0083:
  315. return
  316. L_0x0084:
  317. if (r1 == 0) goto L_0x0089
  318. r1.close() // Catch:{ IOException -> 0x0089 }
  319. L_0x0089:
  320. throw r0
  321. L_0x008a:
  322. com.epson.iprint.storage.StorageServiceClient$UploadCompletion r0 = r5.mNotifier
  323. java.lang.String r1 = r5.mOrgFilePath
  324. java.lang.String r2 = r5.mUploadFilename
  325. com.epson.iprint.storage.StorageServiceClient$ProcessError r3 = com.epson.iprint.storage.StorageServiceClient.ProcessError.ERROR
  326. r0.onUploadComplete(r1, r2, r3)
  327. return
  328. */
  329. throw new UnsupportedOperationException("Method not decompiled: com.epson.iprint.storage.dropbox.DropboxV2Client.LocalUploader.run():void");
  330. }
  331. }
  332. }