Skip to content

Commit

Permalink
Make async, add overwrite
Browse files Browse the repository at this point in the history
  • Loading branch information
ospfranco committed May 12, 2024
1 parent 26f7201 commit c4a3337
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 18 deletions.
21 changes: 15 additions & 6 deletions android/src/main/java/com/op/sqlite/OPSQLiteModule.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.op.sqlite

import android.util.Log
import com.facebook.react.bridge.Promise
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactMethod
import com.facebook.react.bridge.ReactContextBaseJavaModule
Expand All @@ -9,6 +10,7 @@ import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
import java.io.OutputStream
import com.facebook.react.util.RNLog;

//@ReactModule(name = OPSQLiteModule.NAME)
internal class OPSQLiteModule(context: ReactApplicationContext?) : ReactContextBaseJavaModule(context) {
Expand Down Expand Up @@ -48,10 +50,11 @@ internal class OPSQLiteModule(context: ReactApplicationContext?) : ReactContextB
}
}

@ReactMethod(isBlockingSynchronousMethod = true)
fun moveAssetsDatabase(args: ReadableMap): Boolean {
val filename = args.getString("filename")
@ReactMethod
fun moveAssetsDatabase(args: ReadableMap, promise: Promise) {
val filename = args.getString("filename")!!
val path = args.getString("path") ?: "custom"
val overwrite = if(args.hasKey("overwrite")) { args.getBoolean("overwrite") } else false
val context = reactApplicationContext
val assetsManager = context.assets

Expand All @@ -68,7 +71,12 @@ internal class OPSQLiteModule(context: ReactApplicationContext?) : ReactContextB
val outputFile = File(databasesFolder, filename)

if (outputFile.exists()) {
return true
if(overwrite) {
outputFile.delete()
} else {
promise.resolve(true)
return
}
}

// Open the output stream for the output file
Expand All @@ -85,9 +93,10 @@ internal class OPSQLiteModule(context: ReactApplicationContext?) : ReactContextB
inputStream.close()
outputStream.close()

return true
promise.resolve(true)
} catch (exception: Exception) {
return false
RNLog.e(this.reactApplicationContext, "Exception: $exception")
promise.resolve(false)
}
}

Expand Down
23 changes: 18 additions & 5 deletions example/src/tests/dbsetup.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,27 @@ export function dbSetupTests() {
db.delete();
});

it('Moves assets database', async () => {
const copied1 = moveAssetsDatabase({filename: 'sample.sqlite'});
const copied2 = moveAssetsDatabase({
it('Moves assets database simple', async () => {
const copied = await moveAssetsDatabase({filename: 'sample.sqlite'});

expect(copied).to.equal(true);
});
it('Moves assets database with path', async () => {
const copied = await moveAssetsDatabase({
filename: 'sample2.sqlite',
path: 'sqlite',
});

expect(copied).to.equal(true);
});
it('Moves assets database with path and overwrite', async () => {
const copied = await moveAssetsDatabase({
filename: 'sample2.sqlite',
path: 'sqlite',
overwrite: true,
});
expect(copied1).to.equal(true);
expect(copied2).to.equal(true);

expect(copied).to.equal(true);
});

// it('Should fail creating in-memory with non-bool arg', async () => {
Expand Down
30 changes: 23 additions & 7 deletions ios/OPSQLite.mm
Original file line number Diff line number Diff line change
Expand Up @@ -87,30 +87,46 @@ - (NSDictionary *)getConstants {
return @true;
}

RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(moveAssetsDatabase
: (NSDictionary *)args) {
RCT_EXPORT_METHOD(moveAssetsDatabase
: (NSDictionary *)args resolve
: (RCTPromiseResolveBlock)resolve reject
: (RCTPromiseRejectBlock)reject) {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(
NSLibraryDirectory, NSUserDomainMask, true) objectAtIndex:0];

NSString *filename = args[@"filename"];
BOOL overwrite = args[@"overwrite"];

NSString *sourcePath = [[NSBundle mainBundle] pathForResource:filename
ofType:nil];

NSString *destinationPath
NSString *destinationPath =
[documentPath stringByAppendingPathComponent:filename];

NSError *error;
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:destinationPath]) {
return @true;
if (overwrite) {
[fileManager removeItemAtPath:destinationPath error:&error];
if (error) {
NSLog(@"Error: %@", error);
resolve(@false);
return;
}
} else {
resolve(@true);
return;
}
}

NSError *error;
[fileManager copyItemAtPath:sourcePath toPath:destinationPath error:&error];
if (error) {
return @false;
NSLog(@"Error: %@", error);
resolve(@false);
return;
}
return @true;
resolve(@true);
return;
}

// #if RCT_NEW_ARCH_ENABLED
Expand Down
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,7 @@ export const open = (options: {
export const moveAssetsDatabase = (args: {
filename: string;
path?: string;
overwrite?: boolean;
}): boolean => {
return NativeModules.OPSQLite.moveAssetsDatabase(args);
};
Expand Down

0 comments on commit c4a3337

Please sign in to comment.