package com.novoda.downloadmanager.lib;
import android.content.ContentResolver;
import android.database.Cursor;
import android.support.annotation.NonNull;
import java.util.Collection;
import java.util.List;
class BatchRepository {
private final BatchStatusRepository batchStatusRepository;
private final BatchStartingRepository batchStartingRepository;
private final BatchDeletionRepository batchDeletionRepository;
private final BatchRetrievalRepository batchRetrievalRepository;
static BatchRepository from(ContentResolver resolver,
DownloadDeleter downloadDeleter,
DownloadsUriProvider downloadsUriProvider,
SystemFacade systemFacade) {
BatchStatusRepository batchStatusRepository = new BatchStatusRepository(resolver, downloadsUriProvider, systemFacade);
BatchStartingRepository batchStartingRepository = new BatchStartingRepository(resolver, downloadsUriProvider);
BatchDeletionRepository batchDeletionRepository = new BatchDeletionRepository(downloadDeleter, resolver, downloadsUriProvider);
BatchRetrievalRepository batchRetrievalRepository = new BatchRetrievalRepository(resolver, downloadsUriProvider);
return new BatchRepository(batchStatusRepository, batchStartingRepository, batchDeletionRepository, batchRetrievalRepository);
}
BatchRepository(BatchStatusRepository batchStatusRepository,
BatchStartingRepository batchStartingRepository,
BatchDeletionRepository batchDeletionRepository,
BatchRetrievalRepository batchRetrievalRepository) {
this.batchStatusRepository = batchStatusRepository;
this.batchStartingRepository = batchStartingRepository;
this.batchDeletionRepository = batchDeletionRepository;
this.batchRetrievalRepository = batchRetrievalRepository;
}
void updateBatchStatus(long batchId, int status) {
batchStatusRepository.updateBatchStatus(batchId, status);
}
int getBatchStatus(long batchId) {
return batchStatusRepository.getBatchStatus(batchId);
}
int calculateBatchStatus(long batchId) {
return batchStatusRepository.calculateBatchStatusFromDownloads(batchId);
}
public void setBatchItemsCancelled(long batchId) {
batchStatusRepository.setBatchItemsCancelled(batchId);
}
public void cancelBatch(long batchId) {
batchStatusRepository.cancelBatch(batchId);
}
public void setBatchItemsFailed(long batchId, long downloadId) {
batchStatusRepository.setBatchItemsFailed(batchId, downloadId);
}
/**
* @return Number of rows updated
*/
int updateBatchesToPendingStatus(@NonNull List<String> batchIdsToBeUnlocked) {
return batchStatusRepository.updateBatchToPendingStatus(batchIdsToBeUnlocked);
}
boolean isBatchStartingForTheFirstTime(long batchId) {
return batchStartingRepository.isBatchStartingForTheFirstTime(batchId);
}
public void markBatchAsStarted(long batchId) {
batchStartingRepository.markBatchAsStarted(batchId);
}
public DownloadBatch retrieveBatchFor(FileDownloadInfo download) {
return batchRetrievalRepository.retrieveBatchFor(download);
}
public List<DownloadBatch> retrieveBatchesFor(Collection<FileDownloadInfo> downloads) {
return batchRetrievalRepository.retrieveBatchesFor(downloads);
}
public Cursor retrieveFor(BatchQuery query) {
return batchRetrievalRepository.retrieveFor(query);
}
public void deleteMarkedBatchesFor(Collection<FileDownloadInfo> downloads) {
batchDeletionRepository.deleteMarkedBatchesFor(downloads);
}
}