daily pastebin goal
65%
SHARE
TWEET

Untitled

a guest Mar 26th, 2019 72 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. public class ArCoreInteractor extends SuperInteractor<Model3D> {
  2.     private String sku;
  3.  
  4.     @Override
  5.     public void loadData(@Nullable Bundle bundle, @NonNull ResultListener listener) {
  6.  
  7.         //todo load from Cache
  8.  
  9.         if (bundle != null) {
  10.             sku = bundle.getString(ArCorePresenter.K_SKU_PRODUCT);
  11.             if (!TextUtils.isEmpty(sku)) {
  12.                 mCompositeDisposible.add(
  13.                         Rest.call().getProduct(sku)
  14.                                 .filter(productBaseResponse -> {
  15.                                     if (TextUtils.isEmpty(productBaseResponse.getmData().getUrl3dModel())) {
  16.                                         handleResponse(new Model3D(productBaseResponse.getmData().getImage()), listener);
  17.                                         return false;
  18.                                     } else
  19.                                         return true;
  20.                                 })
  21.                                 .flatMap(this::getArchive)
  22.                                 .flatMap(processResponse())
  23.                                 .flatMap(unpackZip())
  24.                                 .flatMap(getUriFile())
  25.                                 .subscribeOn(Schedulers.io())
  26.                                 .observeOn(AndroidSchedulers.mainThread())
  27.                                 .subscribe(response -> handleResponse(response, listener), error -> handleError(RestUtils.ErrorMessages(error), listener)));
  28.             } else {
  29.                 listener.onFailureResult("Error");
  30.             }
  31.         } else {
  32.             listener.onFailureResult("Error");
  33.         }
  34.  
  35.     }
  36.  
  37.     private ObservableSource<Response<ResponseBody>> getArchive(BaseResponse<Product> response) {
  38.         return Rest.call().downloadFileByUrl(response.getmData().getUrl3dModel());
  39.     }
  40.  
  41.     private Function<File, Observable<Model3D>> getUriFile() {
  42.         return file -> {
  43.             for (File f : file.listFiles()) {
  44.                 if (f.getAbsolutePath().contains(".sfb")) {
  45.                     return Observable.just(new Model3D(Uri.fromFile(f)));
  46.                 }
  47.             }
  48.             return Observable.just(null);
  49.         };
  50.     }
  51.  
  52.     @Override
  53.     public void handleResponse(Model3D model3D, @NonNull ResultListener listener) {
  54.         mData = model3D;
  55.         listener.onSuccessResult();
  56.     }
  57.  
  58.  
  59.     private Function<Response<ResponseBody>, Observable<File>> processResponse() {
  60.         return this::saveToDiskRx;
  61.     }
  62.  
  63.     private Observable<File> saveToDiskRx(final Response<ResponseBody> response) {
  64.         return Observable.create((ObservableEmitter<File> emitter) -> {
  65.             try {
  66.                 //String header = response.headers().get("Content-Disposition");
  67.                 String fileName = "my_temp.zip";
  68.                 File destinationFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsoluteFile(), fileName);
  69.                 BufferedSink bufferedSink = Okio.buffer(Okio.sink(destinationFile));
  70.                 bufferedSink.writeAll(response.body().source());
  71.                 bufferedSink.close();
  72.  
  73.                 emitter.onNext(destinationFile);
  74.                 emitter.onComplete();
  75.             } catch (IOException e) {
  76.                 e.printStackTrace();
  77.                 emitter.onError(e);
  78.             }
  79.  
  80.         });
  81.     }
  82.  
  83.     private Function<File, Observable<File>> unpackZip() {
  84.         return file -> {
  85.             InputStream is;
  86.             ZipInputStream zis;
  87.             String parentFolder;
  88.             String filename = "";
  89.             String extractedFolder = null;
  90.             try {
  91.                 parentFolder = file.getParentFile().getPath();
  92.  
  93.                 is = new FileInputStream(file.getAbsolutePath());
  94.                 zis = new ZipInputStream(new BufferedInputStream(is));
  95.                 ZipEntry ze;
  96.                 byte[] buffer = new byte[1024];
  97.                 int count;
  98.  
  99.                 while ((ze = zis.getNextEntry()) != null) {
  100.                     filename = ze.getName();
  101.  
  102.                     if (ze.isDirectory()) {
  103.                         if (extractedFolder == null)
  104.                             extractedFolder = ze.getName(); // main extractedFolder
  105.                         File fmd = new File(parentFolder + "/" + filename);
  106.                         fmd.mkdirs();
  107.                         continue;
  108.                     }
  109.  
  110.                     FileOutputStream fout = new FileOutputStream(parentFolder + "/" + filename);
  111.  
  112.                     while ((count = zis.read(buffer)) != -1) {
  113.                         fout.write(buffer, 0, count);
  114.                     }
  115.  
  116.                     fout.close();
  117.                     zis.closeEntry();
  118.                 }
  119.  
  120.                 zis.close();
  121.             } catch (IOException e) {
  122.                 e.printStackTrace();
  123.             }
  124.  
  125.             StringBuilder pathExtractedFile = new StringBuilder(file.getAbsolutePath());
  126.             int lastIndex = pathExtractedFile.lastIndexOf("/");
  127.             pathExtractedFile.delete(lastIndex + 1, pathExtractedFile.length());
  128.  
  129.             File extractedFile = new File(pathExtractedFile.append(extractedFolder).toString());
  130.  
  131.             if (!file.delete()) Log.d("unpackZip", "Failed to deleted the zip file.");
  132.             return Observable.just(extractedFile);
  133.         };
  134.     }
  135.  
  136.     @Override
  137.     public void handleError(String error, ResultListener listener) {
  138.         listener.onFailureResult(error);
  139.     }
  140. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top