fix(icon_packs): integrate boxicons back into share export

This commit is contained in:
Elian Doran 2025-12-28 02:24:18 +02:00
parent 841cb32835
commit 1c940ff8a2
No known key found for this signature in database
2 changed files with 20 additions and 12 deletions

View File

@ -35,10 +35,6 @@ async function register(app: express.Application) {
req.url = `/${assetUrlFragment}${req.url}`;
vite.middlewares(req, res, next);
});
app.use(`/share/assets/fonts/`, (req, res, next) => {
req.url = `/${assetUrlFragment}/src/fonts${req.url}`;
vite.middlewares(req, res, next);
});
app.use(`/node_modules/@excalidraw/excalidraw/dist/prod`, persistentCacheStatic(path.join(srcRoot, "../../node_modules/@excalidraw/excalidraw/dist/prod")));
} else {
const publicDir = path.join(resourceDir, "public");
@ -49,10 +45,10 @@ async function register(app: express.Application) {
app.use(`/${assetUrlFragment}/src`, persistentCacheStatic(path.join(publicDir, "src")));
app.use(`/${assetUrlFragment}/stylesheets`, persistentCacheStatic(path.join(publicDir, "stylesheets")));
app.use(`/${assetUrlFragment}/fonts`, persistentCacheStatic(path.join(publicDir, "fonts")));
app.use(`/share/assets/fonts/`, express.static(path.join(publicDir, "fonts")));
app.use(`/${assetUrlFragment}/translations/`, persistentCacheStatic(path.join(publicDir, "translations")));
app.use(`/node_modules/`, persistentCacheStatic(path.join(publicDir, "node_modules")));
}
app.use(`/share/assets/fonts/`, express.static(path.join(getClientDir(), "fonts")));
app.use(`/share/assets/`, express.static(getShareThemeAssetDir()));
app.use(`/${assetUrlFragment}/images`, persistentCacheStatic(path.join(resourceDir, "assets", "images")));
app.use(`/${assetUrlFragment}/doc_notes`, persistentCacheStatic(path.join(resourceDir, "assets", "doc_notes")));
@ -70,6 +66,15 @@ export function getShareThemeAssetDir() {
return path.join(resourceDir, "share-theme/assets");
}
export function getClientDir() {
if (process.env.NODE_ENV === "development") {
const srcRoot = path.join(__dirname, "..", "..");
return path.join(srcRoot, "../client/src");
}
const resourceDir = getResourceDir();
return path.join(resourceDir, "public");
}
export default {
register
};

View File

@ -1,5 +1,5 @@
import ejs from "ejs";
import fs, { readdirSync } from "fs";
import fs, { readdirSync, readFileSync } from "fs";
import { convert as convertToText } from "html-to-text";
import { t } from "i18next";
import { join } from "path";
@ -7,7 +7,7 @@ import { join } from "path";
import becca from "../../../becca/becca";
import type BBranch from "../../../becca/entities/bbranch.js";
import type BNote from "../../../becca/entities/bnote.js";
import { getShareThemeAssetDir } from "../../../routes/assets";
import { getClientDir, getShareThemeAssetDir } from "../../../routes/assets";
import { getDefaultTemplatePath, readTemplate, renderNoteForExport } from "../../../share/content_renderer";
import { getIconPacks, MIME_TO_EXTENSION_MAPPINGS, ProcessedIconPack } from "../../icon_packs";
import NoteMeta, { NoteMetaFile } from "../../meta/note_meta";
@ -144,13 +144,16 @@ export default class ShareThemeExportProvider extends ZipExportProvider {
// Inject the custom fonts.
for (const iconPack of this.iconPacks) {
const attachment = becca.getAttachment(iconPack.fontAttachmentId);
if (!attachment) {
continue;
const extension = MIME_TO_EXTENSION_MAPPINGS[iconPack.fontMime];
let fontData: Buffer | undefined;
if (iconPack.builtin) {
fontData = readFileSync(join(getClientDir(), "fonts", `${iconPack.fontAttachmentId}.${extension}`));
} else {
fontData = becca.getAttachment(iconPack.fontAttachmentId)?.getContent();
}
const fontData = attachment.getContent();
const fontFileName = `assets/icon-pack-${iconPack.manifest.prefix.toLowerCase()}.${MIME_TO_EXTENSION_MAPPINGS[attachment.mime]}`;
if (!fontData) continue;
const fontFileName = `assets/icon-pack-${iconPack.manifest.prefix.toLowerCase()}.${extension}`;
this.archive.append(fontData, { name: fontFileName });
}
}