forked from boos/BoosAPI
fix desktop tray icon telegram topics and checkin intervals
This commit is contained in:
@@ -6,6 +6,7 @@ import sharp from 'sharp';
|
||||
export const DESKTOP_ICON_SIZE = 512;
|
||||
export const DESKTOP_ICON_PADDING = 40;
|
||||
export const DESKTOP_ICON_RADIUS = 96;
|
||||
export const DESKTOP_TRAY_TEMPLATE_PADDING = 152;
|
||||
|
||||
function createRoundedMask(size, cornerRadius) {
|
||||
return Buffer.from(
|
||||
@@ -44,34 +45,73 @@ async function renderDesktopIconBuffer({
|
||||
.toBuffer();
|
||||
}
|
||||
|
||||
async function renderTrayTemplateIconBuffer({
|
||||
sourcePath,
|
||||
size = DESKTOP_ICON_SIZE,
|
||||
padding = DESKTOP_TRAY_TEMPLATE_PADDING,
|
||||
}) {
|
||||
const innerSize = Math.max(1, size - padding * 2);
|
||||
const alphaMask = await sharp(sourcePath)
|
||||
.resize(innerSize, innerSize, {
|
||||
fit: 'contain',
|
||||
background: { r: 0, g: 0, b: 0, alpha: 0 },
|
||||
})
|
||||
.ensureAlpha()
|
||||
.extractChannel('alpha')
|
||||
.png()
|
||||
.toBuffer();
|
||||
|
||||
return sharp({
|
||||
create: {
|
||||
width: size,
|
||||
height: size,
|
||||
channels: 4,
|
||||
background: { r: 0, g: 0, b: 0, alpha: 1 },
|
||||
},
|
||||
})
|
||||
.composite([{ input: alphaMask, left: padding, top: padding, blend: 'dest-in' }])
|
||||
.png()
|
||||
.toBuffer();
|
||||
}
|
||||
|
||||
export async function generateDesktopIconAssets({
|
||||
sourcePath = join(process.cwd(), 'src', 'web', 'public', 'logo.png'),
|
||||
buildOutputPath = join(process.cwd(), 'build', 'desktop-icon.png'),
|
||||
webOutputPath = join(process.cwd(), 'src', 'web', 'public', 'desktop-icon.png'),
|
||||
trayTemplateOutputPath = join(process.cwd(), 'src', 'web', 'public', 'desktop-tray-template.png'),
|
||||
size = DESKTOP_ICON_SIZE,
|
||||
padding = DESKTOP_ICON_PADDING,
|
||||
cornerRadius = DESKTOP_ICON_RADIUS,
|
||||
} = {}) {
|
||||
const outputBuffer = await renderDesktopIconBuffer({
|
||||
sourcePath,
|
||||
size,
|
||||
padding,
|
||||
cornerRadius,
|
||||
});
|
||||
const [outputBuffer, trayTemplateBuffer] = await Promise.all([
|
||||
renderDesktopIconBuffer({
|
||||
sourcePath,
|
||||
size,
|
||||
padding,
|
||||
cornerRadius,
|
||||
}),
|
||||
renderTrayTemplateIconBuffer({
|
||||
sourcePath,
|
||||
size,
|
||||
}),
|
||||
]);
|
||||
|
||||
await Promise.all([
|
||||
mkdir(dirname(buildOutputPath), { recursive: true }),
|
||||
mkdir(dirname(webOutputPath), { recursive: true }),
|
||||
mkdir(dirname(trayTemplateOutputPath), { recursive: true }),
|
||||
]);
|
||||
|
||||
await Promise.all([
|
||||
sharp(outputBuffer).toFile(buildOutputPath),
|
||||
sharp(outputBuffer).toFile(webOutputPath),
|
||||
sharp(trayTemplateBuffer).toFile(trayTemplateOutputPath),
|
||||
]);
|
||||
|
||||
return {
|
||||
buildOutputPath,
|
||||
webOutputPath,
|
||||
trayTemplateOutputPath,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -81,5 +121,6 @@ if (isDirectRun) {
|
||||
const outputs = await generateDesktopIconAssets();
|
||||
console.log(`[metapi-desktop] Generated desktop icons:
|
||||
- ${outputs.buildOutputPath}
|
||||
- ${outputs.webOutputPath}`);
|
||||
- ${outputs.webOutputPath}
|
||||
- ${outputs.trayTemplateOutputPath}`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user