Downloads

Este guia descreve como gerenciar os downloads de arquivos, acompanhar o progresso de um download, receber uma notificação quando o download estiver concluído, etc.

Visão geral

Para obter uma lista de todas os downloads, associadas ao Profile específico, incluindo os downloads já concluídos durante esta sessão da aplicação e os downloads ativos, utilize a seguinte abordagem:

List<Download> downloads = profile.downloads().list();
val downloads = profile.downloads().list()

Usando Engine.downloads() você obterá o serviço de download para o perfil padrão.

Aceitar o Download

Toda vez que uma instância do Browser precisa baixar um arquivo, a chamada de retorno StartDownloadCallback é invocada. Nesta chamada de retorno, pode decidir se o arquivo deve ser descarregado ou se o pedido de download deve ser cancelado.

browser.set(StartDownloadCallback.class, (params, tell) -> tell.cancel());
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell -> tell.cancel() })

Por padrão, todos os requests de download são cancelados.

Para alterar o comportamento padrão e permitir o download de um arquivo, utilize a seguinte abordagem:

browser.set(StartDownloadCallback.class, (params, tell) -> {
    Download download = params.download();
    // Detalhes do destino do download.
    DownloadTarget downloadTarget = download.target();
    // Dizer ao motor para realizar o download e salvar o arquivo.
    tell.download(Paths.get(downloadTarget.suggestedFileName()));
});
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell ->
    val download = params.download()
    // Detalhes do alvo do download.
    val downloadTarget = download.target()
    // Dizer ao motor para realizar o download e salvar o arquivo.
    tell.download(Path(downloadTarget.suggestedFileName()))
})

No exemplo acima, dizemos à biblioteca que o arquivo pode ser descarregado e salvo num determinado arquivo de destino.

Certifique-se de que o processo principal Chromium tem direitos para criar arquivos no diretório de destino indicado. Se o diretório dado já tiver um arquivo com o nome dado, então o arquivo será substituído automaticamente. Recomendamos que verifique os direitos e a existência do arquivo antes de aceitar o download do arquivo.

Processo de Controle

Para controlar o processo de download, utilize a instância Download que pode ser obtida através do método StartDownloadCallback.Params.download().

Por exemplo:

browser.set(StartDownloadCallback.class, (params, tell) -> {
    Download download = params.download();
    ...
});
browser.set(StartDownloadCallback::class.java, StartDownloadCallback { params, tell ->
    val download = params.download()
    ...
})

Pausa no Download

Para pausar o download, utilize o método Download.pause():

download.pause();
download.pause()

Retomar o Download

Para retomar o download em pausa, utilize o método Download.resume():

if (download.isPaused()) {
    download.resume();
}
if (download.isPaused()) {
    download.resume()
}

Cancelar o Download

Pode cancelar o download a qualquer momento, a menos que o download esteja num estado terminado. Isto inclui os downloads concluídos, os download cancelados e os downloads interrompidos que não podem ser retomados.

Para saber se o download está no estado terminado, use o método Download.isDone().

Para cancelar o download, utilize o método Download.cancel():

if (!download.isDone()) {
    download.cancel();
}
if (!download.isDone()) {
    download.cancel()
}

Download de Eventos

Pode acompanhar o progresso do download, receber notificações quando o download tiver sido cancelado, pausado, interrompido ou concluído.

Download Cancelado

Para receber notificações quando o Download for cancelado, utilize o evento DownloadCanceled:

download.on(DownloadCanceled.class, event -> {});
download.on(DownloadCanceled::class.java) { event -> }

Download Finalizado

Para receber notificações quando o Download tiver sido concluído, utilize o evento DownloadFinished:

download.on(DownloadFinished.class, event -> {});
download.on(DownloadFinished::class.java) { event -> }

Download Pausado

Para receber notificações quando o Download foi pausado, utilize o evento DownloadPaused:

download.on(DownloadPaused.class, event -> {});
download.on(DownloadPaused::class.java) { event -> }

Download Atualizado

Para acompanhar o progresso do download, use o evento DownloadUpdated:

download.on(DownloadUpdated.class, event -> {
    // Imprime o progresso do download em porcentagens.
    event.progress().ifPresent(progress -> 
            System.out.println((int) (progress.value() * 100) + "%"));
    // A estimativa atual da velocidade do download em bytes/segundo.
    long currentSpeed = event.currentSpeed();
    // O tamanho total de um arquivo em bytes.
    long totalBytes = event.totalBytes();
    // O número de bytes recebidos (descarregados).
    long receivedBytes = event.receivedBytes();
});
download.on(DownloadUpdated::class.java) { event -> 
    // Print download progress in percents.
    event.progress().ifPresent { progress -> 
        println("${(progress.value() * 100).toInt()}%")
    }
    // A estimativa atual da velocidade do download em bytes/segundo.
    val currentSpeed = event.currentSpeed()
    // O tamanho total de um arquivo em bytes.
    val totalBytes = event.totalBytes()
    // O número de bytes recebidos (descarregados).
    val receivedBytes = event.receivedBytes()
}

Download Interrompido

Para receber notificações quando o Download for interrompido por algum motivo, utilize o evento DownloadInterrupted:

download.on(DownloadInterrupted.class, event -> {
    // The interrupt reason such as file access denied, network failed, etc.
    DownloadInterruptReason reason = event.reason();
});
download.on(DownloadInterrupted::class.java) { event ->
    // The interrupt reason such as file access denied, network failed, etc.
    val reason = event.reason()
}
Go Top