From 8bcac5cbd810c3d4a30e199c0f3971f274714d35 Mon Sep 17 00:00:00 2001 From: "Mr.Nasr" Date: Thu, 26 Dec 2019 11:25:01 +0330 Subject: [PATCH 1/4] dart additional info --- example/.flutter-plugins-dependencies | 1 + .../ios/Flutter/flutter_export_environment.sh | 10 +++++++ lib/src/downloader.dart | 9 ++++-- lib/src/models.dart | 28 ++++++++++--------- 4 files changed, 33 insertions(+), 15 deletions(-) create mode 100644 example/.flutter-plugins-dependencies create mode 100755 example/ios/Flutter/flutter_export_environment.sh diff --git a/example/.flutter-plugins-dependencies b/example/.flutter-plugins-dependencies new file mode 100644 index 00000000..3d7e3dec --- /dev/null +++ b/example/.flutter-plugins-dependencies @@ -0,0 +1 @@ +{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"flutter_downloader","dependencies":[]},{"name":"path_provider","dependencies":[]},{"name":"permission_handler","dependencies":[]}]} \ No newline at end of file diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh new file mode 100755 index 00000000..cf11c8e8 --- /dev/null +++ b/example/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=/home/mrnasr/Development/flutter" +export "FLUTTER_APPLICATION_PATH=/home/mrnasr/Desktop/flutter_downloader/example" +export "FLUTTER_TARGET=lib/main.dart" +export "FLUTTER_BUILD_DIR=build" +export "SYMROOT=${SOURCE_ROOT}/../build/ios" +export "FLUTTER_FRAMEWORK_DIR=/home/mrnasr/Development/flutter/bin/cache/artifacts/engine/ios" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" diff --git a/lib/src/downloader.dart b/lib/src/downloader.dart index a3ea824c..d9cdc07a 100644 --- a/lib/src/downloader.dart +++ b/lib/src/downloader.dart @@ -46,6 +46,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 @@ -64,10 +65,11 @@ class FlutterDownloader { {@required String url, @required String savedDir, String fileName, + String additionalInfo, Map headers, bool showNotification = true, bool openFileFromNotification = true, - bool requiresStorageNotLow = true}) async { + bool requiresStorageNotLow = true,}) async { assert(_initialized, 'FlutterDownloader.initialize() must be called first'); assert(Directory(savedDir).existsSync()); @@ -85,6 +87,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, @@ -117,7 +120,8 @@ class FlutterDownloader { progress: item['progress'], url: item['url'], filename: item['file_name'], - savedDir: item['saved_dir'])) + additionalInfo: item['additional_info'], + savedDir: item['saved_dir']),) .toList(); } on PlatformException catch (e) { print(e.message); @@ -160,6 +164,7 @@ class FlutterDownloader { progress: item['progress'], url: item['url'], filename: item['file_name'], + additionalInfo: item['additional_info'], savedDir: item['saved_dir'])) .toList(); } on PlatformException catch (e) { diff --git a/lib/src/models.dart b/lib/src/models.dart index d95cfda9..4677c170 100644 --- a/lib/src/models.dart +++ b/lib/src/models.dart @@ -1,11 +1,10 @@ - /// /// A class defines a set of possible statuses of a download task /// class DownloadTaskStatus { final int _value; - const DownloadTaskStatus(int value): _value = value; + const DownloadTaskStatus(int value) : _value = value; int get value => _value; @@ -15,8 +14,7 @@ class DownloadTaskStatus { toString() => 'DownloadTaskStatus($_value)'; - static DownloadTaskStatus from(int value) => - DownloadTaskStatus(value); + static DownloadTaskStatus from(int value) => DownloadTaskStatus(value); static const undefined = const DownloadTaskStatus(0); static const enqueued = const DownloadTaskStatus(1); @@ -36,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 { @@ -44,17 +43,20 @@ 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)"; -} \ No newline at end of file + "DownloadTask(taskId: $taskId, status: $status, progress: $progress, url: $url, filename: $filename, additionalInfo: $additionalInfo, savedDir: $savedDir)"; +} From 06a1bab514efa243bc9c7d23aa73ff5e629d7b53 Mon Sep 17 00:00:00 2001 From: "Mr.Nasr" Date: Thu, 26 Dec 2019 11:51:47 +0330 Subject: [PATCH 2/4] android part --- .../vn/hunghd/flutterdownloader/DownloadTask.java | 6 ++++-- .../vn/hunghd/flutterdownloader/DownloadWorker.java | 4 +++- .../flutterdownloader/FlutterDownloaderPlugin.java | 12 ++++++++---- .../vn/hunghd/flutterdownloader/TaskContract.java | 1 + .../java/vn/hunghd/flutterdownloader/TaskDao.java | 10 +++++++--- .../vn/hunghd/flutterdownloader/TaskDbHelper.java | 1 + 6 files changed, 24 insertions(+), 10 deletions(-) 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 30faf193..6bbf3b35 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"; @@ -160,6 +161,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); @@ -172,7 +174,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 78ae016e..5b9e565b 100644 --- a/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java +++ b/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java @@ -86,7 +86,7 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { } } - 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) @@ -98,6 +98,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) @@ -137,16 +138,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) { @@ -159,6 +161,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); @@ -177,6 +180,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 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..3ef480ad 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"); @@ -175,11 +177,12 @@ public void updateTask(String taskId, boolean resumable) { } } - public void updateTask(String taskId, String filename, String mimeType) { + public void updateTask(String taskId, String filename, String additionalinfo, String mimeType) { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(TaskContract.TaskEntry.COLUMN_NAME_FILE_NAME, filename); + values.put(TaskContract.TaskEntry.COLUMN_NAME_ADDITIONAL_INFO, additionalinfo); values.put(TaskContract.TaskEntry.COLUMN_NAME_MIME_TYPE, mimeType); db.beginTransaction(); @@ -216,6 +219,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 +227,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), " + From c9cc84c86e1b96b0d713537f36868541b9aaf3ed Mon Sep 17 00:00:00 2001 From: "Mr.Nasr" Date: Thu, 26 Dec 2019 12:23:16 +0330 Subject: [PATCH 3/4] obj c --- .../java/vn/hunghd/flutterdownloader/TaskDao.java | 3 +-- ios/Classes/FlutterDownloaderPlugin.m | 14 +++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/android/src/main/java/vn/hunghd/flutterdownloader/TaskDao.java b/android/src/main/java/vn/hunghd/flutterdownloader/TaskDao.java index 3ef480ad..8a5f3499 100644 --- a/android/src/main/java/vn/hunghd/flutterdownloader/TaskDao.java +++ b/android/src/main/java/vn/hunghd/flutterdownloader/TaskDao.java @@ -177,12 +177,11 @@ public void updateTask(String taskId, boolean resumable) { } } - public void updateTask(String taskId, String filename, String additionalinfo, String mimeType) { + public void updateTask(String taskId, String filename, String mimeType) { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(TaskContract.TaskEntry.COLUMN_NAME_FILE_NAME, filename); - values.put(TaskContract.TaskEntry.COLUMN_NAME_ADDITIONAL_INFO, additionalinfo); values.put(TaskContract.TaskEntry.COLUMN_NAME_MIME_TYPE, mimeType); db.beginTransaction(); 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]; From ffda03c81ab229b4d4e9a648de0c4c72634de2d4 Mon Sep 17 00:00:00 2001 From: "Mr.Nasr" Date: Thu, 26 Dec 2019 12:59:38 +0330 Subject: [PATCH 4/4] for test --- android/.project | 17 ++++++++++++++ .../org.eclipse.buildship.core.prefs | 13 +++++++++++ .../FlutterDownloaderPlugin.java | 2 +- example/.vscode/launch.json | 13 +++++++++++ example/android/.project | 17 ++++++++++++++ .../org.eclipse.buildship.core.prefs | 2 ++ example/android/app/.classpath | 6 +++++ example/android/app/.project | 23 +++++++++++++++++++ .../org.eclipse.buildship.core.prefs | 2 ++ example/lib/main.dart | 1 + 10 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 android/.project create mode 100644 android/.settings/org.eclipse.buildship.core.prefs create mode 100644 example/.vscode/launch.json create mode 100644 example/android/.project create mode 100644 example/android/.settings/org.eclipse.buildship.core.prefs create mode 100644 example/android/app/.classpath create mode 100644 example/android/app/.project create mode 100644 example/android/app/.settings/org.eclipse.buildship.core.prefs 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/FlutterDownloaderPlugin.java b/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java index 5b9e565b..5de1b1d1 100644 --- a/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java +++ b/android/src/main/java/vn/hunghd/flutterdownloader/FlutterDownloaderPlugin.java @@ -219,7 +219,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); 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/lib/main.dart b/example/lib/main.dart index 6fa6c2c2..65188f08 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -392,6 +392,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,