From 174ec64ec6b732d673a14b33f22d7fd902ed1868 Mon Sep 17 00:00:00 2001 From: cbartondock Date: Tue, 28 Mar 2023 12:00:08 -0400 Subject: [PATCH] added parser title filter --- CHANGELOG.md | 8 +++++++ src/lang/en-US/langStrings.json | 3 ++- src/models/language.model.ts | 1 + src/renderer/components/preview.component.ts | 21 +++++++++++++++---- src/renderer/services/preview.service.ts | 11 ++++++++-- src/renderer/styles/preview.component.scss | 8 +++++++ src/renderer/templates/preview.component.html | 8 ++++--- 7 files changed, 50 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0641793e7f..43926ce053 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,14 @@ All notable changes to this project will be documented in this file. * [x] Automatic Preset Updating. * [x] Make icons work for Steam parser (with the caveat that they will most likely be overwritten when a developer updates their game). +## 2.3.46 +## Added +* Ability to filter apps by parser title in addition to steam category. + +### Fixed +* Significant lag when transitioning from non parser tab to a parser tab, caused by cached controllers templates being destroyed. Fixed by moving them to service. +* Category Filter options getting cleared after leaving the preview page. + ## 2.3.45 ### Fixed * Bug where controllers couldn't be fetched if user had a custom config whose title was a number (ugh). Credit to emu-deck Discord user emotion for discovering the bug. diff --git a/src/lang/en-US/langStrings.json b/src/lang/en-US/langStrings.json index e029876398..f6e26c6aa9 100644 --- a/src/lang/en-US/langStrings.json +++ b/src/lang/en-US/langStrings.json @@ -3,7 +3,8 @@ "component": { "filter": "Filter by title", "selectType": "Select artwork type", - "selectCategories": "Filter by category", + "selectCategories": "Filter by Steam category", + "selectParsers": "Filter by parser", "selectTypeOptions": { "long": "Banners", "tall": "Posters", diff --git a/src/models/language.model.ts b/src/models/language.model.ts index 157c6b52e4..abef9dfc8b 100644 --- a/src/models/language.model.ts +++ b/src/models/language.model.ts @@ -9,6 +9,7 @@ export interface languageStruct { filter: string, selectType: string, selectCategories: string, + selectParsers: string, selectTypeOptions: { long: string, tall: string, diff --git a/src/renderer/components/preview.component.ts b/src/renderer/components/preview.component.ts index c371adc5e3..7b24ae29ce 100644 --- a/src/renderer/components/preview.component.ts +++ b/src/renderer/components/preview.component.ts @@ -33,7 +33,10 @@ export class PreviewComponent implements OnDestroy { private filterValue: string = ''; private categoryFilter: string[] = []; private allCategories: string[] = []; - private actualCategoryFilter: string[]=[]; + private actualCategoryFilter: string[] = []; + private parserFilter: string[] = []; + private allParsers: string[] = []; + private actualParserFilter: string[] = []; private imageTypes: SelectItem[]; private scrollingEntries: boolean = false; private fileSelector: FileSelector = new FileSelector(); @@ -41,9 +44,15 @@ export class PreviewComponent implements OnDestroy { constructor(private previewService: PreviewService, private settingsService: SettingsService, private imageProviderService: ImageProviderService, private changeDetectionRef: ChangeDetectorRef, private renderer: Renderer2, private elementRef: ElementRef) { this.previewData = this.previewService.getPreviewData(); this.previewVariables = this.previewService.getPreviewVariables(); + if(this.previewService.getPreviewData()) { + this.allCategories = this.previewService.getAllCategories(); + this.allParsers = this.previewService.getAllParsers(); + this.previewData = this.previewService.getPreviewData(); + } this.subscriptions.add(this.previewService.getPreviewDataChange().subscribe(_.debounce(() => { this.allCategories = this.previewService.getAllCategories(); + this.allParsers = this.previewService.getAllParsers(); this.previewData = this.previewService.getPreviewData(); this.changeDetectionRef.detectChanges(); }, 50))); @@ -83,7 +92,11 @@ export class PreviewComponent implements OnDestroy { } setCategoryFilter(categories: string[]) { this.categoryFilter = categories; - this.actualCategoryFilter = categories.map(c=>c.replace(/ /g,' ')) + this.actualCategoryFilter = categories.map(c=>c.replace(/ /g,' ')); + } + setParserFilter(parsers: string[]) { + this.parserFilter= parsers; + this.actualParserFilter = parsers.map(p=>p.replace(/ /g,' ')); } ngAfterContentInit() { @@ -352,10 +365,10 @@ export class PreviewComponent implements OnDestroy { } private async exportSelection() { - await this.previewService.exportSelection(); + await this.previewService.exportSelection(); } private async importSelection() { - await this.previewService.importSelection(); + await this.previewService.importSelection(); } } diff --git a/src/renderer/services/preview.service.ts b/src/renderer/services/preview.service.ts index 34f7edf636..49530921ac 100644 --- a/src/renderer/services/preview.service.ts +++ b/src/renderer/services/preview.service.ts @@ -398,9 +398,16 @@ export class PreviewService { this.previewDataChanged.next(); } + private union(x: string[],y: string[]) { + return _.union(x,y); + } + getAllCategories() { - const union = (x: string[],y: string[])=>_.union(x,y); - return this.previewData ? Object.entries(this.previewData).map(dir=>Object.entries(dir[1]).map(user=>Object.entries(user[1].apps).map(app=>app[1].steamCategories).reduce(union,[])).reduce(union,[])).reduce(union,[]) : []; + return this.previewData ? Object.entries(this.previewData).map(dir=>Object.entries(dir[1]).map(user=>Object.entries(user[1].apps).map(app=>app[1].steamCategories).reduce(this.union,[])).reduce(this.union,[])).reduce(this.union,[]) : []; + } + + getAllParsers() { + return this.previewData ? Object.entries(this.previewData).map(dir=>Object.entries(dir[1]).map(user=>Object.entries(user[1].apps).map(app=>app[1].configurationTitle)).reduce(this.union,[])).reduce(this.union,[]) : []; } // If settingsOnly is true then api filters are not applied diff --git a/src/renderer/styles/preview.component.scss b/src/renderer/styles/preview.component.scss index b95de1de09..ff0ed25239 100644 --- a/src/renderer/styles/preview.component.scss +++ b/src/renderer/styles/preview.component.scss @@ -49,12 +49,20 @@ color: var(--color-preview-text); } .selectCategories { + grid-column: 2; + width: 14em; + font-size: 1em; + margin-right: .75em; + color: var(--color-preview-text); + } + .selectParsers { grid-column: 2; width: 12em; font-size: 1em; margin-right: .75em; color: var(--color-preview-text); } + .slider { display: flex; align-items: center; diff --git a/src/renderer/templates/preview.component.html b/src/renderer/templates/preview.component.html index 718e80f5ca..7232afe2aa 100644 --- a/src/renderer/templates/preview.component.html +++ b/src/renderer/templates/preview.component.html @@ -7,6 +7,8 @@
{{appSettings.previewSettings.imageZoomPercentage | number : '1.0-2'}}%
+ + @@ -30,13 +32,13 @@
-
+
{{app.title}}
-
-