2022-10-31 00:37:42 +00:00
|
|
|
import { SQLiteDatabase } from 'react-native-sqlite-storage'
|
|
|
|
import { getItems } from '..'
|
|
|
|
import { errorCallback } from '../Errors'
|
2022-10-24 17:27:31 +00:00
|
|
|
|
|
|
|
export interface Relay {
|
2022-10-31 00:37:42 +00:00
|
|
|
url: string
|
|
|
|
name?: string
|
2022-10-24 17:27:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const databaseToEntity: (object: any) => Relay = (object) => {
|
2022-10-31 00:37:42 +00:00
|
|
|
return object as Relay
|
|
|
|
}
|
2022-10-24 17:27:31 +00:00
|
|
|
|
|
|
|
export const storeRelay: (relay: Relay, db: SQLiteDatabase) => void = async (relay, db) => {
|
|
|
|
if (relay.url) {
|
2022-10-31 00:37:42 +00:00
|
|
|
const relays: Relay[] = await searchRelays(relay.url, db)
|
2022-10-24 17:27:31 +00:00
|
|
|
if (relays.length === 0) {
|
|
|
|
const eventQuery = `
|
|
|
|
INSERT INTO nostros_relays
|
|
|
|
(url)
|
|
|
|
VALUES
|
|
|
|
(
|
|
|
|
'${relay.url.split("'").join("''")}'
|
|
|
|
);
|
2022-10-31 00:37:42 +00:00
|
|
|
`
|
2022-10-24 17:27:31 +00:00
|
|
|
|
|
|
|
await new Promise<void>((resolve, reject) => {
|
|
|
|
db.transaction((transaction) => {
|
|
|
|
transaction.executeSql(
|
|
|
|
eventQuery,
|
|
|
|
[],
|
|
|
|
() => resolve(),
|
2022-10-31 00:37:42 +00:00
|
|
|
errorCallback(eventQuery, reject)
|
|
|
|
)
|
|
|
|
})
|
|
|
|
})
|
2022-10-24 17:27:31 +00:00
|
|
|
}
|
|
|
|
}
|
2022-10-31 00:37:42 +00:00
|
|
|
}
|
2022-10-24 17:27:31 +00:00
|
|
|
|
|
|
|
export const searchRelays: (relayUrl: string, db: SQLiteDatabase) => Promise<Relay[]> = async (
|
|
|
|
relayUrl,
|
2022-10-31 00:37:42 +00:00
|
|
|
db
|
2022-10-24 17:27:31 +00:00
|
|
|
) => {
|
|
|
|
const searchQuery = `
|
|
|
|
SELECT * FROM nostros_relays WHERE url = '${relayUrl}';
|
2022-10-31 00:37:42 +00:00
|
|
|
`
|
2022-10-24 17:27:31 +00:00
|
|
|
|
|
|
|
return await new Promise<Relay[]>((resolve, reject) => {
|
|
|
|
db.transaction((transaction) => {
|
|
|
|
transaction.executeSql(
|
|
|
|
searchQuery,
|
|
|
|
[],
|
|
|
|
(_transaction, resultSet) => {
|
2022-10-31 00:37:42 +00:00
|
|
|
const items: object[] = getItems(resultSet)
|
|
|
|
const notes: Relay[] = items.map((object) => databaseToEntity(object))
|
|
|
|
resolve(notes)
|
2022-10-24 17:27:31 +00:00
|
|
|
},
|
2022-10-31 00:37:42 +00:00
|
|
|
errorCallback(searchQuery, reject)
|
|
|
|
)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
2022-10-24 17:27:31 +00:00
|
|
|
|
|
|
|
export const getRelays: (db: SQLiteDatabase) => Promise<Relay[]> = async (db) => {
|
2022-10-31 00:37:42 +00:00
|
|
|
const notesQuery = 'SELECT * FROM nostros_relays;'
|
2022-10-24 17:27:31 +00:00
|
|
|
|
|
|
|
return await new Promise<Relay[]>((resolve, reject) => {
|
|
|
|
db.readTransaction((transaction) => {
|
|
|
|
transaction.executeSql(
|
|
|
|
notesQuery,
|
|
|
|
[],
|
|
|
|
(_transaction, resultSet) => {
|
2022-10-31 00:37:42 +00:00
|
|
|
const items: object[] = getItems(resultSet)
|
|
|
|
const relays: Relay[] = items.map((object) => databaseToEntity(object))
|
|
|
|
resolve(relays)
|
2022-10-24 17:27:31 +00:00
|
|
|
},
|
2022-10-31 00:37:42 +00:00
|
|
|
errorCallback(notesQuery, reject)
|
|
|
|
)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|