Skip to content

Commit 81ea10e

Browse files
committed
add more pasteboard dao methods
1 parent 3615a41 commit 81ea10e

File tree

2 files changed

+161
-6
lines changed

2 files changed

+161
-6
lines changed

entry/src/main/ets/InputMethodExtensionAbility/model/pasteboard/PasteboardController.ets

Lines changed: 83 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ import { StrUtil } from '../../../utils/StrUtil'
99

1010
const systemPasteboard: pasteboard.SystemPasteboard = pasteboard.getSystemPasteboard()
1111

12-
export interface OnPasteboardUpdateListener {
13-
onUpdate(entry: PasteboardEntry): void
14-
}
12+
export type OnPasteboardUpdateListener = (entry: PasteboardEntry) => void
1513

1614
export class PasteboardController {
1715
private psbDao: PasteboardDao | null = null
@@ -29,12 +27,22 @@ export class PasteboardController {
2927
this.onUpdateListeners.remove(listener)
3028
}
3129

30+
private itemCount: number = 0
31+
32+
getItemCount(): number {
33+
return this.itemCount
34+
}
35+
36+
private async updateItemCount() {
37+
this.itemCount = await this.psbDao!.itemCount()
38+
}
39+
3240
public lastEntry: PasteboardEntry | null = null
3341

3442
private updateLastEntry(entry: PasteboardEntry): void {
3543
this.lastEntry = entry
3644
this.onUpdateListeners.forEach((listener) => {
37-
listener?.onUpdate(entry)
45+
listener?.(entry)
3846
})
3947
}
4048

@@ -43,20 +51,86 @@ export class PasteboardController {
4351
PasteboardDatabase.init(context)
4452
this.psbDao = new PasteboardDao()
4553
systemPasteboard.on('update', this.onSystemPasteboardUpdate)
54+
const launch = async () => {
55+
await this.updateItemCount()
56+
}
57+
launch().catch()
4658
}
4759

4860
public onDestroy(): void {
4961
console.debug('onDestroy')
5062
systemPasteboard.off('update', this.onSystemPasteboardUpdate)
5163
}
5264

65+
async get(id: number): Promise<PasteboardEntry> {
66+
return await this.psbDao!.getById(id)
67+
}
68+
69+
async haveUnpinned(): Promise<boolean> {
70+
return await this.psbDao!.haveUnpinned()
71+
}
72+
73+
async allEntries(): Promise<Array<PasteboardEntry>> {
74+
return await this.psbDao!.allEntries()
75+
}
76+
77+
async pin(id: number) {
78+
await this.psbDao!.updatePinStatus(id, true)
79+
}
80+
81+
async unpin(id: number) {
82+
await this.psbDao!.updatePinStatus(id, false)
83+
}
84+
85+
async updateText(id: number, text: string) {
86+
if (this.lastEntry) {
87+
if (id === this.lastEntry.id) {
88+
const copy = this.lastEntry
89+
copy.text = text
90+
this.updateLastEntry(copy)
91+
}
92+
}
93+
await this.psbDao!.updateText(id, text)
94+
}
95+
96+
async delete(id: number) {
97+
await this.psbDao!.markAsDeleted(id)
98+
await this.updateItemCount()
99+
}
100+
101+
async deleteAll(skipPinned: boolean = true): Promise<Array<number>> {
102+
let ids: number[]
103+
if (skipPinned) {
104+
ids = await this.psbDao!.findUnpinnedIds()
105+
} else {
106+
ids = await this.psbDao!.findAllIds()
107+
}
108+
this.psbDao?.markAsDeleted(...ids)
109+
await this.updateItemCount()
110+
return ids
111+
}
112+
113+
async undoDelete(...ids: number[]) {
114+
await this.psbDao!.undoDelete(...ids)
115+
await this.updateItemCount()
116+
}
117+
118+
async realDelete() {
119+
await this.psbDao!.realDelete()
120+
}
121+
122+
async nukeTables() {
123+
await this.psbDao!.clearAllTables()
124+
await this.updateItemCount()
125+
}
126+
53127
@sql.Transactional()
54128
private async insertEntry(entry: PasteboardEntry): Promise<PasteboardEntry> {
55129
const rowId = await this.psbDao!.insert(entry)
56130
if (!rowId) {
57131
return entry
58132
}
59-
const inserted = await this.psbDao!.get(rowId)
133+
const inserted = await this.psbDao!.getByRowId(rowId)
60134
return inserted ? inserted : entry
61135
}
62136

@@ -73,11 +147,15 @@ export class PasteboardController {
73147
try {
74148
const existed = await pasteboardController.psbDao!.find(entry.text, entry.sensitive)
75149
if (existed) {
150+
const copy = existed
151+
copy.timestamp = entry.timestamp
152+
pasteboardController.updateLastEntry(copy)
76153
await pasteboardController.psbDao!.updateTime(existed.id, entry.timestamp)
77154
} else {
78155
const insertedEntry = await pasteboardController.insertEntry(entry)
79156
console.debug('get entry text: ' + insertedEntry.text)
80157
pasteboardController.updateLastEntry(insertedEntry)
158+
pasteboardController.updateItemCount()
81159
}
82160
} catch (e) {
83161
const error = e as Error

entry/src/main/ets/InputMethodExtensionAbility/model/pasteboard/PasteboardDao.ets

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,54 @@ export class PasteboardDao {
1212
return sql.PromiseNull()
1313
}
1414

15+
@sql.SqlUpdate(`UPDATE ${PasteboardEntry.TABLE_NAME} SET pinned=#{pinned} WHERE id=#{id}`)
16+
updatePinStatus(@sql.Param('id') id: number, @sql.Param('pinned') pinned: boolean): Promise<void> {
17+
return sql.PromiseNull()
18+
}
19+
20+
@sql.SqlUpdate(`UPDATE ${PasteboardEntry.TABLE_NAME} SET text=#{text} WHERE id=#{id}`)
21+
updateText(@sql.Param('id') id: number, @sql.Param('text') text: string): Promise<void> {
22+
return sql.PromiseNull()
23+
}
24+
1525
@sql.SqlUpdate(`UPDATE ${PasteboardEntry.TABLE_NAME} SET timestamp=#{timestamp} WHERE id=#{id}`)
1626
updateTime(@sql.Param('id') id: number, @sql.Param('timestamp') timestamp: number): Promise<void> {
1727
return sql.PromiseNull()
1828
}
1929

30+
@sql.SqlQuery(`SELECT COUNT(*) FROM ${PasteboardEntry.TABLE_NAME} WHERE deleted=0`)
31+
@sql.ReturnType(Number)
32+
itemCount(): Promise<number> {
33+
return sql.PromiseNull()
34+
}
35+
36+
@sql.SqlQuery(`SELECT * FROM ${PasteboardEntry.TABLE_NAME} WHERE id=#{id} AND deleted=0 LIMIT 1`)
37+
@sql.ReturnType(PasteboardEntry)
38+
getById(@sql.Param('id') id: number): Promise<PasteboardEntry> {
39+
return sql.PromiseNull()
40+
}
41+
2042
@sql.SqlQuery(`SELECT * FROM ${PasteboardEntry.TABLE_NAME} WHERE rowId=#{rowId} AND deleted=0 LIMIT 1`)
2143
@sql.ReturnType(PasteboardEntry)
22-
get(@sql.Param('rowId') rowId: number): Promise<PasteboardEntry> {
44+
getByRowId(@sql.Param('rowId') rowId: number): Promise<PasteboardEntry> {
45+
return sql.PromiseNull()
46+
}
47+
48+
@sql.SqlQuery(`SELECT EXISTS(SELECT 1 FROM ${PasteboardEntry.TABLE_NAME} WHERE pinned=0 AND deleted=0)`)
49+
@sql.ReturnType(Boolean)
50+
haveUnpinned(): Promise<boolean> {
51+
return sql.PromiseNull()
52+
}
53+
54+
@sql.SqlQuery(`SELECT * FROM ${PasteboardEntry.TABLE_NAME} WHERE pinned=0 AND deleted=0`)
55+
@sql.ReturnType([PasteboardEntry])
56+
getAllUnpinned(): Promise<Array<PasteboardEntry>> {
57+
return sql.PromiseNull()
58+
}
59+
60+
@sql.SqlQuery(`SELECT * FROM ${PasteboardEntry.TABLE_NAME} WHERE deleted=0 ORDER BY pinned DESC, timestamp DESC`)
61+
@sql.ReturnType([PasteboardEntry])
62+
allEntries(): Promise<Array<PasteboardEntry>> {
2363
return sql.PromiseNull()
2464
}
2565

@@ -29,4 +69,41 @@ export class PasteboardDao {
2969
@sql.Param('sensitive') sensitive: boolean = false): Promise<PasteboardEntry> {
3070
return sql.PromiseNull()
3171
}
72+
73+
@sql.SqlQuery(`SELECT id FROM ${PasteboardEntry.TABLE_NAME} WHERE deleted=0`)
74+
@sql.ReturnType([Number])
75+
findAllIds(): Promise<Array<number>> {
76+
return sql.PromiseNull()
77+
}
78+
79+
@sql.SqlQuery(`SELECT id FROM ${PasteboardEntry.TABLE_NAME} WHERE pinned=0 AND deleted=0`)
80+
@sql.ReturnType([Number])
81+
findUnpinnedIds(): Promise<Array<number>> {
82+
return sql.PromiseNull()
83+
}
84+
85+
@sql.SqlUpdate(`UPDATE ${PasteboardEntry.TABLE_NAME} SET deleted=1 WHERE id in (#{ids})`)
86+
markAsDeleted(@sql.Param('ids') ...ids: number[]): Promise<void> {
87+
return sql.PromiseNull()
88+
}
89+
90+
@sql.SqlUpdate(`UPDATE ${PasteboardEntry.TABLE_NAME} SET deleted=1 WHERE timestamp<#{timestamp} AND pinned=0 AND deleted=0`)
91+
markUnpinnedAsDeletedEarlierThan(@sql.Param('timestamp') timestamp: number): Promise<void> {
92+
return sql.PromiseNull()
93+
}
94+
95+
@sql.SqlUpdate(`UPDATE ${PasteboardEntry.TABLE_NAME} SET deleted=0 WHERE id in (#{ids}) AND deleted=1`)
96+
undoDelete(@sql.Param(`ids`) ...ids: number[]): Promise<void> {
97+
return sql.PromiseNull()
98+
}
99+
100+
@sql.SqlDelete(`DELETE FROM ${PasteboardEntry.TABLE_NAME} WHERE deleted=1`)
101+
realDelete(): Promise<void> {
102+
return sql.PromiseNull()
103+
}
104+
105+
@sql.SqlDelete(`DELETE FROM ${PasteboardEntry.TABLE_NAME}`)
106+
clearAllTables(): Promise<void> {
107+
return sql.PromiseNull()
108+
}
32109
}

0 commit comments

Comments
 (0)