Version history, notes on highlights and bookmarks, "you've studied this", prayer journal
Build and Push Docker Image / build-and-push (push) Successful in 5m13s
Build and Push Docker Image / build-and-push (push) Successful in 5m13s
- Earlier versions of a study: the server keeps compressed copies (about one per ten minutes of editing, the latest 30); Export shows what differs and puts one back (the replaced copy is kept) - Notes on highlights and bookmarks: synced, merged without loss, in exports and backups - Reader verse panel lists your studies and chunks that cover the verse, and opens them - Prayer journal: requests, who for, linked verses, days prayed, answers; synced, in backups and the account export; daily prayer reminder through ntfy - TODO.md lists the ideas not built yet Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
54cb1c217d
commit
207bfcb919
45 files changed
+1669
-75
No files matched your search
+7
-3
@@ -8,7 +8,7 @@ export const BACKUP_APP = 'bible-study-project';
|
||||
export const BACKUP_VERSION = 1;
|
||||
|
||||
// `reader` is what the app holds in memory: { bookmarks, highlights, colorLabels, ink }.
|
||||
export function buildBackup({ reader, readingPlans, email = null, now = new Date() }) {
|
||||
export function buildBackup({ reader, readingPlans, prayers = [], email = null, now = new Date() }) {
|
||||
const projects = loadProjectIndex().map((e) => loadProjectById(e.id)).filter(Boolean);
|
||||
return {
|
||||
app: BACKUP_APP,
|
||||
@@ -18,11 +18,13 @@ export function buildBackup({ reader, readingPlans, email = null, now = new Date
|
||||
projects,
|
||||
reader: {
|
||||
bookmarks: reader?.bookmarks ?? {},
|
||||
bookmarkNotes: reader?.bookmarkNotes ?? {},
|
||||
highlights: reader?.highlights ?? [],
|
||||
colorLabels: reader?.colorLabels ?? {},
|
||||
ink: reader?.ink ?? {},
|
||||
},
|
||||
readingPlans: readingPlans ?? { progress: [], customPlans: [], activity: [] },
|
||||
prayers: (prayers ?? []).filter((p) => p && !p.deleted),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -35,12 +37,14 @@ export function validateBackup(data) {
|
||||
const projects = Array.isArray(data.projects) ? data.projects.filter((p) => p && typeof p.id === 'string' && p.title && Array.isArray(p.chapters)) : [];
|
||||
const reader = data.reader && typeof data.reader === 'object' ? data.reader : {};
|
||||
const bookmarks = reader.bookmarks && typeof reader.bookmarks === 'object' && !Array.isArray(reader.bookmarks) ? reader.bookmarks : {};
|
||||
const bookmarkNotes = reader.bookmarkNotes && typeof reader.bookmarkNotes === 'object' && !Array.isArray(reader.bookmarkNotes) ? reader.bookmarkNotes : {};
|
||||
const highlights = Array.isArray(reader.highlights) ? reader.highlights.filter((h) => h && typeof h.id === 'string') : [];
|
||||
const colorLabels = reader.colorLabels && typeof reader.colorLabels === 'object' && !Array.isArray(reader.colorLabels) ? reader.colorLabels : {};
|
||||
const ink = reader.ink && typeof reader.ink === 'object' && !Array.isArray(reader.ink) ? reader.ink : {};
|
||||
const plans = data.readingPlans && typeof data.readingPlans === 'object' ? data.readingPlans : {};
|
||||
const prayers = Array.isArray(data.prayers) ? data.prayers.filter((p) => p && typeof p.id === 'string' && typeof p.text === 'string' && p.text.trim() && !p.deleted) : [];
|
||||
const backup = {
|
||||
projects, reader: { bookmarks, highlights, colorLabels, ink },
|
||||
projects, prayers, reader: { bookmarks, bookmarkNotes, highlights, colorLabels, ink },
|
||||
readingPlans: {
|
||||
progress: Array.isArray(plans.progress) ? plans.progress : [],
|
||||
customPlans: Array.isArray(plans.customPlans) ? plans.customPlans : [],
|
||||
@@ -51,7 +55,7 @@ export function validateBackup(data) {
|
||||
ok: true, backup,
|
||||
summary: {
|
||||
projects: projects.length, bookmarks: Object.keys(bookmarks).length, highlights: highlights.length,
|
||||
inkPages: Object.keys(ink).length, plans: backup.readingPlans.progress.length + backup.readingPlans.customPlans.length,
|
||||
inkPages: Object.keys(ink).length, prayers: prayers.length, plans: backup.readingPlans.progress.length + backup.readingPlans.customPlans.length,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user