From 582a903de04ebc02a37ea00c31214e09d361df8c Mon Sep 17 00:00:00 2001 From: Teodor Bozhikov Date: Fri, 20 Jul 2018 18:27:07 +0300 Subject: [PATCH 1/3] refactor: extract some code into functions, bump version --- demo/package.json | 2 +- src/background-http.android.ts | 258 ++++++++++++--------------- src/platforms/android/include.gradle | 6 +- 3 files changed, 119 insertions(+), 147 deletions(-) diff --git a/demo/package.json b/demo/package.json index e822dc0..9d8de19 100644 --- a/demo/package.json +++ b/demo/package.json @@ -32,4 +32,4 @@ "typescript": "~2.7.2", "tslint": "~5.4.3" } -} +} \ No newline at end of file diff --git a/src/background-http.android.ts b/src/background-http.android.ts index cbc8624..4729ac6 100644 --- a/src/background-http.android.ts +++ b/src/background-http.android.ts @@ -20,10 +20,10 @@ function onProgressReceiverProgress(context: Context, uploadInfo: UploadInfo) { task.setUpload(currentBytes); task.setStatus("uploading"); task.notify({ - eventName: "progress", - object: task, - currentBytes: currentBytes, - totalBytes: totalBytes + eventName: "progress", + object: task, + currentBytes: currentBytes, + totalBytes: totalBytes }); } @@ -39,11 +39,11 @@ function onProgressReceiverError(context: Context, uploadInfo: UploadInfo, respo const task = Task.fromId(uploadId); task.setStatus("error"); task.notify({ - eventName: "error", - object: task, - error, - responseCode: response && typeof response.getHttpCode === 'function' ? response.getHttpCode() : -1, - response + eventName: "error", + object: task, + error, + responseCode: response && typeof response.getHttpCode === 'function' ? response.getHttpCode() : -1, + response }); } @@ -60,22 +60,22 @@ function onProgressReceiverCompleted(context: Context, uploadInfo: UploadInfo, r task.setStatus("complete"); task.notify({ - eventName: "progress", - object: task, - currentBytes: totalUpload, - totalBytes: totalUpload + eventName: "progress", + object: task, + currentBytes: totalUpload, + totalBytes: totalUpload }); task.notify({ - eventName: "responded", - object: task, - data: response.getBodyAsString(), - responseCode: response && typeof response.getHttpCode === 'function' ? response.getHttpCode() : -1 + eventName: "responded", + object: task, + data: response.getBodyAsString(), + responseCode: response && typeof response.getHttpCode === 'function' ? response.getHttpCode() : -1 }); task.notify({ - eventName: "complete", - object: task, - responseCode: response && typeof response.getHttpCode === 'function' ? response.getHttpCode() : -1, - response + eventName: "complete", + object: task, + responseCode: response && typeof response.getHttpCode === 'function' ? response.getHttpCode() : -1, + response }); } @@ -90,21 +90,21 @@ function initializeProgressReceiver() { const zonedOnCompleted = global.zonedCallback(onProgressReceiverCompleted); const temp: Partial = { - onProgress(context: Context, uploadInfo: UploadInfo) { - zonedOnProgress(context, uploadInfo); - }, + onProgress(context: Context, uploadInfo: UploadInfo) { + zonedOnProgress(context, uploadInfo); + }, - onCancelled(context: Context, uploadInfo: UploadInfo) { - zonedOnCancelled(context, uploadInfo); - }, + onCancelled(context: Context, uploadInfo: UploadInfo) { + zonedOnCancelled(context, uploadInfo); + }, - onError(context: Context, uploadInfo: UploadInfo, response: ServerResponse, error: java.lang.Exception) { - zonedOnError(context, uploadInfo, response, error); - }, + onError(context: Context, uploadInfo: UploadInfo, response: ServerResponse, error: java.lang.Exception) { + zonedOnError(context, uploadInfo, response, error); + }, - onCompleted(context: Context, uploadInfo: UploadInfo, serverResponse: ServerResponse) { - zonedOnCompleted(context, uploadInfo, serverResponse); - } + onCompleted(context: Context, uploadInfo: UploadInfo, serverResponse: ServerResponse) { + zonedOnCompleted(context, uploadInfo, serverResponse); + } }; const ProgressReceiverImpl = (net.gotev.uploadservice.UploadServiceBroadcastReceiver).extend(temp); @@ -177,50 +177,10 @@ class Task extends ObservableBase { static create(session: Session, file: string, options: common.Request): Task { ensureUploadServiceNamespace(); ensureReceiver(); - const task = new Task(); - task._session = session; - task._id = session.id + "{" + ++Task.taskCount + "}"; - - const context = application.android.context; - - const request = new net.gotev.uploadservice.BinaryUploadRequest(context, task._id, options.url); - - request.setFileToUpload(file); - - const displayNotificationProgress = typeof options.androidDisplayNotificationProgress === "boolean" ? options.androidDisplayNotificationProgress : true; - if (displayNotificationProgress) { - const uploadNotificationConfig = new net.gotev.uploadservice.UploadNotificationConfig(); - const notificationTitle = typeof options.androidNotificationTitle === "string" ? options.androidNotificationTitle : 'File Upload'; - uploadNotificationConfig.setTitleForAllStatuses(notificationTitle); - request.setNotificationConfig(uploadNotificationConfig); - } - const autoDeleteAfterUpload = typeof options.androidAutoDeleteAfterUpload === "boolean" ? options.androidAutoDeleteAfterUpload : false; - if (autoDeleteAfterUpload) { - request.setAutoDeleteFilesAfterSuccessfulUpload(true); - } - const maxRetryCount = typeof options.androidMaxRetries === "number" ? options.androidMaxRetries : undefined; - if (maxRetryCount) { - request.setMaxRetries(maxRetryCount); - } - - const headers = options.headers; - if (headers) { - for (const header in headers) { - const value = headers[header]; - if (value !== null && value !== void 0) { - request.addHeader(header, value.toString()); - } - } - } - - task.setDescription(options.description); - - request.setMethod(options.method ? options.method : "GET"); - - task.setUpload(0); - task.setTotalUpload(1); - task.setStatus("pending"); + const taskId = session.id + "{" + ++Task.taskCount + "}"; + const request = getBinaryRequest(taskId, options, file); + const task = Task.initTask(taskId, session, options); request.startUpload(); Task.cache[task._id] = task; @@ -231,79 +191,25 @@ class Task extends ObservableBase { static createMultiPart(session: Session, params: Array, options: common.Request): Task { ensureUploadServiceNamespace(); ensureReceiver(); - const task = new Task(); - task._session = session; - task._id = session.id + "{" + (++Task.taskCount) + "}"; - - const context = application.android.context; - - const request = new net.gotev.uploadservice.MultipartUploadRequest(context, task._id, options.url); - - - for (let i = 0; i < params.length; i++) { - const curParam = params[i]; - if (typeof curParam.name === 'undefined') { - throw new Error("You must have a `name` value"); - } - - if (curParam.filename) { - let fileName = curParam.filename; - if (fileName.startsWith("~/")) { - fileName = fileName.replace("~/", fileSystemModule.knownFolders.currentApp().path + "/"); - } + const taskId = session.id + "{" + ++Task.taskCount + "}"; + const request = getMultipartRequest(taskId, options, params); + const task = Task.initTask(taskId, session, options); - const destFileName = curParam.destFilename || fileName.substring(fileName.lastIndexOf('/') + 1, fileName.length); - request.addFileToUpload(fileName, curParam.name, destFileName, curParam.mimeType); - } else { - request.addParameter(params[i].name, params[i].value); - - } - } - - const utf8 = options.utf8; - - if (utf8) { - request.setUtf8Charset(); - } - - const displayNotificationProgress = typeof options.androidDisplayNotificationProgress === "boolean" ? options.androidDisplayNotificationProgress : true; - if (displayNotificationProgress) { - const uploadNotificationConfig = new net.gotev.uploadservice.UploadNotificationConfig(); - const notificationTitle = typeof options.androidNotificationTitle === "string" ? options.androidNotificationTitle : 'File Upload'; - uploadNotificationConfig.setTitleForAllStatuses(notificationTitle); - request.setNotificationConfig(uploadNotificationConfig); - } - const autoDeleteAfterUpload = typeof options.androidAutoDeleteAfterUpload === "boolean" ? options.androidAutoDeleteAfterUpload : false; - if (autoDeleteAfterUpload) { - request.setAutoDeleteFilesAfterSuccessfulUpload(true); - } - const maxRetryCount = typeof options.androidMaxRetries === "number" ? options.androidMaxRetries : undefined; - if (maxRetryCount) { - request.setMaxRetries(maxRetryCount); - } + request.startUpload(); + Task.cache[task._id] = task; + return task; + } - const headers = options.headers; - if (headers) { - for (const header in headers) { - const value = headers[header]; - if (value !== null && value !== void 0) { - request.addHeader(header, value.toString()); - } - } - } + private static initTask(taskId: string, session: Session, options: common.Request) { + const task = new Task(); + task._session = session; + task._id = taskId; task.setDescription(options.description); - - request.setMethod(options.method ? options.method : "GET"); - task.setUpload(0); task.setTotalUpload(1); task.setStatus("pending"); - request.startUpload(); - - Task.cache[task._id] = task; - return task; } @@ -354,3 +260,73 @@ class Task extends ObservableBase { (net).gotev.uploadservice.UploadService.stopUpload(this._id); } } + +function getBinaryRequest(taskId: string, options: common.Request, file: string) { + const request = new net.gotev.uploadservice.BinaryUploadRequest(application.android.context, taskId, options.url); + + request.setFileToUpload(file); + setRequestOptions(request, options); + + return request; +} + +function getMultipartRequest(taskId: string, options: common.Request, params: any[]) { + const request = new net.gotev.uploadservice.MultipartUploadRequest(application.android.context, taskId, options.url); + + for (let i = 0; i < params.length; i++) { + const curParam = params[i]; + if (typeof curParam.name === 'undefined') { + throw new Error("You must have a `name` value"); + } + if (curParam.filename) { + let fileName = curParam.filename; + if (fileName.startsWith("~/")) { + fileName = fileName.replace("~/", fileSystemModule.knownFolders.currentApp().path + "/"); + } + const destFileName = curParam.destFilename || fileName.substring(fileName.lastIndexOf('/') + 1, fileName.length); + request.addFileToUpload(fileName, curParam.name, destFileName, curParam.mimeType); + } + else { + request.addParameter(params[i].name, params[i].value); + } + } + + const utf8 = options.utf8; + + if (utf8) { + request.setUtf8Charset(); + } + setRequestOptions(request, options); + + return request; +} + +function setRequestOptions(request: any, options: common.Request) { + const displayNotificationProgress = typeof options.androidDisplayNotificationProgress === "boolean" ? options.androidDisplayNotificationProgress : true; + + if (displayNotificationProgress) { + const uploadNotificationConfig = new net.gotev.uploadservice.UploadNotificationConfig(); + const notificationTitle = typeof options.androidNotificationTitle === "string" ? options.androidNotificationTitle : 'File Upload'; + uploadNotificationConfig.setTitleForAllStatuses(notificationTitle); + request.setNotificationConfig(uploadNotificationConfig); + } + const autoDeleteAfterUpload = typeof options.androidAutoDeleteAfterUpload === "boolean" ? options.androidAutoDeleteAfterUpload : false; + if (autoDeleteAfterUpload) { + request.setAutoDeleteFilesAfterSuccessfulUpload(true); + } + const maxRetryCount = typeof options.androidMaxRetries === "number" ? options.androidMaxRetries : undefined; + if (maxRetryCount) { + request.setMaxRetries(maxRetryCount); + } + const headers = options.headers; + if (headers) { + for (const header in headers) { + const value = headers[header]; + if (value !== null && value !== void 0) { + request.addHeader(header, value.toString()); + } + } + } + + request.setMethod(options.method ? options.method : "GET"); +} diff --git a/src/platforms/android/include.gradle b/src/platforms/android/include.gradle index 2931fa0..c3796ba 100644 --- a/src/platforms/android/include.gradle +++ b/src/platforms/android/include.gradle @@ -1,10 +1,6 @@ //default elements android { - productFlavors { - "nativescript-background-http" { - dimension "nativescript-background-http" - } - } + } //optional elements From 5f90a2767823a372786a37d8cc017562281c2248 Mon Sep 17 00:00:00 2001 From: Teodor Bozhikov Date: Fri, 20 Jul 2018 18:30:46 +0300 Subject: [PATCH 2/3] fix: revert file --- src/platforms/android/include.gradle | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/platforms/android/include.gradle b/src/platforms/android/include.gradle index c3796ba..2931fa0 100644 --- a/src/platforms/android/include.gradle +++ b/src/platforms/android/include.gradle @@ -1,6 +1,10 @@ //default elements android { - + productFlavors { + "nativescript-background-http" { + dimension "nativescript-background-http" + } + } } //optional elements From c0c19f843c00818842ceedadc3935d7950c27b65 Mon Sep 17 00:00:00 2001 From: Teodor Bozhikov Date: Thu, 26 Jul 2018 14:32:34 +0300 Subject: [PATCH 3/3] chore: bump version for real --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index dce2d1c..0518d0f 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-background-http", - "version": "3.2.7", + "version": "3.3.0", "main": "background-http", "typings": "index.d.ts", "nativescript": {