diff --git a/android/.project b/android/.project
new file mode 100644
index 00000000..3964dd3f
--- /dev/null
+++ b/android/.project
@@ -0,0 +1,17 @@
+
+
+ android
+ Project android created by Buildship.
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectnature
+
+
diff --git a/android/.settings/org.eclipse.buildship.core.prefs b/android/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 00000000..a4717e18
--- /dev/null
+++ b/android/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,13 @@
+arguments=
+auto.sync=false
+build.scans.enabled=false
+connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(6.0-20191016123526+0000))
+connection.project.dir=
+eclipse.preferences.version=1
+gradle.user.home=
+java.home=/usr/lib/jvm/java-11-openjdk-amd64
+jvm.arguments=
+offline.mode=false
+override.workspace.settings=true
+show.console.view=true
+show.executions.view=true
diff --git a/android/src/main/java/vn/hunghd/flutterdownloader/DownloadTask.java b/android/src/main/java/vn/hunghd/flutterdownloader/DownloadTask.java
index 84b3ae3f..5d11ce00 100644
--- a/android/src/main/java/vn/hunghd/flutterdownloader/DownloadTask.java
+++ b/android/src/main/java/vn/hunghd/flutterdownloader/DownloadTask.java
@@ -7,6 +7,7 @@ public class DownloadTask {
int progress;
String url;
String filename;
+ String additionalinfo;
String savedDir;
String headers;
String mimeType;
@@ -15,7 +16,7 @@ public class DownloadTask {
boolean openFileFromNotification;
long timeCreated;
- DownloadTask(int primaryId, String taskId, int status, int progress, String url, String filename, String savedDir,
+ DownloadTask(int primaryId, String taskId, int status, int progress, String url, String filename, String additionalinfo, String savedDir,
String headers, String mimeType, boolean resumable, boolean showNotification, boolean openFileFromNotification, long timeCreated) {
this.primaryId = primaryId;
this.taskId = taskId;
@@ -23,6 +24,7 @@ public class DownloadTask {
this.progress = progress;
this.url = url;
this.filename = filename;
+ this.additionalinfo = additionalinfo;
this.savedDir = savedDir;
this.headers = headers;
this.mimeType = mimeType;
@@ -34,6 +36,6 @@ public class DownloadTask {
@Override
public String toString() {
- return "DownloadTask{taskId=" + taskId + ",status=" + status + ",progress=" + progress + ",url=" + url + ",filename=" + filename + ",savedDir=" + savedDir + ",headers=" + headers + "}";
+ return "DownloadTask{taskId=" + taskId + ",status=" + status + ",progress=" + progress + ",url=" + url + ",filename=" + filename + ",additionalinfo=" + additionalinfo + ",savedDir=" + savedDir + ",headers=" + headers + "}";
}
}
diff --git a/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java b/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java
index 07b4581e..c499f9c6 100644
--- a/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java
+++ b/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java
@@ -59,6 +59,7 @@
public class DownloadWorker extends Worker implements MethodChannel.MethodCallHandler {
public static final String ARG_URL = "url";
public static final String ARG_FILE_NAME = "file_name";
+ public static final String ARG_ADDITIONAL_INFO = "additional_info";
public static final String ARG_SAVED_DIR = "saved_file";
public static final String ARG_HEADERS = "headers";
public static final String ARG_IS_RESUME = "is_resume";
@@ -159,6 +160,7 @@ public Result doWork() {
String url = getInputData().getString(ARG_URL);
String filename = getInputData().getString(ARG_FILE_NAME);
+ String additionalinfo = getInputData().getString(ARG_ADDITIONAL_INFO);
String savedDir = getInputData().getString(ARG_SAVED_DIR);
String headers = getInputData().getString(ARG_HEADERS);
boolean isResume = getInputData().getBoolean(ARG_IS_RESUME, false);
@@ -171,7 +173,7 @@ public Result doWork() {
msgPaused = res.getString(R.string.flutter_downloader_notification_paused);
msgComplete = res.getString(R.string.flutter_downloader_notification_complete);
- Log.d(TAG, "DownloadWorker{url=" + url + ",filename=" + filename + ",savedDir=" + savedDir + ",header=" + headers + ",isResume=" + isResume);
+ Log.d(TAG, "DownloadWorker{url=" + url + ",filename=" + filename + ",additionalinfo=" + additionalinfo + ",savedDir=" + savedDir + ",header=" + headers + ",isResume=" + isResume);
showNotification = getInputData().getBoolean(ARG_SHOW_NOTIFICATION, false);
clickToOpenDownloadedFile = getInputData().getBoolean(ARG_OPEN_FILE_FROM_NOTIFICATION, false);
diff --git a/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java b/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java
index eee3d2b5..49f96ccc 100644
--- a/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java
+++ b/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java
@@ -109,7 +109,7 @@ public void onDetachedFromEngine(FlutterPluginBinding binding) {
flutterChannel = null;
}
- private WorkRequest buildRequest(String url, String savedDir, String filename, String headers, boolean showNotification, boolean openFileFromNotification, boolean isResume, boolean requiresStorageNotLow) {
+ private WorkRequest buildRequest(String url, String savedDir, String filename, String additionalinfo, String headers, boolean showNotification, boolean openFileFromNotification, boolean isResume, boolean requiresStorageNotLow) {
WorkRequest request = new OneTimeWorkRequest.Builder(DownloadWorker.class)
.setConstraints(new Constraints.Builder()
.setRequiresStorageNotLow(requiresStorageNotLow)
@@ -121,6 +121,7 @@ private WorkRequest buildRequest(String url, String savedDir, String filename, S
.putString(DownloadWorker.ARG_URL, url)
.putString(DownloadWorker.ARG_SAVED_DIR, savedDir)
.putString(DownloadWorker.ARG_FILE_NAME, filename)
+ .putString(DownloadWorker.ARG_ADDITIONAL_INFO, additionalinfo)
.putString(DownloadWorker.ARG_HEADERS, headers)
.putBoolean(DownloadWorker.ARG_SHOW_NOTIFICATION, showNotification)
.putBoolean(DownloadWorker.ARG_OPEN_FILE_FROM_NOTIFICATION, openFileFromNotification)
@@ -160,16 +161,17 @@ private void enqueue(MethodCall call, MethodChannel.Result result) {
String url = call.argument("url");
String savedDir = call.argument("saved_dir");
String filename = call.argument("file_name");
+ String additionalinfo = call.argument("additional_info");
String headers = call.argument("headers");
boolean showNotification = call.argument("show_notification");
boolean openFileFromNotification = call.argument("open_file_from_notification");
boolean requiresStorageNotLow = call.argument("requires_storage_not_low");
- WorkRequest request = buildRequest(url, savedDir, filename, headers, showNotification, openFileFromNotification, false, requiresStorageNotLow);
+ WorkRequest request = buildRequest(url, savedDir, filename, additionalinfo, headers, showNotification, openFileFromNotification, false, requiresStorageNotLow);
WorkManager.getInstance(context).enqueue(request);
String taskId = request.getId().toString();
result.success(taskId);
sendUpdateProgress(taskId, DownloadStatus.ENQUEUED, 0);
- taskDao.insertOrUpdateNewTask(taskId, url, DownloadStatus.ENQUEUED, 0, filename, savedDir, headers, showNotification, openFileFromNotification);
+ taskDao.insertOrUpdateNewTask(taskId, url, DownloadStatus.ENQUEUED, 0, filename, additionalinfo, savedDir, headers, showNotification, openFileFromNotification);
}
private void loadTasks(MethodCall call, MethodChannel.Result result) {
@@ -182,6 +184,7 @@ private void loadTasks(MethodCall call, MethodChannel.Result result) {
item.put("progress", task.progress);
item.put("url", task.url);
item.put("file_name", task.filename);
+ item.put("additional_info", task.additionalinfo);
item.put("saved_dir", task.savedDir);
item.put("time_created", task.timeCreated);
array.add(item);
@@ -200,6 +203,7 @@ private void loadTasksWithRawQuery(MethodCall call, MethodChannel.Result result)
item.put("progress", task.progress);
item.put("url", task.url);
item.put("file_name", task.filename);
+ item.put("additional_info", task.additionalinfo);
item.put("saved_dir", task.savedDir);
item.put("time_created", task.timeCreated);
array.add(item);
@@ -238,7 +242,7 @@ private void resume(MethodCall call, MethodChannel.Result result) {
String partialFilePath = task.savedDir + File.separator + filename;
File partialFile = new File(partialFilePath);
if (partialFile.exists()) {
- WorkRequest request = buildRequest(task.url, task.savedDir, task.filename, task.headers, task.showNotification, task.openFileFromNotification, true, requiresStorageNotLow);
+ WorkRequest request = buildRequest(task.url, task.savedDir, task.filename, task.additionalinfo, task.headers, task.showNotification, task.openFileFromNotification, true, requiresStorageNotLow);
String newTaskId = request.getId().toString();
result.success(newTaskId);
sendUpdateProgress(newTaskId, DownloadStatus.RUNNING, task.progress);
@@ -261,7 +265,7 @@ private void retry(MethodCall call, MethodChannel.Result result) {
boolean requiresStorageNotLow = call.argument("requires_storage_not_low");
if (task != null) {
if (task.status == DownloadStatus.FAILED || task.status == DownloadStatus.CANCELED) {
- WorkRequest request = buildRequest(task.url, task.savedDir, task.filename, task.headers, task.showNotification, task.openFileFromNotification, false, requiresStorageNotLow);
+ WorkRequest request = buildRequest(task.url, task.savedDir, task.filename, task.additionalinfo, task.headers, task.showNotification, task.openFileFromNotification, false, requiresStorageNotLow);
String newTaskId = request.getId().toString();
result.success(newTaskId);
sendUpdateProgress(newTaskId, DownloadStatus.ENQUEUED, task.progress);
diff --git a/android/src/main/java/vn/hunghd/flutterdownloader/TaskContract.java b/android/src/main/java/vn/hunghd/flutterdownloader/TaskContract.java
index 425d1277..a3e09ee1 100644
--- a/android/src/main/java/vn/hunghd/flutterdownloader/TaskContract.java
+++ b/android/src/main/java/vn/hunghd/flutterdownloader/TaskContract.java
@@ -14,6 +14,7 @@ public static class TaskEntry implements BaseColumns {
public static final String COLUMN_NAME_URL = "url";
public static final String COLUMN_NAME_SAVED_DIR = "saved_dir";
public static final String COLUMN_NAME_FILE_NAME = "file_name";
+ public static final String COLUMN_NAME_ADDITIONAL_INFO = "additional_info";
public static final String COLUMN_NAME_MIME_TYPE = "mime_type";
public static final String COLUMN_NAME_RESUMABLE = "resumable";
public static final String COLUMN_NAME_HEADERS = "headers";
diff --git a/android/src/main/java/vn/hunghd/flutterdownloader/TaskDao.java b/android/src/main/java/vn/hunghd/flutterdownloader/TaskDao.java
index 2c074dbb..8a5f3499 100644
--- a/android/src/main/java/vn/hunghd/flutterdownloader/TaskDao.java
+++ b/android/src/main/java/vn/hunghd/flutterdownloader/TaskDao.java
@@ -18,6 +18,7 @@ public class TaskDao {
TaskContract.TaskEntry.COLUMN_NAME_STATUS,
TaskContract.TaskEntry.COLUMN_NAME_URL,
TaskContract.TaskEntry.COLUMN_NAME_FILE_NAME,
+ TaskContract.TaskEntry.COLUMN_NAME_ADDITIONAL_INFO,
TaskContract.TaskEntry.COLUMN_NAME_SAVED_DIR,
TaskContract.TaskEntry.COLUMN_NAME_HEADERS,
TaskContract.TaskEntry.COLUMN_NAME_MIME_TYPE,
@@ -31,7 +32,7 @@ public TaskDao(TaskDbHelper helper) {
dbHelper = helper;
}
- public void insertOrUpdateNewTask(String taskId, String url, int status, int progress, String fileName,
+ public void insertOrUpdateNewTask(String taskId, String url, int status, int progress, String fileName, String additionalinfo,
String savedDir, String headers, boolean showNotification, boolean openFileFromNotification) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
@@ -41,6 +42,7 @@ public void insertOrUpdateNewTask(String taskId, String url, int status, int pro
values.put(TaskContract.TaskEntry.COLUMN_NAME_STATUS, status);
values.put(TaskContract.TaskEntry.COLUMN_NAME_PROGRESS, progress);
values.put(TaskContract.TaskEntry.COLUMN_NAME_FILE_NAME, fileName);
+ values.put(TaskContract.TaskEntry.COLUMN_NAME_ADDITIONAL_INFO, additionalinfo);
values.put(TaskContract.TaskEntry.COLUMN_NAME_SAVED_DIR, savedDir);
values.put(TaskContract.TaskEntry.COLUMN_NAME_HEADERS, headers);
values.put(TaskContract.TaskEntry.COLUMN_NAME_MIME_TYPE, "unknown");
@@ -216,6 +218,7 @@ private DownloadTask parseCursor(Cursor cursor) {
int progress = cursor.getInt(cursor.getColumnIndexOrThrow(TaskContract.TaskEntry.COLUMN_NAME_PROGRESS));
String url = cursor.getString(cursor.getColumnIndexOrThrow(TaskContract.TaskEntry.COLUMN_NAME_URL));
String filename = cursor.getString(cursor.getColumnIndexOrThrow(TaskContract.TaskEntry.COLUMN_NAME_FILE_NAME));
+ String additionalinfo = cursor.getString(cursor.getColumnIndexOrThrow(TaskContract.TaskEntry.COLUMN_NAME_ADDITIONAL_INFO));
String savedDir = cursor.getString(cursor.getColumnIndexOrThrow(TaskContract.TaskEntry.COLUMN_NAME_SAVED_DIR));
String headers = cursor.getString(cursor.getColumnIndexOrThrow(TaskContract.TaskEntry.COLUMN_NAME_HEADERS));
String mimeType = cursor.getString(cursor.getColumnIndexOrThrow(TaskContract.TaskEntry.COLUMN_NAME_MIME_TYPE));
@@ -223,7 +226,7 @@ private DownloadTask parseCursor(Cursor cursor) {
int showNotification = cursor.getShort(cursor.getColumnIndexOrThrow(TaskContract.TaskEntry.COLUMN_NAME_SHOW_NOTIFICATION));
int clickToOpenDownloadedFile = cursor.getShort(cursor.getColumnIndexOrThrow(TaskContract.TaskEntry.COLUMN_NAME_OPEN_FILE_FROM_NOTIFICATION));
long timeCreated = cursor.getLong(cursor.getColumnIndexOrThrow(TaskContract.TaskEntry.COLUMN_NAME_TIME_CREATED));
- return new DownloadTask(primaryId, taskId, status, progress, url, filename, savedDir, headers,
+ return new DownloadTask(primaryId, taskId, status, progress, url, filename, additionalinfo, savedDir, headers,
mimeType, resumable == 1, showNotification == 1, clickToOpenDownloadedFile == 1, timeCreated);
}
diff --git a/android/src/main/java/vn/hunghd/flutterdownloader/TaskDbHelper.java b/android/src/main/java/vn/hunghd/flutterdownloader/TaskDbHelper.java
index d6ddfafd..6017dd4f 100644
--- a/android/src/main/java/vn/hunghd/flutterdownloader/TaskDbHelper.java
+++ b/android/src/main/java/vn/hunghd/flutterdownloader/TaskDbHelper.java
@@ -20,6 +20,7 @@ public class TaskDbHelper extends SQLiteOpenHelper {
TaskEntry.COLUMN_NAME_STATUS + " INTEGER DEFAULT 0, " +
TaskEntry.COLUMN_NAME_PROGRESS + " INTEGER DEFAULT 0, " +
TaskEntry.COLUMN_NAME_FILE_NAME + " TEXT, " +
+ TaskEntry.COLUMN_NAME_ADDITIONAL_INFO + " TEXT, " +
TaskEntry.COLUMN_NAME_SAVED_DIR + " TEXT, " +
TaskEntry.COLUMN_NAME_HEADERS + " TEXT, " +
TaskEntry.COLUMN_NAME_MIME_TYPE + " VARCHAR(128), " +
diff --git a/example/.vscode/launch.json b/example/.vscode/launch.json
new file mode 100644
index 00000000..3287bb67
--- /dev/null
+++ b/example/.vscode/launch.json
@@ -0,0 +1,13 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Flutter",
+ "request": "launch",
+ "type": "dart"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/example/android/.project b/example/android/.project
new file mode 100644
index 00000000..3964dd3f
--- /dev/null
+++ b/example/android/.project
@@ -0,0 +1,17 @@
+
+
+ android
+ Project android created by Buildship.
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectnature
+
+
diff --git a/example/android/.settings/org.eclipse.buildship.core.prefs b/example/android/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 00000000..e8895216
--- /dev/null
+++ b/example/android/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,2 @@
+connection.project.dir=
+eclipse.preferences.version=1
diff --git a/example/android/app/.classpath b/example/android/app/.classpath
new file mode 100644
index 00000000..4a04201c
--- /dev/null
+++ b/example/android/app/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/example/android/app/.project b/example/android/app/.project
new file mode 100644
index 00000000..ac485d7c
--- /dev/null
+++ b/example/android/app/.project
@@ -0,0 +1,23 @@
+
+
+ app
+ Project app created by Buildship.
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.buildship.core.gradleprojectnature
+
+
diff --git a/example/android/app/.settings/org.eclipse.buildship.core.prefs b/example/android/app/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 00000000..b1886adb
--- /dev/null
+++ b/example/android/app/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,2 @@
+connection.project.dir=..
+eclipse.preferences.version=1
diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh
index 8ff74aba..3e5e307b 100755
--- a/example/ios/Flutter/flutter_export_environment.sh
+++ b/example/ios/Flutter/flutter_export_environment.sh
@@ -1,5 +1,6 @@
#!/bin/sh
# This is a generated file; do not edit or check into version control.
+
export "FLUTTER_ROOT=/Users/hunghd/Documents/Workspace/flutter"
export "FLUTTER_APPLICATION_PATH=/Users/hunghd/Documents/Workspace/flutter_packages/flutter_downloader/example"
export "FLUTTER_TARGET=lib/main.dart"
diff --git a/example/lib/main.dart b/example/lib/main.dart
index cf1ecf7b..bfed67d4 100644
--- a/example/lib/main.dart
+++ b/example/lib/main.dart
@@ -393,6 +393,7 @@ class _MyHomePageState extends State {
void _requestDownload(_TaskInfo task) async {
task.taskId = await FlutterDownloader.enqueue(
url: task.link,
+ additionalInfo: 'this is additional info of ${task.link}',
headers: {"auth": "test_for_sql_encoding"},
savedDir: _localPath,
showNotification: true,
diff --git a/ios/Classes/FlutterDownloaderPlugin.m b/ios/Classes/FlutterDownloaderPlugin.m
index 31cdbc60..51e38a3c 100644
--- a/ios/Classes/FlutterDownloaderPlugin.m
+++ b/ios/Classes/FlutterDownloaderPlugin.m
@@ -12,6 +12,7 @@
#define KEY_URL @"url"
#define KEY_SAVED_DIR @"saved_dir"
#define KEY_FILE_NAME @"file_name"
+#define KEY_ADDITIONAL_INFO @"additional_info"
#define KEY_PROGRESS @"progress"
#define KEY_ID @"id"
#define KEY_IDS @"ids"
@@ -132,7 +133,7 @@ - (NSURLSession*)currentSession {
return _session;
}
-- (NSURLSessionDownloadTask*)downloadTaskWithURL: (NSURL*) url fileName: (NSString*) fileName andSavedDir: (NSString*) savedDir andHeaders: (NSString*) headers
+- (NSURLSessionDownloadTask*)downloadTaskWithURL: (NSURL*) url fileName: (NSString*) fileName andAdditionalInfo: (NSString*) additionalInfo andSavedDir: (NSString*) savedDir andHeaders: (NSString*) headers
{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
if (headers != nil && [headers length] > 0) {
@@ -347,7 +348,7 @@ - (NSString*) escape:(NSString*) origin revert:(BOOL)revert
: [origin stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
}
-- (void) addNewTask: (NSString*) taskId url: (NSString*) url status: (int) status progress: (int) progress filename: (NSString*) filename savedDir: (NSString*) savedDir headers: (NSString*) headers resumable: (BOOL) resumable showNotification: (BOOL) showNotification openFileFromNotification: (BOOL) openFileFromNotification
+- (void) addNewTask: (NSString*) taskId url: (NSString*) url status: (int) status progress: (int) progress filename: (NSString*) filename additionalinfo: (NSString*) additionalinfo savedDir: (NSString*) savedDir headers: (NSString*) headers resumable: (BOOL) resumable showNotification: (BOOL) showNotification openFileFromNotification: (BOOL) openFileFromNotification
{
headers = [self escape:headers revert:false];
NSString *query = [NSString stringWithFormat:@"INSERT INTO task (task_id,url,status,progress,file_name,saved_dir,headers,resumable,show_notification,open_file_from_notification,time_created) VALUES (\"%@\",\"%@\",%d,%d,\"%@\",\"%@\",\"%@\",%d,%d,%d,%ld)", taskId, url, status, progress, filename, savedDir, headers, resumable ? 1 : 0, showNotification ? 1 : 0, openFileFromNotification ? 1 : 0, [self currentTimeInMilliseconds]];
@@ -474,6 +475,7 @@ - (NSDictionary*) taskDictFromRecordArray:(NSArray*)record
int progress = [[record objectAtIndex:[_dbManager.arrColumnNames indexOfObject:@"progress"]] intValue];
NSString *url = [record objectAtIndex:[_dbManager.arrColumnNames indexOfObject:@"url"]];
NSString *filename = [record objectAtIndex:[_dbManager.arrColumnNames indexOfObject:@"file_name"]];
+ NSString *additionalinfo = [record objectAtIndex:[_dbManager.arrColumnNames indexOfObject:@"additional_info"]];
NSString *savedDir = [self absoluteSavedDirPath:[record objectAtIndex:[_dbManager.arrColumnNames indexOfObject:@"saved_dir"]]];
NSString *headers = [record objectAtIndex:[_dbManager.arrColumnNames indexOfObject:@"headers"]];
headers = [self escape:headers revert:true];
@@ -481,7 +483,7 @@ - (NSDictionary*) taskDictFromRecordArray:(NSArray*)record
int showNotification = [[record objectAtIndex:[_dbManager.arrColumnNames indexOfObject:@"show_notification"]] intValue];
int openFileFromNotification = [[record objectAtIndex:[_dbManager.arrColumnNames indexOfObject:@"open_file_from_notification"]] intValue];
long long timeCreated = [[record objectAtIndex:[_dbManager.arrColumnNames indexOfObject:@"time_created"]] longLongValue];
- return [NSDictionary dictionaryWithObjectsAndKeys:taskId, KEY_TASK_ID, @(status), KEY_STATUS, @(progress), KEY_PROGRESS, url, KEY_URL, filename, KEY_FILE_NAME, headers, KEY_HEADERS, savedDir, KEY_SAVED_DIR, [NSNumber numberWithBool:(resumable == 1)], KEY_RESUMABLE, [NSNumber numberWithBool:(showNotification == 1)], KEY_SHOW_NOTIFICATION, [NSNumber numberWithBool:(openFileFromNotification == 1)], KEY_OPEN_FILE_FROM_NOTIFICATION, @(timeCreated), KEY_TIME_CREATED, nil];
+ return [NSDictionary dictionaryWithObjectsAndKeys:taskId, KEY_TASK_ID, @(status), KEY_STATUS, @(progress), KEY_PROGRESS, url, KEY_URL, filename, KEY_FILE_NAME, additionalinfo, KEY_ADDITIONAL_INFO, headers, KEY_HEADERS, savedDir, KEY_SAVED_DIR, [NSNumber numberWithBool:(resumable == 1)], KEY_RESUMABLE, [NSNumber numberWithBool:(showNotification == 1)], KEY_SHOW_NOTIFICATION, [NSNumber numberWithBool:(openFileFromNotification == 1)], KEY_OPEN_FILE_FROM_NOTIFICATION, @(timeCreated), KEY_TIME_CREATED, nil];
}
# pragma mark - FlutterDownloader
@@ -516,17 +518,19 @@ - (void)enqueueMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result
NSString *savedDir = call.arguments[KEY_SAVED_DIR];
NSString *shortSavedDir = [self shortenSavedDirPath:savedDir];
NSString *fileName = call.arguments[KEY_FILE_NAME];
+ NSString *additionalInfo = call.arguments[KEY_ADDITIONAL_INFO];
NSString *headers = call.arguments[KEY_HEADERS];
NSNumber *showNotification = call.arguments[KEY_SHOW_NOTIFICATION];
NSNumber *openFileFromNotification = call.arguments[KEY_OPEN_FILE_FROM_NOTIFICATION];
- NSURLSessionDownloadTask *task = [self downloadTaskWithURL:[NSURL URLWithString:urlString] fileName:fileName andSavedDir:savedDir andHeaders:headers];
+ NSURLSessionDownloadTask *task = [self downloadTaskWithURL:[NSURL URLWithString:urlString] fileName:fileName andAdditionalInfo:andAdditionalInfo andSavedDir:savedDir andHeaders:headers];
NSString *taskId = [self identifierForTask:task];
[_runningTaskById setObject: [NSMutableDictionary dictionaryWithObjectsAndKeys:
urlString, KEY_URL,
fileName, KEY_FILE_NAME,
+ andAdditionalInfo, KEY_ADDITIONAL_INFO,
savedDir, KEY_SAVED_DIR,
headers, KEY_HEADERS,
showNotification, KEY_SHOW_NOTIFICATION,
@@ -538,7 +542,7 @@ - (void)enqueueMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result
__typeof__(self) __weak weakSelf = self;
dispatch_sync(databaseQueue, ^{
- [weakSelf addNewTask:taskId url:urlString status:STATUS_ENQUEUED progress:0 filename:fileName savedDir:shortSavedDir headers:headers resumable:NO showNotification: [showNotification boolValue] openFileFromNotification: [openFileFromNotification boolValue]];
+ [weakSelf addNewTask:taskId url:urlString status:STATUS_ENQUEUED progress:0 filename:fileName additionalinfo:additionalInfo savedDir:shortSavedDir headers:headers resumable:NO showNotification: [showNotification boolValue] openFileFromNotification: [openFileFromNotification boolValue]];
});
result(taskId);
[self sendUpdateProgressForTaskId:taskId inStatus:@(STATUS_ENQUEUED) andProgress:@0];
diff --git a/lib/src/downloader.dart b/lib/src/downloader.dart
index 8fef7add..55de3c31 100644
--- a/lib/src/downloader.dart
+++ b/lib/src/downloader.dart
@@ -48,6 +48,7 @@ class FlutterDownloader {
/// * `savedDir`: absolute path of the directory where downloaded file is saved
/// * `fileName`: name of downloaded file. If this parameter is not set, the
/// plugin will try to extract a file name from HTTP headers response or `url`
+ /// * `additionalInfo`:name of Additional information of a downloaded file
/// * `headers`: HTTP headers
/// * `showNotification`: sets `true` to show a notification displaying the
/// download progress (only Android), otherwise, `false` value will disable
@@ -66,6 +67,7 @@ class FlutterDownloader {
{@required String url,
@required String savedDir,
String fileName,
+ String additionalInfo,
Map headers,
bool showNotification = true,
bool openFileFromNotification = true,
@@ -87,6 +89,7 @@ class FlutterDownloader {
'url': url,
'saved_dir': savedDir,
'file_name': fileName,
+ 'additional_info': additionalInfo,
'headers': headerBuilder.toString(),
'show_notification': showNotification,
'open_file_from_notification': openFileFromNotification,
@@ -114,12 +117,14 @@ class FlutterDownloader {
List result = await _channel.invokeMethod('loadTasks');
return result
.map((item) => new DownloadTask(
- taskId: item['task_id'],
- status: DownloadTaskStatus(item['status']),
- progress: item['progress'],
- url: item['url'],
- filename: item['file_name'],
- savedDir: item['saved_dir']))
+ taskId: item['task_id'],
+ status: DownloadTaskStatus(item['status']),
+ progress: item['progress'],
+ url: item['url'],
+ filename: item['file_name'],
+ additionalInfo: item['additional_info'],
+ savedDir: item['saved_dir']),)
+
.toList();
} on PlatformException catch (e) {
print(e.message);
@@ -157,12 +162,14 @@ class FlutterDownloader {
print('Loaded tasks: $result');
return result
.map((item) => new DownloadTask(
- taskId: item['task_id'],
- status: DownloadTaskStatus(item['status']),
- progress: item['progress'],
- url: item['url'],
- filename: item['file_name'],
- savedDir: item['saved_dir']))
+ taskId: item['task_id'],
+ status: DownloadTaskStatus(item['status']),
+ progress: item['progress'],
+ url: item['url'],
+ filename: item['file_name'],
+ additionalInfo: item['additional_info'],
+ savedDir: item['saved_dir']))
+
.toList();
} on PlatformException catch (e) {
print(e.message);
diff --git a/lib/src/models.dart b/lib/src/models.dart
index 11474758..f2c09511 100644
--- a/lib/src/models.dart
+++ b/lib/src/models.dart
@@ -34,6 +34,7 @@ class DownloadTaskStatus {
/// * [progress] the latest progress value of a download task
/// * [url] the download link
/// * [filename] the local file name of a downloaded file
+/// * [additionalInfo] Additional information of a downloaded file
/// * [savedDir] the absolute path of the directory where the downloaded file is saved
///
class DownloadTask {
@@ -42,17 +43,21 @@ class DownloadTask {
final int progress;
final String url;
final String filename;
+ final String additionalInfo;
final String savedDir;
- DownloadTask(
- {this.taskId,
- this.status,
- this.progress,
- this.url,
- this.filename,
- this.savedDir});
+ DownloadTask({
+ this.taskId,
+ this.status,
+ this.progress,
+ this.url,
+ this.filename,
+ this.additionalInfo,
+ this.savedDir,
+ });
@override
String toString() =>
- "DownloadTask(taskId: $taskId, status: $status, progress: $progress, url: $url, filename: $filename, savedDir: $savedDir)";
+ "DownloadTask(taskId: $taskId, status: $status, progress: $progress, url: $url, filename: $filename, additionalInfo: $additionalInfo, savedDir: $savedDir)";
+
}