@Override public String getFilename() { return downloadTask.getFilename(); }
public void inspectFilenameFromResume(@NonNull String filenameOnStore, @NonNull DownloadTask task) { final String filename = task.getFilename(); if (Util.isEmpty(filename)) { task.getFilenameHolder().set(filenameOnStore); } }
public MockTaskForCompare(int id, @NonNull DownloadTask task) { this.id = id; this.url = task.url; this.parentFile = task.getParentFile(); this.providedPathFile = task.providedPathFile; this.filename = task.getFilename(); }
public void validFilenameFromResponse(@Nullable String responseFileName, @NonNull DownloadTask task, @NonNull BreakpointInfo info) throws IOException { if (Util.isEmpty(task.getFilename())) { final String filename = determineFilename(responseFileName, task); // Double check avoid changed by other block. if (Util.isEmpty(task.getFilename())) { synchronized (task) { if (Util.isEmpty(task.getFilename())) { task.getFilenameHolder().set(filename); info.getFilenameHolder().set(filename); } } } } }
String generateKey(@NonNull DownloadTask task) { return task.getUrl() + task.getUri() + task.getFilename(); } }
@Test public void validFilenameResume() { final String taskFilename = "task-filename"; when(task.getFilename()).thenReturn(taskFilename); final DownloadStrategy.FilenameHolder filenameHolder = mock( DownloadStrategy.FilenameHolder.class); when(task.getFilenameHolder()).thenReturn(filenameHolder); final String storeFilename = "store-filename"; strategy.inspectFilenameFromResume(storeFilename, task); verify(filenameHolder, never()).set(anyString()); when(task.getFilename()).thenReturn(null); strategy.inspectFilenameFromResume(storeFilename, task); verify(filenameHolder).set(storeFilename); }
@NonNull @Override public BreakpointInfo createAndInsert(@NonNull DownloadTask task) { final int id = task.getId(); BreakpointInfo newInfo = new BreakpointInfo(id, task.getUrl(), task.getParentFile(), task.getFilename()); synchronized (this) { storedInfos.put(id, newInfo); unStoredTasks.remove(id); } return newInfo; }
@Test public void validFilenameFromResponse() throws IOException { final String taskFilename = "task-filename"; when(task.getFilename()).thenReturn(taskFilename); final DownloadStrategy.FilenameHolder filenameHolder = mock( DownloadStrategy.FilenameHolder.class); when(task.getFilenameHolder()).thenReturn(filenameHolder); final String responseFilename = "response-filename"; final BreakpointInfo info = mock(BreakpointInfo.class); final DownloadStrategy.FilenameHolder infoFilenameHolder = mock( DownloadStrategy.FilenameHolder.class); when(info.getFilenameHolder()).thenReturn(infoFilenameHolder); final String determineFilename = "determine-filename"; doReturn(determineFilename).when(strategy).determineFilename(responseFilename, task); strategy.validFilenameFromResponse(responseFilename, task, info); verify(filenameHolder, never()).set(anyString()); when(task.getFilename()).thenReturn(null); strategy.validFilenameFromResponse(responseFilename, task, info); verify(filenameHolder).set(determineFilename); verify(infoFilenameHolder).set(determineFilename); }
public boolean isSameFrom(DownloadTask task) { if (!parentFile.equals(task.getParentFile())) { return false; } if (!url.equals(task.getUrl())) return false; final String otherFilename = task.getFilename(); if (otherFilename != null && otherFilename.equals(filenameHolder.get())) return true; if (taskOnlyProvidedParentPath) { // filename is provided by response. if (!task.isFilenameFromResponse()) return false; return otherFilename == null || otherFilename.equals(filenameHolder.get()); } return false; }
private void handleUri(Uri uri) { DownloadTask task = new DownloadTask.Builder(DemoUtil.URL, uri) .setMinIntervalMillisCallbackProcess(300) .build(); this.task = task; filenameTv.setText(task.getFilename()); task.enqueue(new SampleListener()); }
@Before public void setup() { keyToIdMap = new HashMap<>(); idToKeyMap = new SparseArray<>(); map = new KeyToIdMap(keyToIdMap, idToKeyMap); task = mock(DownloadTask.class); when(task.getUrl()).thenReturn("url"); when(task.getUri()).thenReturn(Uri.fromFile(new File("./file"))); when(task.getFilename()).thenReturn(null); }
@Test public void createAndInsert() { final DownloadTask task = mock(DownloadTask.class); when(task.getId()).thenReturn(insertedId); when(task.getParentFile()).thenReturn(new File("/p-path/")); when(task.getFilename()).thenReturn("filename"); when(task.getUrl()).thenReturn("url"); storeOnCache.createAndInsert(task); final BreakpointInfo info = storeOnCache.get(insertedId); assertThat(info).isNotNull(); assertThat(info.id).isEqualTo(insertedId); }
final BreakpointInfo info = store.get(task.getId()); @Nullable String filename = task.getFilename(); @NonNull final File parentFile = task.getParentFile(); @Nullable final File targetFile = task.getFile();
boolean inspectCompleted(@NonNull DownloadTask task, @Nullable Collection<DownloadTask> completedCollection) { if (task.isPassIfAlreadyCompleted() && StatusUtil.isCompleted(task)) { if (task.getFilename() == null && !OkDownload.with().downloadStrategy() .validFilenameFromStore(task)) { return false; } OkDownload.with().downloadStrategy().validInfoOnCompleted(task, store); if (completedCollection != null) { completedCollection.add(task); } else { OkDownload.with().callbackDispatcher().dispatch() .taskEnd(task, EndCause.COMPLETED, null); } return true; } return false; }
@Test public void isSameFrom() { BreakpointInfo info = new BreakpointInfo(1, "url", new File("p-path"), "filename"); DownloadTask task = mock(DownloadTask.class); // no filename -> false when(task.getUrl()).thenReturn("url"); when(task.getParentFile()).thenReturn(new File("p-path")); assertThat(info.isSameFrom(task)).isFalse(); // same filename -> true when(task.getFilename()).thenReturn("filename"); assertThat(info.isSameFrom(task)).isTrue(); // is directory but provided same filename -> true when(task.isFilenameFromResponse()).thenReturn(true); assertThat(info.isSameFrom(task)).isTrue(); info = new BreakpointInfo(1, "url", new File("p-path"), null); assertThat(info.isSameFrom(task)).isFalse(); // not directory with filename -> false (don't know whether same yet) when(task.isFilenameFromResponse()).thenReturn(false); assertThat(info.isSameFrom(task)).isFalse(); // is directory and no filename -> true when(task.getFilename()).thenReturn(null); when(task.isFilenameFromResponse()).thenReturn(true); assertThat(info.isSameFrom(task)).isTrue(); // not same url -> false when(task.getUrl()).thenReturn("not-same-url"); assertThat(info.isSameFrom(task)).isFalse(); }
when(task.getFilename()).thenReturn(file.getName()); assertThat(StatusUtil.isCompletedOrUnknown(task)).isEqualTo(StatusUtil.Status.COMPLETED);
/** * Valid info for {@code task} on completed state. */ public void validInfoOnCompleted(@NonNull DownloadTask task, @NonNull DownloadStore store) { BreakpointInfo info = store.getAfterCompleted(task.getId()); if (info == null) { info = new BreakpointInfo(task.getId(), task.getUrl(), task.getParentFile(), task.getFilename()); final long size; if (Util.isUriContentScheme(task.getUri())) { size = Util.getSizeFromContentUri(task.getUri()); } else { final File file = task.getFile(); if (file == null) { size = 0; Util.w(TAG, "file is not ready on valid info for task on complete state " + task); } else { size = file.length(); } } info.addBlock(new BlockInfo(0, size, size)); } DownloadTask.TaskHideWrapper.setBreakpointInfo(task, info); }
@Test public void get_createAndInsert_onSyncToFilesystemSuccess_update() throws IOException { final int id1 = store.findOrCreateId(mockTask()); final int id2 = store.findOrCreateId(mockTask()); assertThat(id1).isNotEqualTo(id2); verify(onCache, times(2)).findOrCreateId(any(DownloadTask.class)); final DownloadTask task = mock(DownloadTask.class); when(task.getId()).thenReturn(id2); when(task.getUrl()).thenReturn("url"); when(task.getParentFile()).thenReturn(new File("p-path")); doReturn("filename").when(task).getFilename(); store.createAndInsert(task); final BreakpointInfo info2 = onCache.get(id2); assertThat(info2).isNotNull(); verify(helper).insert(info2); info2.addBlock(new BlockInfo(0, 20, 5)); store.onSyncToFilesystemSuccess(info2, 0, 10); verify(onCache).onSyncToFilesystemSuccess(info2, 0, 10); verify(helper).updateBlockIncrease(info2, 0, 15); info2.setEtag("new-etag"); store.update(info2); verify(onCache).update(info2); verify(helper).updateInfo(info2); }
@Test public void taskBuilder_constructWithFile() { final String url = "https://jacksgong.com"; final File noExistFile = new File(parentPath, "no-exist"); DownloadTask task = new DownloadTask.Builder(url, noExistFile).build(); assertThat(task.getFilename()).isEqualTo(noExistFile.getName()); assertThat(task.getFile().getAbsolutePath()).isEqualTo(noExistFile.getAbsolutePath()); final File existFile = new File(parentPath, filename); task = new DownloadTask.Builder(url, existFile).build(); assertThat(task.getFilename()).isEqualTo(existFile.getName()); assertThat(task.getFile().getAbsolutePath()).isEqualTo(existFile.getAbsolutePath()); final File existParentFile = new File(parentPath); task = new DownloadTask.Builder(url, existParentFile).build(); assertThat(task.getFilename()).isNull(); assertThat(task.getFile()).isNull(); assertFile(task.getParentFile()).isEqualTo(existParentFile); final File onlyFile = new File("/path"); task = new DownloadTask.Builder(url, onlyFile).build(); assertThat(task.getFilename()).isEqualTo("path"); assertFile(task.getFile()).isEqualTo(onlyFile); assertFile(task.getParentFile()).isEqualTo(new File("/")); }
@Test public void toBuilder() { // filename is provided specially => set filename final Uri uri = mock(Uri.class); when(uri.getPath()).thenReturn(parentPath); when(uri.getScheme()).thenReturn(ContentResolver.SCHEME_FILE); DownloadTask task = new DownloadTask .Builder("url", uri) .setFilename("filename1") .build(); DownloadTask buildTask = task.toBuilder().build(); assertThat(buildTask.getUrl()).isEqualTo("url"); assertThat(buildTask.getUri()).isEqualTo(uri); assertThat(buildTask.getFilename()).isEqualTo("filename1"); // another uri is file, use new filename final Uri anotherUri = mock(Uri.class); when(anotherUri.getScheme()).thenReturn(ContentResolver.SCHEME_FILE); when(anotherUri.getPath()).thenReturn(parentPath + filename); buildTask = task.toBuilder("anotherUrl", anotherUri).build(); assertThat(buildTask.getUrl()).isEqualTo("anotherUrl"); assertThat(buildTask.getUri()).isEqualTo(anotherUri); assertThat(buildTask.getFilename()).isEqualTo(filename); // same uri provided filename => same file when(uri.getPath()).thenReturn(parentPath + filename); task = new DownloadTask .Builder("url", uri) .build(); buildTask = task.toBuilder("anotherUrl", uri).build(); assertFile(buildTask.getFile()).isEqualTo(task.getFile()); }