// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_FILE_DOWNLOADER_H_
#define IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_FILE_DOWNLOADER_H_
#import <Foundation/Foundation.h>
#import "base/functional/callback.h"
struct DriveItem;
@protocol SystemIdentity;
// Identifier for a download started from `DriveFileDownloader`.
using DriveFileDownloadID = NSString*;
// Progress reported by the progress block of a file download.
struct DriveFileDownloadProgress {
// Number of bytes downloaded since last call to the progress callback.
uint64_t bytes_written;
// Number of bytes downloaded so far.
uint64_t total_bytes_written;
// Number of bytes expected to be downloaded.
uint64_t total_bytes_expected_to_write;
};
using DriveFileDownloadProgressCallback =
base::RepeatingCallback<void(DriveFileDownloadID,
const DriveFileDownloadProgress&)>;
using DriveFileDownloadCompletionCallback =
base::OnceCallback<void(DriveFileDownloadID, BOOL, NSError*)>;
// This interface is used to download items from a user's Drive account.
class DriveFileDownloader {
public:
DriveFileDownloader();
virtual ~DriveFileDownloader();
// Returns the identity used to perform queries.
virtual id<SystemIdentity> GetIdentity() const = 0;
// Returns whether download with ID `download_id` is currently being executed
// by this downloader.
virtual bool IsExecutingDownload(DriveFileDownloadID download_id) const = 0;
// Cancels a download with ID `download_id` currently being executed by this
// downloader.
virtual void CancelDownload(DriveFileDownloadID download_id) = 0;
// Initiates a download of the given `item_to_download` and stores it locally
// at `file_url`. Progress of download is reported through `progress_callback`
// and final status, including possible error details, is reported through
// `completion_callback`. Returns ID of the download.
virtual DriveFileDownloadID DownloadFile(
const DriveItem& item_to_download,
NSURL* file_url,
DriveFileDownloadProgressCallback progress_callback,
DriveFileDownloadCompletionCallback completion_callback) = 0;
};
#endif // IOS_CHROME_BROWSER_DRIVE_MODEL_DRIVE_FILE_DOWNLOADER_H_