package co.smartreceipts.android.imports; import android.content.Context; import android.support.annotation.NonNull; import com.google.common.base.Preconditions; import java.io.File; import co.smartreceipts.android.analytics.Analytics; import co.smartreceipts.android.analytics.events.ErrorEvent; import co.smartreceipts.android.model.Attachment; import co.smartreceipts.android.model.Receipt; import co.smartreceipts.android.model.Trip; import co.smartreceipts.android.model.factory.ReceiptBuilderFactory; import co.smartreceipts.android.persistence.PersistenceManager; import co.smartreceipts.android.persistence.database.controllers.impl.ReceiptTableController; import co.smartreceipts.android.persistence.database.operations.DatabaseOperationMetadata; import co.smartreceipts.android.settings.UserPreferenceManager; import io.reactivex.Single; import wb.android.storage.StorageManager; public class AttachmentSendFileImporter { private static final String TAG = AttachmentSendFileImporter.class.getSimpleName(); private final Context mContext; private final Trip mTrip; private final StorageManager mStorageManager; private final UserPreferenceManager mPreferences; private final ReceiptTableController mReceiptTableController; private final Analytics mAnalytics; public AttachmentSendFileImporter(@NonNull Context context, @NonNull Trip trip, @NonNull PersistenceManager persistenceManager, @NonNull ReceiptTableController receiptTableController, @NonNull Analytics analytics) { this(context, trip, persistenceManager.getStorageManager(), persistenceManager.getPreferenceManager(), receiptTableController, analytics); } public AttachmentSendFileImporter(@NonNull Context context, @NonNull Trip trip, @NonNull StorageManager storageManager, @NonNull UserPreferenceManager preferences, @NonNull ReceiptTableController receiptTableController, @NonNull Analytics analytics) { mContext = Preconditions.checkNotNull(context.getApplicationContext()); mTrip = Preconditions.checkNotNull(trip); mStorageManager = Preconditions.checkNotNull(storageManager); mPreferences = Preconditions.checkNotNull(preferences); mReceiptTableController = Preconditions.checkNotNull(receiptTableController); mAnalytics = Preconditions.checkNotNull(analytics); } @NonNull public Single<File> importAttachment(@NonNull Attachment attachment, @NonNull final Receipt receipt) { Preconditions.checkNotNull(attachment); final FileImportProcessor importProcessor; if (attachment.isImage()) { importProcessor = new ImageImportProcessor(mTrip, mStorageManager, mPreferences, mContext); } else if (attachment.isPDF()) { importProcessor = new GenericFileImportProcessor(mTrip, mStorageManager, mContext); } else { importProcessor = new AutoFailImportProcessor(); } return importProcessor.process(attachment.getUri()) .doOnSuccess(file -> mReceiptTableController.update(receipt, new ReceiptBuilderFactory(receipt).setFile(file).build(), new DatabaseOperationMetadata())) .doOnError(throwable -> mAnalytics.record(new ErrorEvent(AttachmentSendFileImporter.this, throwable))); } }