Cue Sheet: Redo file reading and text decoding

Attempt to decode random encodings in a different way than before.
Hopefully this works a little better for some people.

Fixes #434

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
Christopher Snowhill 2025-06-11 00:18:35 -07:00
parent 6e20b8acc4
commit 20ac1adbba
2 changed files with 25 additions and 16 deletions

View file

@ -67,24 +67,29 @@
NSError *error = nil;
id sandboxBrokerClass = NSClassFromString(@"SandboxBroker");
const void *sbHandle = [[sandboxBrokerClass sharedSandboxBroker] beginFolderAccess:[NSURL fileURLWithPath:filename]];
NSString *contents = [NSString stringWithContentsOfFile:filename usedEncoding:&encoding error:&error];
if(error) {
error = nil;
contents = [NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:&error];
NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath:filename];
NSData *data = nil;
NSString *contents = nil;
if(file) {
if(@available(macOS 10.15, *)) {
data = [file readDataToEndOfFileAndReturnError:&error];
} else {
data = [file readDataToEndOfFile];
if(!data)
error = [NSError errorWithDomain:NSPOSIXErrorDomain code:EIO userInfo:nil];
}
if(error) {
error = nil;
contents = [NSString stringWithContentsOfFile:filename encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000) error:&error];
}
if(error) {
error = nil;
contents = [NSString stringWithContentsOfFile:filename encoding:NSWindowsCP1251StringEncoding error:&error];
}
if(error) {
error = nil;
contents = [NSString stringWithContentsOfFile:filename encoding:NSISOLatin1StringEncoding error:&error];
} else {
error = [NSError errorWithDomain:NSPOSIXErrorDomain code:ENOENT userInfo:nil];
}
file = nil;
[[sandboxBrokerClass sharedSandboxBroker] endFolderAccess:sbHandle];
if(data) {
NSMutableData *terminatedData = [data mutableCopy];
const char z = '\0';
[terminatedData appendBytes:&z length:sizeof(z)];
contents = guess_encoding_of_string([terminatedData bytes]);
}
if(error || !contents) {
ALog(@"Could not open file...%@ %@ %@", filename, contents, error);
return;

View file

@ -8,6 +8,7 @@
/* Begin PBXBuildFile section */
17DA346E0CC04FCD0003F6B2 /* CueSheetMetadataReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 17DA346D0CC04FCD0003F6B2 /* CueSheetMetadataReader.m */; };
83D833AC2DF95A89009970AF /* CogAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D833AB2DF95A89009970AF /* CogAudio.framework */; };
8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; };
8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
8E8D42260CBB0F5800135C1B /* CueSheetContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E8D42250CBB0F5800135C1B /* CueSheetContainer.m */; };
@ -32,6 +33,7 @@
838EE8BB29A8600900CD0580 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
839DA7D0274A2EA9001B18E5 /* AudioMetadataReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioMetadataReader.h; path = ../../Audio/AudioMetadataReader.h; sourceTree = "<group>"; };
839DA7D3274A2FD4001B18E5 /* NSDictionary+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+Merge.h"; path = "../../Utils/NSDictionary+Merge.h"; sourceTree = "<group>"; };
83D833AB2DF95A89009970AF /* CogAudio.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CogAudio.framework; sourceTree = BUILT_PRODUCTS_DIR; };
83F0E6B5287CAB4100D84594 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
8D5B49B6048680CD000E48DA /* CueSheet.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CueSheet.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -53,6 +55,7 @@
buildActionMask = 2147483647;
files = (
8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */,
83D833AC2DF95A89009970AF /* CogAudio.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -116,6 +119,7 @@
1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
83D833AB2DF95A89009970AF /* CogAudio.framework */,
1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */,
);
name = "Linked Frameworks";