@@ -10,13 +10,19 @@ import { FaAward, FaBan, FaCalendarDays, FaCloudArrowDown, FaCompactDisc, FaList
1010import { BsClockHistory , BsRegex } from "react-icons/bs" ;
1111import { LuCombine } from "react-icons/lu" ;
1212import { LogController } from "../../lib/controllers/LogController" ;
13+ import { CardAndGames } from '@cebbinghaus/microsdeck' ;
1314
1415export type FilterType = 'collection' | 'installed' | 'regex' | 'friends' | 'tags' | 'whitelist' | 'blacklist' | 'merge' | 'platform' | 'deck compatibility' | 'review score' | 'time played' | 'size on disk' | 'release date' | 'purchase date' | 'last played' | 'family sharing' | 'demo' | 'streamable' | 'steam features' | 'achievements' | 'sd card' ;
1516
1617export type TimeUnit = 'minutes' | 'hours' | 'days' ;
1718export type ThresholdCondition = 'above' | 'below' ;
1819export type ReviewScoreType = 'metacritic' | 'steampercent' ;
1920
21+ export enum SdCardParamType {
22+ INSTALLED = 0 ,
23+ ANY
24+ } ;
25+
2026type CollectionFilterParams = {
2127 id : SteamCollection [ 'id' ] ,
2228 /**
@@ -56,7 +62,7 @@ type AchievementsFilterParams = {
5662 thresholdType : "count" | "percent" ,
5763 condition : ThresholdCondition
5864}
59- type SdCardParams = { card : undefined | string } ; //use undefined for currently inserted card
65+ type SdCardParams = { card : SdCardParamType | string | undefined } ; //inserted card/ any card/ card uid (undefined value is legacy)
6066
6167// appOverview.rt_purchased_time
6268
@@ -120,7 +126,7 @@ export const FilterDefaultParams: { [key in FilterType]: FilterParams<key> } = {
120126 "streamable" : { isStreamable : true } ,
121127 "steam features" : { features : [ ] , mode : 'and' } ,
122128 "achievements" : { threshold : 10 , thresholdType : "percent" , condition : 'above' } ,
123- "sd card" : { card : undefined }
129+ "sd card" : { card : SdCardParamType . INSTALLED }
124130}
125131
126132/**
@@ -372,7 +378,7 @@ export function validateFilter(filter: TabFilterSettings<FilterType>): Validatio
372378 const cardFilter = filter as TabFilterSettings < 'sd card' > ;
373379
374380 let passed = true ;
375- if ( MicroSDeckInterop . isInstallOk ( ) && window . MicroSDeck ! . Enabled && cardFilter . params . card ) {
381+ if ( MicroSDeckInterop . isInstallOk ( ) && window . MicroSDeck ! . Enabled && typeof cardFilter . params . card === 'string' ) {
376382 const cardsAndGames = window . MicroSDeck ! . CardsAndGames || [ ] ;
377383
378384 if ( ! cardsAndGames . find ( ( [ card ] ) => cardFilter . params . card === card . uid ) ) {
@@ -620,11 +626,20 @@ export class Filter {
620626 }
621627 } ,
622628 'sd card' : ( params : FilterParams < 'sd card' > , appOverview : SteamAppOverview ) => {
623- const card = params . card === undefined ? window . MicroSDeck ?. CurrentCardAndGames : window . MicroSDeck ?. CardsAndGames ?. find ( ( [ card ] ) => card . uid == params . card ) ;
624-
629+ const isOnCard = ( card : CardAndGames ) => ! ! card [ 1 ] . find ( ( game ) => + game . uid == appOverview . appid ) ;
630+ let card : CardAndGames | undefined ;
631+ switch ( params . card ) {
632+ case SdCardParamType . ANY :
633+ return window . MicroSDeck ?. CardsAndGames ?. find ( isOnCard ) ;
634+ case SdCardParamType . INSTALLED :
635+ case undefined :
636+ card = window . MicroSDeck ?. CurrentCardAndGames ;
637+ break ;
638+ default :
639+ card = window . MicroSDeck ?. CardsAndGames ?. find ( ( [ card ] ) => card . uid == params . card ) ;
640+ }
625641 if ( ! card ) return false ;
626-
627- return ! ! card [ 1 ] . find ( ( game ) => + game . uid == appOverview . appid ) ;
642+ return isOnCard ( card ) ;
628643 }
629644 } ;
630645
0 commit comments