Skip to content

Commit f210a41

Browse files
committed
#171 - a PoC of the idea of metadata value extractors. Working version, missing errors detection for new scenarios
1 parent d82a80c commit f210a41

File tree

4 files changed

+35
-9
lines changed

4 files changed

+35
-9
lines changed

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "custom-sort",
33
"name": "Custom File Explorer sorting",
4-
"version": "2.1.14",
4+
"version": "2.1.14-beta-171",
55
"minAppVersion": "0.16.2",
66
"description": "Allows for manual and automatic, config-driven reordering and sorting of files and folders in File Explorer",
77
"author": "SebastianMC",

src/custom-sort/custom-sort-types.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,11 @@ export interface CustomSortGroup {
7575
exactSuffix?: string
7676
regexSuffix?: RegExpSpec
7777
order?: CustomSortOrder
78-
byMetadataField?: string // for 'by-metadata:' sorting if the order is by metadata alphabetical or reverse
78+
byMetadataField?: string // for 'by-metadata:' sorting if the order is by metadata alphabetical or reverse
79+
metadataFieldValueExtractor?: MDataExtractor // and its sorting value extractor
7980
secondaryOrder?: CustomSortOrder
8081
byMetadataFieldSecondary?: string // for 'by-metadata:' sorting if the order is by metadata alphabetical or reverse
82+
metadataFieldSecondaryValueExtractor?: MDataExtractor
8183
filesOnly?: boolean
8284
matchFilenameWithExt?: boolean
8385
foldersOnly?: boolean
@@ -92,8 +94,10 @@ export interface CustomSortSpec {
9294
targetFoldersPaths: Array<string> // For root use '/'
9395
defaultOrder?: CustomSortOrder
9496
defaultSecondaryOrder?: CustomSortOrder
95-
byMetadataField?: string // for 'by-metadata:' if the defaultOrder is by metadata
97+
byMetadataField?: string // for 'by-metadata:' if the defaultOrder is by metadata
98+
metadataFieldValueExtractor?: MDataExtractor // and its sorting value extractor
9699
byMetadataFieldSecondary?: string
100+
metadataFieldSecondaryValueExtractor?: MDataExtractor
97101
groups: Array<CustomSortGroup>
98102
groupsShadow?: Array<CustomSortGroup> // A shallow copy of groups, used at applying sorting for items in a folder.
99103
// Stores folder-specific values (e.g. macros expanded with folder-specific values)

src/custom-sort/custom-sort.ts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {
3535
BookmarksPluginInterface
3636
} from "../utils/BookmarksCorePluginSignature";
3737
import {CustomSortPluginAPI} from "../custom-sort-plugin";
38+
import {MDataExtractor} from "./mdata-extractors";
3839

3940
export interface ProcessingContext {
4041
// For internal transient use
@@ -372,13 +373,14 @@ export const matchGroupRegex = (theRegex: RegExpSpec, nameForMatching: string):
372373
return [false, undefined, undefined]
373374
}
374375

375-
const mdataValueFromFMCaches = (mdataFieldName: string, fc?: FrontMatterCache, fcPrio?: FrontMatterCache): any => {
376+
const mdataValueFromFMCaches = (mdataFieldName: string, mdataExtractor?: MDataExtractor, fc?: FrontMatterCache, fcPrio?: FrontMatterCache): any => {
376377
let prioValue = undefined
377378
if (fcPrio) {
378379
prioValue = fcPrio?.[mdataFieldName]
379380
}
380381

381-
return prioValue ?? fc?.[mdataFieldName]
382+
const rawMDataValue = prioValue ?? fc?.[mdataFieldName]
383+
return mdataExtractor ? mdataExtractor(rawMDataValue) : rawMDataValue
382384
}
383385

384386
export const determineSortingGroup = function (entry: TFile | TFolder, spec: CustomSortSpec, ctx?: ProcessingContext): FolderItemForSorting {
@@ -583,13 +585,29 @@ export const determineSortingGroup = function (entry: TFile | TFolder, spec: Cus
583585
}
584586
}
585587
if (isPrimaryOrderByMetadata) metadataValueToSortBy =
586-
mdataValueFromFMCaches (group?.byMetadataField || group?.withMetadataFieldName || DEFAULT_METADATA_FIELD_FOR_SORTING, frontMatterCache, prioFrontMatterCache)
588+
mdataValueFromFMCaches (
589+
group?.byMetadataField || group?.withMetadataFieldName || DEFAULT_METADATA_FIELD_FOR_SORTING,
590+
group?.metadataFieldValueExtractor,
591+
frontMatterCache,
592+
prioFrontMatterCache)
587593
if (isSecondaryOrderByMetadata) metadataValueSecondaryToSortBy =
588-
mdataValueFromFMCaches (group?.byMetadataFieldSecondary || group?.withMetadataFieldName || DEFAULT_METADATA_FIELD_FOR_SORTING, frontMatterCache, prioFrontMatterCache)
594+
mdataValueFromFMCaches (
595+
group?.byMetadataFieldSecondary || group?.withMetadataFieldName || DEFAULT_METADATA_FIELD_FOR_SORTING,
596+
group?.metadataFieldSecondaryValueExtractor,
597+
frontMatterCache,
598+
prioFrontMatterCache)
589599
if (isDerivedPrimaryByMetadata) metadataValueDerivedPrimaryToSortBy =
590-
mdataValueFromFMCaches (spec.byMetadataField || DEFAULT_METADATA_FIELD_FOR_SORTING, frontMatterCache, prioFrontMatterCache)
600+
mdataValueFromFMCaches (
601+
spec.byMetadataField || DEFAULT_METADATA_FIELD_FOR_SORTING,
602+
spec.metadataFieldValueExtractor,
603+
frontMatterCache,
604+
prioFrontMatterCache)
591605
if (isDerivedSecondaryByMetadata) metadataValueDerivedSecondaryToSortBy =
592-
mdataValueFromFMCaches (spec.byMetadataFieldSecondary || DEFAULT_METADATA_FIELD_FOR_SORTING, frontMatterCache, prioFrontMatterCache)
606+
mdataValueFromFMCaches (
607+
spec.byMetadataFieldSecondary || DEFAULT_METADATA_FIELD_FOR_SORTING,
608+
spec.metadataFieldSecondaryValueExtractor,
609+
frontMatterCache,
610+
prioFrontMatterCache)
593611
}
594612
}
595613
}

src/custom-sort/sorting-spec-processor.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,8 +1086,10 @@ export class SortingSpecProcessor {
10861086
}
10871087
this.ctx.currentSpec.defaultOrder = (attr.value as RecognizedOrderValue).order
10881088
this.ctx.currentSpec.byMetadataField = (attr.value as RecognizedOrderValue).applyToMetadataField
1089+
this.ctx.currentSpec.metadataFieldValueExtractor = (attr.value as RecognizedOrderValue).metadataValueExtractor
10891090
this.ctx.currentSpec.defaultSecondaryOrder = (attr.value as RecognizedOrderValue).secondaryOrder
10901091
this.ctx.currentSpec.byMetadataFieldSecondary = (attr.value as RecognizedOrderValue).secondaryApplyToMetadataField
1092+
this.ctx.currentSpec.metadataFieldSecondaryValueExtractor = (attr.value as RecognizedOrderValue).secondaryMetadataValueExtractor
10911093
return true;
10921094
} else if (attr.nesting > 0) { // For now only distinguishing nested (indented) and not-nested (not-indented), the depth doesn't matter
10931095
if (!this.ctx.currentSpec || !this.ctx.currentSpecGroup) {
@@ -1101,8 +1103,10 @@ export class SortingSpecProcessor {
11011103
}
11021104
this.ctx.currentSpecGroup.order = (attr.value as RecognizedOrderValue).order
11031105
this.ctx.currentSpecGroup.byMetadataField = (attr.value as RecognizedOrderValue).applyToMetadataField
1106+
this.ctx.currentSpecGroup.metadataFieldValueExtractor = (attr.value as RecognizedOrderValue).metadataValueExtractor
11041107
this.ctx.currentSpecGroup.secondaryOrder = (attr.value as RecognizedOrderValue).secondaryOrder
11051108
this.ctx.currentSpecGroup.byMetadataFieldSecondary = (attr.value as RecognizedOrderValue).secondaryApplyToMetadataField
1109+
this.ctx.currentSpecGroup.metadataFieldSecondaryValueExtractor = (attr.value as RecognizedOrderValue).secondaryMetadataValueExtractor
11061110
return true;
11071111
}
11081112
}

0 commit comments

Comments
 (0)