Skip to content

Commit cd4c7a5

Browse files
authored
Merge pull request #98 from CatchABus/feat-cached-response-remove
feat: Added support for removing cached responses using url
2 parents ed97cd4 + 87a9631 commit cd4c7a5

File tree

6 files changed

+54
-12
lines changed

6 files changed

+54
-12
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.nativescript.https;
2+
3+
import java.util.Iterator;
4+
import okhttp3.Cache;
5+
6+
public class CacheUtils {
7+
public static void removeCachedResponse(String url, Cache cache) {
8+
Iterator<String> it;
9+
try {
10+
it = cache.urls();
11+
} catch (Exception e) {
12+
it = null;
13+
}
14+
15+
if (it != null) {
16+
while (it.hasNext()) {
17+
String cacheUrl = it.next();
18+
19+
if (cacheUrl.equals(url)) {
20+
it.remove();
21+
break;
22+
}
23+
}
24+
}
25+
}
26+
}

packages/https/platforms/android/native-api-usage.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"java.net:CookiePolicy",
3131
"com.nativescript.https:QuotePreservingCookieJar",
3232
"com.nativescript.https:CacheInterceptor",
33+
"com.nativescript.https:CacheUtils",
3334
"com.nativescript.https:OkHttpResponse",
3435
"java.util:Collections",
3536
"java.security.cert:CertificateFactory",

src/https/request.android.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ export function clearCache() {
5151
}
5252
}
5353

54+
export function removeCachedResponse(url: string) {
55+
if (cache) {
56+
com.nativescript.https.CacheUtils.removeCachedResponse(url, cache);
57+
}
58+
}
59+
5460
// TODO: rewrite this to not have to handle
5561
// every single property
5662
let _timeout = 10;

src/https/request.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ export declare function request<T = any, U extends boolean = true>(
111111
): U extends true ? Promise<HttpsResponse<HttpsResponseLegacy<T>>> : Promise<HttpsResponse<T>>;
112112
export function setCache(options?: CacheOptions);
113113
export function clearCache();
114+
export function removeCachedResponse(url: string);
114115
export function createRequest(opts: HttpsRequestOptions): HttpsRequest;
115116
export function cancelRequest(tag: string);
116117
export function cancelAllRequests();

src/https/request.ios.ts

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { File, ImageSource, Utils } from '@nativescript/core';
2-
import { dispatchToMainThread} from '@nativescript/core/utils';
32
import { CacheOptions, HttpsFormDataParam, HttpsRequest, HttpsRequestOptions, HttpsResponse, HttpsSSLPinningOptions, HttpsResponseLegacy as IHttpsResponseLegacy } from '.';
43
import { getFilenameFromUrl, parseJSON } from './request.common';
54
export { addInterceptor, addNetworkInterceptor } from './request.common';
@@ -19,6 +18,10 @@ export function clearCache() {
1918
NSURLCache.sharedURLCache.removeAllCachedResponses();
2019
}
2120

21+
export function removeCachedResponse(url: string) {
22+
NSURLCache.sharedURLCache.removeCachedResponseForRequest(createNSRequest(url));
23+
}
24+
2225
interface Ipolicies {
2326
def: AFSecurityPolicy;
2427
secured: boolean;
@@ -97,6 +100,10 @@ function getData(data) {
97100
return content;
98101
}
99102

103+
function createNSRequest(url: string): NSMutableURLRequest {
104+
return NSMutableURLRequest.alloc().initWithURL(NSURL.URLWithString(url));
105+
}
106+
100107
class HttpsResponseLegacy implements IHttpsResponseLegacy {
101108
// private callback?: com.nativescript.https.OkhttpResponse.OkHttpResponseAsyncCallback;
102109
constructor(private data: NSDictionary<string, any> & NSData & NSArray<any>, public contentLength, private url: string) {}
@@ -168,7 +175,6 @@ class HttpsResponseLegacy implements IHttpsResponseLegacy {
168175
this.stringResponse = data;
169176
this.jsonResponse = parseJSON(data);
170177
return this.jsonResponse as T;
171-
172178
}
173179
toJSONAsync<T>() {
174180
return Promise.resolve<T>(this.toJSON());
@@ -370,10 +376,9 @@ export function createRequest(opts: HttpsRequestOptions, useLegacy: boolean = tr
370376

371377
const progress = opts.onProgress
372378
? (progress: NSProgress) => {
373-
dispatchToMainThread(()=>{
379+
Utils.dispatchToMainThread(() => {
374380
opts.onProgress(progress.completedUnitCount, progress.totalUnitCount);
375-
})
376-
381+
});
377382
}
378383
: null;
379384
let task: NSURLSessionDataTask;
@@ -463,13 +468,13 @@ export function createRequest(opts: HttpsRequestOptions, useLegacy: boolean = tr
463468
}
464469
} else if (opts.method === 'PUT'){
465470
if (opts.body instanceof File) {
466-
const request = NSMutableURLRequest.alloc().initWithURL(NSURL.URLWithString(opts.url));
471+
const request = createNSRequest(opts.url);
467472
request.HTTPMethod = opts.method;
468-
Object.keys(heads).forEach(k=>{
473+
Object.keys(heads).forEach(k => {
469474
request.setValueForHTTPHeaderField(heads[k], k);
470475
});
471476
task = manager.uploadTaskWithRequestFromFileProgressCompletionHandler(request, NSURL.fileURLWithPath(opts.body.path), progress, (response: NSURLResponse, responseObject: any, error: NSError)=>{
472-
if (error){
477+
if (error) {
473478
failure(task, error);
474479
} else {
475480
success(task, responseObject);
@@ -486,13 +491,13 @@ export function createRequest(opts: HttpsRequestOptions, useLegacy: boolean = tr
486491
} else {
487492
data = NSString.stringWithString(JSON.stringify(opts.body)).dataUsingEncoding(NSUTF8StringEncoding);
488493
}
489-
const request = NSMutableURLRequest.alloc().initWithURL(NSURL.URLWithString(opts.url));
494+
const request = createNSRequest(opts.url);
490495
request.HTTPMethod = opts.method;
491-
Object.keys(heads).forEach(k=>{
496+
Object.keys(heads).forEach(k => {
492497
request.setValueForHTTPHeaderField(heads[k], k);
493498
});
494-
task = manager.uploadTaskWithRequestFromDataProgressCompletionHandler(request, data, progress, (response: NSURLResponse, responseObject: any, error: NSError)=>{
495-
if (error){
499+
task = manager.uploadTaskWithRequestFromDataProgressCompletionHandler(request, data, progress, (response: NSURLResponse, responseObject: any, error: NSError) => {
500+
if (error) {
496501
failure(task, error);
497502
} else {
498503
success(task, responseObject);

src/https/typings/android.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ declare namespace com {
77
export class CacheInterceptor {
88
public static INTERCEPTOR: okhttp3.Interceptor;
99
}
10+
export class CacheUtils {
11+
static removeCachedResponse(url: string, cache: okhttp3.Cache): void;
12+
}
1013
export class OkHttpResponse {
1114
progressCallback: OkHttpResponse.OkHttpResponseProgressCallback;
1215
closeCallback: OkHttpResponse.OkHttpResponseCloseCallback;

0 commit comments

Comments
 (0)