From 38e013e4ab40bcbb5f29ff81d9f8a0c1ed80a4cd Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Sat, 22 Jan 2022 20:32:18 -0800 Subject: [PATCH] File Tree: Attempt Unicode Normalization Form bodge on enumerated paths --- FileTree/PathNode.m | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/FileTree/PathNode.m b/FileTree/PathNode.m index cd60f1b25..2b72cd1c6 100644 --- a/FileTree/PathNode.m +++ b/FileTree/PathNode.m @@ -57,7 +57,48 @@ NSURL *resolveAliases(NSURL *url) - (void)setURL:(NSURL *)u { - url = u; + // BODGE! + if (![[NSFileManager defaultManager] fileExistsAtPath:[u path]]) + { + // Somebody gave us an incompatible file URL on enumeration! + DLog(@"Incompatible URL found: %@", [u path]); + do + { + NSString * path = [u path]; + NSString * bodge = [path precomposedStringWithCanonicalMapping]; + if ([[NSFileManager defaultManager] fileExistsAtPath:bodge]) + { + DLog(@"It's actually supposed to be NFC!"); + u = [NSURL fileURLWithPath:bodge]; + break; + } + bodge = [path decomposedStringWithCanonicalMapping]; + if ([[NSFileManager defaultManager] fileExistsAtPath:bodge]) + { + DLog(@"It's actually supposed to be NFD!"); + u = [NSURL fileURLWithPath:bodge]; + break; + } + bodge = [path precomposedStringWithCompatibilityMapping]; + if ([[NSFileManager defaultManager] fileExistsAtPath:bodge]) + { + DLog(@"It's actually supposed to be NFKC!"); + u = [NSURL fileURLWithPath:bodge]; + break; + } + bodge = [path decomposedStringWithCompatibilityMapping]; + if ([[NSFileManager defaultManager] fileExistsAtPath:bodge]) + { + DLog(@"It's actually supposed to be NFKD!"); + u = [NSURL fileURLWithPath:bodge]; + break; + } + DLog(@"No idea what's up with this path!"); + } + while (0); + } + + url = u; display = [[NSFileManager defaultManager] displayNameAtPath:[u path]];