1
1
import { HumanActivity , Resolution , StartOptions } from "../../index" ;
2
- import { pluginDb } from "../../../persistence/plugin-db" ;
3
- import { recognizersStateModel } from "./model" ;
2
+ import { Couchbase } from "nativescript-couchbase-plugin" ;
4
3
5
4
export interface RecognizerStateStore {
6
5
isActive ( recognizer : Resolution ) : Promise < boolean > ;
@@ -17,8 +16,15 @@ export interface RecognizerStateStore {
17
16
) : Promise < void > ;
18
17
}
19
18
19
+ const DATABASE_NAME = "context-apis" ;
20
+ const DOC_TYPE = "recognizer-state" ;
21
+
20
22
class RecognizersStateStoreDb implements RecognizerStateStore {
21
- private tableName = recognizersStateModel . name ;
23
+ private database : Couchbase ;
24
+
25
+ constructor ( ) {
26
+ this . database = new Couchbase ( DATABASE_NAME ) ;
27
+ }
22
28
23
29
async isActive ( recognizer : Resolution ) : Promise < boolean > {
24
30
const recognizerData = await this . getRecognizerData ( recognizer ) ;
@@ -38,7 +44,7 @@ class RecognizersStateStoreDb implements RecognizerStateStore {
38
44
if ( ! recognizerData ) {
39
45
return null ;
40
46
}
41
- return JSON . parse ( recognizerData . startOptions ) ;
47
+ return recognizerData . startOptions ;
42
48
}
43
49
44
50
async markAsActive (
@@ -53,15 +59,12 @@ class RecognizersStateStoreDb implements RecognizerStateStore {
53
59
}
54
60
55
61
async getLastActivity ( recognizer : Resolution ) : Promise < HumanActivity > {
56
- const instance = await this . db ( ) ;
57
- const rows = await instance
58
- . query ( "select" )
59
- . where ( [ "id" , "=" , recognizer ] )
60
- . exec ( ) ;
61
- if ( rows . length === 0 ) {
62
+ const recognizerData = this . database . getDocument ( recognizer ) ;
63
+
64
+ if ( ! recognizerData ) {
62
65
return null ;
63
66
}
64
- const lastActivity = rows [ 0 ] . lastActivity ;
67
+ const lastActivity = recognizerData . lastActivity ;
65
68
return lastActivity ? lastActivity : null ;
66
69
}
67
70
@@ -73,45 +76,40 @@ class RecognizersStateStoreDb implements RecognizerStateStore {
73
76
if ( ! isActive ) {
74
77
return null ;
75
78
}
76
- const instance = await this . db ( `${ this . tableName } .lastActivity` ) ;
77
- await instance
78
- . query ( "upsert" , activity )
79
- . where ( [ "id" , "=" , recognizer ] )
80
- . exec ( ) ;
79
+
80
+ this . database . updateDocument ( recognizer , { lastActivity : activity } ) ;
81
81
}
82
82
83
83
private async updateStatus (
84
84
recognizer : Resolution ,
85
85
active : boolean ,
86
86
startOptions : StartOptions = { }
87
87
) {
88
- const instance = await this . db ( ) ;
89
- await instance
90
- . query ( "upsert" , {
91
- id : recognizer ,
92
- active,
93
- startOptions : JSON . stringify ( startOptions ) ,
94
- lastActivity : null ,
95
- } )
96
- . exec ( ) ;
88
+ const newData = {
89
+ active,
90
+ startOptions,
91
+ lastActivity : null ,
92
+ } ;
93
+
94
+ const prevData = await this . getRecognizerData ( recognizer ) ;
95
+ if ( ! prevData ) {
96
+ this . database . createDocument (
97
+ { docType : DOC_TYPE , ...newData } ,
98
+ recognizer
99
+ ) ;
100
+ return ;
101
+ }
102
+ this . database . updateDocument ( recognizer , newData ) ;
97
103
}
98
104
99
105
private async getRecognizerData (
100
106
recognizer : Resolution
101
107
) : Promise < { [ key : string ] : any } > {
102
- const instance = await this . db ( ) ;
103
- const rows = await instance
104
- . query ( "select" )
105
- . where ( [ "id" , "=" , recognizer ] )
106
- . exec ( ) ;
107
- if ( rows . length === 0 ) {
108
+ const recognizerData = this . database . getDocument ( recognizer ) ;
109
+ if ( ! recognizerData ) {
108
110
return null ;
109
111
}
110
- return rows [ 0 ] ;
111
- }
112
-
113
- private db ( tableName = this . tableName ) {
114
- return pluginDb . instance ( tableName ) ;
112
+ return recognizerData ;
115
113
}
116
114
}
117
115
0 commit comments