From 19b49422b6d8dca6ab506e7b06c1ba2258bba602 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Fri, 22 Mar 2019 14:04:56 +0200 Subject: [PATCH 01/30] Update vue deps in demo-vue --- demo-vue/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demo-vue/package.json b/demo-vue/package.json index 878117d..4bfb392 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -17,7 +17,7 @@ "dependencies": { "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", - "nativescript-vue": "~2.0.0", + "nativescript-vue": "^2.0.0", "tns-core-modules": "~5.0.2" }, "devDependencies": { @@ -26,7 +26,7 @@ "babel-loader": "~8.0.0", "nativescript-dev-webpack": "^0.20.0", "nativescript-dev-typescript": "~0.8.0", - "nativescript-vue-template-compiler": "~2.0.0", + "nativescript-vue-template-compiler": "^2.0.0", "node-sass": "~4.9.0", "ts-loader": "^5.3.1", "vue-loader": "~15.4.0" From 8ce10fafce3a16eec29fff1d721f4cded4216a2a Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Fri, 29 Mar 2019 18:00:45 +0200 Subject: [PATCH 02/30] chore: update dependencies for 5.3 --- demo-angular/package.json | 14 +++++++------- demo-vue/package.json | 8 ++++---- demo/package.json | 12 ++++++------ src/package.json | 4 ++-- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/demo-angular/package.json b/demo-angular/package.json index ffa6544..7fca929 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.demoangular", "tns-android": { - "version": "5.2.0" + "version": "5.3.0" }, "tns-ios": { - "version": "5.2.0" + "version": "5.3.0" } }, "scripts": { @@ -26,18 +26,18 @@ "@angular/platform-browser": "~7.2.0", "@angular/platform-browser-dynamic": "~7.2.0", "@angular/router": "~7.2.0", - "nativescript-angular": "~7.2.1", + "nativescript-angular": "~7.2.0", "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", "reflect-metadata": "~0.1.10", "rxjs": "^6.3.3", - "tns-core-modules": "^5.2.0", - "tns-platform-declarations": "^5.2.0", + "tns-core-modules": "^5.0.0", + "tns-platform-declarations": "^5.0.0", "zone.js": "~0.8.26" }, "devDependencies": { - "nativescript-dev-typescript": "~0.8.0", - "nativescript-dev-webpack": "~0.20.0", + "nativescript-dev-typescript": "~0.9.0", + "nativescript-dev-webpack": "~0.21.0", "tslint": "~5.11.0" } } \ No newline at end of file diff --git a/demo-vue/package.json b/demo-vue/package.json index 4bfb392..30aeda5 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -2,10 +2,10 @@ "nativescript": { "id": "org.nativescript.demovue", "tns-android": { - "version": "5.2.0" + "version": "5.3.0" }, "tns-ios": { - "version": "5.2.0" + "version": "5.3.0" } }, "description": "NativeScript Application", @@ -18,14 +18,14 @@ "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", "nativescript-vue": "^2.0.0", - "tns-core-modules": "~5.0.2" + "tns-core-modules": "^5.0.0" }, "devDependencies": { "@babel/core": "~7.1.0", "@babel/preset-env": "~7.1.0", "babel-loader": "~8.0.0", "nativescript-dev-webpack": "^0.20.0", - "nativescript-dev-typescript": "~0.8.0", + "nativescript-dev-typescript": "~0.9.0", "nativescript-vue-template-compiler": "^2.0.0", "node-sass": "~4.9.0", "ts-loader": "^5.3.1", diff --git a/demo/package.json b/demo/package.json index 2c71001..4ce61be 100644 --- a/demo/package.json +++ b/demo/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.demo", "tns-android": { - "version": "5.2.0" + "version": "5.3.0" }, "tns-ios": { - "version": "5.2.0" + "version": "5.3.0" } }, "scripts": { @@ -19,12 +19,12 @@ "dependencies": { "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", - "tns-core-modules": "^5.2.0", - "tns-platform-declarations": "^5.2.0" + "tns-core-modules": "^5.0.0", + "tns-platform-declarations": "^5.0.0" }, "devDependencies": { - "nativescript-dev-typescript": "~0.8.0", - "nativescript-dev-webpack": "~0.20.0", + "nativescript-dev-typescript": "~0.9.0", + "nativescript-dev-webpack": "~0.21.0", "tslint": "~5.11.0" } } \ No newline at end of file diff --git a/src/package.json b/src/package.json index d4f76d8..ab80587 100644 --- a/src/package.json +++ b/src/package.json @@ -53,8 +53,8 @@ "license": "Apache-2.0", "homepage": "https://github.com/NativeScript/nativescript-background-http/issues", "devDependencies": { - "tns-core-modules": "^5.2.0", - "tns-platform-declarations": "^5.2.0", + "tns-core-modules": "^5.0.0", + "tns-platform-declarations": "^5.0.0", "typescript": "~3.1.6", "rimraf": "~2.6.2", "semver": "~5.6.0", From 26d38610c524f010bb4b5c42c3c6d698b91ad858 Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Fri, 29 Mar 2019 18:14:49 +0200 Subject: [PATCH 03/30] chore: update dev-webpack version --- demo-vue/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo-vue/package.json b/demo-vue/package.json index 30aeda5..7024476 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -24,7 +24,7 @@ "@babel/core": "~7.1.0", "@babel/preset-env": "~7.1.0", "babel-loader": "~8.0.0", - "nativescript-dev-webpack": "^0.20.0", + "nativescript-dev-webpack": "~0.21.0", "nativescript-dev-typescript": "~0.9.0", "nativescript-vue-template-compiler": "^2.0.0", "node-sass": "~4.9.0", From fd5e5ed084e0a63d5e7aed3d5a585bece5db8096 Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Tue, 2 Apr 2019 11:48:54 +0300 Subject: [PATCH 04/30] chore: update compile to implementation --- demo-angular/app/App_Resources/Android/app.gradle | 2 +- demo-vue/package.json | 4 ++-- demo/app/App_Resources/Android/app.gradle | 2 +- src/platforms/android/include.gradle | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/demo-angular/app/App_Resources/Android/app.gradle b/demo-angular/app/App_Resources/Android/app.gradle index a66dd3c..ea7c2be 100644 --- a/demo-angular/app/App_Resources/Android/app.gradle +++ b/demo-angular/app/App_Resources/Android/app.gradle @@ -2,7 +2,7 @@ // Uncomment to add recyclerview-v7 dependency //dependencies { -// compile 'com.android.support:recyclerview-v7:+' +// implementation 'com.android.support:recyclerview-v7:+' //} android { diff --git a/demo-vue/package.json b/demo-vue/package.json index 7024476..8aa6d32 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -17,7 +17,7 @@ "dependencies": { "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", - "nativescript-vue": "^2.0.0", + "nativescript-vue": "~2.2.0", "tns-core-modules": "^5.0.0" }, "devDependencies": { @@ -26,7 +26,7 @@ "babel-loader": "~8.0.0", "nativescript-dev-webpack": "~0.21.0", "nativescript-dev-typescript": "~0.9.0", - "nativescript-vue-template-compiler": "^2.0.0", + "nativescript-vue-template-compiler": "~2.2.0", "node-sass": "~4.9.0", "ts-loader": "^5.3.1", "vue-loader": "~15.4.0" diff --git a/demo/app/App_Resources/Android/app.gradle b/demo/app/App_Resources/Android/app.gradle index c9d40ec..92fd952 100644 --- a/demo/app/App_Resources/Android/app.gradle +++ b/demo/app/App_Resources/Android/app.gradle @@ -2,7 +2,7 @@ // Uncomment to add recyclerview-v7 dependency //dependencies { -// compile 'com.android.support:recyclerview-v7:+' +// implementation 'com.android.support:recyclerview-v7:+' //} android { diff --git a/src/platforms/android/include.gradle b/src/platforms/android/include.gradle index 9a62335..e2eb194 100644 --- a/src/platforms/android/include.gradle +++ b/src/platforms/android/include.gradle @@ -4,5 +4,5 @@ android { //optional elements dependencies { - compile 'net.gotev:uploadservice:3.4.2' + implementation 'net.gotev:uploadservice:3.4.2' } \ No newline at end of file From df51c791662d798f7b63b2456e4f3270b8e7823a Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Wed, 15 May 2019 11:52:16 +0300 Subject: [PATCH 05/30] chore: update to 5.4 --- demo-angular/app/package.json | 4 +--- demo-angular/package.json | 6 +++--- demo-vue/package.json | 6 +++--- demo/app/package.json | 4 +--- demo/package.json | 6 +++--- 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/demo-angular/app/package.json b/demo-angular/app/package.json index b88dde5..ee8642e 100644 --- a/demo-angular/app/package.json +++ b/demo-angular/app/package.json @@ -3,7 +3,5 @@ "v8Flags": "--expose_gc", "requireModules": ["nativescript-background-http"] }, - "main": "main.js", - "name": "tns-template-blank-ng", - "version": "4.0.0" + "main": "main.js" } \ No newline at end of file diff --git a/demo-angular/package.json b/demo-angular/package.json index 7fca929..ca75506 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.demoangular", "tns-android": { - "version": "5.3.0" + "version": "5.4.0" }, "tns-ios": { - "version": "5.3.0" + "version": "5.4.0" } }, "scripts": { @@ -37,7 +37,7 @@ }, "devDependencies": { "nativescript-dev-typescript": "~0.9.0", - "nativescript-dev-webpack": "~0.21.0", + "nativescript-dev-webpack": "~0.22.0", "tslint": "~5.11.0" } } \ No newline at end of file diff --git a/demo-vue/package.json b/demo-vue/package.json index 8aa6d32..575f20a 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -2,10 +2,10 @@ "nativescript": { "id": "org.nativescript.demovue", "tns-android": { - "version": "5.3.0" + "version": "5.4.0" }, "tns-ios": { - "version": "5.3.0" + "version": "5.4.0" } }, "description": "NativeScript Application", @@ -24,7 +24,7 @@ "@babel/core": "~7.1.0", "@babel/preset-env": "~7.1.0", "babel-loader": "~8.0.0", - "nativescript-dev-webpack": "~0.21.0", + "nativescript-dev-webpack": "~0.22.0", "nativescript-dev-typescript": "~0.9.0", "nativescript-vue-template-compiler": "~2.2.0", "node-sass": "~4.9.0", diff --git a/demo/app/package.json b/demo/app/package.json index 841c4a3..a7511e3 100644 --- a/demo/app/package.json +++ b/demo/app/package.json @@ -3,7 +3,5 @@ "v8Flags": "--expose_gc", "requireModules": ["nativescript-background-http"] }, - "main": "app.js", - "name": "tns-template-blank-ts", - "version": "4.0.0" + "main": "app.js" } \ No newline at end of file diff --git a/demo/package.json b/demo/package.json index 4ce61be..c4b7360 100644 --- a/demo/package.json +++ b/demo/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.demo", "tns-android": { - "version": "5.3.0" + "version": "5.4.0" }, "tns-ios": { - "version": "5.3.0" + "version": "5.4.0" } }, "scripts": { @@ -24,7 +24,7 @@ }, "devDependencies": { "nativescript-dev-typescript": "~0.9.0", - "nativescript-dev-webpack": "~0.21.0", + "nativescript-dev-webpack": "~0.22.0", "tslint": "~5.11.0" } } \ No newline at end of file From 29d4a6277e231f6b5e070ac9dd70312a67ba0204 Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Wed, 15 May 2019 16:03:04 +0300 Subject: [PATCH 06/30] gitignore webpack config --- demo-vue/.gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/demo-vue/.gitignore b/demo-vue/.gitignore index 0cdaa5c..a9e686d 100644 --- a/demo-vue/.gitignore +++ b/demo-vue/.gitignore @@ -6,7 +6,6 @@ platforms/ # NativeScript Template *.js.map -!webpack.config.js *.css # Logs From 7544e491a7b5a3a7b3974d8a269f4182d625143e Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Fri, 31 May 2019 17:59:13 +0300 Subject: [PATCH 07/30] chore: update to node 10, set trusty distribution --- .travis.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index c045f31..536d426 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ matrix: - stage: "Lint" language: node_js os: linux - node_js: "8" + node_js: "10" script: cd src && npm run ci.tslint && cd ../demo && npm run ci.tslint && cd ../demo-angular && npm run ci.tslint - stage: "WebPack, Build and Test" os: osx @@ -14,7 +14,7 @@ matrix: - WebPack="iOS" osx_image: xcode10.0 language: node_js - node_js: "8" + node_js: "10" jdk: oraclejdk8 script: - cd demo && npm run build.plugin && npm i && tns build ios --bundle --env.uglify @@ -27,10 +27,11 @@ matrix: - tns build ios --bundle --env.uglify --env.aot - language: android os: linux + dist: trusty env: - WebPack="Android" jdk: oraclejdk8 - before_install: nvm install 8.11.4 + before_install: nvm install 10 script: - cd demo && npm run build.plugin && npm i && tns build android --bundle --env.uglify --env.snapshot - cd ../publish @@ -41,11 +42,12 @@ matrix: - npm i - tns build android --bundle --env.uglify --env.aot - language: android + os: linux + dist: trusty env: - BuildAndroid="28" - os: linux jdk: oraclejdk8 - before_install: nvm install 8.11.4 + before_install: nvm install 10 script: - cd src && npm i && npm run tsc && cd ../demo && npm i && tns build android && cd ../demo-angular && npm i && tns build android - os: osx @@ -54,7 +56,7 @@ matrix: - Xcode="10.0" osx_image: xcode10.0 language: node_js - node_js: "8" + node_js: "10" jdk: oraclejdk8 script: - cd src && npm i && npm run tsc && cd ../demo && npm i && tns build ios && cd ../demo-angular && npm i && tns build ios From 8c6da98e9ba9ced1f65b4457ebc18e4cf38223c3 Mon Sep 17 00:00:00 2001 From: Teodor Bozhikov Date: Tue, 4 Jun 2019 18:10:47 +0300 Subject: [PATCH 08/30] Tbozhikov/fix response code ios (#222) * fix: read native properties in a new way after ios runtime v5.3 updates * chore: update demos to show responseCode output * chore: add nsconfig.json files to demos for {N} 5.4 compatibility --- demo-angular/app/home/home.component.ts | 3 +- demo-angular/nsconfig.json | 3 ++ demo-vue/app/components/Home.vue | 3 +- demo-vue/nsconfig.json | 3 ++ demo/app/home/home-view-model.ts | 3 +- demo/nsconfig.json | 3 ++ src/background-http.ios.ts | 57 ++++++++++++++++--------- 7 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 demo-angular/nsconfig.json create mode 100644 demo-vue/nsconfig.json create mode 100644 demo/nsconfig.json diff --git a/demo-angular/app/home/home.component.ts b/demo-angular/app/home/home.component.ts index 94ae44e..941113f 100644 --- a/demo-angular/app/home/home.component.ts +++ b/demo-angular/app/home/home.component.ts @@ -89,7 +89,8 @@ export class HomeComponent { error: e.error ? e.error.toString() : e.error, currentBytes: e.currentBytes, totalBytes: e.totalBytes, - body: e.data + body: e.data, + responseCode: e.responseCode }) }); } diff --git a/demo-angular/nsconfig.json b/demo-angular/nsconfig.json new file mode 100644 index 0000000..a6d7547 --- /dev/null +++ b/demo-angular/nsconfig.json @@ -0,0 +1,3 @@ +{ + "useLegacyWorkflow": false +} \ No newline at end of file diff --git a/demo-vue/app/components/Home.vue b/demo-vue/app/components/Home.vue index adc8a23..d740a2c 100644 --- a/demo-vue/app/components/Home.vue +++ b/demo-vue/app/components/Home.vue @@ -114,7 +114,8 @@ export default { error: e.error ? e.error.toString() : e.error, currentBytes: e.currentBytes, totalBytes: e.totalBytes, - body: e.data + body: e.data, + responseCode: e.responseCode }) }); diff --git a/demo-vue/nsconfig.json b/demo-vue/nsconfig.json new file mode 100644 index 0000000..a6d7547 --- /dev/null +++ b/demo-vue/nsconfig.json @@ -0,0 +1,3 @@ +{ + "useLegacyWorkflow": false +} \ No newline at end of file diff --git a/demo/app/home/home-view-model.ts b/demo/app/home/home-view-model.ts index 62f436e..8dbef2e 100644 --- a/demo/app/home/home-view-model.ts +++ b/demo/app/home/home-view-model.ts @@ -89,7 +89,8 @@ export class HomeViewModel extends Observable { error: e.error ? e.error.toString() : e.error, currentBytes: e.currentBytes, totalBytes: e.totalBytes, - body: e.data + body: e.data, + responseCode: e.responseCode }) }); } diff --git a/demo/nsconfig.json b/demo/nsconfig.json new file mode 100644 index 0000000..a6d7547 --- /dev/null +++ b/demo/nsconfig.json @@ -0,0 +1,3 @@ +{ + "useLegacyWorkflow": false +} \ No newline at end of file diff --git a/src/background-http.ios.ts b/src/background-http.ios.ts index a0c5db1..d259aa7 100644 --- a/src/background-http.ios.ts +++ b/src/background-http.ios.ts @@ -25,7 +25,7 @@ function onError(session, nsTask, error) { const fileManager = utils.ios.getter(NSFileManager, NSFileManager.defaultManager); fileManager.removeItemAtPathError(task._fileToCleanup); } - let response = nsTask && nsTask.response ? nsTask.response : null; + const response = nsTask && nsTask.performSelector("response"); if (error) { task.notifyPropertyChange("status", task.status); task.notify({ @@ -61,20 +61,15 @@ class BackgroundUploadDelegate extends NSObject implements NSURLSessionDelegate, // NSURLSessionDelegate URLSessionDidBecomeInvalidWithError(session, error) { - // console.log("URLSessionDidBecomeInvalidWithError:"); - // console.log(" - session: " + session); - // console.log(" - error: " + error); } URLSessionDidReceiveChallengeCompletionHandler(session, challenge, comlpetionHandler) { - // console.log("URLSessionDidFinishEventsForBackgroundURLSession: " + session + " " + challenge); const disposition = null; const credential = null; comlpetionHandler(disposition, credential); } URLSessionDidFinishEventsForBackgroundURLSession(session) { - // console.log("URLSessionDidFinishEventsForBackgroundURLSession: " + session); } // NSURLSessionTaskDelegate @@ -85,7 +80,6 @@ class BackgroundUploadDelegate extends NSObject implements NSURLSessionDelegate, } URLSessionTaskDidReceiveChallengeCompletionHandler(session, task, challenge, completionHandler) { - // console.log("URLSessionTaskDidReceiveChallengeCompletionHandler: " + session + " " + task + " " + challenge); const disposition = null; const credential = null; completionHandler(disposition, credential); @@ -98,28 +92,23 @@ class BackgroundUploadDelegate extends NSObject implements NSURLSessionDelegate, } URLSessionTaskNeedNewBodyStream(session, task, need) { - // console.log("URLSessionTaskNeedNewBodyStream"); } URLSessionTaskWillPerformHTTPRedirectionNewRequestCompletionHandler(session, task, redirect, request, completionHandler) { - // console.log("URLSessionTaskWillPerformHTTPRedirectionNewRequestCompletionHandler"); completionHandler(request); } // NSURLSessionDataDelegate URLSessionDataTaskDidReceiveResponseCompletionHandler(session, dataTask, response, completionHandler) { - // console.log("URLSessionDataTaskDidReceiveResponseCompletionHandler"); const disposition = null; completionHandler(disposition); } URLSessionDataTaskDidBecomeDownloadTask(session, dataTask, downloadTask) { - // console.log("URLSessionDataTaskDidBecomeDownloadTask"); } URLSessionDataTaskDidReceiveData(session: NSURLSession, dataTask: NSURLSessionDataTask, data: NSData) { dispatch_async(main_queue, () => { - // console.log("URLSessionDataTaskDidReceiveData"); // we have a response in the data... const jsTask = Task.getTask(session, dataTask); const jsonString = NSString.alloc().initWithDataEncoding(data, NSUTF8StringEncoding); @@ -134,20 +123,16 @@ class BackgroundUploadDelegate extends NSObject implements NSURLSessionDelegate, } URLSessionDataTaskWillCacheResponseCompletionHandler() { - // console.log("URLSessionDataTaskWillCacheResponseCompletionHandler"); } // NSURLSessionDownloadDelegate URLSessionDownloadTaskDidResumeAtOffsetExpectedTotalBytes(session, task, offset, expects) { - // console.log("URLSessionDownloadTaskDidResumeAtOffsetExpectedTotalBytes"); } URLSessionDownloadTaskDidWriteDataTotalBytesWrittenTotalBytesExpectedToWrite(session, task, data, written, expected) { - // console.log("URLSessionDownloadTaskDidWriteDataTotalBytesWrittenTotalBytesExpectedToWrite"); } URLSessionDownloadTaskDidFinishDownloadingToURL(session, task, url) { - // console.log("URLSessionDownloadTaskDidFinishDownloadingToURL"); } } @@ -247,8 +232,38 @@ class Session implements common.Session { } } +class NativePropertyReader { + private _invocationCache = new Map(); + + private getInvocationObject(object: NSObject, selector: string): NSInvocation { + let invocation = this._invocationCache.get(selector); + if (!invocation) { + const sig = object.methodSignatureForSelector(selector); + invocation = NSInvocation.invocationWithMethodSignature(sig); + invocation.selector = selector; + + this._invocationCache[selector] = invocation; + } + + return invocation; + } + + public readProp(object: NSObject, prop: string, type: interop.Type): T { + const invocation = this.getInvocationObject(object, prop); + invocation.invokeWithTarget(object); + + const ret = new interop.Reference(type, new interop.Pointer()); + invocation.getReturnValue(ret); + + return ret.value; + } +} + class Task extends Observable { public static _tasks = new Map(); + public static tasksReader = new NativePropertyReader(); + private static is64BitArchitecture = interop.sizeof(interop.types.id) === 8; + public static NSIntegerType = Task.is64BitArchitecture ? interop.types.int64 : interop.types.int32; public _fileToCleanup: string; private _task: NSURLSessionTask; @@ -269,18 +284,19 @@ class Task extends Observable { } get upload(): number { - return this._task.countOfBytesSent; + return Task.tasksReader.readProp(this._task, "countOfBytesSent", interop.types.int64); } get totalUpload(): number { - return this._task.countOfBytesExpectedToSend; + return Task.tasksReader.readProp(this._task, "countOfBytesExpectedToSend", interop.types.int64); } get status(): string { - if (this._task.error) { + if (Task.tasksReader.readProp(this._task, "error", Task.NSIntegerType)) { return "error"; } - switch (this._task.state) { + // NSURLSessionTaskState : NSInteger, so we should pass number format here + switch (Task.tasksReader.readProp(this._task, "state", Task.NSIntegerType) as NSURLSessionTaskState) { case NSURLSessionTaskState.Running: return "uploading"; case NSURLSessionTaskState.Completed: return "complete"; case NSURLSessionTaskState.Canceling: return "error"; @@ -299,6 +315,7 @@ class Task extends Observable { return task; } + public cancel(): void { this._task.cancel(); } From eeee00b5df83a508720e9920345d48d7e19aa667 Mon Sep 17 00:00:00 2001 From: dtodorov Date: Fri, 7 Jun 2019 17:46:23 +0300 Subject: [PATCH 09/30] Chore: bump version to 3.4.1 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index ab80587..beb30f4 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-background-http", - "version": "3.4.0", + "version": "3.4.1", "main": "background-http", "typings": "index.d.ts", "nativescript": { From f5c5976e64b486fe48cbb216085061e907a45c03 Mon Sep 17 00:00:00 2001 From: EddyVerbruggen Date: Thu, 13 Jun 2019 16:41:15 +0200 Subject: [PATCH 10/30] utils.ios.getter is deprecated --- src/background-http.ios.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/background-http.ios.ts b/src/background-http.ios.ts index d259aa7..d40875a 100644 --- a/src/background-http.ios.ts +++ b/src/background-http.ios.ts @@ -1,7 +1,6 @@ import { Observable } from "tns-core-modules/data/observable"; import * as common from "./index"; import * as fileSystemModule from "tns-core-modules/file-system"; -import * as utils from "tns-core-modules/utils/utils"; const main_queue = dispatch_get_current_queue(); let zonedOnProgress = null; @@ -22,8 +21,7 @@ function onProgress(nsSession, nsTask, sent, expectedTotal) { function onError(session, nsTask, error) { const task = Task.getTask(session, nsTask); if (task._fileToCleanup) { - const fileManager = utils.ios.getter(NSFileManager, NSFileManager.defaultManager); - fileManager.removeItemAtPathError(task._fileToCleanup); + NSFileManager.defaultManager.removeItemAtPathError(task._fileToCleanup); } const response = nsTask && nsTask.performSelector("response"); if (error) { @@ -401,9 +399,7 @@ class MultiMultiPartForm { newData = tempString.dataUsingEncoding(NSUTF8StringEncoding); combinedData.appendData(newData); - - const fileManager = utils.ios.getter(NSFileManager, NSFileManager.defaultManager); - fileManager.createFileAtPathContentsAttributes(fileName, combinedData, null); + NSFileManager.defaultManager.createFileAtPathContentsAttributes(fileName, combinedData, null); return fileName; } From 4d4bc7af7cdaa51ded6439992d757089e5e6d9c6 Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Tue, 18 Jun 2019 17:27:54 +0300 Subject: [PATCH 11/30] chore: update to xcode 10.2 --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 536d426..843f4d1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ matrix: os: osx env: - WebPack="iOS" - osx_image: xcode10.0 + osx_image: xcode10.2 language: node_js node_js: "10" jdk: oraclejdk8 @@ -54,7 +54,7 @@ matrix: env: - BuildiOS="12.0" - Xcode="10.0" - osx_image: xcode10.0 + osx_image: xcode10.2 language: node_js node_js: "10" jdk: oraclejdk8 From 88ac18d2c7c746a78b4073263380998974dc75b6 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Thu, 20 Jun 2019 11:21:38 +0300 Subject: [PATCH 12/30] Refactor travis build stages. --- .travis.yml | 63 +++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/.travis.yml b/.travis.yml index 843f4d1..c56d1e4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,59 +7,60 @@ matrix: language: node_js os: linux node_js: "10" - script: cd src && npm run ci.tslint && cd ../demo && npm run ci.tslint && cd ../demo-angular && npm run ci.tslint - - stage: "WebPack, Build and Test" + script: + - cd src && npm run ci.tslint + - cd ../demo && npm run ci.tslint + - cd ../demo-angular && npm run ci.tslint + - stage: "WebPack" os: osx env: - WebPack="iOS" + - Type="TypeScript" osx_image: xcode10.2 language: node_js node_js: "10" jdk: oraclejdk8 script: - - cd demo && npm run build.plugin && npm i && tns build ios --bundle --env.uglify - - cd ../publish - - sh pack.sh - - cp package/*.tgz ../demo-angular/package.tgz + - cd demo && npm run build.plugin && npm i + - tns build ios --bundle --env.uglify + - os: osx + env: + - WebPack="iOS" + - Type="Angular" + osx_image: xcode10.2 + language: node_js + node_js: "10" + jdk: oraclejdk8 + script: + - cd src && npm run build + - cd ../publish && sh pack.sh - cd ../demo-angular - - sed -i -e 's/\"..\/src\"/"package.tgz"/g' package.json - - npm i + - tns plugin add ../publish/package/*.tgz - tns build ios --bundle --env.uglify --env.aot - language: android os: linux dist: trusty env: - WebPack="Android" + - Type="TypeScript" jdk: oraclejdk8 before_install: nvm install 10 script: - - cd demo && npm run build.plugin && npm i && tns build android --bundle --env.uglify --env.snapshot - - cd ../publish - - sh pack.sh - - cp package/*.tgz ../demo-angular/package.tgz - - cd ../demo-angular - - sed -i -e 's/\"..\/src\"/"package.tgz"/g' package.json - - npm i - - tns build android --bundle --env.uglify --env.aot - - language: android - os: linux + - cd demo && npm run build.plugin + - tns build android --bundle --env.uglify --env.snapshot + - os: linux dist: trusty - env: - - BuildAndroid="28" + env: + - WebPack="Android" + - Type="Angular" jdk: oraclejdk8 before_install: nvm install 10 script: - - cd src && npm i && npm run tsc && cd ../demo && npm i && tns build android && cd ../demo-angular && npm i && tns build android - - os: osx - env: - - BuildiOS="12.0" - - Xcode="10.0" - osx_image: xcode10.2 - language: node_js - node_js: "10" - jdk: oraclejdk8 - script: - - cd src && npm i && npm run tsc && cd ../demo && npm i && tns build ios && cd ../demo-angular && npm i && tns build ios + - cd src && npm run build + - cd ../publish && sh pack.sh + - cd ../demo-angular + - tns plugin add ../publish/package/*.tgz + - tns build android --bundle --env.uglify --env.aot android: components: From 2540119aa994b4d24328d0f227b1d0d6d4866460 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Thu, 20 Jun 2019 17:36:46 +0300 Subject: [PATCH 13/30] Fix: missing android language in build stage --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c56d1e4..5ed718e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,7 +48,8 @@ matrix: script: - cd demo && npm run build.plugin - tns build android --bundle --env.uglify --env.snapshot - - os: linux + - language: android + os: linux dist: trusty env: - WebPack="Android" From ed10d424d45904296ceed46da280e55b9139d048 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov Date: Thu, 20 Jun 2019 17:58:55 +0300 Subject: [PATCH 14/30] Add demo-vue builds --- .travis.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.travis.yml b/.travis.yml index 5ed718e..8d2a616 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,6 +37,20 @@ matrix: - cd ../demo-angular - tns plugin add ../publish/package/*.tgz - tns build ios --bundle --env.uglify --env.aot + - os: osx + env: + - WebPack="iOS" + - Type="Vue" + osx_image: xcode10.2 + language: node_js + node_js: "10" + jdk: oraclejdk8 + script: + - cd src && npm run build + - cd ../publish && sh pack.sh + - cd ../demo-vue + - tns plugin add ../publish/package/*.tgz + - tns build ios --bundle --env.uglify - language: android os: linux dist: trusty @@ -62,6 +76,20 @@ matrix: - cd ../demo-angular - tns plugin add ../publish/package/*.tgz - tns build android --bundle --env.uglify --env.aot + - language: android + os: linux + dist: trusty + env: + - WebPack="Android" + - Type="Vue" + jdk: oraclejdk8 + before_install: nvm install 10 + script: + - cd src && npm run build + - cd ../publish && sh pack.sh + - cd ../demo-vue + - tns plugin add ../publish/package/*.tgz + - tns build android --bundle --env.uglify --env.aot android: components: From 6f505d949894c4a60096edc930471f805a9899a9 Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Thu, 18 Jul 2019 10:29:35 +0300 Subject: [PATCH 15/30] chore: update demos to 6.0 (#232) * chore: update demos to 6.0 * chore: remove syncAllFiles & bundle --- demo-angular/nsconfig.json | 3 --- demo-angular/package.json | 36 ++++++++++++++++++------------------ demo-vue/nsconfig.json | 3 --- demo-vue/package.json | 20 ++++++++++---------- demo/nsconfig.json | 3 --- demo/package.json | 16 ++++++++-------- src/package.json | 12 ++++++------ 7 files changed, 42 insertions(+), 51 deletions(-) delete mode 100644 demo-angular/nsconfig.json delete mode 100644 demo-vue/nsconfig.json delete mode 100644 demo/nsconfig.json diff --git a/demo-angular/nsconfig.json b/demo-angular/nsconfig.json deleted file mode 100644 index a6d7547..0000000 --- a/demo-angular/nsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "useLegacyWorkflow": false -} \ No newline at end of file diff --git a/demo-angular/package.json b/demo-angular/package.json index ca75506..05da1a2 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.demoangular", "tns-android": { - "version": "5.4.0" + "version": "6.0.0" }, "tns-ios": { - "version": "5.4.0" + "version": "6.0.1" } }, "scripts": { @@ -17,27 +17,27 @@ "ci.tslint": "npm i && tslint --config '../tslint.json' 'app/**/*.ts' --exclude '**/node_modules/**'" }, "dependencies": { - "@angular/animations": "~7.2.0", - "@angular/common": "~7.2.0", - "@angular/compiler": "~7.2.0", - "@angular/core": "~7.2.0", - "@angular/forms": "~7.2.0", - "@angular/http": "~7.2.0", - "@angular/platform-browser": "~7.2.0", - "@angular/platform-browser-dynamic": "~7.2.0", - "@angular/router": "~7.2.0", - "nativescript-angular": "~7.2.0", + "@angular/animations": "~8.0.0", + "@angular/common": "~8.0.0", + "@angular/compiler": "~8.0.0", + "@angular/core": "~8.0.0", + "@angular/forms": "~8.0.0", + "@angular/http": "8.0.0-beta.10", + "@angular/platform-browser": "~8.0.0", + "@angular/platform-browser-dynamic": "~8.0.0", + "@angular/router": "~8.0.0", + "nativescript-angular": "~8.0.0", "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", "reflect-metadata": "~0.1.10", "rxjs": "^6.3.3", - "tns-core-modules": "^5.0.0", - "tns-platform-declarations": "^5.0.0", - "zone.js": "~0.8.26" + "tns-core-modules": "^6.0.0", + "zone.js": "^0.9.1" }, "devDependencies": { - "nativescript-dev-typescript": "~0.9.0", - "nativescript-dev-webpack": "~0.22.0", - "tslint": "~5.11.0" + "nativescript-dev-webpack": "~1.0.1", + "tslint": "~5.11.0", + "tns-platform-declarations": "^6.0.0", + "typescript": "~3.4.5" } } \ No newline at end of file diff --git a/demo-vue/nsconfig.json b/demo-vue/nsconfig.json deleted file mode 100644 index a6d7547..0000000 --- a/demo-vue/nsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "useLegacyWorkflow": false -} \ No newline at end of file diff --git a/demo-vue/package.json b/demo-vue/package.json index 575f20a..1ef72d9 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -2,10 +2,10 @@ "nativescript": { "id": "org.nativescript.demovue", "tns-android": { - "version": "5.4.0" + "version": "6.0.0" }, "tns-ios": { - "version": "5.4.0" + "version": "6.0.1" } }, "description": "NativeScript Application", @@ -17,18 +17,18 @@ "dependencies": { "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", - "nativescript-vue": "~2.2.0", - "tns-core-modules": "^5.0.0" + "nativescript-vue": "~2.3.0", + "tns-core-modules": "^6.0.0" }, "devDependencies": { "@babel/core": "~7.1.0", "@babel/preset-env": "~7.1.0", "babel-loader": "~8.0.0", - "nativescript-dev-webpack": "~0.22.0", - "nativescript-dev-typescript": "~0.9.0", - "nativescript-vue-template-compiler": "~2.2.0", - "node-sass": "~4.9.0", + "nativescript-dev-webpack": "~1.0.1", + "nativescript-vue-template-compiler": "~2.3.0", + "node-sass": "~4.12.0", "ts-loader": "^5.3.1", - "vue-loader": "~15.4.0" + "vue-loader": "~15.4.0", + "typescript": "~3.4.5" } -} \ No newline at end of file +} diff --git a/demo/nsconfig.json b/demo/nsconfig.json deleted file mode 100644 index a6d7547..0000000 --- a/demo/nsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "useLegacyWorkflow": false -} \ No newline at end of file diff --git a/demo/package.json b/demo/package.json index c4b7360..5dbbdbd 100644 --- a/demo/package.json +++ b/demo/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.demo", "tns-android": { - "version": "5.4.0" + "version": "6.0.0" }, "tns-ios": { - "version": "5.4.0" + "version": "6.0.1" } }, "scripts": { @@ -19,12 +19,12 @@ "dependencies": { "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", - "tns-core-modules": "^5.0.0", - "tns-platform-declarations": "^5.0.0" + "tns-core-modules": "^6.0.0" }, "devDependencies": { - "nativescript-dev-typescript": "~0.9.0", - "nativescript-dev-webpack": "~0.22.0", - "tslint": "~5.11.0" + "nativescript-dev-webpack": "~1.0.1", + "tslint": "~5.11.0", + "tns-platform-declarations": "^6.0.0", + "typescript": "~3.4.5" } -} \ No newline at end of file +} diff --git a/src/package.json b/src/package.json index beb30f4..1d2389a 100644 --- a/src/package.json +++ b/src/package.json @@ -23,12 +23,12 @@ "tslint": "cd .. && tslint \"**/*.ts\" --config tslint.json --exclude \"**/node_modules/**\"", "plugin.link": "npm link && cd ../demo && npm link nativescript-background-http && cd ../src", "plugin.tscwatch": "npm run tsc -- -w", - "demo.ios": "npm i && npm run tsc && cd ../demo && tns run ios --syncAllFiles", - "demo-angular.ios": "npm i && npm run tsc && cd ../demo-angular && tns run ios --syncAllFiles", - "demo-vue.ios": "npm i && npm run tsc && cd ../demo-vue && tns run ios --syncAllFiles --bundle", - "demo.android": "npm i && npm run tsc && cd ../demo && tns run android --syncAllFiles", - "demo-angular.android": "npm i && npm run tsc && cd ../demo-angular && tns run android --syncAllFiles", - "demo-vue.android": "npm i && npm run tsc && cd ../demo-vue && tns run android --syncAllFiles --bundle", + "demo.ios": "npm i && npm run tsc && cd ../demo && tns run ios", + "demo-angular.ios": "npm i && npm run tsc && cd ../demo-angular && tns run ios", + "demo-vue.ios": "npm i && npm run tsc && cd ../demo-vue && tns run ios", + "demo.android": "npm i && npm run tsc && cd ../demo && tns run android", + "demo-angular.android": "npm i && npm run tsc && cd ../demo-angular && tns run android", + "demo-vue.android": "npm i && npm run tsc && cd ../demo-vue && tns run android", "demo.reset": "cd ../demo && rimraf platforms", "demo-angular.reset": "cd ../demo-angular && rimraf platforms", "server": "cd ../demo-server && npm run start", From e565f158f3ba986e2e6109260b29094e0bb62646 Mon Sep 17 00:00:00 2001 From: tgpetrov Date: Thu, 18 Apr 2019 16:35:21 +0300 Subject: [PATCH 16/30] feat(androidx): migrate to androidx --- .../Android/src/main/AndroidManifest.xml | 2 +- demo-angular/references.d.ts | 2 +- .../App_Resources/Android/AndroidManifest.xml | 2 +- .../Android/src/main/AndroidManifest.xml | 2 +- demo/references.d.ts | 2 +- src/package.json | 8 +- src/platforms/android/include.gradle | 2 +- src/typings/java!uploadservice-3.4.2.ts | 1078 ----------------- src/typings/java!uploadservice-3.5.2.ts | 987 +++++++++++++++ 9 files changed, 997 insertions(+), 1088 deletions(-) delete mode 100644 src/typings/java!uploadservice-3.4.2.ts create mode 100644 src/typings/java!uploadservice-3.5.2.ts diff --git a/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml index b288a62..adb8ac1 100644 --- a/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml +++ b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml @@ -11,7 +11,7 @@ android:xlargeScreens="true"/> diff --git a/demo-angular/references.d.ts b/demo-angular/references.d.ts index 1c05dd0..f482876 100644 --- a/demo-angular/references.d.ts +++ b/demo-angular/references.d.ts @@ -1,3 +1,3 @@ /// /// -/// +/// diff --git a/demo-vue/app/App_Resources/Android/AndroidManifest.xml b/demo-vue/app/App_Resources/Android/AndroidManifest.xml index 9961000..d05f4de 100644 --- a/demo-vue/app/App_Resources/Android/AndroidManifest.xml +++ b/demo-vue/app/App_Resources/Android/AndroidManifest.xml @@ -11,7 +11,7 @@ android:xlargeScreens="true"/> diff --git a/demo/app/App_Resources/Android/src/main/AndroidManifest.xml b/demo/app/App_Resources/Android/src/main/AndroidManifest.xml index b288a62..adb8ac1 100644 --- a/demo/app/App_Resources/Android/src/main/AndroidManifest.xml +++ b/demo/app/App_Resources/Android/src/main/AndroidManifest.xml @@ -11,7 +11,7 @@ android:xlargeScreens="true"/> diff --git a/demo/references.d.ts b/demo/references.d.ts index 1c05dd0..f482876 100644 --- a/demo/references.d.ts +++ b/demo/references.d.ts @@ -1,3 +1,3 @@ /// /// -/// +/// diff --git a/src/package.json b/src/package.json index 1d2389a..2679f62 100644 --- a/src/package.json +++ b/src/package.json @@ -5,8 +5,8 @@ "typings": "index.d.ts", "nativescript": { "platforms": { - "android": "4.0.0", - "ios": "4.0.0" + "android": "6.0.0", + "ios": "6.0.0" } }, "repository": { @@ -53,8 +53,8 @@ "license": "Apache-2.0", "homepage": "https://github.com/NativeScript/nativescript-background-http/issues", "devDependencies": { - "tns-core-modules": "^5.0.0", - "tns-platform-declarations": "^5.0.0", + "tns-core-modules": "^6.0.0", + "tns-platform-declarations": "^6.0.0", "typescript": "~3.1.6", "rimraf": "~2.6.2", "semver": "~5.6.0", diff --git a/src/platforms/android/include.gradle b/src/platforms/android/include.gradle index e2eb194..82bc6b2 100644 --- a/src/platforms/android/include.gradle +++ b/src/platforms/android/include.gradle @@ -4,5 +4,5 @@ android { //optional elements dependencies { - implementation 'net.gotev:uploadservice:3.4.2' + implementation 'net.gotev:uploadservice:3.5.2' } \ No newline at end of file diff --git a/src/typings/java!uploadservice-3.4.2.ts b/src/typings/java!uploadservice-3.4.2.ts deleted file mode 100644 index e3d9107..0000000 --- a/src/typings/java!uploadservice-3.4.2.ts +++ /dev/null @@ -1,1078 +0,0 @@ -/* tslint:disable */ -import androidcontentContext = android.content.Context; -import javalangClass = java.lang.Class; -import javautilList = java.util.List; -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class BinaryUploadRequest extends net.gotev.uploadservice.HttpUploadRequest { - public addParameter(param0: string, param1: string): net.gotev.uploadservice.BinaryUploadRequest; - public constructor(param0: androidcontentContext, param1: string); - public addArrayParameter(param0: string, param1: javautilList): net.gotev.uploadservice.HttpUploadRequest; - public constructor(param0: androidcontentContext, param1: string, param2: string); - public startUpload(): string; - public addArrayParameter(param0: string, param1: native.Array): net.gotev.uploadservice.BinaryUploadRequest; - public addParameter(param0: string, param1: string): net.gotev.uploadservice.HttpUploadRequest; - public addArrayParameter(param0: string, param1: javautilList): net.gotev.uploadservice.BinaryUploadRequest; - public getTaskClass(): javalangClass; - public setFileToUpload(param0: string): net.gotev.uploadservice.BinaryUploadRequest; - public addArrayParameter(param0: string, param1: native.Array): net.gotev.uploadservice.HttpUploadRequest; - } - } - } -} - -/// -declare module net { - export module gotev { - export module uploadservice { - export class BinaryUploadTask extends net.gotev.uploadservice.HttpUploadTask { - public onBodyReady(param0: net.gotev.uploadservice.http.BodyWriter): void; - public onBytesWritten(param0: number): void; - public onSuccessfulUpload(): void; - public getBodyLength(): number; - public shouldContinueWriting(): boolean; - public constructor(); - } - } - } -} - -import androidcontentIntent = android.content.Intent; -import androidosParcel = android.os.Parcel; -import javalangException = java.lang.Exception; -import androidosParcelableCreator = android.os.Parcelable.Creator; -/// -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class BroadcastData { - public static CREATOR: androidosParcelableCreator; - public getException(): javalangException; - public writeToParcel(param0: androidosParcel, param1: number): void; - public setException(param0: javalangException): net.gotev.uploadservice.BroadcastData; - public getUploadInfo(): net.gotev.uploadservice.UploadInfo; - public getIntent(): androidcontentIntent; - public setStatus(param0: net.gotev.uploadservice.BroadcastData.Status): net.gotev.uploadservice.BroadcastData; - public describeContents(): number; - public setUploadInfo(param0: net.gotev.uploadservice.UploadInfo): net.gotev.uploadservice.BroadcastData; - public getServerResponse(): net.gotev.uploadservice.ServerResponse; - public getStatus(): net.gotev.uploadservice.BroadcastData.Status; - public setServerResponse(param0: net.gotev.uploadservice.ServerResponse): net.gotev.uploadservice.BroadcastData; - public constructor(); - } - export module BroadcastData { - export class Status { - public static IN_PROGRESS: net.gotev.uploadservice.BroadcastData.Status; - public static ERROR: net.gotev.uploadservice.BroadcastData.Status; - public static COMPLETED: net.gotev.uploadservice.BroadcastData.Status; - public static CANCELLED: net.gotev.uploadservice.BroadcastData.Status; - public static values(): native.Array; - public static valueOf(param0: string): net.gotev.uploadservice.BroadcastData.Status; - } - } - } - } -} - -declare module net { - export module gotev { - export module uploadservice { - export class BuildConfig { - public static DEBUG: boolean; - public static APPLICATION_ID: string; - public static BUILD_TYPE: string; - public static FLAVOR: string; - public static VERSION_CODE: number; - public static VERSION_NAME: string; - public constructor(); - } - } - } -} - -/// -declare module net { - export module gotev { - export module uploadservice { - export class ContentType { - public static APPLICATION_ENVOY: string; - public static APPLICATION_FRACTALS: string; - public static APPLICATION_FUTURESPLASH: string; - public static APPLICATION_HTA: string; - public static APPLICATION_INTERNET_PROPERTY_STREAM: string; - public static APPLICATION_MAC_BINHEX40: string; - public static APPLICATION_MS_WORD: string; - public static APPLICATION_OCTET_STREAM: string; - public static APPLICATION_ODA: string; - public static APPLICATION_OLESCRIPT: string; - public static APPLICATION_PDF: string; - public static APPLICATION_PICS_RULES: string; - public static APPLICATION_PKCS10: string; - public static APPLICATION_PKIX_CRL: string; - public static APPLICATION_POSTSCRIPT: string; - public static APPLICATION_RTF: string; - public static APPLICATION_SETPAY: string; - public static APPLICATION_SETREG: string; - public static APPLICATION_MS_EXCEL: string; - public static APPLICATION_MS_OUTLOOK: string; - public static APPLICATION_MS_PKICERTSTORE: string; - public static APPLICATION_MS_PKISECCAT: string; - public static APPLICATION_MS_PKISTL: string; - public static APPLICATION_MS_POWERPOINT: string; - public static APPLICATION_MS_PROJECT: string; - public static APPLICATION_MS_WORKS: string; - public static APPLICATION_WINHLP: string; - public static APPLICATION_BCPIO: string; - public static APPLICATION_CDF: string; - public static APPLICATION_Z: string; - public static APPLICATION_TGZ: string; - public static APPLICATION_CPIO: string; - public static APPLICATION_CSH: string; - public static APPLICATION_DIRECTOR: string; - public static APPLICATION_DVI: string; - public static APPLICATION_GTAR: string; - public static APPLICATION_GZIP: string; - public static APPLICATION_HDF: string; - public static APPLICATION_INTERNET_SIGNUP: string; - public static APPLICATION_IPHONE: string; - public static APPLICATION_JAVASCRIPT: string; - public static APPLICATION_LATEX: string; - public static APPLICATION_MS_ACCESS: string; - public static APPLICATION_MS_CARD_FILE: string; - public static APPLICATION_MS_CLIP: string; - public static APPLICATION_MS_DOWNLOAD: string; - public static APPLICATION_MS_MEDIAVIEW: string; - public static APPLICATION_MS_METAFILE: string; - public static APPLICATION_MS_MONEY: string; - public static APPLICATION_MS_PUBLISHER: string; - public static APPLICATION_MS_SCHEDULE: string; - public static APPLICATION_MS_TERMINAL: string; - public static APPLICATION_MS_WRITE: string; - public static APPLICATION_NET_CDF: string; - public static APPLICATION_PERFMON: string; - public static APPLICATION_PKCS_12: string; - public static APPLICATION_PKCS_7_CERTIFICATES: string; - public static APPLICATION_PKCS_7_CERTREQRESP: string; - public static APPLICATION_PKCS_7_MIME: string; - public static APPLICATION_PKCS_7_SIGNATURE: string; - public static APPLICATION_SH: string; - public static APPLICATION_SHAR: string; - public static APPLICATION_SHOCKWAVE_FLASH: string; - public static APPLICATION_STUFFIT: string; - public static APPLICATION_SV4CPIO: string; - public static APPLICATION_SV4CRC: string; - public static APPLICATION_TAR: string; - public static APPLICATION_TCL: string; - public static APPLICATION_TEX: string; - public static APPLICATION_TEXINFO: string; - public static APPLICATION_TROFF: string; - public static APPLICATION_TROFF_MAN: string; - public static APPLICATION_TROFF_ME: string; - public static APPLICATION_TROFF_MS: string; - public static APPLICATION_USTAR: string; - public static APPLICATION_WAIS_SOURCE: string; - public static APPLICATION_X509_CA_CERT: string; - public static APPLICATION_PKO: string; - public static APPLICATION_ZIP: string; - public static APPLICATION_XML: string; - public static AUDIO_BASIC: string; - public static AUDIO_MID: string; - public static AUDIO_MPEG: string; - public static AUDIO_AIFF: string; - public static AUDIO_M3U: string; - public static AUDIO_REAL_AUDIO: string; - public static AUDIO_WAV: string; - public static IMAGE_BMP: string; - public static IMAGE_COD: string; - public static IMAGE_GIF: string; - public static IMAGE_IEF: string; - public static IMAGE_JPEG: string; - public static IMAGE_PIPEG: string; - public static IMAGE_SVG: string; - public static IMAGE_TIFF: string; - public static IMAGE_CMU_RASTER: string; - public static IMAGE_CMX: string; - public static IMAGE_ICO: string; - public static IMAGE_PORTABLE_ANYMAP: string; - public static IMAGE_PORTABLE_BITMAP: string; - public static IMAGE_PORTABLE_GRAYMAP: string; - public static IMAGE_PORTABLE_PIXMAP: string; - public static IMAGE_XRGB: string; - public static IMAGE_XBITMAP: string; - public static IMAGE_XPIXMAP: string; - public static IMAGE_XWINDOWDUMP: string; - public static TEXT_CSS: string; - public static TEXT_CSV: string; - public static TEXT_H323: string; - public static TEXT_HTML: string; - public static TEXT_IULS: string; - public static TEXT_PLAIN: string; - public static TEXT_RICHTEXT: string; - public static TEXT_SCRIPTLET: string; - public static TEXT_TAB_SEPARATED_VALUES: string; - public static TEXT_VIEWVIEW: string; - public static TEXT_COMPONENT: string; - public static TEXT_SETEXT: string; - public static TEXT_VCARD: string; - public static TEXT_XML: string; - public static VIDEO_MPEG: string; - public static VIDEO_MPEG4: string; - public static VIDEO_QUICKTIME: string; - public static VIDEO_LA_ASF: string; - public static VIDEO_MS_ASF: string; - public static VIDEO_AVI: string; - public static VIDEO_MOVIE: string; - public static autoDetect(param0: string): string; - } - } - } -} - -import javalangThrowable = java.lang.Throwable; -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class DefaultLoggerDelegate { - public info(param0: string, param1: string): void; - public debug(param0: string, param1: string): void; - public error(param0: string, param1: string): void; - public constructor(); - public error(param0: string, param1: string, param2: javalangThrowable): void; - } - } - } -} - -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export abstract class HttpUploadRequest extends net.gotev.uploadservice.UploadRequest { - public httpParams: net.gotev.uploadservice.HttpUploadTaskParameters; - public addHeader(param0: string, param1: string): net.gotev.uploadservice.HttpUploadRequest; - public addArrayParameter(param0: string, param1: javautilList): net.gotev.uploadservice.HttpUploadRequest; - public setMethod(param0: string): net.gotev.uploadservice.HttpUploadRequest; - public constructor(param0: androidcontentContext, param1: string, param2: string); - public setUsesFixedLengthStreamingMode(param0: boolean): net.gotev.uploadservice.HttpUploadRequest; - public addParameter(param0: string, param1: string): net.gotev.uploadservice.HttpUploadRequest; - public addArrayParameter(param0: string, param1: native.Array): net.gotev.uploadservice.HttpUploadRequest; - public initializeIntent(param0: androidcontentIntent): void; - public setCustomUserAgent(param0: string): net.gotev.uploadservice.HttpUploadRequest; - public setBasicAuth(param0: string, param1: string): net.gotev.uploadservice.HttpUploadRequest; - } - } - } -} - -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export abstract class HttpUploadTask extends net.gotev.uploadservice.UploadTask implements net.gotev.uploadservice.http.HttpConnection.RequestBodyDelegate, net.gotev.uploadservice.http.BodyWriter.OnStreamWriteListener { - public httpParams: net.gotev.uploadservice.HttpUploadTaskParameters; - public onBodyReady(param0: net.gotev.uploadservice.http.BodyWriter): void; - public onBytesWritten(param0: number): void; - public init(param0: net.gotev.uploadservice.UploadService, param1: androidcontentIntent): void; - public upload(): void; - public getBodyLength(): number; - public shouldContinueWriting(): boolean; - public constructor(); - } - } - } -} - -import javautilArrayList = java.util.ArrayList; -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class HttpUploadTaskParameters { - public static PARAM_HTTP_TASK_PARAMETERS: string; - public customUserAgent: string; - public method: string; - public usesFixedLengthStreamingMode: boolean; - public static CREATOR: androidosParcelableCreator; - public getRequestParameters(): javautilArrayList; - public writeToParcel(param0: androidosParcel, param1: number): void; - public isCustomUserAgentDefined(): boolean; - public getRequestHeaders(): javautilArrayList; - public describeContents(): number; - public addHeader(param0: string, param1: string): net.gotev.uploadservice.HttpUploadTaskParameters; - public addParameter(param0: string, param1: string): net.gotev.uploadservice.HttpUploadTaskParameters; - public constructor(); - } - } - } -} - -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class Logger { - public static error(param0: string, param1: string, param2: javalangThrowable): void; - public static resetLoggerDelegate(): void; - public static setLoggerDelegate(param0: net.gotev.uploadservice.Logger.LoggerDelegate): void; - public static debug(param0: string, param1: string): void; - public static info(param0: string, param1: string): void; - public static setLogLevel(param0: net.gotev.uploadservice.Logger.LogLevel): void; - public static error(param0: string, param1: string): void; - } - export module Logger { - export class LogLevel { - public static DEBUG: net.gotev.uploadservice.Logger.LogLevel; - public static INFO: net.gotev.uploadservice.Logger.LogLevel; - public static ERROR: net.gotev.uploadservice.Logger.LogLevel; - public static OFF: net.gotev.uploadservice.Logger.LogLevel; - public static values(): native.Array; - public static valueOf(param0: string): net.gotev.uploadservice.Logger.LogLevel; - } - export class LoggerDelegate { - /** - * Constructs a new instance of the net.gotev.uploadservice.Logger$LoggerDelegate interface with the provided implementation. - */ - public constructor(implementation: { - error(param0: string, param1: string): void; - error(param0: string, param1: string, param2: javalangThrowable): void; - debug(param0: string, param1: string): void; - info(param0: string, param1: string): void; - }); - public error(param0: string, param1: string, param2: javalangThrowable): void; - public info(param0: string, param1: string): void; - public error(param0: string, param1: string): void; - public debug(param0: string, param1: string): void; - } - export class SingletonHolder { - } - } - } - } -} - -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class MultipartUploadRequest extends net.gotev.uploadservice.HttpUploadRequest { - public addFileToUpload(param0: string, param1: string): net.gotev.uploadservice.MultipartUploadRequest; - public constructor(param0: androidcontentContext, param1: string); - public addFileToUpload(param0: string, param1: string, param2: string, param3: string): net.gotev.uploadservice.MultipartUploadRequest; - public addFileToUpload(param0: string, param1: string, param2: string): net.gotev.uploadservice.MultipartUploadRequest; - public constructor(param0: androidcontentContext, param1: string, param2: string); - public getTaskClass(): javalangClass; - public setUtf8Charset(): net.gotev.uploadservice.MultipartUploadRequest; - public initializeIntent(param0: androidcontentIntent): void; - } - } - } -} - -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class MultipartUploadTask extends net.gotev.uploadservice.HttpUploadTask { - public static PARAM_UTF8_CHARSET: string; - public static PROPERTY_REMOTE_FILE_NAME: string; - public static PROPERTY_CONTENT_TYPE: string; - public static PROPERTY_PARAM_NAME: string; - public onBodyReady(param0: net.gotev.uploadservice.http.BodyWriter): void; - public onBytesWritten(param0: number): void; - public onSuccessfulUpload(): void; - public init(param0: net.gotev.uploadservice.UploadService, param1: androidcontentIntent): void; - public getBodyLength(): number; - public shouldContinueWriting(): boolean; - public constructor(); - } - } - } -} - -import javalangObject = java.lang.Object; -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class NameValue { - public static CREATOR: androidosParcelableCreator; - public writeToParcel(param0: androidosParcel, param1: number): void; - public static header(param0: string, param1: string): net.gotev.uploadservice.NameValue; - public equals(param0: javalangObject): boolean; - public getValue(): string; - public describeContents(): number; - public getName(): string; - public constructor(param0: string, param1: string); - } - } - } -} - -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class Placeholders { - public static ELAPSED_TIME: string; - public static UPLOAD_RATE: string; - public static PROGRESS: string; - public static UPLOADED_FILES: string; - public static TOTAL_FILES: string; - public static replace(param0: string, param1: net.gotev.uploadservice.UploadInfo): string; - public constructor(); - } - } - } -} - -import javautilLinkedHashMap = java.util.LinkedHashMap; -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class ServerResponse { - public static CREATOR: androidosParcelableCreator; - public constructor(param0: number, param1: native.Array, param2: javautilLinkedHashMap); - public writeToParcel(param0: androidosParcel, param1: number): void; - public getBodyAsString(): string; - public getHeaders(): javautilLinkedHashMap; - public constructor(param0: androidosParcel); - public getBody(): native.Array; - public describeContents(): number; - public getHttpCode(): number; - } - } - } -} - -import javaioInputStream = java.io.InputStream; -/// -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class UploadFile { - public path: string; - public handler: net.gotev.uploadservice.schemehandlers.SchemeHandler; - public static CREATOR: androidosParcelableCreator; - public getName(param0: androidcontentContext): string; - public getProperty(param0: string, param1: string): string; - public getStream(param0: androidcontentContext): javaioInputStream; - public writeToParcel(param0: androidosParcel, param1: number): void; - public length(param0: androidcontentContext): number; - public getPath(): string; - public constructor(param0: string); - public getContentType(param0: androidcontentContext): string; - public getProperty(param0: string): string; - public equals(param0: javalangObject): boolean; - public hashCode(): number; - public describeContents(): number; - public setProperty(param0: string, param1: string): void; - } - } - } -} - -import javalangInteger = java.lang.Integer; -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class UploadInfo { - public static CREATOR: androidosParcelableCreator; - public getElapsedTimeString(): string; - public getUploadRate(): number; - public getUploadedBytes(): number; - public writeToParcel(param0: androidosParcel, param1: number): void; - public getProgressPercent(): number; - public getTotalBytes(): number; - public constructor(param0: string, param1: number, param2: number, param3: number, param4: number, param5: javautilList, param6: javautilList); - public getSuccessfullyUploadedFiles(): javautilArrayList; - public constructor(param0: string); - public getNotificationID(): javalangInteger; - public getUploadId(): string; - public getStartTime(): number; - public setNotificationID(param0: number): void; - public getNumberOfRetries(): number; - public getElapsedTime(): number; - public getUploadRateString(): string; - public getFilesLeft(): javautilArrayList; - public describeContents(): number; - public getTotalFiles(): number; - } - } - } -} - -import androidsupportv4appNotificationCompatAction = android.support.v4.app.NotificationCompat.Action; -import androidappPendingIntent = android.app.PendingIntent; -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class UploadNotificationAction { - public static CREATOR: androidosParcelableCreator; - public static from(param0: androidsupportv4appNotificationCompatAction): net.gotev.uploadservice.UploadNotificationAction; - public writeToParcel(param0: androidosParcel, param1: number): void; - public equals(param0: javalangObject): boolean; - public constructor(param0: androidosParcel); - public hashCode(): number; - public describeContents(): number; - public constructor(param0: number, param1: string, param2: androidappPendingIntent); - } - } - } -} - -import androidgraphicsBitmap = android.graphics.Bitmap; -import javalangBoolean = java.lang.Boolean; -/// -/// -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class UploadNotificationConfig { - public static CREATOR: androidosParcelableCreator; - public setIconForAllStatuses(param0: number): net.gotev.uploadservice.UploadNotificationConfig; - public setClickIntentForAllStatuses(param0: androidappPendingIntent): net.gotev.uploadservice.UploadNotificationConfig; - public writeToParcel(param0: androidosParcel, param1: number): void; - public getNotificationChannelId(): string; - public getProgress(): net.gotev.uploadservice.UploadNotificationStatusConfig; - public getError(): net.gotev.uploadservice.UploadNotificationStatusConfig; - public addActionForAllStatuses(param0: net.gotev.uploadservice.UploadNotificationAction): net.gotev.uploadservice.UploadNotificationConfig; - public setClearOnActionForAllStatuses(param0: boolean): net.gotev.uploadservice.UploadNotificationConfig; - public isRingToneEnabled(): boolean; - public setTitleForAllStatuses(param0: string): net.gotev.uploadservice.UploadNotificationConfig; - public setRingToneEnabled(param0: javalangBoolean): net.gotev.uploadservice.UploadNotificationConfig; - public getCancelled(): net.gotev.uploadservice.UploadNotificationStatusConfig; - public setNotificationChannelId(param0: string): net.gotev.uploadservice.UploadNotificationConfig; - public constructor(); - public getCompleted(): net.gotev.uploadservice.UploadNotificationStatusConfig; - public setIconColorForAllStatuses(param0: number): net.gotev.uploadservice.UploadNotificationConfig; - public constructor(param0: androidosParcel); - public describeContents(): number; - public setLargeIconForAllStatuses(param0: androidgraphicsBitmap): net.gotev.uploadservice.UploadNotificationConfig; - } - } - } -} - -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class UploadNotificationStatusConfig { - public title: string; - public message: string; - public autoClear: boolean; - public iconResourceID: number; - public largeIcon: androidgraphicsBitmap; - public iconColorResourceID: number; - public clickIntent: androidappPendingIntent; - public clearOnAction: boolean; - public actions: javautilArrayList; - public static CREATOR: androidosParcelableCreator; - public writeToParcel(param0: androidosParcel, param1: number): void; - public constructor(param0: androidosParcel); - public describeContents(): number; - public constructor(); - } - } - } -} - -/// -/// -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export abstract class UploadRequest { - public context: androidcontentContext; - public params: net.gotev.uploadservice.UploadTaskParameters; - public delegate: net.gotev.uploadservice.UploadStatusDelegate; - public setAutoDeleteFilesAfterSuccessfulUpload(param0: boolean): net.gotev.uploadservice.UploadRequest; - public constructor(param0: androidcontentContext, param1: string, param2: string); - public startUpload(): string; - public setNotificationConfig(param0: net.gotev.uploadservice.UploadNotificationConfig): net.gotev.uploadservice.UploadRequest; - public setDelegate(param0: net.gotev.uploadservice.UploadStatusDelegate): net.gotev.uploadservice.UploadRequest; - public self(): net.gotev.uploadservice.UploadRequest; - public getTaskClass(): javalangClass; - public initializeIntent(param0: androidcontentIntent): void; - public setMaxRetries(param0: number): net.gotev.uploadservice.UploadRequest; - } - } - } -} - -import androidosIBinder = android.os.IBinder; -import androidappNotification = android.app.Notification; -/// -/// -/// -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class UploadService { - public static UPLOAD_POOL_SIZE: number; - public static KEEP_ALIVE_TIME_IN_SECONDS: number; - public static IDLE_TIMEOUT: number; - public static EXECUTE_IN_FOREGROUND: boolean; - public static NAMESPACE: string; - public static HTTP_STACK: net.gotev.uploadservice.http.HttpStack; - public static BUFFER_SIZE: number; - public static INITIAL_RETRY_WAIT_TIME: number; - public static BACKOFF_MULTIPLIER: number; - public static MAX_RETRY_WAIT_TIME: number; - public static UPLOAD_NOTIFICATION_BASE_ID: number; - public static PROGRESS_REPORT_INTERVAL: number; - public static PARAM_TASK_PARAMETERS: string; - public static PARAM_TASK_CLASS: string; - public static PARAM_BROADCAST_DATA: string; - public onStartCommand(param0: androidcontentIntent, param1: number, param2: number): number; - public static stop(param0: androidcontentContext): boolean; - public holdForegroundNotification(param0: string, param1: androidappNotification): boolean; - public static stop(param0: androidcontentContext, param1: boolean): boolean; - public constructor(); - public static getTaskList(): javautilList; - public taskCompleted(param0: string): void; - public onBind(param0: androidcontentIntent): androidosIBinder; - public static stopAllUploads(): void; - public static getActionBroadcast(): string; - public onCreate(): void; - public onDestroy(): void; - public static getActionUpload(): string; - public static setUploadStatusDelegate(param0: string, param1: net.gotev.uploadservice.UploadStatusDelegate): void; - public static getUploadStatusDelegate(param0: string): net.gotev.uploadservice.UploadStatusDelegate; - public static stopUpload(param0: string): void; - } - } - } -} - -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class UploadServiceBroadcastReceiver { - public register(param0: androidcontentContext): void; - public onProgress(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo): void; - public onCancelled(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo): void; - public onError(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse, param3: javalangException): void; - public onReceive(param0: androidcontentContext, param1: androidcontentIntent): void; - public unregister(param0: androidcontentContext): void; - public onCompleted(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse): void; - public shouldAcceptEventFrom(param0: net.gotev.uploadservice.UploadInfo): boolean; - public constructor(); - } - } - } -} - -/// -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class UploadServiceSingleBroadcastReceiver extends net.gotev.uploadservice.UploadServiceBroadcastReceiver { - public constructor(param0: net.gotev.uploadservice.UploadStatusDelegate); - public onProgress(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo): void; - public setUploadID(param0: string): void; - public onCancelled(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo): void; - public onError(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse, param3: javalangException): void; - public onCompleted(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse): void; - public shouldAcceptEventFrom(param0: net.gotev.uploadservice.UploadInfo): boolean; - public constructor(); - } - } - } -} - -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class UploadStatusDelegate { - /** - * Constructs a new instance of the net.gotev.uploadservice.UploadStatusDelegate interface with the provided implementation. - */ - public constructor(implementation: { - onProgress(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo): void; - onError(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse, param3: javalangException): void; - onCompleted(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse): void; - onCancelled(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo): void; - }); - public onProgress(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo): void; - public onCancelled(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo): void; - public onError(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse, param3: javalangException): void; - public onCompleted(param0: androidcontentContext, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse): void; - } - } - } -} - -/// -/// -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export abstract class UploadTask { - public static TASK_COMPLETED_SUCCESSFULLY: number; - public static EMPTY_RESPONSE: native.Array; - public service: net.gotev.uploadservice.UploadService; - public params: net.gotev.uploadservice.UploadTaskParameters; - public shouldContinue: boolean; - public totalBytes: number; - public uploadedBytes: number; - public broadcastProgress(param0: number, param1: number): void; - public broadcastCompleted(param0: net.gotev.uploadservice.ServerResponse): void; - public setLastProgressNotificationTime(param0: number): net.gotev.uploadservice.UploadTask; - public addAllFilesToSuccessfullyUploadedFiles(): void; - public constructor(); - public addSuccessfullyUploadedFile(param0: net.gotev.uploadservice.UploadFile): void; - public run(): void; - public setNotificationId(param0: number): net.gotev.uploadservice.UploadTask; - public onSuccessfulUpload(): void; - public getSuccessfullyUploadedFiles(): javautilList; - public cancel(): void; - public upload(): void; - public init(param0: net.gotev.uploadservice.UploadService, param1: androidcontentIntent): void; - public broadcastCancelled(): void; - } - } - } -} - -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export class UploadTaskParameters { - public id: string; - public serverUrl: string; - public autoDeleteSuccessfullyUploadedFiles: boolean; - public notificationConfig: net.gotev.uploadservice.UploadNotificationConfig; - public files: javautilArrayList; - public static CREATOR: androidosParcelableCreator; - public setMaxRetries(param0: number): net.gotev.uploadservice.UploadTaskParameters; - public writeToParcel(param0: androidosParcel, param1: number): void; - public describeContents(): number; - public getMaxRetries(): number; - public constructor(); - } - } - } -} - -/// -declare module net { - export module gotev { - export module uploadservice { - export module http { - export abstract class BodyWriter { - public write(param0: native.Array): void; - public constructor(); - public flush(): void; - public writeStream(param0: javaioInputStream, param1: net.gotev.uploadservice.http.BodyWriter.OnStreamWriteListener): void; - public write(param0: native.Array, param1: number): void; - } - export module BodyWriter { - export class OnStreamWriteListener { - /** - * Constructs a new instance of the net.gotev.uploadservice.http.BodyWriter$OnStreamWriteListener interface with the provided implementation. - */ - public constructor(implementation: { - shouldContinueWriting(): boolean; - onBytesWritten(param0: number): void; - }); - public onBytesWritten(param0: number): void; - public shouldContinueWriting(): boolean; - } - } - } - } - } -} - -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export module http { - export class HttpConnection { - /** - * Constructs a new instance of the net.gotev.uploadservice.http.HttpConnection interface with the provided implementation. - */ - public constructor(implementation: { - setHeaders(param0: javautilList): net.gotev.uploadservice.http.HttpConnection; - setTotalBodyBytes(param0: number, param1: boolean): net.gotev.uploadservice.http.HttpConnection; - getResponse(param0: net.gotev.uploadservice.http.HttpConnection.RequestBodyDelegate): net.gotev.uploadservice.ServerResponse; - close(): void; - }); - public setTotalBodyBytes(param0: number, param1: boolean): net.gotev.uploadservice.http.HttpConnection; - public close(): void; - public getResponse(param0: net.gotev.uploadservice.http.HttpConnection.RequestBodyDelegate): net.gotev.uploadservice.ServerResponse; - public setHeaders(param0: javautilList): net.gotev.uploadservice.http.HttpConnection; - } - export module HttpConnection { - export class RequestBodyDelegate { - /** - * Constructs a new instance of the net.gotev.uploadservice.http.HttpConnection$RequestBodyDelegate interface with the provided implementation. - */ - public constructor(implementation: { - onBodyReady(param0: net.gotev.uploadservice.http.BodyWriter): void; - }); - public onBodyReady(param0: net.gotev.uploadservice.http.BodyWriter): void; - } - } - } - } - } -} - -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export module http { - export class HttpStack { - /** - * Constructs a new instance of the net.gotev.uploadservice.http.HttpStack interface with the provided implementation. - */ - public constructor(implementation: { - createNewConnection(param0: string, param1: string): net.gotev.uploadservice.http.HttpConnection; - }); - public createNewConnection(param0: string, param1: string): net.gotev.uploadservice.http.HttpConnection; - } - } - } - } -} - -import javaioOutputStream = java.io.OutputStream; -/// -declare module net { - export module gotev { - export module uploadservice { - export module http { - export module impl { - export class HurlBodyWriter extends net.gotev.uploadservice.http.BodyWriter { - public constructor(); - public flush(): void; - public write(param0: native.Array): void; - public write(param0: native.Array, param1: number): void; - public constructor(param0: javaioOutputStream); - } - } - } - } - } -} - -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export module http { - export module impl { - export class HurlStack { - public constructor(param0: boolean, param1: boolean, param2: number, param3: number); - public constructor(); - public createNewConnection(param0: string, param1: string): net.gotev.uploadservice.http.HttpConnection; - } - } - } - } - } -} - -/// -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export module http { - export module impl { - export class HurlStackConnection { - public getResponse(param0: net.gotev.uploadservice.http.HttpConnection.RequestBodyDelegate): net.gotev.uploadservice.ServerResponse; - public close(): void; - public constructor(param0: string, param1: string, param2: boolean, param3: boolean, param4: number, param5: number); - public setHeaders(param0: javautilList): net.gotev.uploadservice.http.HttpConnection; - public setTotalBodyBytes(param0: number, param1: boolean): net.gotev.uploadservice.http.HttpConnection; - } - } - } - } - } -} - -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export module schemehandlers { - export class ContentSchemeHandler { - public init(param0: string): void; - public getInputStream(param0: androidcontentContext): javaioInputStream; - public getContentType(param0: androidcontentContext): string; - public getLength(param0: androidcontentContext): number; - public getName(param0: androidcontentContext): string; - } - } - } - } -} - -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export module schemehandlers { - export class FileSchemeHandler { - public init(param0: string): void; - public getInputStream(param0: androidcontentContext): javaioInputStream; - public getContentType(param0: androidcontentContext): string; - public getLength(param0: androidcontentContext): number; - public getName(param0: androidcontentContext): string; - } - } - } - } -} - -/// -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export module schemehandlers { - export class SchemeHandler { - /** - * Constructs a new instance of the net.gotev.uploadservice.schemehandlers.SchemeHandler interface with the provided implementation. - */ - public constructor(implementation: { - init(param0: string): void; - getLength(param0: androidcontentContext): number; - getInputStream(param0: androidcontentContext): javaioInputStream; - getContentType(param0: androidcontentContext): string; - getName(param0: androidcontentContext): string; - }); - public init(param0: string): void; - public getInputStream(param0: androidcontentContext): javaioInputStream; - public getContentType(param0: androidcontentContext): string; - public getLength(param0: androidcontentContext): number; - public getName(param0: androidcontentContext): string; - } - } - } - } -} - -/// -/// -declare module net { - export module gotev { - export module uploadservice { - export module schemehandlers { - export class SchemeHandlerFactory { - public get(param0: string): net.gotev.uploadservice.schemehandlers.SchemeHandler; - public static getInstance(): net.gotev.uploadservice.schemehandlers.SchemeHandlerFactory; - public isSupported(param0: string): boolean; - } - export module SchemeHandlerFactory { - export class LazyHolder { - } - } - } - } - } -} - diff --git a/src/typings/java!uploadservice-3.5.2.ts b/src/typings/java!uploadservice-3.5.2.ts new file mode 100644 index 0000000..abacb1b --- /dev/null +++ b/src/typings/java!uploadservice-3.5.2.ts @@ -0,0 +1,987 @@ +/* tslint:disable */ +declare module net { + export module gotev { + export module uploadservice { + export class BinaryUploadRequest extends net.gotev.uploadservice.HttpUploadRequest { + public static class: java.lang.Class; + public addParameter(param0: string, param1: string): net.gotev.uploadservice.BinaryUploadRequest; + public constructor(param0: globalAndroid.content.Context, param1: string); + public addArrayParameter(param0: string, param1: native.Array): any; + public constructor(param0: globalAndroid.content.Context, param1: string, param2: string); + public startUpload(): string; + public addArrayParameter(param0: string, param1: native.Array): net.gotev.uploadservice.BinaryUploadRequest; + public addArrayParameter(param0: string, param1: java.util.List): net.gotev.uploadservice.BinaryUploadRequest; + public setFileToUpload(param0: string): net.gotev.uploadservice.BinaryUploadRequest; + public getTaskClass(): java.lang.Class; + public addArrayParameter(param0: string, param1: java.util.List): any; + public addParameter(param0: string, param1: string): any; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class BinaryUploadTask extends net.gotev.uploadservice.HttpUploadTask { + public static class: java.lang.Class; + public onBodyReady(param0: net.gotev.uploadservice.http.BodyWriter): void; + public run(): void; + public onBytesWritten(param0: number): void; + public onSuccessfulUpload(): void; + public getBodyLength(): number; + public shouldContinueWriting(): boolean; + public constructor(); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class BroadcastData extends java.lang.Object implements globalAndroid.os.Parcelable { + public static class: java.lang.Class; + public static CREATOR: globalAndroid.os.Parcelable.Creator; + public writeToParcel(param0: globalAndroid.os.Parcel, param1: number): void; + public getException(): java.lang.Exception; + public getUploadInfo(): net.gotev.uploadservice.UploadInfo; + public getIntent(): globalAndroid.content.Intent; + public setStatus(param0: net.gotev.uploadservice.BroadcastData.Status): net.gotev.uploadservice.BroadcastData; + public describeContents(): number; + public setUploadInfo(param0: net.gotev.uploadservice.UploadInfo): net.gotev.uploadservice.BroadcastData; + public getServerResponse(): net.gotev.uploadservice.ServerResponse; + public getStatus(): net.gotev.uploadservice.BroadcastData.Status; + public setException(param0: java.lang.Exception): net.gotev.uploadservice.BroadcastData; + public setServerResponse(param0: net.gotev.uploadservice.ServerResponse): net.gotev.uploadservice.BroadcastData; + public constructor(); + } + export module BroadcastData { + export class Status { + public static class: java.lang.Class; + public static IN_PROGRESS: net.gotev.uploadservice.BroadcastData.Status; + public static ERROR: net.gotev.uploadservice.BroadcastData.Status; + public static COMPLETED: net.gotev.uploadservice.BroadcastData.Status; + public static CANCELLED: net.gotev.uploadservice.BroadcastData.Status; + public static values(): native.Array; + public static valueOf(param0: string): net.gotev.uploadservice.BroadcastData.Status; + public static valueOf(param0: java.lang.Class, param1: string): java.lang.Enum; + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class BuildConfig extends java.lang.Object { + public static class: java.lang.Class; + public static DEBUG: boolean; + public static APPLICATION_ID: string; + public static BUILD_TYPE: string; + public static FLAVOR: string; + public static VERSION_CODE: number; + public static VERSION_NAME: string; + public constructor(); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class ContentType extends java.lang.Object { + public static class: java.lang.Class; + public static APPLICATION_ENVOY: string; + public static APPLICATION_FRACTALS: string; + public static APPLICATION_FUTURESPLASH: string; + public static APPLICATION_HTA: string; + public static APPLICATION_INTERNET_PROPERTY_STREAM: string; + public static APPLICATION_MAC_BINHEX40: string; + public static APPLICATION_MS_WORD: string; + public static APPLICATION_OCTET_STREAM: string; + public static APPLICATION_ODA: string; + public static APPLICATION_OLESCRIPT: string; + public static APPLICATION_PDF: string; + public static APPLICATION_PICS_RULES: string; + public static APPLICATION_PKCS10: string; + public static APPLICATION_PKIX_CRL: string; + public static APPLICATION_POSTSCRIPT: string; + public static APPLICATION_RTF: string; + public static APPLICATION_SETPAY: string; + public static APPLICATION_SETREG: string; + public static APPLICATION_MS_EXCEL: string; + public static APPLICATION_MS_OUTLOOK: string; + public static APPLICATION_MS_PKICERTSTORE: string; + public static APPLICATION_MS_PKISECCAT: string; + public static APPLICATION_MS_PKISTL: string; + public static APPLICATION_MS_POWERPOINT: string; + public static APPLICATION_MS_PROJECT: string; + public static APPLICATION_MS_WORKS: string; + public static APPLICATION_WINHLP: string; + public static APPLICATION_BCPIO: string; + public static APPLICATION_CDF: string; + public static APPLICATION_Z: string; + public static APPLICATION_TGZ: string; + public static APPLICATION_CPIO: string; + public static APPLICATION_CSH: string; + public static APPLICATION_DIRECTOR: string; + public static APPLICATION_DVI: string; + public static APPLICATION_GTAR: string; + public static APPLICATION_GZIP: string; + public static APPLICATION_HDF: string; + public static APPLICATION_INTERNET_SIGNUP: string; + public static APPLICATION_IPHONE: string; + public static APPLICATION_JAVASCRIPT: string; + public static APPLICATION_LATEX: string; + public static APPLICATION_MS_ACCESS: string; + public static APPLICATION_MS_CARD_FILE: string; + public static APPLICATION_MS_CLIP: string; + public static APPLICATION_MS_DOWNLOAD: string; + public static APPLICATION_MS_MEDIAVIEW: string; + public static APPLICATION_MS_METAFILE: string; + public static APPLICATION_MS_MONEY: string; + public static APPLICATION_MS_PUBLISHER: string; + public static APPLICATION_MS_SCHEDULE: string; + public static APPLICATION_MS_TERMINAL: string; + public static APPLICATION_MS_WRITE: string; + public static APPLICATION_NET_CDF: string; + public static APPLICATION_PERFMON: string; + public static APPLICATION_PKCS_12: string; + public static APPLICATION_PKCS_7_CERTIFICATES: string; + public static APPLICATION_PKCS_7_CERTREQRESP: string; + public static APPLICATION_PKCS_7_MIME: string; + public static APPLICATION_PKCS_7_SIGNATURE: string; + public static APPLICATION_SH: string; + public static APPLICATION_SHAR: string; + public static APPLICATION_SHOCKWAVE_FLASH: string; + public static APPLICATION_STUFFIT: string; + public static APPLICATION_SV4CPIO: string; + public static APPLICATION_SV4CRC: string; + public static APPLICATION_TAR: string; + public static APPLICATION_TCL: string; + public static APPLICATION_TEX: string; + public static APPLICATION_TEXINFO: string; + public static APPLICATION_TROFF: string; + public static APPLICATION_TROFF_MAN: string; + public static APPLICATION_TROFF_ME: string; + public static APPLICATION_TROFF_MS: string; + public static APPLICATION_USTAR: string; + public static APPLICATION_WAIS_SOURCE: string; + public static APPLICATION_X509_CA_CERT: string; + public static APPLICATION_PKO: string; + public static APPLICATION_ZIP: string; + public static APPLICATION_XML: string; + public static AUDIO_BASIC: string; + public static AUDIO_MID: string; + public static AUDIO_MPEG: string; + public static AUDIO_AIFF: string; + public static AUDIO_M3U: string; + public static AUDIO_REAL_AUDIO: string; + public static AUDIO_WAV: string; + public static IMAGE_BMP: string; + public static IMAGE_COD: string; + public static IMAGE_GIF: string; + public static IMAGE_IEF: string; + public static IMAGE_JPEG: string; + public static IMAGE_PIPEG: string; + public static IMAGE_SVG: string; + public static IMAGE_TIFF: string; + public static IMAGE_CMU_RASTER: string; + public static IMAGE_CMX: string; + public static IMAGE_ICO: string; + public static IMAGE_PORTABLE_ANYMAP: string; + public static IMAGE_PORTABLE_BITMAP: string; + public static IMAGE_PORTABLE_GRAYMAP: string; + public static IMAGE_PORTABLE_PIXMAP: string; + public static IMAGE_XRGB: string; + public static IMAGE_XBITMAP: string; + public static IMAGE_XPIXMAP: string; + public static IMAGE_XWINDOWDUMP: string; + public static TEXT_CSS: string; + public static TEXT_CSV: string; + public static TEXT_H323: string; + public static TEXT_HTML: string; + public static TEXT_IULS: string; + public static TEXT_PLAIN: string; + public static TEXT_RICHTEXT: string; + public static TEXT_SCRIPTLET: string; + public static TEXT_TAB_SEPARATED_VALUES: string; + public static TEXT_VIEWVIEW: string; + public static TEXT_COMPONENT: string; + public static TEXT_SETEXT: string; + public static TEXT_VCARD: string; + public static TEXT_XML: string; + public static VIDEO_MPEG: string; + public static VIDEO_MPEG4: string; + public static VIDEO_QUICKTIME: string; + public static VIDEO_LA_ASF: string; + public static VIDEO_MS_ASF: string; + public static VIDEO_AVI: string; + public static VIDEO_MOVIE: string; + public static autoDetect(param0: string): string; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class DefaultLoggerDelegate extends java.lang.Object implements net.gotev.uploadservice.Logger.LoggerDelegate { + public static class: java.lang.Class; + public info(param0: string, param1: string): void; + public debug(param0: string, param1: string): void; + public error(param0: string, param1: string, param2: java.lang.Throwable): void; + public error(param0: string, param1: string): void; + public constructor(); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export abstract class HttpUploadRequest extends net.gotev.uploadservice.UploadRequest { + public static class: java.lang.Class>; + public httpParams: net.gotev.uploadservice.HttpUploadTaskParameters; + public addHeader(param0: string, param1: string): any; + public addArrayParameter(param0: string, param1: native.Array): any; + public setCustomUserAgent(param0: string): any; + public constructor(param0: globalAndroid.content.Context, param1: string, param2: string); + public setBasicAuth(param0: string, param1: string): any; + public addArrayParameter(param0: string, param1: java.util.List): any; + public addParameter(param0: string, param1: string): any; + public setUsesFixedLengthStreamingMode(param0: boolean): any; + public initializeIntent(param0: globalAndroid.content.Intent): void; + public setMethod(param0: string): any; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export abstract class HttpUploadTask extends net.gotev.uploadservice.UploadTask implements net.gotev.uploadservice.http.HttpConnection.RequestBodyDelegate, net.gotev.uploadservice.http.BodyWriter.OnStreamWriteListener { + public static class: java.lang.Class; + public httpParams: net.gotev.uploadservice.HttpUploadTaskParameters; + public onBodyReady(param0: net.gotev.uploadservice.http.BodyWriter): void; + public init(param0: net.gotev.uploadservice.UploadService, param1: globalAndroid.content.Intent): void; + public run(): void; + public onBytesWritten(param0: number): void; + public upload(): void; + public getBodyLength(): number; + public shouldContinueWriting(): boolean; + public constructor(); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class HttpUploadTaskParameters extends java.lang.Object implements globalAndroid.os.Parcelable { + public static class: java.lang.Class; + public static PARAM_HTTP_TASK_PARAMETERS: string; + public customUserAgent: string; + public method: string; + public usesFixedLengthStreamingMode: boolean; + public static CREATOR: globalAndroid.os.Parcelable.Creator; + public writeToParcel(param0: globalAndroid.os.Parcel, param1: number): void; + public getRequestParameters(): java.util.ArrayList; + public isCustomUserAgentDefined(): boolean; + public getRequestHeaders(): java.util.ArrayList; + public describeContents(): number; + public addHeader(param0: string, param1: string): net.gotev.uploadservice.HttpUploadTaskParameters; + public addParameter(param0: string, param1: string): net.gotev.uploadservice.HttpUploadTaskParameters; + public constructor(); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class Logger extends java.lang.Object { + public static class: java.lang.Class; + public static resetLoggerDelegate(): void; + public static setLoggerDelegate(param0: net.gotev.uploadservice.Logger.LoggerDelegate): void; + public static debug(param0: string, param1: string): void; + public static info(param0: string, param1: string): void; + public static error(param0: string, param1: string, param2: java.lang.Throwable): void; + public static setLogLevel(param0: net.gotev.uploadservice.Logger.LogLevel): void; + public static error(param0: string, param1: string): void; + } + export module Logger { + export class LogLevel { + public static class: java.lang.Class; + public static DEBUG: net.gotev.uploadservice.Logger.LogLevel; + public static INFO: net.gotev.uploadservice.Logger.LogLevel; + public static ERROR: net.gotev.uploadservice.Logger.LogLevel; + public static OFF: net.gotev.uploadservice.Logger.LogLevel; + public static values(): native.Array; + public static valueOf(param0: string): net.gotev.uploadservice.Logger.LogLevel; + public static valueOf(param0: java.lang.Class, param1: string): java.lang.Enum; + } + export class LoggerDelegate extends java.lang.Object { + public static class: java.lang.Class; + /** + * Constructs a new instance of the net.gotev.uploadservice.Logger$LoggerDelegate interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. + */ + public constructor(implementation: { + error(param0: string, param1: string): void; + error(param0: string, param1: string, param2: java.lang.Throwable): void; + debug(param0: string, param1: string): void; + info(param0: string, param1: string): void; + }); + public constructor(); + public info(param0: string, param1: string): void; + public error(param0: string, param1: string): void; + public debug(param0: string, param1: string): void; + public error(param0: string, param1: string, param2: java.lang.Throwable): void; + } + export class SingletonHolder extends java.lang.Object { + public static class: java.lang.Class; + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class MultipartUploadRequest extends net.gotev.uploadservice.HttpUploadRequest { + public static class: java.lang.Class; + public addFileToUpload(param0: string, param1: string): net.gotev.uploadservice.MultipartUploadRequest; + public constructor(param0: globalAndroid.content.Context, param1: string); + public addFileToUpload(param0: string, param1: string, param2: string, param3: string): net.gotev.uploadservice.MultipartUploadRequest; + public constructor(param0: globalAndroid.content.Context, param1: string, param2: string); + public addFileToUpload(param0: string, param1: string, param2: string): net.gotev.uploadservice.MultipartUploadRequest; + public getTaskClass(): java.lang.Class; + public setUtf8Charset(): net.gotev.uploadservice.MultipartUploadRequest; + public initializeIntent(param0: globalAndroid.content.Intent): void; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class MultipartUploadTask extends net.gotev.uploadservice.HttpUploadTask { + public static class: java.lang.Class; + public static PARAM_UTF8_CHARSET: string; + public static PROPERTY_REMOTE_FILE_NAME: string; + public static PROPERTY_CONTENT_TYPE: string; + public static PROPERTY_PARAM_NAME: string; + public onBodyReady(param0: net.gotev.uploadservice.http.BodyWriter): void; + public init(param0: net.gotev.uploadservice.UploadService, param1: globalAndroid.content.Intent): void; + public run(): void; + public onBytesWritten(param0: number): void; + public onSuccessfulUpload(): void; + public getBodyLength(): number; + public shouldContinueWriting(): boolean; + public constructor(); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class NameValue extends java.lang.Object implements globalAndroid.os.Parcelable { + public static class: java.lang.Class; + public static CREATOR: globalAndroid.os.Parcelable.Creator; + public writeToParcel(param0: globalAndroid.os.Parcel, param1: number): void; + public static header(param0: string, param1: string): net.gotev.uploadservice.NameValue; + public getValue(): string; + public equals(param0: any): boolean; + public describeContents(): number; + public getName(): string; + public constructor(param0: string, param1: string); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class Placeholders extends java.lang.Object { + public static class: java.lang.Class; + public static ELAPSED_TIME: string; + public static UPLOAD_RATE: string; + public static PROGRESS: string; + public static UPLOADED_FILES: string; + public static TOTAL_FILES: string; + public static replace(param0: string, param1: net.gotev.uploadservice.UploadInfo): string; + public constructor(); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class ServerResponse extends java.lang.Object implements globalAndroid.os.Parcelable { + public static class: java.lang.Class; + public static CREATOR: globalAndroid.os.Parcelable.Creator; + public writeToParcel(param0: globalAndroid.os.Parcel, param1: number): void; + public constructor(param0: number, param1: native.Array, param2: java.util.LinkedHashMap); + public getBodyAsString(): string; + public getBody(): native.Array; + public describeContents(): number; + public getHeaders(): java.util.LinkedHashMap; + public constructor(param0: globalAndroid.os.Parcel); + public getHttpCode(): number; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class UploadFile extends java.lang.Object implements globalAndroid.os.Parcelable { + public static class: java.lang.Class; + public path: string; + public handler: net.gotev.uploadservice.schemehandlers.SchemeHandler; + public static CREATOR: globalAndroid.os.Parcelable.Creator; + public writeToParcel(param0: globalAndroid.os.Parcel, param1: number): void; + public getProperty(param0: string, param1: string): string; + public getStream(param0: globalAndroid.content.Context): java.io.InputStream; + public getPath(): string; + public constructor(param0: string); + public getContentType(param0: globalAndroid.content.Context): string; + public length(param0: globalAndroid.content.Context): number; + public getProperty(param0: string): string; + public hashCode(): number; + public describeContents(): number; + public equals(param0: any): boolean; + public getName(param0: globalAndroid.content.Context): string; + public setProperty(param0: string, param1: string): void; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class UploadInfo extends java.lang.Object implements globalAndroid.os.Parcelable { + public static class: java.lang.Class; + public static CREATOR: globalAndroid.os.Parcelable.Creator; + public writeToParcel(param0: globalAndroid.os.Parcel, param1: number): void; + public getElapsedTimeString(): string; + public getUploadRate(): number; + public getUploadedBytes(): number; + public constructor(param0: string, param1: number, param2: number, param3: number, param4: number, param5: java.util.List, param6: java.util.List); + public getProgressPercent(): number; + public getTotalBytes(): number; + public constructor(param0: string); + public getUploadId(): string; + public getStartTime(): number; + public setNotificationID(param0: number): void; + public getSuccessfullyUploadedFiles(): java.util.ArrayList; + public getNumberOfRetries(): number; + public getElapsedTime(): number; + public getUploadRateString(): string; + public getFilesLeft(): java.util.ArrayList; + public describeContents(): number; + public getNotificationID(): java.lang.Integer; + public getTotalFiles(): number; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class UploadNotificationAction extends java.lang.Object implements globalAndroid.os.Parcelable { + public static class: java.lang.Class; + public static CREATOR: globalAndroid.os.Parcelable.Creator; + public writeToParcel(param0: globalAndroid.os.Parcel, param1: number): void; + public static from(param0: androidx.core.app.NotificationCompat.Action): net.gotev.uploadservice.UploadNotificationAction; + public hashCode(): number; + public describeContents(): number; + public equals(param0: any): boolean; + public constructor(param0: number, param1: string, param2: globalAndroid.app.PendingIntent); + public constructor(param0: globalAndroid.os.Parcel); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class UploadNotificationConfig extends java.lang.Object implements globalAndroid.os.Parcelable { + public static class: java.lang.Class; + public static CREATOR: globalAndroid.os.Parcelable.Creator; + public setIconForAllStatuses(param0: number): net.gotev.uploadservice.UploadNotificationConfig; + public writeToParcel(param0: globalAndroid.os.Parcel, param1: number): void; + public setClickIntentForAllStatuses(param0: globalAndroid.app.PendingIntent): net.gotev.uploadservice.UploadNotificationConfig; + public getNotificationChannelId(): string; + public getProgress(): net.gotev.uploadservice.UploadNotificationStatusConfig; + public getError(): net.gotev.uploadservice.UploadNotificationStatusConfig; + public addActionForAllStatuses(param0: net.gotev.uploadservice.UploadNotificationAction): net.gotev.uploadservice.UploadNotificationConfig; + public setClearOnActionForAllStatuses(param0: boolean): net.gotev.uploadservice.UploadNotificationConfig; + public isRingToneEnabled(): boolean; + public setRingToneEnabled(param0: java.lang.Boolean): net.gotev.uploadservice.UploadNotificationConfig; + public setTitleForAllStatuses(param0: string): net.gotev.uploadservice.UploadNotificationConfig; + public getCancelled(): net.gotev.uploadservice.UploadNotificationStatusConfig; + public setNotificationChannelId(param0: string): net.gotev.uploadservice.UploadNotificationConfig; + public constructor(param0: globalAndroid.os.Parcel); + public constructor(); + public getCompleted(): net.gotev.uploadservice.UploadNotificationStatusConfig; + public setIconColorForAllStatuses(param0: number): net.gotev.uploadservice.UploadNotificationConfig; + public setLargeIconForAllStatuses(param0: globalAndroid.graphics.Bitmap): net.gotev.uploadservice.UploadNotificationConfig; + public describeContents(): number; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class UploadNotificationStatusConfig extends java.lang.Object implements globalAndroid.os.Parcelable { + public static class: java.lang.Class; + public title: string; + public message: string; + public autoClear: boolean; + public iconResourceID: number; + public largeIcon: globalAndroid.graphics.Bitmap; + public iconColorResourceID: number; + public clickIntent: globalAndroid.app.PendingIntent; + public clearOnAction: boolean; + public actions: java.util.ArrayList; + public static CREATOR: globalAndroid.os.Parcelable.Creator; + public writeToParcel(param0: globalAndroid.os.Parcel, param1: number): void; + public describeContents(): number; + public constructor(param0: globalAndroid.os.Parcel); + public constructor(); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export abstract class UploadRequest extends java.lang.Object { + public static class: java.lang.Class>; + public context: globalAndroid.content.Context; + public params: net.gotev.uploadservice.UploadTaskParameters; + public delegate: net.gotev.uploadservice.UploadStatusDelegate; + public setNotificationConfig(param0: net.gotev.uploadservice.UploadNotificationConfig): B; + public setDelegate(param0: net.gotev.uploadservice.UploadStatusDelegate): B; + public constructor(param0: globalAndroid.content.Context, param1: string, param2: string); + public setAutoDeleteFilesAfterSuccessfulUpload(param0: boolean): B; + public startUpload(): string; + public getTaskClass(): java.lang.Class; + public self(): B; + public setMaxRetries(param0: number): B; + public initializeIntent(param0: globalAndroid.content.Intent): void; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class UploadService extends globalAndroid.app.Service { + public static class: java.lang.Class; + public static UPLOAD_POOL_SIZE: number; + public static KEEP_ALIVE_TIME_IN_SECONDS: number; + public static IDLE_TIMEOUT: number; + public static EXECUTE_IN_FOREGROUND: boolean; + public static NAMESPACE: string; + public static HTTP_STACK: net.gotev.uploadservice.http.HttpStack; + public static BUFFER_SIZE: number; + public static INITIAL_RETRY_WAIT_TIME: number; + public static BACKOFF_MULTIPLIER: number; + public static MAX_RETRY_WAIT_TIME: number; + public static UPLOAD_NOTIFICATION_BASE_ID: number; + public static PROGRESS_REPORT_INTERVAL: number; + public static PARAM_TASK_PARAMETERS: string; + public static PARAM_TASK_CLASS: string; + public static PARAM_BROADCAST_DATA: string; + public onStartCommand(param0: globalAndroid.content.Intent, param1: number, param2: number): number; + public static stop(param0: globalAndroid.content.Context, param1: boolean): boolean; + public constructor(); + public taskCompleted(param0: string): void; + public onBind(param0: globalAndroid.content.Intent): globalAndroid.os.IBinder; + public static stop(param0: globalAndroid.content.Context): boolean; + public static stopAllUploads(): void; + public constructor(param0: globalAndroid.content.Context); + public static getActionBroadcast(): string; + public onCreate(): void; + public static getTaskList(): java.util.List; + public onDestroy(): void; + public holdForegroundNotification(param0: string, param1: globalAndroid.app.Notification): boolean; + public static getActionUpload(): string; + public static setUploadStatusDelegate(param0: string, param1: net.gotev.uploadservice.UploadStatusDelegate): void; + public static getUploadStatusDelegate(param0: string): net.gotev.uploadservice.UploadStatusDelegate; + public onTrimMemory(param0: number): void; + public static stopUpload(param0: string): void; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class UploadServiceBroadcastReceiver extends globalAndroid.content.BroadcastReceiver implements net.gotev.uploadservice.UploadStatusDelegate { + public static class: java.lang.Class; + public onError(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse, param3: java.lang.Exception): void; + public onCompleted(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse): void; + public onReceive(param0: globalAndroid.content.Context, param1: globalAndroid.content.Intent): void; + public register(param0: globalAndroid.content.Context): void; + public onProgress(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo): void; + public onCancelled(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo): void; + public shouldAcceptEventFrom(param0: net.gotev.uploadservice.UploadInfo): boolean; + public constructor(); + public unregister(param0: globalAndroid.content.Context): void; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class UploadServiceSingleBroadcastReceiver extends net.gotev.uploadservice.UploadServiceBroadcastReceiver { + public static class: java.lang.Class; + public constructor(param0: net.gotev.uploadservice.UploadStatusDelegate); + public setUploadID(param0: string): void; + public onError(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse, param3: java.lang.Exception): void; + public onCompleted(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse): void; + public onProgress(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo): void; + public onCancelled(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo): void; + public shouldAcceptEventFrom(param0: net.gotev.uploadservice.UploadInfo): boolean; + public constructor(); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class UploadStatusDelegate extends java.lang.Object { + public static class: java.lang.Class; + /** + * Constructs a new instance of the net.gotev.uploadservice.UploadStatusDelegate interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. + */ + public constructor(implementation: { + onProgress(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo): void; + onError(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse, param3: java.lang.Exception): void; + onCompleted(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse): void; + onCancelled(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo): void; + }); + public constructor(); + public onError(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse, param3: java.lang.Exception): void; + public onCompleted(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo, param2: net.gotev.uploadservice.ServerResponse): void; + public onProgress(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo): void; + public onCancelled(param0: globalAndroid.content.Context, param1: net.gotev.uploadservice.UploadInfo): void; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export abstract class UploadTask extends java.lang.Object implements java.lang.Runnable { + public static class: java.lang.Class; + public static TASK_COMPLETED_SUCCESSFULLY: number; + public static EMPTY_RESPONSE: native.Array; + public service: net.gotev.uploadservice.UploadService; + public params: net.gotev.uploadservice.UploadTaskParameters; + public shouldContinue: boolean; + public totalBytes: number; + public uploadedBytes: number; + public broadcastProgress(param0: number, param1: number): void; + public broadcastCompleted(param0: net.gotev.uploadservice.ServerResponse): void; + public setLastProgressNotificationTime(param0: number): net.gotev.uploadservice.UploadTask; + public addAllFilesToSuccessfullyUploadedFiles(): void; + public constructor(); + public addSuccessfullyUploadedFile(param0: net.gotev.uploadservice.UploadFile): void; + public init(param0: net.gotev.uploadservice.UploadService, param1: globalAndroid.content.Intent): void; + public run(): void; + public setNotificationId(param0: number): net.gotev.uploadservice.UploadTask; + public onSuccessfulUpload(): void; + public cancel(): void; + public upload(): void; + public broadcastCancelled(): void; + public getSuccessfullyUploadedFiles(): java.util.List; + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export class UploadTaskParameters extends java.lang.Object implements globalAndroid.os.Parcelable { + public static class: java.lang.Class; + public id: string; + public serverUrl: string; + public autoDeleteSuccessfullyUploadedFiles: boolean; + public notificationConfig: net.gotev.uploadservice.UploadNotificationConfig; + public files: java.util.ArrayList; + public static CREATOR: globalAndroid.os.Parcelable.Creator; + public writeToParcel(param0: globalAndroid.os.Parcel, param1: number): void; + public setMaxRetries(param0: number): net.gotev.uploadservice.UploadTaskParameters; + public describeContents(): number; + public getMaxRetries(): number; + public constructor(); + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export module http { + export abstract class BodyWriter extends java.lang.Object { + public static class: java.lang.Class; + public write(param0: native.Array): void; + public constructor(); + public writeStream(param0: java.io.InputStream, param1: net.gotev.uploadservice.http.BodyWriter.OnStreamWriteListener): void; + public flush(): void; + public write(param0: native.Array, param1: number): void; + } + export module BodyWriter { + export class OnStreamWriteListener extends java.lang.Object { + public static class: java.lang.Class; + /** + * Constructs a new instance of the net.gotev.uploadservice.http.BodyWriter$OnStreamWriteListener interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. + */ + public constructor(implementation: { + shouldContinueWriting(): boolean; + onBytesWritten(param0: number): void; + }); + public constructor(); + public onBytesWritten(param0: number): void; + public shouldContinueWriting(): boolean; + } + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export module http { + export class HttpConnection extends java.lang.Object { + public static class: java.lang.Class; + /** + * Constructs a new instance of the net.gotev.uploadservice.http.HttpConnection interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. + */ + public constructor(implementation: { + setHeaders(param0: java.util.List): net.gotev.uploadservice.http.HttpConnection; + setTotalBodyBytes(param0: number, param1: boolean): net.gotev.uploadservice.http.HttpConnection; + getResponse(param0: net.gotev.uploadservice.http.HttpConnection.RequestBodyDelegate): net.gotev.uploadservice.ServerResponse; + close(): void; + }); + public constructor(); + public setTotalBodyBytes(param0: number, param1: boolean): net.gotev.uploadservice.http.HttpConnection; + public close(): void; + public setHeaders(param0: java.util.List): net.gotev.uploadservice.http.HttpConnection; + public getResponse(param0: net.gotev.uploadservice.http.HttpConnection.RequestBodyDelegate): net.gotev.uploadservice.ServerResponse; + } + export module HttpConnection { + export class RequestBodyDelegate extends java.lang.Object { + public static class: java.lang.Class; + /** + * Constructs a new instance of the net.gotev.uploadservice.http.HttpConnection$RequestBodyDelegate interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. + */ + public constructor(implementation: { + onBodyReady(param0: net.gotev.uploadservice.http.BodyWriter): void; + }); + public constructor(); + public onBodyReady(param0: net.gotev.uploadservice.http.BodyWriter): void; + } + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export module http { + export class HttpStack extends java.lang.Object { + public static class: java.lang.Class; + /** + * Constructs a new instance of the net.gotev.uploadservice.http.HttpStack interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. + */ + public constructor(implementation: { + createNewConnection(param0: string, param1: string): net.gotev.uploadservice.http.HttpConnection; + }); + public constructor(); + public createNewConnection(param0: string, param1: string): net.gotev.uploadservice.http.HttpConnection; + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export module http { + export module impl { + export class HurlBodyWriter extends net.gotev.uploadservice.http.BodyWriter { + public static class: java.lang.Class; + public constructor(param0: java.io.OutputStream); + public constructor(); + public flush(): void; + public write(param0: native.Array): void; + public write(param0: native.Array, param1: number): void; + } + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export module http { + export module impl { + export class HurlStack extends java.lang.Object implements net.gotev.uploadservice.http.HttpStack { + public static class: java.lang.Class; + public constructor(param0: boolean, param1: boolean, param2: number, param3: number); + public constructor(); + public createNewConnection(param0: string, param1: string): net.gotev.uploadservice.http.HttpConnection; + } + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export module http { + export module impl { + export class HurlStackConnection extends java.lang.Object implements net.gotev.uploadservice.http.HttpConnection { + public static class: java.lang.Class; + public getResponse(param0: net.gotev.uploadservice.http.HttpConnection.RequestBodyDelegate): net.gotev.uploadservice.ServerResponse; + public close(): void; + public constructor(param0: string, param1: string, param2: boolean, param3: boolean, param4: number, param5: number); + public setHeaders(param0: java.util.List): net.gotev.uploadservice.http.HttpConnection; + public setTotalBodyBytes(param0: number, param1: boolean): net.gotev.uploadservice.http.HttpConnection; + } + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export module schemehandlers { + export class ContentSchemeHandler extends java.lang.Object implements net.gotev.uploadservice.schemehandlers.SchemeHandler { + public static class: java.lang.Class; + public getContentType(param0: globalAndroid.content.Context): string; + public init(param0: string): void; + public getName(param0: globalAndroid.content.Context): string; + public getLength(param0: globalAndroid.content.Context): number; + public getInputStream(param0: globalAndroid.content.Context): java.io.InputStream; + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export module schemehandlers { + export class FileSchemeHandler extends java.lang.Object implements net.gotev.uploadservice.schemehandlers.SchemeHandler { + public static class: java.lang.Class; + public getContentType(param0: globalAndroid.content.Context): string; + public init(param0: string): void; + public getName(param0: globalAndroid.content.Context): string; + public getLength(param0: globalAndroid.content.Context): number; + public getInputStream(param0: globalAndroid.content.Context): java.io.InputStream; + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export module schemehandlers { + export class SchemeHandler extends java.lang.Object { + public static class: java.lang.Class; + /** + * Constructs a new instance of the net.gotev.uploadservice.schemehandlers.SchemeHandler interface with the provided implementation. An empty constructor exists calling super() when extending the interface class. + */ + public constructor(implementation: { + init(param0: string): void; + getLength(param0: globalAndroid.content.Context): number; + getInputStream(param0: globalAndroid.content.Context): java.io.InputStream; + getContentType(param0: globalAndroid.content.Context): string; + getName(param0: globalAndroid.content.Context): string; + }); + public constructor(); + public getContentType(param0: globalAndroid.content.Context): string; + public init(param0: string): void; + public getName(param0: globalAndroid.content.Context): string; + public getLength(param0: globalAndroid.content.Context): number; + public getInputStream(param0: globalAndroid.content.Context): java.io.InputStream; + } + } + } + } +} + +declare module net { + export module gotev { + export module uploadservice { + export module schemehandlers { + export class SchemeHandlerFactory extends java.lang.Object { + public static class: java.lang.Class; + public get(param0: string): net.gotev.uploadservice.schemehandlers.SchemeHandler; + public static getInstance(): net.gotev.uploadservice.schemehandlers.SchemeHandlerFactory; + public isSupported(param0: string): boolean; + } + export module SchemeHandlerFactory { + export class LazyHolder extends java.lang.Object { + public static class: java.lang.Class; + } + } + } + } + } +} + +//Generics information: +//net.gotev.uploadservice.HttpUploadRequest:1 +//net.gotev.uploadservice.UploadRequest:1 \ No newline at end of file From 3eb9b23cea30c512bb0a014967e53066d5375bf0 Mon Sep 17 00:00:00 2001 From: dtodorov Date: Thu, 18 Apr 2019 18:12:34 +0300 Subject: [PATCH 17/30] Chore: bump version to androidx --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 2679f62..0234517 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-background-http", - "version": "3.4.1", + "version": "4.0.0", "main": "background-http", "typings": "index.d.ts", "nativescript": { From b11552935d80fab204e769c60e19067c8beff2af Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Mon, 5 Aug 2019 12:08:41 +0300 Subject: [PATCH 18/30] fix: update pod repo from travis --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8d2a616..7cf1968 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,7 @@ matrix: language: node_js node_js: "10" jdk: oraclejdk8 + before_script: pod repo update script: - cd demo && npm run build.plugin && npm i - tns build ios --bundle --env.uglify @@ -31,6 +32,7 @@ matrix: language: node_js node_js: "10" jdk: oraclejdk8 + before_script: pod repo update script: - cd src && npm run build - cd ../publish && sh pack.sh @@ -45,6 +47,7 @@ matrix: language: node_js node_js: "10" jdk: oraclejdk8 + before_script: pod repo update script: - cd src && npm run build - cd ../publish && sh pack.sh From 5824349312d080adfd465ba62540cc3328da558c Mon Sep 17 00:00:00 2001 From: Samuel Schultze Date: Thu, 29 Aug 2019 09:29:47 -0300 Subject: [PATCH 19/30] feat(android): add options to set notifications channel id, ringtone enabled and auto clear (#239) * androidAutoClearNotification implemented * androidRingToneEnabled implemented * androidNotificationChannelID implemented * better way of using default values * add android notes on readme --- README.md | 3 +++ src/background-http.android.ts | 16 ++++++++++++++++ src/index.d.ts | 27 +++++++++++++++++++++------ 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 5d71309..d37ef35 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,9 @@ androidDisplayNotificationProgress | `boolean` | (Android only) Used to set if p androidNotificationTitle | `string` | (Android only) Used to set the title shown in the Android notifications center. androidAutoDeleteAfterUpload | `boolean` | (Android only) Used to set if files should be deleted automatically after upload. androidMaxRetries | `number` | (Android only) Used to set the maximum retry count. The default retry count is 0. https://github.com/gotev/android-upload-service/wiki/Recipes#backoff +androidAutoClearNotification | `boolean` | (Android only) Used to set if notifications should be cleared automatically upon upload completion. Default is false. Please note that setting this to true will also disable the ringtones. +androidRingToneEnabled | `boolean` | (Android only) Used to set if a ringtone should be played upon upload completion. Default is true. Please note that this flag has no effect when `androidAutoClearNotification` is set to true. +androidNotificationChannelID | `string` | (Android only) Used to set the channel ID for the notifications. The task object has the following properties and methods, that can be used to get information about the upload: diff --git a/src/background-http.android.ts b/src/background-http.android.ts index 4729ac6..3aae97c 100644 --- a/src/background-http.android.ts +++ b/src/background-http.android.ts @@ -307,7 +307,23 @@ function setRequestOptions(request: any, options: common.Request) { if (displayNotificationProgress) { const uploadNotificationConfig = new net.gotev.uploadservice.UploadNotificationConfig(); const notificationTitle = typeof options.androidNotificationTitle === "string" ? options.androidNotificationTitle : 'File Upload'; + uploadNotificationConfig.setTitleForAllStatuses(notificationTitle); + + if (typeof options.androidRingToneEnabled === "boolean") { + uploadNotificationConfig.setRingToneEnabled(new java.lang.Boolean(options.androidRingToneEnabled)); + } + + if (typeof options.androidAutoClearNotification === "boolean") { + uploadNotificationConfig.getCompleted().autoClear = options.androidAutoClearNotification; + uploadNotificationConfig.getCancelled().autoClear = options.androidAutoClearNotification; + uploadNotificationConfig.getError().autoClear = options.androidAutoClearNotification; + } + + if (typeof options.androidNotificationChannelID === "string" && options.androidNotificationChannelID) { + uploadNotificationConfig.setNotificationChannelId(options.androidNotificationChannelID); + } + request.setNotificationConfig(uploadNotificationConfig); } const autoDeleteAfterUpload = typeof options.androidAutoDeleteAfterUpload === "boolean" ? options.androidAutoDeleteAfterUpload : false; diff --git a/src/index.d.ts b/src/index.d.ts index 2240ab8..9e66108 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -85,12 +85,12 @@ export interface Task { * Cancel the Upload Task. */ cancel(): void; - /** - * Subscribe for a general event. - * @param event The name of the event to subscribe for. - * @param handler The handler called when the event occure. - * @event - */ + /** + * Subscribe for a general event. + * @param event The name of the event to subscribe for. + * @param handler The handler called when the event occure. + * @event + */ on(event: string, handler: (e: observable.EventData) => void): void; /** @@ -194,4 +194,19 @@ export interface Request { * https://github.com/gotev/android-upload-service/wiki/Recipes#backoff */ androidMaxRetries?: number; + + /* + * Use this to set if notifications should be cleared automatically upon upload completion + */ + androidAutoClearNotification?: boolean; + + /* + * Use this to set if a ringtone should be played upon upload completion + */ + androidRingToneEnabled?: boolean; + + /* + * Use this to set the channel ID for the notifications + */ + androidNotificationChannelID?: string; } From 297ab7149ee346ebf148b12390959e09e0c4f78a Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Thu, 5 Sep 2019 01:06:54 +0300 Subject: [PATCH 20/30] chore: update dependencies for 6.1 --- demo-angular/package.json | 29 ++++++++++++++--------------- demo-vue/package.json | 10 +++++----- demo/package.json | 6 +++--- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/demo-angular/package.json b/demo-angular/package.json index 05da1a2..2fa43ec 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.demoangular", "tns-android": { - "version": "6.0.0" + "version": "6.1.0" }, "tns-ios": { - "version": "6.0.1" + "version": "6.1.0" } }, "scripts": { @@ -17,27 +17,26 @@ "ci.tslint": "npm i && tslint --config '../tslint.json' 'app/**/*.ts' --exclude '**/node_modules/**'" }, "dependencies": { - "@angular/animations": "~8.0.0", - "@angular/common": "~8.0.0", - "@angular/compiler": "~8.0.0", - "@angular/core": "~8.0.0", - "@angular/forms": "~8.0.0", - "@angular/http": "8.0.0-beta.10", - "@angular/platform-browser": "~8.0.0", - "@angular/platform-browser-dynamic": "~8.0.0", - "@angular/router": "~8.0.0", - "nativescript-angular": "~8.0.0", + "@angular/animations": "~8.2.0", + "@angular/common": "~8.2.0", + "@angular/compiler": "~8.2.0", + "@angular/core": "~8.2.0", + "@angular/forms": "~8.2.0", + "@angular/platform-browser": "~8.2.0", + "@angular/platform-browser-dynamic": "~8.2.0", + "@angular/router": "~8.2.0", + "nativescript-angular": "~8.2.0", "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", "reflect-metadata": "~0.1.10", - "rxjs": "^6.3.3", + "rxjs": "^6.4.0", "tns-core-modules": "^6.0.0", "zone.js": "^0.9.1" }, "devDependencies": { - "nativescript-dev-webpack": "~1.0.1", + "nativescript-dev-webpack": "^1.0.0", "tslint": "~5.11.0", "tns-platform-declarations": "^6.0.0", - "typescript": "~3.4.5" + "typescript": "~3.5.3" } } \ No newline at end of file diff --git a/demo-vue/package.json b/demo-vue/package.json index 1ef72d9..662c0a2 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -2,10 +2,10 @@ "nativescript": { "id": "org.nativescript.demovue", "tns-android": { - "version": "6.0.0" + "version": "6.1.0" }, "tns-ios": { - "version": "6.0.1" + "version": "6.1.0" } }, "description": "NativeScript Application", @@ -17,15 +17,15 @@ "dependencies": { "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", - "nativescript-vue": "~2.3.0", + "nativescript-vue": "~2.4.0", "tns-core-modules": "^6.0.0" }, "devDependencies": { "@babel/core": "~7.1.0", "@babel/preset-env": "~7.1.0", "babel-loader": "~8.0.0", - "nativescript-dev-webpack": "~1.0.1", - "nativescript-vue-template-compiler": "~2.3.0", + "nativescript-dev-webpack": "^1.0.0", + "nativescript-vue-template-compiler": "~2.4.0", "node-sass": "~4.12.0", "ts-loader": "^5.3.1", "vue-loader": "~15.4.0", diff --git a/demo/package.json b/demo/package.json index 5dbbdbd..267c2be 100644 --- a/demo/package.json +++ b/demo/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.demo", "tns-android": { - "version": "6.0.0" + "version": "6.1.0" }, "tns-ios": { - "version": "6.0.1" + "version": "6.1.0" } }, "scripts": { @@ -22,7 +22,7 @@ "tns-core-modules": "^6.0.0" }, "devDependencies": { - "nativescript-dev-webpack": "~1.0.1", + "nativescript-dev-webpack": "^1.0.0", "tslint": "~5.11.0", "tns-platform-declarations": "^6.0.0", "typescript": "~3.4.5" From 0843fb670bc6cf8ca1faa6738238c7648b3e0292 Mon Sep 17 00:00:00 2001 From: Zdravko Branzov Date: Tue, 10 Sep 2019 14:47:17 +0300 Subject: [PATCH 21/30] chore: bump version to 4.1.0 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 0234517..0133db3 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-background-http", - "version": "4.0.0", + "version": "4.1.0", "main": "background-http", "typings": "index.d.ts", "nativescript": { From 969a0890fa03226228220f3f23f30ee7c86a6deb Mon Sep 17 00:00:00 2001 From: tgpetrov Date: Wed, 18 Sep 2019 17:07:38 +0300 Subject: [PATCH 22/30] feat: add support for api17 --- DevelopmentWorkflow.md | 12 ++++++++++ README.md | 2 +- .../Android/src/main/AndroidManifest.xml | 2 +- .../App_Resources/Android/AndroidManifest.xml | 2 +- .../Android/src/main/AndroidManifest.xml | 2 +- src/.npmignore | 3 +-- src/package.json | 6 +---- src/platforms/android/AndroidManifest.xml | 17 -------------- src/platforms/android/include.gradle | 8 ------- .../android/uploadservice-release.aar | Bin 0 -> 92508 bytes src/scripts/prepare.js | 21 ------------------ 11 files changed, 18 insertions(+), 57 deletions(-) delete mode 100644 src/platforms/android/AndroidManifest.xml delete mode 100644 src/platforms/android/include.gradle create mode 100644 src/platforms/android/uploadservice-release.aar delete mode 100644 src/scripts/prepare.js diff --git a/DevelopmentWorkflow.md b/DevelopmentWorkflow.md index 245f06c..b17c764 100644 --- a/DevelopmentWorkflow.md +++ b/DevelopmentWorkflow.md @@ -5,6 +5,7 @@ - [Prerequisites](#prerequisites) - [Develop locally](#develop-locally) - [Testing the plugin](#testing-the-plugin) +- [Native android changes](#native-android-changes) @@ -34,4 +35,15 @@ npm run demo.android The demo application is configured to run on a simulator/emulator on the local machine. If you want to test on a real device, you should change the URL in the `demo/app/home-view-model.ts` to point to the machine that is running the demo server. Be careful if using an online test service, e.g. [http://httpbin.org/post](http://httpbin.org/post). Some services are configured to return the uploaded file contents in the server response, which might crash the demo app if the uploaded file is large. +## Native android changes + +For android, the plugin uses [a fork](https://github.com/NativeScript/android-upload-service) of the [gotev/android-upload-service](https://github.com/gotev/android-upload-service) library for Android. +Avoid fixes and new features in the fork. Use the original repository and then update the fork with the changes. +The native library is used in the plugin as an aar file added in the plugin's platforms/android directory. +Here's how to reflect any changes in the native library in this plugin. First make sure the changes are included in the fork. Then clone the fork and run the following command in its root directory: +``` +./gradlew clean assembleRelease +``` +This will produce a new aar file here: android-upload-service/uploadservice/build/outputs/aar/uploadservice-release.aar. Use it to replace the previous aar in the plugin: nativescript-background-http/src/platforms/android/uploadservice-release.aar + For details on plugins development workflow, read [NativeScript plugins documentation](https://docs.nativescript.org/plugins/building-plugins#step-2-set-up-a-development-workflow) covering that topic. diff --git a/README.md b/README.md index d37ef35..37830e5 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A cross platform plugin for [the NativeScript framework](http://www.nativescript [There is a stock NativeScript `http` module that can handle GET/POST requests that work with strings and JSONs](http://docs.nativescript.org/ApiReference/http/HOW-TO). It however comes short in features when it comes to really large files. -The plugin uses [NSURLSession with background session configuration for iOS](https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSessionConfiguration_class/index.html#//apple_ref/occ/clm/NSURLSessionConfiguration/backgroundSessionConfigurationWithIdentifier:); and the [alexbbb/android-upload-service](https://github.com/alexbbb/android-upload-service) library for Android. +The plugin uses [NSURLSession with background session configuration for iOS](https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSessionConfiguration_class/index.html#//apple_ref/occ/clm/NSURLSessionConfiguration/backgroundSessionConfigurationWithIdentifier:); and [a fork](https://github.com/NativeScript/android-upload-service) of the [gotev/android-upload-service](https://github.com/gotev/android-upload-service) library for Android. ## Installation diff --git a/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml index adb8ac1..b288a62 100644 --- a/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml +++ b/demo-angular/app/App_Resources/Android/src/main/AndroidManifest.xml @@ -11,7 +11,7 @@ android:xlargeScreens="true"/> diff --git a/demo-vue/app/App_Resources/Android/AndroidManifest.xml b/demo-vue/app/App_Resources/Android/AndroidManifest.xml index d05f4de..9961000 100644 --- a/demo-vue/app/App_Resources/Android/AndroidManifest.xml +++ b/demo-vue/app/App_Resources/Android/AndroidManifest.xml @@ -11,7 +11,7 @@ android:xlargeScreens="true"/> diff --git a/demo/app/App_Resources/Android/src/main/AndroidManifest.xml b/demo/app/App_Resources/Android/src/main/AndroidManifest.xml index adb8ac1..b288a62 100644 --- a/demo/app/App_Resources/Android/src/main/AndroidManifest.xml +++ b/demo/app/App_Resources/Android/src/main/AndroidManifest.xml @@ -11,7 +11,7 @@ android:xlargeScreens="true"/> diff --git a/src/.npmignore b/src/.npmignore index 1a3062f..6ab38bf 100644 --- a/src/.npmignore +++ b/src/.npmignore @@ -7,5 +7,4 @@ tsconfig.json *.tgz /package /platforms/android/**/* -!platforms/android/include.gradle -!platforms/android/nativescript_background_http.aar \ No newline at end of file +!platforms/android/uploadservice-release.aar \ No newline at end of file diff --git a/src/package.json b/src/package.json index 0133db3..435975a 100644 --- a/src/package.json +++ b/src/package.json @@ -17,12 +17,9 @@ "scripts": { "tsc": "tsc -skipLibCheck", "build": "npm i && tsc", - "postclone": "npm i && node scripts/postclone.js && cd ../demo && npm i && cd ../src && npm run plugin.link", "test.android": "npm i && npm run tsc && npm run tslint && cd ../demo && tns build android && tns test android --justlaunch", "test.ios": "npm i && npm run tsc && npm run tslint && cd ../demo && tns build ios && tns test ios --justlaunch", "tslint": "cd .. && tslint \"**/*.ts\" --config tslint.json --exclude \"**/node_modules/**\"", - "plugin.link": "npm link && cd ../demo && npm link nativescript-background-http && cd ../src", - "plugin.tscwatch": "npm run tsc -- -w", "demo.ios": "npm i && npm run tsc && cd ../demo && tns run ios", "demo-angular.ios": "npm i && npm run tsc && cd ../demo-angular && tns run ios", "demo-vue.ios": "npm i && npm run tsc && cd ../demo-vue && tns run ios", @@ -34,8 +31,7 @@ "server": "cd ../demo-server && npm run start", "plugin.prepare": "npm run tsc && cd ../demo && tns plugin remove nativescript-background-http && tns plugin add ../src", "clean": "cd ../demo && rimraf hooks node_modules platforms && cd ../src && rimraf node_modules && npm run plugin.link", - "ci.tslint": "npm i && tslint '**/*.ts' --config '../tslint.json' --exclude '**/node_modules/**'", - "prepare": "node scripts/prepare.js" + "ci.tslint": "npm i && tslint '**/*.ts' --config '../tslint.json' --exclude '**/node_modules/**'" }, "keywords": [ "background", diff --git a/src/platforms/android/AndroidManifest.xml b/src/platforms/android/AndroidManifest.xml deleted file mode 100644 index e927afa..0000000 --- a/src/platforms/android/AndroidManifest.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/platforms/android/include.gradle b/src/platforms/android/include.gradle deleted file mode 100644 index 82bc6b2..0000000 --- a/src/platforms/android/include.gradle +++ /dev/null @@ -1,8 +0,0 @@ -//default elements -android { -} - -//optional elements -dependencies { - implementation 'net.gotev:uploadservice:3.5.2' -} \ No newline at end of file diff --git a/src/platforms/android/uploadservice-release.aar b/src/platforms/android/uploadservice-release.aar new file mode 100644 index 0000000000000000000000000000000000000000..1ffef5a14059749332ae97a5a97c70124055efef GIT binary patch literal 92508 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
WAin8%=C9Aokx<#Ups&}9Sq+{1bpz%je_z1d?) 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 literal 0 HcmV?d00001 diff --git a/src/scripts/prepare.js b/src/scripts/prepare.js deleted file mode 100644 index 79c030c..0000000 --- a/src/scripts/prepare.js +++ /dev/null @@ -1,21 +0,0 @@ -const { exec } = require('child_process'); -const semver = require('semver'); - -exec('tns --version', (err, stdout, stderr) => { - if (err) { - // node couldn't execute the command - console.log(`tns --version err: ${err}`); - return; - } - - const regex = /^(?:\d+\.){2}\d+.*?$/m; - const matches = stdout.match(regex); - console.log("Extracted tns version: " + matches[0]); - const tnsVersion = semver.major(semver.coerce(matches[0])); - - // execute 'tns plugin build' for {N} version > 4. This command builds .aar in platforms/android folder. - if (tnsVersion >= 4) { - console.log(`executing 'tns plugin build'`); - exec('tns plugin build'); - } -}); \ No newline at end of file From 4f1beff9640c5a040ccc1aac7d6905bab92a7c91 Mon Sep 17 00:00:00 2001 From: dtodorov Date: Fri, 20 Sep 2019 11:35:47 +0300 Subject: [PATCH 23/30] Chore: bump version to 4.2.0 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 435975a..a10e6f9 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-background-http", - "version": "4.1.0", + "version": "4.2.0", "main": "background-http", "typings": "index.d.ts", "nativescript": { From d770a2b34002d451f96a1beeeaf9f9f5b1203d8e Mon Sep 17 00:00:00 2001 From: Romulo Pires Date: Fri, 25 Oct 2019 07:58:09 -0300 Subject: [PATCH 24/30] fix(android-upload): Fix some params vars to be a string (#252) * fix(android-upload): Fix some params vars to be a string Convert param to string before send to Java method Referenced in #249 * fix(android-upload): Remove missing lock files Removed missing lock files that i forget in before commit Referenced in issue 249 --- demo-angular/app/home/home.component.ts | 2 ++ src/background-http.android.ts | 19 ++++++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/demo-angular/app/home/home.component.ts b/demo-angular/app/home/home.component.ts index 941113f..940ab46 100644 --- a/demo-angular/app/home/home.component.ts +++ b/demo-angular/app/home/home.component.ts @@ -68,6 +68,8 @@ export class HomeComponent { if (isMulti) { const params = [ { name: "test", value: "value" }, + { name: "testInt", value: 10 }, + { name: "bool", value: true }, { name: "fileToUpload", filename: this.file, mimeType: 'image/jpeg' } ]; task = this.session.multipartUpload(params, request); diff --git a/src/background-http.android.ts b/src/background-http.android.ts index 3aae97c..7ead237 100644 --- a/src/background-http.android.ts +++ b/src/background-http.android.ts @@ -278,17 +278,18 @@ function getMultipartRequest(taskId: string, options: common.Request, params: an 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); + + if (typeof curParam.filename === 'undefined') { + request.addParameter(curParam.name.toString(), curParam.value.toString()); + continue; } - else { - request.addParameter(params[i].name, params[i].value); + + 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); } const utf8 = options.utf8; From 3b36b9674cbaf68e38605e994d784f014b80619b Mon Sep 17 00:00:00 2001 From: Zdravko Branzov Date: Fri, 1 Nov 2019 11:55:07 +0200 Subject: [PATCH 25/30] chore: bump version to 4.2.1 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index a10e6f9..d214858 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-background-http", - "version": "4.2.0", + "version": "4.2.1", "main": "background-http", "typings": "index.d.ts", "nativescript": { From a931cb97e9b99cd40dabb531b9d6ffe19fb52532 Mon Sep 17 00:00:00 2001 From: Zdravko Branzov Date: Fri, 1 Nov 2019 11:56:32 +0200 Subject: [PATCH 26/30] fix: vue demo traffic permission issue on Android --- demo-vue/app/App_Resources/Android/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/demo-vue/app/App_Resources/Android/AndroidManifest.xml b/demo-vue/app/App_Resources/Android/AndroidManifest.xml index 9961000..b70b530 100644 --- a/demo-vue/app/App_Resources/Android/AndroidManifest.xml +++ b/demo-vue/app/App_Resources/Android/AndroidManifest.xml @@ -19,6 +19,7 @@ Date: Fri, 1 Nov 2019 11:58:21 +0200 Subject: [PATCH 27/30] chore: user markingMode none --- demo-angular/app/package.json | 7 +++++-- demo-vue/app/components/Home.vue | 4 +++- demo-vue/app/package.json | 5 ++++- demo/app/home/home-view-model.ts | 2 ++ demo/app/package.json | 7 +++++-- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/demo-angular/app/package.json b/demo-angular/app/package.json index ee8642e..8d72b14 100644 --- a/demo-angular/app/package.json +++ b/demo-angular/app/package.json @@ -1,7 +1,10 @@ { "android": { "v8Flags": "--expose_gc", - "requireModules": ["nativescript-background-http"] + "requireModules": [ + "nativescript-background-http" + ], + "markingMode": "none" }, "main": "main.js" -} \ No newline at end of file +} diff --git a/demo-vue/app/components/Home.vue b/demo-vue/app/components/Home.vue index d740a2c..cdd6984 100644 --- a/demo-vue/app/components/Home.vue +++ b/demo-vue/app/components/Home.vue @@ -93,7 +93,9 @@ export default { if (isMulti) { const params = [ { name: "test", value: "value" }, - { name: "fileToUpload", filename: this.file, mimeType: "image/jpeg" } + { name: "testInt", value: 10 }, + { name: "bool", value: true }, + { name: "fileToUpload", filename: this.file, mimeType: 'image/jpeg' } ]; task = this.session.multipartUpload(params, request); } else { diff --git a/demo-vue/app/package.json b/demo-vue/app/package.json index d3ec06f..af93d02 100644 --- a/demo-vue/app/package.json +++ b/demo-vue/app/package.json @@ -2,6 +2,9 @@ "main": "app.js", "android": { "v8Flags": "--expose_gc", - "requireModules": ["nativescript-background-http"] + "requireModules": [ + "nativescript-background-http" + ], + "markingMode": "none" } } diff --git a/demo/app/home/home-view-model.ts b/demo/app/home/home-view-model.ts index 8dbef2e..07fc797 100644 --- a/demo/app/home/home-view-model.ts +++ b/demo/app/home/home-view-model.ts @@ -68,6 +68,8 @@ export class HomeViewModel extends Observable { if (isMulti) { const params = [ { name: "test", value: "value" }, + { name: "testInt", value: 10 }, + { name: "bool", value: true }, { name: "fileToUpload", filename: this.file, mimeType: 'image/jpeg' } ]; task = this.session.multipartUpload(params, request); diff --git a/demo/app/package.json b/demo/app/package.json index a7511e3..1e162ea 100644 --- a/demo/app/package.json +++ b/demo/app/package.json @@ -1,7 +1,10 @@ { "android": { "v8Flags": "--expose_gc", - "requireModules": ["nativescript-background-http"] + "requireModules": [ + "nativescript-background-http" + ], + "markingMode": "none" }, "main": "app.js" -} \ No newline at end of file +} From bfe1685ce4ca0694f353c1811b05ec6e8f58c309 Mon Sep 17 00:00:00 2001 From: Elena Hristova Date: Wed, 6 Nov 2019 15:46:09 +0200 Subject: [PATCH 28/30] chore: update to 6.2 --- demo-angular/package.json | 10 +++++----- demo-vue/package.json | 8 ++++---- demo/package.json | 8 ++++---- src/package.json | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/demo-angular/package.json b/demo-angular/package.json index 2fa43ec..861d88d 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.demoangular", "tns-android": { - "version": "6.1.0" + "version": "6.2.0" }, "tns-ios": { - "version": "6.1.0" + "version": "6.2.0" } }, "scripts": { @@ -25,7 +25,7 @@ "@angular/platform-browser": "~8.2.0", "@angular/platform-browser-dynamic": "~8.2.0", "@angular/router": "~8.2.0", - "nativescript-angular": "~8.2.0", + "nativescript-angular": "~8.20.0", "nativescript-background-http": "../src", "nativescript-theme-core": "~1.0.4", "reflect-metadata": "~0.1.10", @@ -34,9 +34,9 @@ "zone.js": "^0.9.1" }, "devDependencies": { - "nativescript-dev-webpack": "^1.0.0", + "nativescript-dev-webpack": "^1.3.0", "tslint": "~5.11.0", "tns-platform-declarations": "^6.0.0", "typescript": "~3.5.3" } -} \ No newline at end of file +} diff --git a/demo-vue/package.json b/demo-vue/package.json index 662c0a2..e014490 100644 --- a/demo-vue/package.json +++ b/demo-vue/package.json @@ -2,10 +2,10 @@ "nativescript": { "id": "org.nativescript.demovue", "tns-android": { - "version": "6.1.0" + "version": "6.2.0" }, "tns-ios": { - "version": "6.1.0" + "version": "6.2.0" } }, "description": "NativeScript Application", @@ -24,11 +24,11 @@ "@babel/core": "~7.1.0", "@babel/preset-env": "~7.1.0", "babel-loader": "~8.0.0", - "nativescript-dev-webpack": "^1.0.0", + "nativescript-dev-webpack": "^1.3.0", "nativescript-vue-template-compiler": "~2.4.0", "node-sass": "~4.12.0", "ts-loader": "^5.3.1", "vue-loader": "~15.4.0", - "typescript": "~3.4.5" + "typescript": "~3.5.3" } } diff --git a/demo/package.json b/demo/package.json index 267c2be..bffcbbf 100644 --- a/demo/package.json +++ b/demo/package.json @@ -6,10 +6,10 @@ "nativescript": { "id": "org.nativescript.demo", "tns-android": { - "version": "6.1.0" + "version": "6.2.0" }, "tns-ios": { - "version": "6.1.0" + "version": "6.2.0" } }, "scripts": { @@ -22,9 +22,9 @@ "tns-core-modules": "^6.0.0" }, "devDependencies": { - "nativescript-dev-webpack": "^1.0.0", + "nativescript-dev-webpack": "^1.3.0", "tslint": "~5.11.0", "tns-platform-declarations": "^6.0.0", - "typescript": "~3.4.5" + "typescript": "~3.5.3" } } diff --git a/src/package.json b/src/package.json index d214858..6867f41 100644 --- a/src/package.json +++ b/src/package.json @@ -51,7 +51,7 @@ "devDependencies": { "tns-core-modules": "^6.0.0", "tns-platform-declarations": "^6.0.0", - "typescript": "~3.1.6", + "typescript": "~3.5.3", "rimraf": "~2.6.2", "semver": "~5.6.0", "tslint": "~5.11.0" From a1ee3e14d789b4345377aca32f919598bbefeea5 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Tue, 8 Sep 2020 20:14:41 -0700 Subject: [PATCH 29/30] chore: readme --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 37830e5..01c16c4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,10 @@ +## NativeScript 7 + +* Use `@nativescript/background-http`: `~5.0.0` +* [Source managed here](https://github.com/NativeScript/plugins) + +## If using 6 and below, see the following: + # Background Upload NativeScript plugin [![Build Status](https://travis-ci.org/NativeScript/nativescript-background-http.svg?branch=master)](https://travis-ci.org/NativeScript/nativescript-background-http) A cross platform plugin for [the NativeScript framework](http://www.nativescript.org), that provides background upload for iOS and Android. From b79f5140195d22af21c6818e166d113a13cc88e2 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 12 Apr 2021 22:11:58 -0700 Subject: [PATCH 30/30] chore: disable travis --- .travis.yml | 112 ---------------------------------------------------- 1 file changed, 112 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7cf1968..0000000 --- a/.travis.yml +++ /dev/null @@ -1,112 +0,0 @@ -branches: - only: - - master -matrix: - include: - - stage: "Lint" - language: node_js - os: linux - node_js: "10" - script: - - cd src && npm run ci.tslint - - cd ../demo && npm run ci.tslint - - cd ../demo-angular && npm run ci.tslint - - stage: "WebPack" - os: osx - env: - - WebPack="iOS" - - Type="TypeScript" - osx_image: xcode10.2 - language: node_js - node_js: "10" - jdk: oraclejdk8 - before_script: pod repo update - script: - - cd demo && npm run build.plugin && npm i - - tns build ios --bundle --env.uglify - - os: osx - env: - - WebPack="iOS" - - Type="Angular" - osx_image: xcode10.2 - language: node_js - node_js: "10" - jdk: oraclejdk8 - before_script: pod repo update - script: - - cd src && npm run build - - cd ../publish && sh pack.sh - - cd ../demo-angular - - tns plugin add ../publish/package/*.tgz - - tns build ios --bundle --env.uglify --env.aot - - os: osx - env: - - WebPack="iOS" - - Type="Vue" - osx_image: xcode10.2 - language: node_js - node_js: "10" - jdk: oraclejdk8 - before_script: pod repo update - script: - - cd src && npm run build - - cd ../publish && sh pack.sh - - cd ../demo-vue - - tns plugin add ../publish/package/*.tgz - - tns build ios --bundle --env.uglify - - language: android - os: linux - dist: trusty - env: - - WebPack="Android" - - Type="TypeScript" - jdk: oraclejdk8 - before_install: nvm install 10 - script: - - cd demo && npm run build.plugin - - tns build android --bundle --env.uglify --env.snapshot - - language: android - os: linux - dist: trusty - env: - - WebPack="Android" - - Type="Angular" - jdk: oraclejdk8 - before_install: nvm install 10 - script: - - cd src && npm run build - - cd ../publish && sh pack.sh - - cd ../demo-angular - - tns plugin add ../publish/package/*.tgz - - tns build android --bundle --env.uglify --env.aot - - language: android - os: linux - dist: trusty - env: - - WebPack="Android" - - Type="Vue" - jdk: oraclejdk8 - before_install: nvm install 10 - script: - - cd src && npm run build - - cd ../publish && sh pack.sh - - cd ../demo-vue - - tns plugin add ../publish/package/*.tgz - - tns build android --bundle --env.uglify --env.aot - -android: - components: - - tools - - platform-tools - - build-tools-28.0.3 - - android-28 - - extra-android-m2repository - -before_install: - - sudo pip install --upgrade pip - - sudo pip install six - -install: - - echo no | npm install -g nativescript - - tns usage-reporting disable - - tns error-reporting disable