/* * Copyright � 2016 TIBCO Software,Inc.All rights reserved. * http://community.jaspersoft.com/project/jaspermobile-android * * Unless you have purchased a commercial license agreement from TIBCO Jaspersoft, * the following license terms apply: * * This program is part of TIBCO Jaspersoft Mobile for Android. * * TIBCO Jaspersoft Mobile is free software:you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation,either version 3of the License,or * (at your option)any later version. * * TIBCO Jaspersoft Mobile is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY;without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with TIBCO Jaspersoft Mobile for Android.If not,see * <http://www.gnu.org/licenses/lgpl>. */ package com.jaspersoft.android.jaspermobile.domain.interactor.resource; import com.jaspersoft.android.jaspermobile.domain.ScreenCapture; import com.jaspersoft.android.jaspermobile.domain.executor.PostExecutionThread; import com.jaspersoft.android.jaspermobile.domain.executor.PreExecutionThread; import com.jaspersoft.android.jaspermobile.domain.interactor.AbstractUseCase; import com.jaspersoft.android.jaspermobile.domain.repository.FilesRepository; import com.jaspersoft.android.jaspermobile.internal.di.PerProfile; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import javax.inject.Inject; import rx.Observable; import rx.Subscriber; /** * @author Andrew Tivodar * @since 2.3 */ @PerProfile public class SaveScreenCaptureCase extends AbstractUseCase<File, ScreenCapture> { private static final String FILE_DATE_FORMAT = "yyyy-MM-dd hh:mm:ss"; private static final String SCREEN_CAPTURE_NAME = "JasperMobile shared resource "; private static final String SCREEN_CAPTURE_FORMAT = ".jpg"; private static final String SCREEN_CAPTURE_SHARED_DIR = "shared_cache"; private final FilesRepository mFilesRepository; private final SimpleDateFormat mSimpleDateFormat; @Inject protected SaveScreenCaptureCase(PreExecutionThread preExecutionThread, PostExecutionThread postExecutionThread, FilesRepository filesRepository) { super(preExecutionThread, postExecutionThread); mFilesRepository = filesRepository; mSimpleDateFormat = new SimpleDateFormat(FILE_DATE_FORMAT, Locale.getDefault()); } @Override protected Observable<File> buildUseCaseObservable(final ScreenCapture screenCapture) { return Observable.create(new Observable.OnSubscribe<File>() { @Override public void call(Subscriber<? super File> subscriber) { try { String currentDate = mSimpleDateFormat.format(new Date()); File file = mFilesRepository.cacheFile(SCREEN_CAPTURE_NAME + currentDate + SCREEN_CAPTURE_FORMAT, SCREEN_CAPTURE_SHARED_DIR); FileOutputStream fileOutputStream = new FileOutputStream(file); boolean saved = screenCapture.saveInto(fileOutputStream); if (saved) { subscriber.onNext(file); subscriber.onCompleted(); } else { subscriber.onError(new IOException("Can not create file.")); } } catch (IOException exc) { subscriber.onError(new IOException("Can not cache file.")); } } }); } }