Skip to content

Fix conflicts with plugins using nSQL #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 15, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,19 @@ Before requesting user's current location some options can be customized in orde
| acquireLocation(options: [AcquireOptions](#geolocation-acquire-options) | `Promise<Geolocation>` | Allows to obtain user's current location |
| locationStream(options: [StreamOptions](#geolocation-stream-options) | `Observable<Geolocation>` | Allows to actively obtain user's location updates |

## Known issues

### nanoSQL2

If your application depends on [nanoSQL 2](https://www.npmjs.com/package/@nano-sql/adapter-sqlite-nativescript) for data persistence, you should check which database is in use (and change it, if applicable) before running a query against your database. You can do it as follows:

```ts
if (nSQL().selectedDB !== dbName) {
nSQL().useDatabase(dbName);
}
nSQL(tableName).query(...);
```

## Plugin authors

<a href="https://github.com/agonper" title="Alberto González Pérez">
Expand Down
22 changes: 12 additions & 10 deletions src/internal/activity-recognition/recognizers/state/store.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { nSQL } from "@nano-sql/core/lib";

import { HumanActivity, Resolution } from "../../index";
import { pluginDb } from "../../../persistence/plugin-db";
import { recognizersStateModel } from "./model";
Expand All @@ -19,8 +17,8 @@ class RecognizersStateStoreDb implements RecognizerStateStore {
private tableName = recognizersStateModel.name;

async isActive(recognizer: Resolution): Promise<boolean> {
await pluginDb.createDB();
const rows = await nSQL(this.tableName)
const instance = await this.db();
const rows = await instance
.query("select")
.where(["id", "=", recognizer])
.exec();
Expand All @@ -39,8 +37,8 @@ class RecognizersStateStoreDb implements RecognizerStateStore {
}

async getLastActivity(recognizer: Resolution): Promise<HumanActivity> {
await pluginDb.createDB();
const rows = await nSQL(this.tableName)
const instance = await this.db();
const rows = await instance
.query("select")
.where(["id", "=", recognizer])
.exec();
Expand All @@ -55,23 +53,27 @@ class RecognizersStateStoreDb implements RecognizerStateStore {
recognizer: Resolution,
activity: HumanActivity
): Promise<void> {
await pluginDb.createDB();
const isActive = await this.isActive(recognizer);
if (!isActive) {
return null;
}
await nSQL(`${this.tableName}.lastActivity`)
const instance = await this.db(`${this.tableName}.lastActivity`);
await instance
.query("upsert", activity)
.where(["id", "=", recognizer])
.exec();
}

private async updateStatus(recognizer: Resolution, active: boolean) {
await pluginDb.createDB();
await nSQL(this.tableName)
const instance = await this.db();
await instance
.query("upsert", { id: recognizer, active, lastActivity: null })
.exec();
}

private db(tableName = this.tableName) {
return pluginDb.instance(tableName);
}
}

export const recognizersStateStoreDb = new RecognizersStateStoreDb();
8 changes: 8 additions & 0 deletions src/internal/persistence/plugin-db.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ class PluginDb {
await this.createDBProcedure;
this.dbInitialized = true;
}

async instance(tableName: string) {
await this.createDB();
if (nSQL().selectedDB !== dbName) {
nSQL().useDatabase(dbName);
}
return nSQL(tableName);
}
}

export const pluginDb = new PluginDb();
2 changes: 1 addition & 1 deletion src/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "nativescript-context-apis",
"version": "1.0.0",
"version": "1.0.1",
"description": "Painless access to contextual information for your NativeScript apps",
"main": "context-apis",
"typings": "index.d.ts",
Expand Down
Binary file modified src/platforms/android/nativescript_context_apis.aar
Binary file not shown.