Files
notesnook/packages/core/api/index.js

69 lines
1.9 KiB
JavaScript
Raw Normal View History

2020-02-03 12:03:07 +05:00
import Notes from "../collections/notes";
2020-04-13 12:46:29 +05:00
import Storage from "../database/storage";
2020-02-04 18:27:32 +05:00
import Notebooks from "../collections/notebooks";
2020-02-06 16:46:23 +05:00
import Trash from "../collections/trash";
2020-02-21 21:39:27 +05:00
import Tags from "../collections/tags";
import User from "../models/user";
2020-02-11 16:28:28 +05:00
import Sync from "./sync";
import Vault from "./vault";
2020-03-09 12:39:49 +05:00
import Lookup from "./lookup";
2020-03-19 11:30:05 +05:00
import Content from "../collections/content";
import Conflicts from "./sync/conflicts";
2020-04-16 03:19:50 +05:00
import EventManager from "../utils/event-manager";
2020-05-14 13:51:48 +05:00
import Session from "./session";
2020-02-03 12:03:07 +05:00
class Database {
2020-02-03 12:03:07 +05:00
constructor(context) {
2020-04-13 12:46:29 +05:00
this.context = new Storage(context);
2020-05-04 17:23:16 +05:00
this._syncInterval = 0;
2020-02-03 12:03:07 +05:00
}
async _validate() {
2020-05-14 13:51:48 +05:00
if (!(await this.session.valid())) {
throw new Error(
"Your system clock is not setup correctly. Please adjust your date and time and then retry."
);
}
await this.session.set();
}
async init() {
this.session = new Session();
this._validate();
2020-05-14 13:51:48 +05:00
this.user = new User(this);
2020-02-11 16:28:28 +05:00
this.syncer = new Sync(this);
2020-04-16 02:36:09 +05:00
this.vault = new Vault(this);
2020-04-04 13:29:33 +05:00
this.conflicts = new Conflicts(this);
2020-04-16 02:14:53 +05:00
this.lookup = new Lookup(this);
2020-04-16 03:19:50 +05:00
this.ev = new EventManager();
2020-04-16 02:14:53 +05:00
// collections
/** @type {Notes} */
this.notes = await Notes.new(this, "notes");
2020-04-16 02:14:53 +05:00
/** @type {Notebooks} */
this.notebooks = await Notebooks.new(this, "notebooks");
2020-04-16 02:14:53 +05:00
/** @type {Tags} */
this.tags = await Tags.new(this, "tags");
/** @type {Tags} */
this.colors = await Tags.new(this, "colors");
/** @type {Trash} */
this.trash = await Trash.new(this, "trash");
2020-04-16 02:14:53 +05:00
/** @type {Content} */
this.delta = await Content.new(this, "delta", false);
2020-04-16 02:14:53 +05:00
/** @type {Content} */
this.text = await Content.new(this, "text", false);
2020-05-04 17:23:16 +05:00
if (this._syncInterval) clearInterval(this._syncInterval);
this._syncInterval = setInterval(async () => {
this.ev.publish("sync");
}, 60 * 1000 * 3);
2020-02-11 16:28:28 +05:00
}
sync() {
return this.syncer.start();
2020-02-03 12:03:07 +05:00
}
}
export default Database;