feat: hooked thumbnail generation to buttons

This commit is contained in:
2026-02-11 22:07:32 +01:00
parent adadb7db54
commit 8c82cf5b29
6 changed files with 137 additions and 0 deletions

View File

@@ -342,6 +342,8 @@ const App: React.FC = () => {
// Fire and forget - the handlers return immediately now
window.electronAPI?.posts.rebuildFromFiles();
window.electronAPI?.media.rebuildFromFiles();
// Also regenerate missing thumbnails after media rebuild
window.electronAPI?.media.regenerateMissingThumbnails();
}) || (() => {})
);

View File

@@ -939,6 +939,35 @@ export const SettingsView: React.FC = () => {
Rebuild Links
</button>
</SettingRow>
<SettingRow
id="regenerate-thumbnails"
label="Regenerate Thumbnails"
description="Generate missing thumbnails for all images. Useful after importing media externally."
>
<button
className="secondary"
onClick={async () => {
showToast.loading('Generating thumbnails...');
try {
const result = await window.electronAPI?.media.regenerateMissingThumbnails();
showToast.dismiss();
if (result && result.generated > 0) {
showToast.success(`Generated ${result.generated} thumbnails`);
} else if (result && result.processed === 0) {
showToast.success('All thumbnails already exist');
} else {
showToast.success('Thumbnail generation complete');
}
} catch {
showToast.dismiss();
showToast.error('Failed to generate thumbnails');
}
}}
>
Generate Thumbnails
</button>
</SettingRow>
</SettingSection>
<SettingSection

View File

@@ -272,8 +272,13 @@ export interface ElectronAPI {
update: (id: string, data: Partial<MediaData>) => Promise<MediaData | null>;
delete: (id: string) => Promise<boolean>;
get: (id: string) => Promise<MediaData | null>;
getUrl: (id: string) => Promise<string | null>;
getFilePath: (id: string) => Promise<string | null>;
getAll: () => Promise<MediaData[]>;
rebuildFromFiles: () => Promise<void>;
getThumbnail: (id: string, size?: 'small' | 'medium' | 'large') => Promise<string | null>;
regenerateThumbnails: (id: string) => Promise<Record<string, string> | null>;
regenerateMissingThumbnails: () => Promise<{ processed: number; generated: number; failed: number }>;
};
sync: {
configure: (config: SyncConfig) => Promise<void>;