Skip to content
This repository was archived by the owner on Oct 25, 2023. It is now read-only.

Commit 93c359e

Browse files
authored
switch direct smuggler access to StorageApi (#393)
1 parent 8c53879 commit 93c359e

38 files changed

+530
-253
lines changed

archaeologist/src/background.ts

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
UserExternalPipelineId,
3232
NodeCreatedVia,
3333
UserExternalPipelineIngestionProgress,
34+
StorageApi,
3435
} from 'smuggler-api'
3536

3637
import { isReadyToBeAutoSaved } from './background/pageAutoSaving'
@@ -67,13 +68,14 @@ async function requestPageConnections(bookmark?: TNode) {
6768
}
6869
try {
6970
// Fetch all edges for a given node
70-
const { from_edges: fromEdges, to_edges: toEdges } =
71-
await smuggler.edge.get(bookmark.nid)
71+
const { from_edges: fromEdges, to_edges: toEdges } = await storage.edge.get(
72+
bookmark.nid
73+
)
7274
// Gather node IDs of neighbour nodes to reqeust them
7375
const nids = fromEdges
7476
.map((edge) => edge.from_nid)
7577
.concat(toEdges.map((edge) => edge.to_nid))
76-
const { nodes } = await smuggler.node.batch.get({ nids })
78+
const { nodes } = await storage.node.batch.get({ nids })
7779
// Sort neighbour nodes out
7880
fromNodes = nodes.filter(
7981
(node) => fromEdges.findIndex((edge) => edge.from_nid === node.nid) !== -1
@@ -96,7 +98,7 @@ async function requestPageSavedStatus(url: string | undefined) {
9698
}
9799
let nodes
98100
try {
99-
nodes = await smuggler.node.lookup({ url })
101+
nodes = await storage.node.lookup({ url })
100102
} catch (err) {
101103
log.debug('Lookup by origin ID failed, consider page as non saved', err)
102104
return { unmemorable: false }
@@ -154,7 +156,7 @@ async function registerAttentionTime(
154156
log.debug('Register Attention Time', tab, totalSecondsEstimation)
155157
let total: TotalUserActivity
156158
try {
157-
total = await smuggler.activity.external.add(
159+
total = await storage.activity.external.add(
158160
{ id: origin.id },
159161
{
160162
attention: {
@@ -182,7 +184,16 @@ async function registerAttentionTime(
182184
}
183185
const { url, content, originId, quoteNids } = response
184186
const createdVia: NodeCreatedVia = { autoAttentionTracking: null }
185-
await saveWebPage(url, originId, quoteNids, [], createdVia, content, tab.id)
187+
await saveWebPage(
188+
storage,
189+
url,
190+
originId,
191+
quoteNids,
192+
[],
193+
createdVia,
194+
content,
195+
tab.id
196+
)
186197
}
187198
}
188199

@@ -406,7 +417,7 @@ async function handleMessageFromContent(
406417
return { type: 'VOID_RESPONSE' }
407418
}
408419
case 'DELETE_PREVIOUSLY_UPLOADED_BROWSER_HISTORY': {
409-
const numDeleted = await smuggler.node.bulkDelete({
420+
const numDeleted = await storage.node.bulkDelete({
410421
createdVia: {
411422
autoIngestion: idOfBrowserHistoryOnThisDeviceAsExternalPipeline(),
412423
},
@@ -417,7 +428,11 @@ async function handleMessageFromContent(
417428
}
418429
}
419430
case 'REQUEST_SUGGESTED_CONTENT_ASSOCIATIONS': {
420-
const suggested = await suggestAssociations(message.phrase, message.limit)
431+
const suggested = await suggestAssociations(
432+
storage,
433+
message.phrase,
434+
message.limit
435+
)
421436
return {
422437
type: 'SUGGESTED_CONTENT_ASSOCIATIONS',
423438
suggested: suggested.map((node: TNode) => NodeUtil.toJson(node)),
@@ -481,14 +496,14 @@ async function uploadBrowserHistory(mode: BrowserHistoryUploadMode) {
481496
)
482497

483498
const epid = idOfBrowserHistoryOnThisDeviceAsExternalPipeline()
484-
const currentProgress = await smuggler.external.ingestion.get(epid)
499+
const currentProgress = await storage.external.ingestion.get(epid)
485500

486501
log.debug('Progress until now:', currentProgress)
487502

488503
const advanceIngestionProgress = lodash.throttle(
489504
mode.mode !== 'untracked'
490505
? async (date: Date) => {
491-
return smuggler.external.ingestion.advance(epid, {
506+
return storage.external.ingestion.advance(epid, {
492507
ingested_until: unixtime.from(date),
493508
})
494509
}
@@ -503,7 +518,7 @@ async function uploadBrowserHistory(mode: BrowserHistoryUploadMode) {
503518
// is already in the order from "pages that hasn't been visited the longest"
504519
// to "most recently visited". However `browser.history.search` doesn't seem
505520
// to provide any guarantees about it. Since logic which relies on
506-
// `smuggler.thirdparty.fs.progress` would break under different ordering,
521+
// `storage.thirdparty.fs.progress` would break under different ordering,
507522
// explicit sorting is added as a safeguard
508523
items.sort(sortWithOldestLastVisitAtEnd)
509524

@@ -601,6 +616,7 @@ async function handleMessageFromPopup(
601616
const { url, content, originId, quoteNids } = response
602617
const createdVia: NodeCreatedVia = { manualAction: null }
603618
const { node, unmemorable } = await saveWebPage(
619+
storage,
604620
url,
605621
originId,
606622
quoteNids,
@@ -659,7 +675,7 @@ async function uploadSingleHistoryItem(
659675
const resourceVisits: ResourceVisit[] = visits.map((visit) => {
660676
return { timestamp: unixtime.from(new Date(visit.visitTime ?? 0)) }
661677
})
662-
const total = await smuggler.activity.external.add(origin, {
678+
const total = await storage.activity.external.add(origin, {
663679
visit: { visits: resourceVisits, reported_by: epid },
664680
})
665681
if (!isReadyToBeAutoSaved(total, 0)) {
@@ -677,6 +693,7 @@ async function uploadSingleHistoryItem(
677693
const { url, content, originId, quoteNids } = response
678694
const createdVia: NodeCreatedVia = { autoIngestion: epid }
679695
await saveWebPage(
696+
storage,
680697
url,
681698
originId,
682699
quoteNids,
@@ -844,6 +861,7 @@ browser.contextMenus.onClicked.addListener(
844861
const { url, text, path, lang, fromNid } = response
845862
const createdVia: NodeCreatedVia = { manualAction: null }
846863
await savePageQuote(
864+
storage,
847865
{ url, path, text },
848866
createdVia,
849867
lang,
@@ -859,8 +877,10 @@ browser.contextMenus.onClicked.addListener(
859877
}
860878
)
861879

880+
const storage: StorageApi = smuggler
881+
862882
auth.register()
863-
browserBookmarks.register()
864-
omnibox.register()
865-
webNavigation.register()
883+
browserBookmarks.register(storage)
884+
omnibox.register(storage)
885+
webNavigation.register(storage)
866886
backgroundpa.register()

archaeologist/src/background/savePage.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
TNode,
1515
NodeUtil,
1616
makeEmptyNodeTextData,
17-
smuggler,
17+
StorageApi,
1818
} from 'smuggler-api'
1919
import { ToContent } from '../message/types'
2020
import { mazed } from '../util/mazed'
@@ -87,6 +87,7 @@ async function showDisappearingNotification(
8787
}
8888

8989
async function _getOriginRelationNids(
90+
storage: StorageApi,
9091
nids: Nid[],
9192
url?: string
9293
): Promise<Nid[]> {
@@ -96,6 +97,7 @@ async function _getOriginRelationNids(
9697
const query = extractSearchEngineQuery(url)
9798
if (query != null) {
9899
const { nid } = await _saveWebSearchQuery(
100+
storage,
99101
url,
100102
[],
101103
[],
@@ -109,6 +111,7 @@ async function _getOriginRelationNids(
109111
}
110112

111113
export async function saveWebPage(
114+
storage: StorageApi,
112115
url: string,
113116
originId: OriginHash,
114117
toNids: string[],
@@ -121,6 +124,7 @@ export async function saveWebPage(
121124
const searchEngineQuery = extractSearchEngineQuery(url)
122125
if (searchEngineQuery != null) {
123126
const node = await _saveWebSearchQuery(
127+
storage,
124128
url,
125129
toNids,
126130
fromNids,
@@ -156,13 +160,14 @@ export async function saveWebPage(
156160
},
157161
blob: undefined,
158162
}
159-
const originTransitions = await smuggler.activity.association.get({
163+
const originTransitions = await storage.activity.association.get({
160164
origin: { id: originId },
161165
})
162166
log.debug('Gather transitions', originTransitions)
163167
for (const association of originTransitions.to) {
164168
if ('web_transition' in association.association) {
165169
const nids = await _getOriginRelationNids(
170+
storage,
166171
association.to.nids,
167172
association.association.web_transition.to_url
168173
)
@@ -174,6 +179,7 @@ export async function saveWebPage(
174179
for (const association of originTransitions.from) {
175180
if ('web_transition' in association.association) {
176181
const nids = await _getOriginRelationNids(
182+
storage,
177183
association.from.nids,
178184
association.association.web_transition.from_url
179185
)
@@ -182,7 +188,7 @@ export async function saveWebPage(
182188
}
183189
}
184190
}
185-
const resp = await smuggler.node.create({
191+
const resp = await storage.node.create({
186192
text,
187193
index_text,
188194
extattrs,
@@ -200,7 +206,7 @@ export async function saveWebPage(
200206
await badge.setStatus(tabId, ACTION_DONE_BADGE_MARKER)
201207

202208
const { nid } = resp
203-
const node = await smuggler.node.get({ nid })
209+
const node = await storage.node.get({ nid })
204210
await updateContent([], [], node, tabId)
205211
await showDisappearingNotification(tabId, {
206212
text: 'Added',
@@ -211,6 +217,7 @@ export async function saveWebPage(
211217
}
212218

213219
export async function savePageQuote(
220+
storage: StorageApi,
214221
{ url, path, text }: NodeExtattrsWebQuote,
215222
createdVia: NodeCreatedVia,
216223
lang?: string,
@@ -222,7 +229,7 @@ export async function savePageQuote(
222229
lang: lang || undefined,
223230
web_quote: { url, path, text },
224231
}
225-
const resp = await smuggler.node.create({
232+
const resp = await storage.node.create({
226233
text: makeEmptyNodeTextData(),
227234
ntype: NodeType.WebQuote,
228235
from_nid: fromNid ? [fromNid] : undefined,
@@ -233,12 +240,13 @@ export async function savePageQuote(
233240
// Update badge counter
234241
await badge.setStatus(tabId, ACTION_DONE_BADGE_MARKER)
235242
const { nid } = resp
236-
const node = await smuggler.node.get({ nid })
243+
const node = await storage.node.get({ nid })
237244
await updateContent([], [node], undefined, tabId)
238245
}
239246
}
240247

241248
async function _saveWebSearchQuery(
249+
storage: StorageApi,
242250
url: string,
243251
toNids: string[],
244252
fromNids: string[],
@@ -261,7 +269,7 @@ async function _saveWebSearchQuery(
261269
preview_image: icon ? { data: icon } : undefined,
262270
web: { url },
263271
}
264-
const resp = await smuggler.node.create({
272+
const resp = await storage.node.create({
265273
text,
266274
index_text,
267275
extattrs,
@@ -273,6 +281,6 @@ async function _saveWebSearchQuery(
273281
from_nid: fromNids,
274282
})
275283
const { nid } = resp
276-
const node = await smuggler.node.get({ nid })
284+
const node = await storage.node.get({ nid })
277285
return node
278286
}

archaeologist/src/background/suggestAssociations.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import { smuggler } from 'smuggler-api'
2-
import type { TNode } from 'smuggler-api'
1+
import type { TNode, StorageApi } from 'smuggler-api'
32
import { Beagle } from 'elementary'
43

54
export async function suggestAssociations(
5+
storage: StorageApi,
66
phrase: string,
77
limit?: number
88
): Promise<TNode[]> {
99
const beagle = Beagle.fromString(phrase)
10-
const iter = smuggler.node.slice({})
10+
const iter = storage.node.slice({})
1111
const suggested: TNode[] = []
1212
limit = limit ?? 8
1313
// FIXME(akindyakov): This is a dirty hack to limit time of search by limiting

archaeologist/src/browser-bookmarks/bookmarks.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import browser from 'webextension-polyfill'
22
import { log } from 'armoury'
33
import { FromContent, ToContent } from '../message/types'
44
import { saveWebPage } from '../background/savePage'
5-
import { NodeCreatedVia } from 'smuggler-api'
5+
import { NodeCreatedVia, StorageApi } from 'smuggler-api'
66

77
async function onCreatedEventListener(
8+
storage: StorageApi,
89
id: string,
910
bookmark: browser.Bookmarks.BookmarkTreeNode
1011
): Promise<void> {
@@ -28,7 +29,15 @@ async function onCreatedEventListener(
2829
}
2930
const { url: stableUrl, content, originId, quoteNids } = response
3031
const createdVia: NodeCreatedVia = { manualAction: null }
31-
await saveWebPage(stableUrl, originId, quoteNids, [], createdVia, content)
32+
await saveWebPage(
33+
storage,
34+
stableUrl,
35+
originId,
36+
quoteNids,
37+
[],
38+
createdVia,
39+
content
40+
)
3241
}
3342
}
3443

@@ -38,9 +47,11 @@ async function onCreatedEventListener(
3847
* Add listeners for:
3948
* - created naitive bookmark
4049
*/
41-
export function register() {
42-
browser.bookmarks.onCreated.addListener(onCreatedEventListener)
50+
export function register(storage: StorageApi) {
51+
const callback = (id: string, bookmark: browser.Bookmarks.BookmarkTreeNode) =>
52+
onCreatedEventListener(storage, id, bookmark)
53+
browser.bookmarks.onCreated.addListener(callback)
4354
return () => {
44-
browser.bookmarks.onCreated.removeListener(onCreatedEventListener)
55+
browser.bookmarks.onCreated.removeListener(callback)
4556
}
4657
}

archaeologist/src/content/App.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import browser from 'webextension-polyfill'
55
import { PostHog } from 'posthog-js'
66
import { v4 as uuidv4 } from 'uuid'
77

8-
import { NodeUtil, NodeType } from 'smuggler-api'
8+
import { NodeUtil, NodeType, smuggler } from 'smuggler-api'
99
import type { TNode, TNodeJson } from 'smuggler-api'
1010
import { genOriginId, OriginIdentity, log, productanalytics } from 'armoury'
1111
import * as truthsayer_archaeologist_communication from 'truthsayer-archaeologist-communication'
@@ -389,7 +389,9 @@ const App = () => {
389389
) : null
390390
return (
391391
<AppErrorBoundary>
392-
<ContentContext.Provider value={{ analytics: state.analytics }}>
392+
<ContentContext.Provider
393+
value={{ analytics: state.analytics, storage: smuggler }}
394+
>
393395
<BrowserHistoryImportControlPortal
394396
progress={state.browserHistoryUploadProgress}
395397
/>

0 commit comments

Comments
 (0)