Skip to content

Commit f4e38ca

Browse files
committed
fix(meta): Read obsidian file cache rechecker.
1 parent 26dee2e commit f4e38ca

File tree

4 files changed

+60
-28
lines changed

4 files changed

+60
-28
lines changed

src/exporter.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,16 @@ export const publishFiles = async (
145145
}
146146
// metadataCache
147147
const filesMetadata: any = {};
148-
allFiles.forEach(file => {
149-
filesMetadata[file.path] = app.metadataCache.getFileCache(file)
148+
const iterPromises = allFiles.map(async file => {
149+
let cache = app.metadataCache.getFileCache(file);
150+
if (!cache) {
151+
await app.vault.adapter.read(file.path)
152+
cache = app.metadataCache.getFileCache(file);
153+
}
154+
filesMetadata[file.path] = cache
155+
return cache;
150156
});
157+
await Promise.all(iterPromises);
151158

152159
const metaDownload = new Downloadable('meta.json', JSON.stringify(filesMetadata), htmlPath.joinString(settings.localWatchDir));
153160
Object.assign(metaDownload, {

src/html-generation/global-gen.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,14 @@ export class LinkTree
147147
* @param fileDocument The document to create the tree from.
148148
* @param minDepth The minimum depth of headings to include in the tree. 1 will include h1.
149149
*/
150-
public static headersFromFile(file: TFile, minDepth: number = 1): LinkTree
150+
public static async headersFromFile(file: TFile, minDepth: number = 1): Promise<LinkTree>
151151
{
152-
let headings = app.metadataCache.getFileCache(file)?.headings ?? [];
152+
let meta = app.metadataCache.getFileCache(file);
153+
if (!meta) {
154+
await app.vault.adapter.read(file.path);
155+
meta = app.metadataCache.getFileCache(file);
156+
}
157+
let headings = meta?.headings ?? [];
153158
if(headings.length > 0 && (headings[0].level != 1 && minDepth <= 1 && headings[0].heading != file.basename)) headings.unshift({heading: file.basename, level: 1, position: {start: {col: 0, line: 0, offset: 0}, end: {col: 0, line: 0, offset: 0}}});
154159
let minHeadingSize = Math.min(...headings.map(h => h.level));
155160
let root = new LinkTree(undefined, undefined, minHeadingSize - 1);

src/html-generation/html-generator.ts

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@ export class HTMLGenerator {
3838
public static async beginBatch(plugin: InvioPlugin, exportingFiles: TFile[]) {
3939
GlobalDataGenerator.clearGraphCache();
4040
GlobalDataGenerator.clearFileTreeCache();
41-
const files = exportingFiles.map(f => {
42-
const pageConfig = this.getPageOnlyMeta(f);
41+
const filePromises = exportingFiles.map(async f => {
42+
const pageConfig = await this.getPageOnlyMeta(f);
4343
(f as TFileWithMeta).sort = pageConfig?.sort || 0
4444
return f;
4545
})
46-
GlobalDataGenerator.getFileTree(files);
46+
Promise.all(filePromises).then(files => {
47+
GlobalDataGenerator.getFileTree(files);
48+
})
4749
await StatsView.activateStatsView(plugin);
4850
const view = StatsView.getStatsView(plugin, 'SyncingStats');
4951
await AssetHandler.updateAssetCache(view);
@@ -56,13 +58,16 @@ export class HTMLGenerator {
5658
}
5759

5860
// Only work before generaeWebpage
59-
public static updateTree(patchFiles: TFile[], delFiles: string[]) {
60-
const files = patchFiles.map(f => {
61-
const pageConfig = this.getPageOnlyMeta(f);
62-
(f as TFileWithMeta).sort = pageConfig?.sort || 0
63-
return f;
64-
})
65-
GlobalDataGenerator.updateFileTree(files, delFiles)
61+
public static async updateTree(patchFiles: TFile[], delFiles: string[]) {
62+
const promises = patchFiles.map(f => {
63+
return this.getPageOnlyMeta(f).then(pageConfig => {
64+
(f as TFileWithMeta).sort = pageConfig?.sort || 0
65+
return f;
66+
})
67+
})
68+
return Promise.all(promises).then(files => {
69+
GlobalDataGenerator.updateFileTree(files, delFiles)
70+
})
6671
}
6772

6873
// rootPath is used for collecting context nodes
@@ -94,13 +99,13 @@ export class HTMLGenerator {
9499

95100
// inject outline
96101
if (InvioSettingTab.settings.includeOutline) {
97-
let headerTree = LinkTree.headersFromFile(file.markdownFile, 1);
102+
let headerTree = await LinkTree.headersFromFile(file.markdownFile, 1);
98103
let outline: HTMLElement | undefined = this.generateHTMLTree(headerTree, usingDocument, "Table Of Contents", "outline-tree", false, 1, 2, InvioSettingTab.settings.startOutlineCollapsed);
99104
rightSidebar.appendChild(outline);
100105
}
101106

102107
// inject icon and title
103-
const config = this.getMeta(file);
108+
const config = await this.getMeta(file);
104109
const pageTitle = config?.title || app.vault.getName();
105110

106111
let brandHeader = this.generateBrandHeader(usingDocument, config.brand, config.icon, config.slogan, config?.home);
@@ -389,8 +394,7 @@ export class HTMLGenerator {
389394
}
390395

391396
private static async fillInHead(file: ExportFile, rootPath: Path, remoteDomain: string = '') {
392-
// const pageConfig = app.metadataCache.getFileCache(file.markdownFile).frontmatter;
393-
const pageConfig = this.getMeta(file);
397+
const pageConfig = await this.getMeta(file);
394398
log.info('get file metadata: ', pageConfig, remoteDomain);
395399
log.info('head with remote domain: ', remoteDomain);
396400
let pageTitle = file.markdownFile.basename;
@@ -583,26 +587,38 @@ export class HTMLGenerator {
583587
}
584588
})
585589
}
586-
587-
588590
}
589591

590-
private static getPageOnlyMeta(file: TFile) {
591-
const pageConfig = (app.metadataCache.getFileCache(file).frontmatter || {}) as IMetaConfig;
592+
private static async getPageOnlyMeta(file: TFile) {
593+
let cache = app.metadataCache.getFileCache(file);
594+
if (!cache) {
595+
await app.vault.adapter.read(file.path);
596+
cache = app.metadataCache.getFileCache(file);
597+
}
598+
const pageConfig = (cache?.frontmatter || {}) as IMetaConfig;
592599
return pageConfig;
593600
}
594-
private static getMeta(file: ExportFile): IMetaConfig {
601+
private static async getMeta(file: ExportFile): Promise<IMetaConfig> {
595602
// Get site config
596603
const indexPath = file.exportedFolder.joinString('index.md');
597604
const indexFile = app.vault.getAbstractFileByPath(indexPath.asString);
598605

599-
const pageConfig = (app.metadataCache.getFileCache(file.markdownFile).frontmatter || {}) as IMetaConfig;
606+
let meta = app.metadataCache.getFileCache(file.markdownFile);
607+
if (!meta) {
608+
await app.vault.adapter.read(file.markdownFile.path)
609+
meta = app.metadataCache.getFileCache(file.markdownFile);
610+
}
611+
const pageConfig = (meta?.frontmatter || {}) as IMetaConfig;
600612
log.info('page config: ', pageConfig);
601613

602614
const siteConfig: IMetaConfig = {};
603615
if (indexFile instanceof TFile) {
604-
const indexMeta = app.metadataCache.getFileCache(indexFile);
605-
Object.assign(siteConfig, indexMeta?.frontmatter || {});
616+
let meta = app.metadataCache.getFileCache(indexFile);
617+
if (!meta) {
618+
await app.vault.adapter.read(indexFile.path)
619+
meta = app.metadataCache.getFileCache(indexFile);
620+
}
621+
Object.assign(siteConfig, meta?.frontmatter || {});
606622
log.info('site meta: ', siteConfig);
607623
}
608624

src/main.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,11 @@ export default class InvioPlugin extends Plugin {
692692
const syncedFile = this.app.vault.getAbstractFileByPath(pathName);
693693
if (syncedFile instanceof TFile) {
694694
this.addRecentSyncedFile(syncedFile);
695-
const meta = this.app.metadataCache.getFileCache(syncedFile);
695+
let meta = this.app.metadataCache.getFileCache(syncedFile);
696+
if (!meta) {
697+
await app.vault.adapter.read(syncedFile.path);
698+
meta = this.app.metadataCache.getFileCache(syncedFile);
699+
}
696700
if (meta?.embeds) {
697701
await syncAttachment(
698702
this.app.vault,
@@ -743,7 +747,7 @@ export default class InvioPlugin extends Plugin {
743747
delFiles.push(toLocal.key)
744748
}
745749
})
746-
HTMLGenerator.updateTree(addFiles, delFiles);
750+
await HTMLGenerator.updateTree(addFiles, delFiles);
747751

748752
await unpublishFile(client, this.app.vault, unPubList, (pathName: string, status: string) => {
749753
log.info('publishing ', pathName, status);

0 commit comments

Comments
 (0)