Skip to content

Commit 957f703

Browse files
committed
Add render button fallback for files that fail to load
1 parent c6fd99d commit 957f703

File tree

4 files changed

+49
-36
lines changed

4 files changed

+49
-36
lines changed

src/app/hydrus-file-mimes.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,7 +689,15 @@ const renderableFiletypes596 = [
689689
HydrusFiletype.ANIMATION_UGOIRA
690690
]
691691

692+
const renderableFiletypes607 = [
693+
...renderableFiletypes596,
694+
HydrusFiletype.IMAGE_JXL
695+
]
696+
692697
export function isFileHydrusRenderable(mime: HydrusFiletype, hydrusVersion?: number) {
698+
if(hydrusVersion && hydrusVersion >= 607) {
699+
return renderableFiletypes607.includes(mime);
700+
}
693701
if(hydrusVersion && hydrusVersion >= 596) {
694702
return renderableFiletypes596.includes(mime);
695703
}

src/app/photoswipe.service.ts

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -256,35 +256,7 @@ export class PhotoswipeService {
256256
errorMsgText.className = 'pswp-error-text';
257257
errorMsgEl.appendChild(errorMsgText);
258258

259-
const renderButton = document.createElement('button');
260-
renderButton.setAttribute('mat-stroked-button', '');
261-
const psdButtonComponent = createComponent(MatButton, {
262-
environmentInjector: this.injector,
263-
hostElement: renderButton,
264-
projectableNodes: [
265-
[document.createTextNode('Load render from Hydrus')]
266-
]
267-
})
268-
269-
const buttonContainer = document.createElement('div');
270-
buttonContainer.className = 'pswp-error-text';
271-
errorMsgEl.appendChild(buttonContainer);
272-
buttonContainer.appendChild(renderButton);
273-
this.appRef.attachView(psdButtonComponent.hostView);
274-
275-
renderButton.addEventListener('click', async (ev) => {
276-
psdButtonComponent.setInput('disabled', true);
277-
const data = {
278-
type: 'image',
279-
src: file.render_url,
280-
msrc: file.thumbnail_url,
281-
width: file.width,
282-
height: file.height,
283-
file
284-
}
285-
this.processedFiles.set(file.hash, data);
286-
pswp.refreshSlideContent(content.index);
287-
})
259+
this.addRenderButton(file, errorMsgEl, pswp, content);
288260

289261
this.addPhotopeaButton(file, errorMsgEl);
290262

@@ -369,6 +341,10 @@ export class PhotoswipeService {
369341
errorMsgText.className = 'pswp-error-text';
370342
errorMsgEl.appendChild(errorMsgText);
371343

344+
if(file.render_url) {
345+
this.addRenderButton(file, errorMsgEl, pswp, content);
346+
}
347+
372348
return errorMsgEl;
373349
});
374350

@@ -468,7 +444,7 @@ export class PhotoswipeService {
468444
}
469445
}
470446

471-
addPhotopeaButton(file: HydrusBasicFile, element: HTMLElement) {
447+
private addPhotopeaButton(file: HydrusBasicFile, element: HTMLElement) {
472448
if(canOpenInPhotopea(file) && this.settingsService.appSettings.photopeaIntegration) {
473449
const photopeaButton = document.createElement('a');
474450
photopeaButton.setAttribute('mat-stroked-button', '');
@@ -492,4 +468,36 @@ export class PhotoswipeService {
492468
}
493469
}
494470

471+
private addRenderButton(file: HydrusBasicFile, element: HTMLElement, pswp: PhotoSwipe, content: Content) {
472+
const renderButton = document.createElement('button');
473+
renderButton.setAttribute('mat-stroked-button', '');
474+
const psdButtonComponent = createComponent(MatButton, {
475+
environmentInjector: this.injector,
476+
hostElement: renderButton,
477+
projectableNodes: [
478+
[document.createTextNode('Load render from Hydrus')]
479+
]
480+
})
481+
482+
const buttonContainer = document.createElement('div');
483+
buttonContainer.className = 'pswp-error-text';
484+
element.appendChild(buttonContainer);
485+
buttonContainer.appendChild(renderButton);
486+
this.appRef.attachView(psdButtonComponent.hostView);
487+
488+
renderButton.addEventListener('click', async (ev) => {
489+
psdButtonComponent.setInput('disabled', true);
490+
const data = {
491+
type: 'image',
492+
src: file.render_url,
493+
msrc: file.thumbnail_url,
494+
width: file.width,
495+
height: file.height,
496+
file
497+
}
498+
this.processedFiles.set(file.hash, data);
499+
pswp.refreshSlideContent(content.index);
500+
})
501+
}
502+
495503
}

src/app/theme/theme-tags.service.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ export class ThemeTagsService {
3232
filter(options => !!options?.old_options?.namespace_colours),
3333
map(options => options.old_options.namespace_colours),
3434
distinctUntilChanged(dequal),
35-
switchMap(namespace_colours => this.setThemeFromNamespaceColors(namespace_colours))
36-
).subscribe()
35+
).subscribe(namespace_colours => this.setThemeFromNamespaceColors(namespace_colours))
3736

3837
}
3938

src/app/theme/theme.service.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,11 @@ export class ThemeService {
2525
document.adoptedStyleSheets.push(this.themeStylesheet);
2626
this.settings.appSettings$.pipe(
2727
filter(settings => settings.themeEnabled),
28-
switchMap(settings => this.setThemeFromHexColor(settings.themeColor, settings.themeVariant))
29-
).subscribe()
28+
).subscribe(settings => this.setThemeFromHexColor(settings.themeColor, settings.themeVariant))
3029

3130
this.settings.appSettings$.pipe(
3231
filter(settings => !settings.themeEnabled),
33-
switchMap(() => this.removeTheme())
34-
).subscribe()
32+
).subscribe(() => this.removeTheme())
3533
}
3634

3735
async setThemeFromHexColor(color: string, variant: SettingsThemeVariant = SettingsThemeVariant.DEFAULT) {

0 commit comments

Comments
 (0)